Затраты времени

Здесь приведены некоторые данные о времени, потраченном на разработку языка и компилятора Context. Одни данные приблизительны, это отмечено знаками меньше (<), больше (>) и приблизительно (~), другие более-менее точны. Начиная с некоторого момента, я начал записывать время начала и окончания работы с точностью до минуты, и это позволило легко получать статистику. Записывалось не все - если я ехал в метро и о чем-то думаю, записи об этом не делалось. Возможно, что-то не было записано, неправильный ввод данных также возможен, но цифры представляются правдоподобными.

Если затраты времени в часах, днях, месяцах или годах не указаны, значит установить их нет возможности, за одним исключением (Tiny Context для DOS) перерывы в работе были значительны и если, например, указано время 1.5 года, то это не значит, что все это время я занимался только одной задачей.

Некоторые цифры могут показаться заниженными, отчасти их можно объяснить тем, что выполнялся лищь минимум работы и лишь один тест - компиляция собственного исходного текста. Для сравнения приведу отчет sloccount для опубликованной в "Мире ПК" версии Tiny Context:

SLOC Directory SLOC-by-Language (Sorted) 763 top_dir cpp=763 Totals grouped by language (dominant language first): cpp: 763 (100.00%) Total Physical Source Lines of Code (SLOC) = 763 Development Effort Estimate, Person-Years (Person-Months) = 0.15 (1.81) (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05)) Schedule Estimate, Years (Months) = 0.26 (3.13) (Basic COCOMO model, Months = 2.5 * (person-months**0.38)) Estimated Average Number of Developers (Effort/Schedule) = 0.58 Total Estimated Cost to Develop = $ 20,337 (average salary = $56,286/year, overhead = 2.40). SLOCCount, Copyright (C) 2001-2004 David A. Wheeler SLOCCount is Open Source Software/Free Software, licensed under the GNU GPL. SLOCCount comes with ABSOLUTELY NO WARRANTY, and you are welcome to redistribute it under certain conditions as specified by the GNU GPL license; see the documentation for details. Please credit this data as "generated using David A. Wheeler's 'SLOCCount'."

Разница между тремя днями и двумя месяцами велика, но именно в этом случае никаких ошибок быть не может.

Также нужно сказать, что задача могла считаться тривиальной и затрата большего времени могла бы улучшить код.

Задача Начальные
условия
Результат Число
строк
кода
Затраты
времени
Разработка спецификации языка Context 0.5 и компилятора для DOS Интернет доступен не был, о книге "Алгоритмы и структуры данных" Вирта я не знал, о "Книге дракона" тем более (сейчас я уверен в том, что она не была бы полезна), была только статья М.Черкашина "Компилятор пишется так..." (журнал "Монитоp" #4, #5). Незадолго до начала работы была относительно успешная попытка написания cpp-подобного препроцессора. Система команд 8086 была в какой-то мере известна Написана неформальная спецификация языка, на Turbo Pascal написан компилятор, создающий программу на ассемблере. Входной язык - немного измененное надмножество Tiny Context с передаваемыми по значению и по ссылке параметрами, структурами и строковыми константами (правильнее было бы сказать, что Tiny Context - подмножество этого языка).

Реализация и качество создаваемого кода ужасны, в ряде случаев создаваемый код некорректен, но после внесения нескольких исправлений компиляция Tiny Context возможна. По сравнению с самим Tiny Context объем кода почти двухкратный.

Самой сложной частью работы было воспроизведение приведенного во второй части статьи Черкашина алгоритма компиляции выражений с явным использованием стека

2264 <1 месяца
Разработка спецификации языка Context 1.0 и компилятора для DOS - Написана неформальная спецификация языка, на C++ написан компилятор, создающий программу на ассемблере 3327 ~1.5 года
Перевод компилятора Context 1.0 на собственный язык - Реализовано - ?
Разработка компилятора Context 2.02 для Win32 Перед началом работы был написан прототип, использующий синтаксическое дерево. Также существовала модификация компилятора Context 1.3 для Win32, которая и использовалась для первой компиляции Реализовано подмножество языка, достаточное для компиляции самого компилятора 2307 >56 часов
~1 месяц
Разработка миниатюрного компилятора Tiny Context для DOS Задача и способ ее решения полностью понятны На бумаге написан псевдокод, код на подмножестве языка Context набран и скомпилирован с помощью Context'а для DOS. Известно о двух ошибках, одна из которых делала компилятор неработоспособным и была исправлена сразу, вторая была обнаружена значительно позже при написании синтаксически-управляемой версии компилятора <800 <24 часов
3 дня
Перенос компилятора Tiny Context на платформу Linux/i386 - Заменены функции ввода-вывода, написана функция формирования заголовка ELF32, внесены изменения в блоки генерации кода >76 24 часа
8 дней
Модификация компилятора Tiny Context для DOS с целью поддержки параметров функций и локальных переменных - Реализовано - 13 часов
Модификация компилятора Tiny Context для Linux/i386 с целью поддержки параметров функций и локальных переменных - Реализовано. По-видимому, вместо модификации версии для Linux/i386 выполнялся перенос модифицированной версии для DOS - 18.5 часов
Изучение системы команд AMD64 - - - 7 часов
Перенос компилятора Tiny Context для Linux/i386 на платформу Linux/AMD64 - Заменены функции ввода-вывода, написана функция формирования заголовка ELF64, внесены изменения в блоки генерации кода >86 21.5 час
Изучение системы команд i8080, функций ввода/вывода ОС CP/M-80 и перенос компилятора Tiny Context для DOS на платформу CP/M-80 - Реализовано. Блоки генерации кода изменены, код сравнений неоптимален - 46 часов
Изучение системы команд MOS6502 - - - 13.5 часов
Изучение функций ввода-вывода Apple DOS - Написаны обертки функций открытия, создания, чтения, записи и закрытия файлов. Корректного создания файла достичь не удалось - после записи файла загрузка с диска невозможна 157 16.5 часов
Перенос компилятора Tiny Context для DOS на платформу Apple //e (MOS6502) - Реализовано не полностью. Блоки генерации кода заменены, код сравнений неоптимален, запись создаваемого кода на диск может быть выполнена только с помощью интерпретатора команд Apple DOS - 19 часов
Замена функции генерации кода сравнений в компиляторе Tiny Context для Apple //e (MOS6502) - Реализовано 85 2.5 часа
Изучение системы команд PDP-11 и программирования устройств чтения/пробивки перфолент - - - 18 часов
Перенос компилятора Tiny Context для DOS на платформу PDP-11 - Реализовано - 7 часов
Разработка синтаксически-управляемой версии компилятора Tiny Context для DOS Практически полная неопредененность Написано несколько синтаксических анализаторов (в т.ч. SLR(0), SLR(1), LR(1)) и документация. Привести число строк кода сложно, т.к. было написано много вариантов, объем компилятора с LR(1)-анализаторм около 1000 строк, затраты времени занижены, поскольку в начале работы записей не велось - >186 часов

Рейтинг@Mail.ru
Сайт создан в системе uCoz