-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
IDE: контуженные Борландом Литературное и Концептуальное программирование + bib: Андре Ла Мот, Серебряков, Москвитин, Signed-off-by: Dmitry Ponyatov <dponyatov@gmail.com>
- Loading branch information
Showing
38 changed files
with
604 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,3 +4,4 @@ | |
*.log | ||
*.epub | ||
env/ |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from google.appengine.ext import vendor | ||
# add any libraries installed in lib/ folder | ||
vendor.add('lib') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,8 @@ | ||
\secrel{загрузчик кода embedded \cpp) | ||
\secrel{загрузчик кода embedded \cpp} | ||
|
||
\url{http://port70.net/~nsz/c/} | ||
%\url{http://eli-project.sourceforge.net/c_html/c.html} | ||
|
||
\url{http://eli-project.sourceforge.net/c_html/c.html} | ||
|
||
\lst{../codein/codein.rc}{title=codein.rc} | ||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
\secrel{IDE: контуженные Борландом}\label{ide}\secdown | ||
|
||
\fig{code/VS.png}{height=.31\textheight} | ||
\fig{code/turboC.jpg}{height=.31\textheight} | ||
\fig{code/IAR.png}{height=.31\textheight} | ||
|
||
\clearpage | ||
Если считать начиная с первых версий языка \st\ и рабочих станций компании | ||
Xerox, история интегрированных сред разработки (IDE) насчитывает уже больше 40 | ||
(!) лет. И за это время прогресс IDE так и застрял на уровне мультиоконников | ||
в стиле Borland. | ||
|
||
Впрочем, одна вменяемая среда все же есть\ --- Emacs, но к | ||
сожалению \term{средства расширения пользователем} используют довольно | ||
специфичный \lisp. | ||
|
||
Другая \emph{IDE-платформа} \eclipse\ по задумке выглядела перспективной, но | ||
расширение с помощью \java\ убивает всю идею сложностью вхождения пользователю, | ||
которому нужно только чуть-чуть поправить поведение типового редактора, или | ||
добавить простую визуализацию \ref{ideviz}. | ||
|
||
Хорошей базой для разработки средств разработки\note{метаIDE, или | ||
\term{метасреда}} могут быть современные \st-системы типа | ||
\href{https://pharo.org}{Pharo}, сочетающие легкий для освоения скриптовый язык, | ||
встроенный интерактивный отладчик, и богатый GUI. К сожалению ценовая политика | ||
поставщиков реализаций \st\ убила великолепный язык программирования, поэтому | ||
его развитие почти остановилось из-за очень маленького пользовательского | ||
сообщества. | ||
|
||
\secrel{Проблемы традиционных IDE}\secdown | ||
|
||
\secrel{Фиксация на файловом представлении} | ||
|
||
Разработка фиксируется на редактировании файлов исходного кода, полностью | ||
игнорируя критическую проблему\ --- \emph{необходимость передачи знаний между | ||
разработчиками} \ref{litprog}. | ||
|
||
Использование файлов хорошо совместимо с mainstream хранением публичных проектов | ||
в репозиториях на GitHub, и необходимо для работы любых компиляторов, но по | ||
факту \emph{необходимо хранение в форматах представления знаний}\ --- объектные | ||
СУБД, семантические сети и т.п. | ||
|
||
\secrel{Необходим фронтенд компилятора} | ||
|
||
Для работы с исходным кодом необходима реализация большой части фронтенда | ||
компилятора: синтаксический разбор для подсветки синтаксиса, построение таблиц | ||
символов для ссылок и переходов по исходному тексту, препроцессор для скрытия | ||
неиспользуемого кода, completion по программным обхектам, подстветка | ||
синтаксических ошибок,\ldots | ||
|
||
\secrel{MDI стиль интерфейса} | ||
|
||
Большинство интерфейсов IDE построено по принципу множества окон в общем окне | ||
среды. Каждая IDE пытается изобрести собственный встроенный \term{менедер окон}, | ||
вместо того чтобы позволить ОС выполнять свою прямую обязанность: | ||
отображать рабочий стол унифицированно с любыми другими приложениями, и так же | ||
унифицированно обеспечивать передачу объектов между приложениями. | ||
Впрочем, эта проблема легко объясняется ублюдочностью Windows, у которой | ||
менеджера окон никогда и не существовало, а передача объектов ограничивалась | ||
только картинкой, текстом, и копипастой в соседнее окно \textit{того же | ||
самого} приложения. | ||
|
||
\secrel{Полностью отсутствуют средства визуализации}\label{ideviz} | ||
|
||
Средства визуализации и редактирования структур данных специфичным для них | ||
способом не рассматривается как необходимый функционал для разработки и отладки | ||
программ. При использовании отладчика просмотр данных возможен максимум в виде | ||
списка полей, с крайне ограниченным набором декодеров: hex, decimal и усе. | ||
|
||
\secrel{Расширение пользователем усложнено} | ||
|
||
IDE поддерживающие плагины или скрипты, требуют тяжелых в освоении языков | ||
(\java\ или \lisp). | ||
|
||
\secrel{Не поддерживается инкрементная компиляция} | ||
|
||
Проблема специфична для микроконтроллеров: любая самая минимальная модификация | ||
кода требует полной перекомпиляции, перезаливки всей прошивки и рестарта | ||
процессора. Это ограничение компилятора/линкера и ПО программатора, которые не | ||
умеют инкрементную компиляцию. | ||
|
||
\secup | ||
|
||
\input{code/literate} | ||
|
||
\secup |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
\clearpage | ||
\secrel{Критически необходимо Literate Programming}\label{litprog} | ||
|
||
\href{https://en.wikipedia.org/wiki/Literate_programming}{Литературное | ||
программирование}\ (LP) предложено Доналдом Кнутом как решение проблемы | ||
\emph{передачи знаний между разработчиками}. Традиционная разработка уже 60 лет | ||
фиксируется на редактировании файлов исходного кода. В ранние года развития ЭВМ | ||
такой подход вполне понятен\ --- вычислительных ресурсов едва хватало. Но этот | ||
явный косяк в подходах не был увиден и решен даже в конце 90х, когда объемы | ||
ОЗУ исчислялились мегабайтами, и жесткий диск достаточных объемов стоял в каждом | ||
персональном компьютере. | ||
|
||
Сейчас широко используются различные костыльные решения типа \file{Doxygen}, | ||
\file{javadoc} и т.п., но их функционал явно недостаточен для полноценного | ||
документирования. Они вполне применимы для справочников по API библиотек, но | ||
документирование требует применение гипертекста, диаграмм, а иногда и сложной | ||
математической верстки. | ||
|
||
Парадигма LP предполагает полное объяснение логики программы на естественном | ||
языке, в формате пояснительной записки, в которую включаются фрагменты исходного | ||
кода, передаваемого компилятору при сборке программы. \emph{При документировании | ||
ПО необходим функционал сквозной увязки объектов в исходном коде, и элементов | ||
документации}\ --- такая увязка при полноценном применении LP должна | ||
обеспечиватся представлением проекта как \term{документной базы знаний}\note{с | ||
поддержкой перекрестных ссылок между документацией и комментариями в исходном | ||
коде, построением индексов объектов и терминов, нечетким поиском, визуализацией | ||
структуры программ, и т.п.}. | ||
|
||
К сожалению, классическое LP оказалось неприменимо из-за важной особенности\ --- | ||
\emph{каждый фрагмент исходного кода (\term{блок программы}) должен быть описан | ||
полностью}, так как на компиляцию он передается целиком. На практике такой | ||
подход неприменим: мы должны полностью увязать текст документации с каждым | ||
программным блоком не только по количеству использований (только один раз), но | ||
\emph{и по порядку}\ --- декларация функций и переменных должна идти до их | ||
первого использования. | ||
|
||
В то же время, \emph{документация на программный продукт\note{или | ||
программно-аппаратный комплекс\ --- в этой книге это подразумевается, так как мы | ||
говорим о встраиваемых системах}\ принципиально нелинейна}: вы это легко сможете | ||
увидеть сами, если попытаетесь написать книгу по какой-нибудь достаточно сложной | ||
программе. Книга предполагает линейное чтение, компоненты программы описываются | ||
с разных точек зрения и в разных местах текста. | ||
\begin{itemize}[nosep] | ||
\item | ||
В руководстве пользователя рассматривается интерфейс, и стыковка с внешними | ||
системами. | ||
\item | ||
В руководстве программиста\note{для пользователя который планирует расширять | ||
систему самостоятельно}\ --- API и внутреннее устройство, причем основная | ||
реализация функция может быть описана в одном разделе, а код обеспечивающий | ||
безопасность той же функции в другом. | ||
\end{itemize} | ||
|
||
Кнут предполагал уйти от написания программ с точки зрения компьютера, и | ||
позволить программистам разрабатывать программы способами и очередностью кода, | ||
определяемыми ходом мышления разработчика. | ||
|
||
Пакет \file{WEB}, который использовал Кнут, работал в пакетном режиме, читал | ||
``литературный'' код, и генерировал из него как файлы исходного кода для | ||
компилятора, так и файлы на языке разметки документации\note{\TeX}. | ||
В практическом смысле реализация LP должна быть сделана в IDE в виде | ||
интерактивного просмотра документации. Изменение блоков кода должно отображаться | ||
немедленно, или при обновлении страницы документации по команде. | ||
|
||
Первичность документации перед исходным кодом, и описание компонентов программы | ||
в визуально-представимом виде стимулируют разработчика не только писать краткие | ||
записи по вносимому коду, но и синхронизировать описание с модифицируемым кодом. | ||
Традиционно для этого используются комментарии в коде, но система интерактивного | ||
ввода позволяет набрасывать краткие записи\note{для таких sticky-записей вполне | ||
подходят не только векторные диаграммы с активными элементами-ссылками на | ||
программные элементы, но и просто ``кроки'' нарисованные мышью от руки}\ по ходу | ||
работы, что в дальнейшем спасет legacy-разгребальщика от многодневных сессий в | ||
отладчике и тонно-литров кофе в качестве антидепрессанта. | ||
|
||
\input{concept/concept} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.