У Converge есть довольно внушительные средства метапрограммирования.
На простом уровне это можно рассматривать как макросоподобное средство, хотя оно является более мощным, чем большинство существующих средств макросов, поскольку произвольный код может выполняться во время компиляции. Используя это, можно взаимодействовать с компилятором и генерировать код безопасно и легко, как ITrees (так называемые абстрактные синтаксические деревья).
это шаг вперед по сравнению с гигиеническими макросами Scheme, которые позволяют ссылочно прозрачные определения макросов.
Такие механизмы, как квазилитералы , позволили создавать и деструктурировать деревья синтаксического анализа в других языках, но они чаще используются для взаимодействия с предметно-ориентированными языками (DSL), а не для самоизменения.
Размышления Newspeak позволяют реализовывать исключения в виде библиотечного кода.
7.6 Обработка исключений
Поскольку Newspeak предоставляет рефлексивный доступ (7.2) к записям активации (3.6), обработка исключений является чисто библиотечной проблемой. Платформа предоставит стандартную библиотеку, которая поддерживает генерирование, отлов и возобновление исключений, как в Smalltalk.
Perligata: Романа демонстрирует, как совершенно новый синтаксис можно привязать к языку.
В этой статье описывается модуль Perl - Lingua :: Romana :: Perligata - который позволяет писать программы на Perl на латыни.
Возможно не являющийся семантически значимым, PyPy является генератором интерпретатора для языков, семантика которых указана в высоко статически анализируемом подмножестве Python, и они используют его для экспериментов с новыми языковыми конструкциями в Python, такими как добавление thunks в язык.
Также интерес может быть омета .
Диссертация посвящена экспериментам в области компьютерных наук. В частности, я покажу, что новые языки программирования и конструкции, разработанные специально для поддержки экспериментов, могут существенно упростить работу как исследователей, так и программистов.
Я представляю работу, которая затрагивает два очень разных вида экспериментов. Первая цель - помочь исследователям языков программирования экспериментировать со своими идеями, упрощая им создание прототипов новых языков программирования и расширений существующих языков. Другой исследует экспериментирование как парадигму программирования, позволяя программам самим экспериментировать с различными действиями и возможностями - другими словами, это попытка обеспечить языковую поддержку, что если ...? или возможные рассуждения миров.
Диссертация Алекса Варта демонстрирует использование Ometa для определения существенно новой семантики (транзакционной семантики через миры) в JavaScript + Ometa.