LINUX.ORG.RU

lug — DSL с расширенным PEG для C++17

 , , , peg,


2

2

После 6.5 лет забвения автор выпустил версию 0.2.0 header-only библиотеки lug.

using namespace lug::language;
		rule JSON;
		rule ExponentPart   = lexeme[ "[Ee]"_rx > ~"[+-]"_rx > +"[0-9]"_rx ];
		rule FractionalPart = lexeme[ "."_sx > +"[0-9]"_rx ];
		rule IntegralPart   = lexeme[ "0"_sx | "[1-9]"_rx > *"[0-9]"_rx ];
		rule Number         = lexeme[ ~"-"_sx > IntegralPart > ~FractionalPart > ~ExponentPart ];
		rule Boolean        = lexeme[ "true"_sx | "false" ];
		rule Null           = lexeme[ "null" ];
		rule UnicodeEscape  = lexeme[ 'u' > "[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]"_rx ];
		rule Escape         = lexeme[ "\\" > ("[/\\bfnrt]"_rx | UnicodeEscape) ];
		rule String         = lexeme[ "\"" > *("[^\"\\\u0000-\u001F]"_rx | Escape) > "\"" ];
		rule Array          = "[" > JSON > *("," > JSON) > "]";
		rule Object         = "{" > String > ":" > JSON > *("," > String > ":" > JSON) > "}";
		JSON                = Object | Array | String | Number | Boolean | Null;
		grammar_ = start(JSON);

https://github.com/jwtowner/lug

★★★★★
Ответ на: комментарий от dataman

awesome-hpp

А есть такой же, только без hpp?

То, что библиотека header-only или нет, меня интересует мало, и вообще это разделение я считаю крайне вредным (время компиляции не казённое, и, например, scnlib не в этом списке, хотя библиотека отличная).

В общем, меня гораздо больше интересует «modern & ergonomic С++», чем «header-only C++».

intelfx ★★★★★
()

Мне эти вещи всегда мозг ломали, lug, LPeg, даже от связки lex+yacc держался всегда чем дальше тем лучше, хотя надо бы наоборот. А так это всё моща конечно, можно любую хрень разобрать на атомы лишь описав её один раз.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от dataman

Кстати, я спрашивал на реддите, но там меня закидали тапками за провокационную форму вопроса (примерно 0.4 от среднеЛОРовской), так что спрошу ещё у тебя :-)

Есть ли в мире современного цпп что-нибудь по запросу «хочу STL, только лучше»?

Ну т.е. есть много плача и стенаний насчёт того, что STL стагнирует из-за ABI stability и необходимости поддерживать обратную совместимость с плохими решениями прошлого (в качестве примеров приводят: std::regex, реализации которого медленнее примерно любых других движков; std::string, в который принципиально нельзя завезти CoW; и ещё кучу всего).

А если меня не волнует ни ABI, ни обратная совместимость с несуществующим кодом, то есть что-нибудь настолько же общеупотребительное, только быстрее/выше/сильнее/удобнее?

sudo cast @eao197 заодно.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от intelfx

По моим субъективным и очень ограниченным ощущениям C++ разделился на несколько «ниш».

В той, где обычно сижу я, используют STL и не сильно заморачиваются. Когда где-то что-то упирается в производительность или в ресурсоемкость, то просто заменяется на какую-то альтернативу извне. Типа не устраивает unodered_map из STL, возьмем unordered_map из Boost или еще откуда-то.

В игрострое, насколько до меня доносятся слухи, вместо используют EASTL.

В каких-нибудь крупных шарагах со своими многодесятилетними наработками могут применяться свои лисапеды, вроде Abseil или Folly. Но, насколько я понимаю, те же Abseil и Folly – это довесок к STL, а не прямая замена всему сразу.

В общем же впечатление такое, что за последние 10-15 лет как раз STL проник шире, чем в нулевых и самом начале 2010-х. Как-то народ спокойнее к STL стал относиться, меньше говном кидаются. Да, корявства есть, но сейчас для них и замены есть, которые придерживаются STL-ного стиля.

Но остаются области (типа игростроя, встраиваемых систем, систем реального времени), где из STL мало что разрешено использовать, а на замену есть что-то свое.

Upd. ETLCPP забыл упомянуть.

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 1)
Ответ на: комментарий от intelfx

std::regex, реализации которого медленнее примерно любых других движков

Давно писал о SRELL 2.930 -- библиотека для С++, реализующая работу ECMAScript-совместимых регулярных выражений.

А если меня не волнует ни ABI, ни обратная совместимость с несуществующим кодом

Тогда нужен другой язык. :)

dataman ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.