Как стать автором
Обновить

Комментарии 13

Только, пожалуйста, не пишите свою реализацию криптографических алгоритмов.

Обоснуете?

В криптографии легко ошибиться, даже если ты профессионал в этом деле. Всегда рекомендуется использовать существующие решения, как обкатанные и проверенные технологии.

Мне кажется, что это можно адресовать 99.9% разработчиков. Так что есть подозрение, что TyVik подразумевал что-то другое. Связанное с применением шаблонной магии.

когда я слышу слово «грамматика», вспоминаю yacc, bison, lex, Бэкус, Наур, Ахо. Никаких других ассоциаций.

Жду статью: "restinio + sobjectizer — утилизируй сервер полностью" :-)

У нас уже была. Даже целая серия #1, #2, #3. В общем, да. Утилизирует :)

Точно! Я уж и забыл про них… Пойду перечитаю))
Но все же… Если restinio и sobjectizer завернуть что-то похожее на osgi платформу, добавить плагинную систему, то получится хрорший сервер приложений, ну или как теперь модно, микросервисный фреймворк.

У нас пока хватает сил на неспешную поступательную эволюцию. Сейчас сложно предсказать, к чему все в итоге приведет.

эх, я уже размечтался что смогу использовать этот парсер в моем приложении и облом, судя по исходникам он конкретно завязан на все что там у вас написано. Может его как вытащить в самостоятельный модуль?

Сам по себе easy_parser — это один hpp-файл easy_parser.hpp. Плюс к нему еще файл http_field_parsers/basics.hpp с реализацией вещей, описанных в HTTP-шных RFC.


Реализация easy_parser-а завязана на следующие вещи:


  • тонкие обертки вокруг библиотек optional-lite и expected-lite (фактически, там только определение псевдонимов вида string_view_t и expected_t + внесение некоторых имен в нужный нам неймспейс);
  • класс для исключений (единый класс, используемый во всем RESTinio);
  • набор вспомогательных средств для метапрограммирования (самодостаточный файл metaprogramming.hpp);
  • набор вспомогательных средств для выполнения операций над туплами. Это практически самодостаточный файл tuple_algorithms.hpp, который завязан только на определение макроса RESTINIO_NODISCARD. Если вы можете использовать C++17, то содержимое этого tuple_algorithms можно сделать гораздо проще;
  • макрос RESTINIO_NODISCARD, который скрывает в себе директиву [[nodiscard]], если таковая компилятором поддерживается. Запросто можно выбросить. А если компилятор поддерживает C++17, то заменить на [[nodiscard]];
  • практически самодостаточную реализацию to_lower, которая зависит только от RESTINIO_NODISCARD;
  • практически самодостаточную реализацию аккумулятора целочисленных значений с контролем их переполнения. Опять же зависимость только от RESTINIO_NODISCARD.

В http_field_parsers/basics.hpp есть еще завязка на практически самодостаточную string_caseless_compare. Там используются RESTINIO_NODISCARD и string_view_t.


Так что вытащить это из RESTinio не так уж и сложно.


Но оформлять easy_parser в виде отдельного проекта мы сейчас не будем, на это нет ни времени, ни ресурсов.

Для такой задачи, как мне кажется, подошел бы Ragel. Отлично вписывается в подход с описанием грамматик.

Внимательный читатель мог бы найти в статье и упоминание о ragel, и объяснение почему не.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.