Я разрабатываю русскоязычный язык программирования, у него пока нет
названия. Проект языка создан на обобщении собственного более чем
20-летнего опыта общения с компьютерами, а также изучения тенденций
в развитии языков программирования. По некоторым параметрам он
превосходит все современные популярные и набирающие популярность языки,
в т.ч. С++, Java, Go, Rust, Python.
Особенности языка:
- ключевые слова в кириллице, заточен на русскоязычных пользователей
- работает через трансляцию в CL, компилирует в нативный код
(не использует Jit, JVM, C#, Mono, LLVM, байткод и т.п.)
- семантика от CL. Пока мало сделано, постепенно буду достраивать мосты
до недостающих частей. Но некоторые вещи в семантике CL не годятся
и будут заменены (модули, #., на другие пункты будем смотреть)
- классы с множественным наследованием, родовые функции со
множественной диспатчеризацией - из CL. Хотя по классам
ещё есть вопросы - современные языки склонные реализовывать
более простые объектные системы и наверняка это неспроста.
Во всяком случае, нет сложностей реализовать ту или иную систему.
- RAII - подобные конструкции
- опциональная статическая типизация
- элементы ФП: декларации для контроля мутабельности. Замыкания.
eval, REPL
- опциональные типы (идея взята из Swift)
- именованные аргументы примерно как в Visual Basic
- исключения и отладчик как в лиспе (вызов отладчика до раскрутки
стека, во многих случаях возможность выкрутиться из ошибочной
ситуации и продолжить выполнение)
- треды
- пошаговая отладка отдельных тредов, а также трассировка в лог
или на экран
- файлы описания интерфейсов отделены от реализации этих интерфейсов,
как в С
- доопределение и модификация определения классов и функций без
остановки программы - идея и реализация взята из Common Lisp.
- сборка мусора
- парсер-линза, дающий точное представление текста программы вместе
с комментариями. Позволяет строить программы, преобразующие
исходные тексты (например, средства рефакторинга). Эта идея
сегодня использована в CLang.
- совместное развитие среды, языка и инструментов - для этого создан
проект среды: https://bitbucket.org/budden/clcon
- интерфейс к C (с ограничениями на применение сигналов и тредов
в библиотеках)
- встроенные sql запросы и вообще возможность встраивания других
синтаксисов без специального закавычивания - с поддержкой со
стороны среды
- графический интерфейс можно сделать на tcl/tk по технологии
клиент-сервер. На данном этапе код нужно писать вручную.
Возможно, будет генерация tcl/tk из крупных блоков по метаданным
(это для бизнес-приложений скорее).
- базовая реализация CL - SBCL
- может запускаться на нескольких платформах и OC, в соответствии
с возможностями SBCL, см. http://www.sbcl.org/platform-table.html
В т.ч. на Linux, Windows и MacOS под x86,x64 и ARM.
- все компоненты системы находятся под пермиссивными лицензиями
(BSD,MIT,Public Domain), хотя юридический статус этих лицензий
для России требует уточнения.
По всем этим пунктам за редкими исключениями есть либо работающий
прототип, либо ясное понимание того, что нужно получить и как
этого достичь. Интенсивная фаза проекта длится 4-5 месяцев и в
основном была посвящена разработке среды clcon. Мне нужно ещё
порядка года полной занятости, чтобы довести проект до версии 1.0.
На данный момент проект приостановлен в связи с исчерпанием
сбережений и необходимостью поиска работы.
Ищу заинтересованные организации, способные профинансировать
разработку.
Работающий пример кода. Определяется два класса, создаётся
веб-сервер и в нём веб-страница, читающая данные из базы Постгресс.
Также демонстрируется рефлексия и глобальные переменные.
клсс к () ;
а - строка = "базя" ;
б ;
кнцклсс
клсс к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;
Денис Будяк. Е-mail: budden73@mail.ru