Skip to content

Commit

Permalink
+ legacy/
Browse files Browse the repository at this point in the history
	IDE: контуженные Борландом
	Литературное и Концептуальное программирование

+ bib: Андре Ла Мот, Серебряков, Москвитин,

Signed-off-by: Dmitry Ponyatov <dponyatov@gmail.com>
  • Loading branch information
ponyatov committed Apr 6, 2019
1 parent 695e7e8 commit 1f5b0b8
Show file tree
Hide file tree
Showing 38 changed files with 604 additions and 22 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
*.log
*.pdf
*.epub
env/
9 changes: 0 additions & 9 deletions Android/.idea/misc.xml

This file was deleted.

3 changes: 3 additions & 0 deletions appengine_config.py
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')
18 changes: 17 additions & 1 deletion book/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,29 +21,45 @@ TEX += web/dump.tex
LST += web/dump.html web/dump.css web/dump.py
TEX += web/viz.tex
LST += web/viz.html web/viz.css web/viz.py
TEX += web/google.tex
LST += ../appengine_config.py ../requirements.txt
TEX += web/wasm/wasm.tex

TEX += dyna/dyna.tex dyna/llvm.tex dyna/managed.tex

TEX += cpp/cpp.tex cpp/gc.tex

TEX += prolog/prolog.tex

TEX += syntax/syntax.tex syntax/ragel/ragel.tex syntax/ragel/java.tex

TEX += meta/circ.tex
LST += meta/ebldfiles.ini meta/eclfiles.ini meta/files.ini
LST += meta/header.ini meta/vimfiles.ini

TEX += mcu/mcu.tex mcu/ardu/ino.tex mcu/msp/msp.tex
TEX += mcu/arm/cortex.tex mcu/arm/setup.tex

TEX += mcu/parse/ragel.tex mcu/parse/bin.tex

TEX += mcu/arm/cortex.tex mcu/gnu/gcc.tex
FIG += /tmp/gnugcc.pdf
TEX += mcu/arm/f030.tex
FIG += mcu/arm/pinout.png mcu/arm/HSE.png mcu/arm/HPclock.png

TEX += linux/linux.tex event/event.tex

TEX += code/in.tex code/emcin.tex
TEX += code/in.tex code/emcin.tex code/cpp.tex code/ide.tex code/literate.tex

TEX += concept/concept.tex

TEX += gui/wx.tex

TEX += os/os.tex os/boot.tex os/sched.tex os/files.tex
TEX += os/net.tex os/user.tex os/gui.tex

TEX += game/dev.tex

FIG += mcu/ardu/micro.png mcu/ardu/uno.jpg mcu/ardu/nano.jpg

TEX += android/android.tex
Expand Down
7 changes: 6 additions & 1 deletion book/android/android.tex
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@
<item name="android:windowBackground">@color/colorBgr</item>
\end{lstlisting}

\secrel{Командная консоль}\label{anconsole}
\secrel{Командная консоль}\label{anconsole}\secdown

Наше приложение будет построено в виде нескольких слайдеров\note{помним про
принцип ``интерфейса большого пальца''}, главным из которых является список
Expand All @@ -186,4 +186,9 @@
\lst{android/constextview.xml}{title=Android/res/layout/content\_main.xml}
\lst{android/conscolor.xml}{title=Android/res/values/colors.xml}

Для разбора команд используется лексический анализатор, создание которого
подробно рассмотрено в \ref{rageljava}.

\secup

\secup
28 changes: 27 additions & 1 deletion book/bib/bib.tex
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@
М.: Вильямс, 2008.\\ ISBN 978-5-8459-1349-4.\\
\url{https://www.ozon.ru/context/detail/id/148568229/}

\clearpage
\bibitem{serlex} \bibfig{bib/serlex.jpg}\\
\textbf{Теория и реализация языков программирование}\\
В.А.Серебряков, М.П.Галочкин, Д.Р.Гончар, М.Г.Фуругян\\
\url{http://trpl7.ru/t-books/TRYAP_BOOK_Details.htm}\\
pdf: \url{http://trpl7.ru/t-books/_TRYAPBOOK_pdf.pdf}

\clearpage
\bibitem{sicp} \bibfig{bib/sicp.jpg}\ \textbf{\emph{SICP}\\
\href{https://drive.google.com/file/d/0B0u4WeMjO894X3lnWmhjUktKRk0/view?usp=sharing}{Структура
Expand Down Expand Up @@ -59,13 +66,25 @@
\url{https://cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/}

\clearpage
\bibitem{plai}\ \bibfig{bib/tyugu.jpg}\\
\bibitem{tyugu}\ \bibfig{bib/tyugu.jpg}\\
\textbf{Концептуальное программирование}\\
Энн Харальдович Тыугу\\
М.: Наука, 1984. 255 с\\
\ \\
ВНТК "СТАРТ"\ \url{http://start.iis.nsk.su}

\clearpage
\bibitem{moskvitin1}\ \bibfig{bib/moskvitin1.jpg}\\
\textbf{Решение задач на компьютерах: учебное пособие, ч.1\\
Постановка (спецификация) задач }\\
Москвитин А. А.\\

\clearpage
\bibitem{moskvitin2}\ \bibfig{bib/moskvitin2.jpg}\\
\textbf{Решение задач на компьютерах: учебное пособие, ч.2\\
Разработка программных средств}\\
Москвитин А. А.\\

\clearpage
\bibitem{psicc2}\ \bibfig{bib/psicc2.png}\\
\textbf{Practical UML Statecharts in C/C++, 2nd Edition:\\
Expand All @@ -85,4 +104,11 @@
Markus Triska\\
\url{https://www.metalevel.at/prolog}

\clearpage
\bibitem{lamot}\ \bibfig{bib/lamot.jpg}\\
\textbf{Секреты программирования игр}\\
Андре Ла Мот, Ратклифф Д., Семинаторе М., Тайлер Д.\\
СПб: Питер, 1995. — 718 с. — 5-88782-037-3.\\
\url{https://3dgame-creator.ru/sekrety-programmirovaniya-igr/}

\end{thebibliography}
Binary file added book/bib/lamot.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added book/bib/moskvitin1.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added book/bib/moskvitin2.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added book/bib/serlex.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added book/code/IAR.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added book/code/VS.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 3 additions & 2 deletions book/code/cpp.tex
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}

Binary file added book/code/eclipse.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
86 changes: 86 additions & 0 deletions book/code/ide.tex
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
2 changes: 2 additions & 0 deletions book/code/in.tex
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
legacy код, прибитый ржавыми гвоздями к огромной табличке: ``Ничего не трогать!
Только поправить''.

\input{code/ide}
\input{gui/wx}
\input{code/emcin}
\input{code/cpp}

Expand Down
75 changes: 75 additions & 0 deletions book/code/literate.tex
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}
Binary file added book/code/turboC.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 1f5b0b8

Please sign in to comment.