Здесь приведены некоторые данные о времени, потраченном на разработку языка и компилятора Context. Одни данные приблизительны, это отмечено знаками меньше (<), больше (>) и приблизительно (~), другие более-менее точны. Начиная с некоторого момента, я начал записывать время начала и окончания работы с точностью до минуты, и это позволило легко получать статистику. Записывалось не все - если я ехал в метро и о чем-то думаю, записи об этом не делалось. Возможно, что-то не было записано, неправильный ввод данных также возможен, но цифры представляются правдоподобными.
Если затраты времени в часах, днях, месяцах или годах не указаны, значит установить их нет возможности, за одним исключением (Tiny Context для DOS) перерывы в работе были значительны и если, например, указано время 1.5 года, то это не значит, что все это время я занимался только одной задачей.
Некоторые цифры могут показаться заниженными, отчасти их можно объяснить тем, что выполнялся лищь минимум работы и лишь один тест - компиляция собственного исходного текста. Для сравнения приведу отчет sloccount для опубликованной в "Мире ПК" версии Tiny Context:
Разница между тремя днями и двумя месяцами велика, но именно в этом случае никаких ошибок быть не может.
Также нужно сказать, что задача могла считаться тривиальной и затрата большего времени могла бы улучшить код.
Задача |
Начальные условия |
Результат |
Число строк кода |
Затраты времени |
Разработка спецификации языка Context 0.5 и компилятора для DOS | Интернет доступен не был, о книге "Алгоритмы и структуры данных" Вирта я не знал, о "Книге дракона" тем более (сейчас я уверен в том, что она не была бы полезна), была только статья М.Черкашина "Компилятор пишется так..." (журнал "Монитоp" #4, #5). Незадолго до начала работы была относительно успешная попытка написания cpp-подобного препроцессора. Система команд 8086 была в какой-то мере известна |
Написана неформальная спецификация языка, на Turbo Pascal написан компилятор,
создающий программу на ассемблере. Входной язык - немного измененное надмножество
Tiny Context с передаваемыми по значению и по ссылке параметрами, структурами
и строковыми константами (правильнее было бы сказать, что Tiny Context - подмножество
этого языка).
Реализация и качество создаваемого кода ужасны, в ряде случаев создаваемый код некорректен, но после внесения нескольких исправлений компиляция Tiny Context возможна. По сравнению с самим Tiny Context объем кода почти двухкратный. Самой сложной частью работы было воспроизведение приведенного во второй части статьи Черкашина алгоритма компиляции выражений с явным использованием стека |
|
|
Разработка спецификации языка Context 1.0 и компилятора для DOS | - | Написана неформальная спецификация языка, на C++ написан компилятор, создающий программу на ассемблере |
|
|
Перевод компилятора Context 1.0 на собственный язык | - | Реализовано | - | ? |
Разработка компилятора Context 2.02 для Win32 | Перед началом работы был написан прототип, использующий синтаксическое дерево. Также существовала модификация компилятора Context 1.3 для Win32, которая и использовалась для первой компиляции | Реализовано подмножество языка, достаточное для компиляции самого компилятора |
|
|
Разработка миниатюрного компилятора Tiny Context для DOS | Задача и способ ее решения полностью понятны | На бумаге написан псевдокод, код на подмножестве языка Context набран и скомпилирован с помощью Context'а для DOS. Известно о двух ошибках, одна из которых делала компилятор неработоспособным и была исправлена сразу, вторая была обнаружена значительно позже при написании синтаксически-управляемой версии компилятора |
|
|
Перенос компилятора Tiny Context на платформу Linux/i386 | - | Заменены функции ввода-вывода, написана функция формирования заголовка ELF32, внесены изменения в блоки генерации кода |
|
|
Модификация компилятора Tiny Context для DOS с целью поддержки параметров функций и локальных переменных | - | Реализовано | - |
|
Модификация компилятора Tiny Context для Linux/i386 с целью поддержки параметров функций и локальных переменных | - | Реализовано. По-видимому, вместо модификации версии для Linux/i386 выполнялся перенос модифицированной версии для DOS | - |
|
Изучение системы команд AMD64 | - | - | - |
|
Перенос компилятора Tiny Context для Linux/i386 на платформу Linux/AMD64 | - | Заменены функции ввода-вывода, написана функция формирования заголовка ELF64, внесены изменения в блоки генерации кода |
|
|
Изучение системы команд i8080, функций ввода/вывода ОС CP/M-80 и перенос компилятора Tiny Context для DOS на платформу CP/M-80 | - | Реализовано. Блоки генерации кода изменены, код сравнений неоптимален | - |
|
Изучение системы команд MOS6502 | - | - | - |
|
Изучение функций ввода-вывода Apple DOS | - | Написаны обертки функций открытия, создания, чтения, записи и закрытия файлов. Корректного создания файла достичь не удалось - после записи файла загрузка с диска невозможна | 157 |
|
Перенос компилятора Tiny Context для DOS на платформу Apple //e (MOS6502) | - | Реализовано не полностью. Блоки генерации кода заменены, код сравнений неоптимален, запись создаваемого кода на диск может быть выполнена только с помощью интерпретатора команд Apple DOS | - |
|
Замена функции генерации кода сравнений в компиляторе Tiny Context для Apple //e (MOS6502) | - | Реализовано | 85 |
|
Изучение системы команд PDP-11 и программирования устройств чтения/пробивки перфолент | - | - | - |
|
Перенос компилятора Tiny Context для DOS на платформу PDP-11 | - | Реализовано | - |
|
Разработка синтаксически-управляемой версии компилятора Tiny Context для DOS | Практически полная неопредененность | Написано несколько синтаксических анализаторов (в т.ч. SLR(0), SLR(1), LR(1)) и документация. Привести число строк кода сложно, т.к. было написано много вариантов, объем компилятора с LR(1)-анализаторм около 1000 строк, затраты времени занижены, поскольку в начале работы записей не велось | - |
|