Приятно общаться с людьми которые думают прежде чем постить а не пишут первое что в голову придёт. Вот вам моя cool story.
Я сам достаточно глубоко (но не до самого конца, где-то дальше середины) залез в C++, это был мой pet language. Но всё чаще я стал обращать внимание на то, что написанные программы приходится переписывать с нуля через некоторое время.
Вот описание процесса программирования которое ИМХО очень хорошо отражает действительность:
"Создание большой программы можно сравнить с постройкой столба из кирпича. Этот столб состоит из тысячи кирпичей, положенных один на другой. Столб может быть выстроен, только если класть кирпичи с большой точностью. Любое отклонение приведет к падению кирпичей. Если кирпич номер 998 отклонится на пять миллиметров, столб, вероятно, сможет выдержать тысячу кирпичей, но если отклонение в пятом кирпиче, столб никогда не станет выше трех десятков.
Это характерная особенность программного обеспечения - фундамент намного чувствительнее к манипуляциям, чем программный код более высоких уровней. В процессе конструирования любой программы разработчик совершает ошибки и вносит изменения по ходу действий. Как следствие, программа обрастает рубцовой тканью измененного кода. В любой программе существуют рудиментарные функции и нереализованные возможности. В каждой программе существуют возможности и процедуры, потребность в которых обнаружилась через какое-то время после начала работы. Каждый из этих шрамов - маленькое отклонение на вертикали кирпичей. Перенос кнопки с одной стороны диалога на другую эквивалентен подталкивание кирпича с номером 998, а изменение кода, отвечающего за отображение всех кнопок, - подталкивание пятого кирпича. Объектно-ориентированное программирование и принципы инкапсуляции данных - эта защитные методы, единственное назначение которых в том, чтобы защитить программу от образования рубцовой ткани. По сути дела, объектно-ориентированный подход разделяет башню из 1000 кирпичей на десять башен по 100 кирпичей."
Осваивая vim я подумал, что при помощи регулярных выражений и особым образом составленных исходников (пригодных для обработки этими regexp) можно делать прототипы программ. В C++ есть шаблоны, но этот способ мне показался более правильным.
Т.е. программный проект состоял бы из неких обобщённых исходников (для компиляции ещё непригодных) и, скажем так препроцессора, который бы обработав их давал бы некий более конкретный валидный для компилятора код.
"Есть ведь препроцессоры у С++, у Паскаля и проч. - кто мне мешает написать свой допустим на perl? Чем он будет хуже?" - думал я. Мне захотелось свою среду программирования, где я описывал бы вещи более общо а затем транслировал в конечный компилируемый язык - я надеялся, что обобщённый код внесённый в такую среду не будет со временем устаревать и на нём не будут появляться упомянутые досадные "рубцы".
Раньше, чем мои попытки кончились каким-либо proof of concept...
Я вдруг осознал, что мне нет смысла продолжать, пока чан не подтвердит, что смотрит куда я смотрел и видит со мной вместе ту же проблему ^.^