[ON] Энтузиасты создали do-нотацию для C++

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6000
ОС: gnu/linux

[ON] Энтузиасты создали do-нотацию для C++

Сообщение rssbot »

Энтузиасты написали собственный DSL на макросах, который работает как do-нотация из функциональных языков. Используются продвинутые возможности препроцессора. В представленном проекте реализована новая техника для парсинга DSL, что может поспособствовать созданию дальнейших DSL на препроцессоре C и C++. Код в репозитории написан на C++23 и открыт под лицензией MIT, а сама техника может быть использована и просто в си-препроцессоре.

Код:


// Без DSL:
auto result = bind(mx, [&](auto x) {
return bind(my, [&](auto y) {
return make_value(x, y);
});
});

// С DSL:
auto result = DO(
LET x IS(mx);
LET y IS(my);
return make_value(x, y);
);



Дополнение 1: Принцип работы DSL в разрезании потока на токены. "LET name IS(value)" раскрывается в "), _LET_IS(name, (value)), _CODE(". Таким образом, весь код оказывается в блоках "_CODE", а "LET IS" и прочее выходят как метки. Дальше нужно лишь пройтись по всем меткам и обработать. В DSL поддерживаются циклы (WHILE, BREAK, CONTINUE) и ветвления (IF). Циклы работают через рекурсию. Внутри таких блоков кода можно использовать другие блоки (IF, WHILE, LET IS).

Дополнение 2: Вышла статья с объяснением принципа работы.


Источник: https://www.opennet.ru/opennews/art.shtml?num=64975
(opennet.ru, мини-новости)
Последний раз редактировалось rssbot 19.03.2026 21:04, всего редактировалось 4 раза.
Причина: Updated upstream
Спасибо сказали: