Мои «ворчалки» естественно основываются на моем опыте. Часть этого опыта вполне обычна для ИТ-специалиста, другая часть существенно отличается от опыта большинства разработчиков.
В чем отличие?
Во-первых, меня всегда интересовали технологии и инструменты разработки программ. Началось это с дипломной работы в НГУ на тему «Компилятор с языка Эдисон для МВК Эльбрус», далее в группе Кронос (Kronos Research Group), я был одним из основных разработчиков серии компиляторов с языка Модула-2 (m0, m2, mx), потом я делал компилятор с Оберона, трансляторы с Оберона и Модулы в Си, многоязыковую среду программирования XDS, объектно-ориентированную среду «Mithril». Все это в прошлом веке. И далее, уже в этом веке – среду разработки «Вир».
Во-вторых, изрядную часть времени я работал в одиночку и без внешнего финансирования. Так был сделан первый компилятор с Оберона, первый транслятор (конвертор) с Модулы-2 и Оберона в Си, первая версия XDS и среда разработки «Вир».
В одиночной работе есть свои особенности, которую, полагаю, мало кто испытывал из современных разработчиков. Ты делаешь изделие, которое знаешь полностью, от начала и до конца – и полностью отвечаешь за то, что ты сделал.
В-третьих, думаю, что я один из немногих людей в этом мире, которые сделали в 21-м веке среду разработки с нуля. Естественно, что сделать среду разработки – это полдела, надо еще и проверить её в работе.
Я делал «Вир» и программы с использованием «Вира» параллельно: «Картмейстер-2» (2007), «Сайткрафт» (2008), «Сайткрафт-Студия» (2009), «Простбух» (2010). Я перечислил только те программы, которые продавались на рынке, а было еще много программ экспериментальных и внутренних. Впрочем, «Сайткрафт-Студия» продается и сейчас (2016 г), и разработка его и выпуск новых версий продолжается на «Вире». Естественно, что и «Вир», начиная с достаточно ранней версии, тоже написан на «Вире» и разрабатывается на себе самом.
В настоящее время, я использую «Вир» большей частью для быстрого прототипирования, так как меня интересует разработка мульти-платформенных программ. «Вир» же (в текущей реализации) делает программы только для Windows. Следующая мульти-платформенная версия «Вира» — «Вир-2» в достаточной степени продумана и отложена до удобных времен. Свежие программы, сделанные на «Вире», пока не хочу светить.
Многолетняя работа над «Виром» и разработка программ на «Вире» привели к тому, что мои представления и подходы к программированию существенно отличаются от представлений и подходов других разработчиков. Надо отметить, что строились эти представления (подходы) рекурсивно (собственно, как это подобает компиляторщику): для того чтобы начать делать среду разработки, уже надо было иметь некоторое, не совсем общепринятое, понимание программирование, которое потом изменялось по ходу разработки.
Собственно, и моё «ворчание» на тему программирования вызвано желанием донести мысль о том, что возможны другие способы или методы программирования, которые в каких-то областях применения лучше, чем общепринятые (на мой взгляд в большинстве областей применения).
Я писал «ворчалки» без упоминания «Вира». И это было забавно и полезно, потому что заставляло анализировать свой опыт и искать способы выражения своих мыслей для тех, кто ничего не знает о «Вире» (то есть, для всех читателей).
В какой-то момент, я уперся в то, что мне не хватает описания того, что мной уже сделано, чтобы писать дальше. И пришел к мысли, что надо заходить с двух сторон – с одной, продолжая выстраивать с нуля мысль о стандартизации программирования на основе сборочного программирования, с другой – рассказывая о том, что что уже сделано, и что из этого сделано хорошо, а что надо переделывать и доделывать. Вот отсюда и появилась необходимость рассказать о «Вире».
Замечу сразу, что я по складу ума не теоретик и не провидец. Я думаю, как это говорят «руками». Я начинаю работать, опираясь на то, что же сделано другими, но не повторяя, а пытаясь сделать свое на хорошей основе. Временами такая работа приводит к качественному скачку.
Например, разработку Оберон компилятора я начал после знакомства с Oberon System и Oberon OP2 компилятором в 1991 в Цюрихе (http://www.ethoberon.ethz.ch/compiler/). Работа над бинарным (Оберон-2 + Модула-2) компилятором вылилась в расширяемую систему программирования XDS, которая, послужила основой для большого количества систем разработки, и, как мне рассказывают, до сих пор живет и используется для программирования спутников связи.
Так же, основой для работы над ОО системой Mithril (1994-1995) была Виртовская Oberon System и редактор Write, который написал для неё Clemens Szyperski. В отличие от XDS, Mithril не был успешной разработкой, в том смысле, что она никем по-настоящему не использовался, но шишки, набитые об ООП во время работы над ним, были полезны и до сих пор полезны. Тогда же я пытался улучшить ООП, за счет restricted multiple inheritance, сейчас это называют наследованием интерфейсов (доклад на JMLC 1994, pdf).
В отличие от XDS и Mithril, у «Вира» нет предка в виде программного кода, но были работы, которые меня подтолкнули. Вполне естественно, что это были работы тех, кого я считаю своими учителями.
Во-первых, это работы Никлауса Вирта. Главное в них, для меня, не конкретные достижения, языки, компиляторы, системы – а стремление делать инструменты для достижения задачи и Эйнштейновские слова, которые Вирт поставил эпиграфом к описанию языка Оберон «Make it as simple as possible, but not simpler». Вирт не делал языки программирования ради них самих, он каждый раз делал инструмент для решения задач следующего уровня: Algol W, Euler, Pascal, Modula, Modula-2, Oberon…
Во-вторых, это «лексикон программирования» А.П. Ершова. Я вырос, как программист, в Ершовской школе программирования, хотя с Андреем Петровичем никогда не работал. Моим шефом многие годы был Игорь Васильевич Поттосин, соратник Ершова. Я не помню, когда я «заболел» лексиконом программирования, и, более узко «сборочным программированием». Скорее всего с самого начала, потому что OS Excelsior iV была написана на Модуле-2 в парадигме модульного программирования.
Модульное программирование – это только первый (небольшой) шаг к сборочному, но после этого шага очень не хочется возвращаться к линковке и другим подобным технологиям прошлого века.
Если подвести краткий итог: к разработке «Вира» меня подтолкнуло желание сделать среду сборочного программирования, основанную на лексиконе.
Да, и был еще третий источник вдохновения – «Доннерджек» Желязны. И, хотя этот источник очень косвенный, по сути не имеющий прямого отношения к делу, репозиторий компонентов, из которых собирается программа, я называю «Вирту»: «Вир» живет в «Вирту».
Краткая история разработки:
Этап 1. Предыстория (2002-2005 гг.) Попытки сделать конструктор программ из компонентов, для изготовления которых использовался Дельфи. Эксперименты закончились пониманием того, что сборочное программирование невозможно с использованием стандартных языков и инструментов разработки.
Этап 2. Разработка и развитие «Вира» (2006-2015), которая началась с разработки компилятора, и перехода к своим компонентам, а дальше многолетние эксперименты по нащупыванию работающих решений.
Этап 3. Вир-2 (2016-?). Много ворчу и думаю… Потихоньку делаю «Вир-2».
Постоянная ссылка
Алексей, звучит очень круто, а можно увидеть хоть краешком глаза что такое Вир изнутри? Как выглядит построение программы? Скриншот или пример какого-то файла с исходным кодом или что там выступает в роли «кирпичика»?
Если не хотите выкладывать в Интернет, можно на мой e-mail. Просто очень-очень-очень интересно (еще с момента, когда вы у нас в фирме нам лекцию читали).
Постоянная ссылка
Все будет. Пишу, потихоньку буду выкладывать.
Постоянная ссылка
Спасибо!