Ладно, скажу и вам: я начал-таки делать свой язык программирования, о котором я тут периодически писал, наверное, лет с пяток.
Он начался с того, что по работе понадобился транслятор с языка 1С и будет он примерно таким:
- ключевые слова в кириллице, заточен на русскоязычных пользователей
- работает через трансляцию в Cl
- семантика от CL. Пока мало сделано, постепенно буду достраивать мосты до недостающих частей. Но некоторые вещи в семантике CL не годятся и будут заменены (модули, #., на другие пункты будем смотреть)
- RAII - подобные конструкции
- опциональная статическая типизация
- элементы ФП: декларации для контроля мутабельности. Замыкания.
- eval, REPL
- опциональные типы примерно как в Rust
- исключения и отладчик как в лиспе (вызов отладчика до раскрутки стека, во многих случаях возможность выкрутиться из ошибочной ситуации и продолжить выполнение)
- треды
- пошаговая отладка отдельных тредов, а также трассировка в лог или на экран
- лицензия - пока не знаю. Скорее всего MIT, но нужно понять, как всё это соотносится с местным законодательством
- файлы описания интерфейсов отделены от реализации этих интерфейсов, как в С (спасибо за участие в обсуждении)
- горячая замена кода, естественно
- сборка мусора
- парсер линза, т.е. сразу создаётся фундамент под средства обработки исходников, как в CLang
- совместное развитие среды, языка и инструментов - для этого я и запилил clcon
- интерфейс к C (с ограничениями на применение сигналов и тредов в библиотеках)
- встроенные sql запросы и вообще возможность встраивания других синтаксисов без специального закавычивания - с поддержкой со стороны среды
- гуй на tcl/tk по технологии клиент-сервер. После версии 1.0 можно обсуждать Qt, но вряд ли будет слой переносимости между разными GUI. Возможно, будет генерация tcl/tk из крупных блоков по метаданным (это для бизнес-приложений скорее).
- базовая реализация CL - SBCL (из-за лицензии).
На данный момент есть работающий пример вот такого сорта (только заменил пару ключевых слов, которые в реальности пишутся по-другому):
// -*- package :S2TEST ; coding : utf-8 ; encoding : utf-8 ; -*-
/*
(in-package :s2test)
(named-readtables:in-readtable :buddens-readtable-a)
модуль Пример1;
*/
клсс к () ;
а : строка = "базя" ;
б ;
кнцклсс
клсс к2 (к) ;
в ;
кнцклсс
// здесь полные слова, потому что редкое слово
ГлобальнаяПеременная э;
фнкц МояСтраница() : строка ;
перем рез;
ПостгресСОтдельнымПодключениемВДаннойНити();
ПостгресПодключиться("db1","pguser","uio123","192.168.184.128");
//ВОтладчик("ура!");
рез = "<html><body>Поля глоб. перем. э k2</p>";
рез = рез + ПоляИЗначенияЭкземпляра (э);
рез = рез + "<p>" + строка(ПостгресЗапрос("select * from ошибка")) + "
</p>";
рез = рез + "<br><a href=""/"">Домой</a></body></html>";
ПостгресОтключиться();
Возврат рез;
кнцфнкц
ЗапуститьВебСервер(2425);
ВебСерверГлотатьОшибки(1);
СоздатьГенерируемуюВебСтраницу("/ura",смвл("S2TEST::МояСтраница"));
э = СоздатьОбъект(смвл("к2"));
э.б = 2;
э.в = 3;
Если найду тех, кто будет пилить со мной или, ещё лучше, даст денег на разработку - открою исходники.