ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
1288791
klen (03.03.2023 02:40, просмотров: 3581) Evgeny_CD
накину о вечном - REGEX, регулярные выражения и прекрасная (на мой взгляд) реализация 

итак регулярные выражения. вещь чисто кибернетическая и неплохо изученная... но вот реализация на С/С++ весьма сложна и неоднозначна..


есть неплохие реализации на других языках, к примеру общепризнанна реализация в Python

есть попытки в виде отдельных либ например

C-like TRE https://github.com/laurikari/tre/

C++-like BOOST

но все это было какое то говно.... что то обязательно в реализации было очень плохо так, что отворачивало от использования.


я долго наблюдал как чуваки пилят реализацию рег-выражений для стандартной библиотеки C++ STL в GCC.... ы не поверите, ужо как лет 12. и все этим несчастным чтото мешало дойти до финиша...

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


дело доходило до того что в промышленном коде использовали TRE с доделками под себя, или BOOST или вообще внедряли lua и использовали ее реализацию.

для меня это выглядело печальным в том свете что отсутствовал единый стандарт на такую общую и давно известную и изученую кибернетическую концепцию с одной стороны, и применительно к микроконтроллерам - было исключено их использование (за исключение TRE) из за несоразмерных внешних зависимостей (попробуете что то BOOST'овое сначала выдрать потом отпортировать затем собрать и запустить на микроконтроллере )


скажу сразу - на С это реализовать эффективно нельзя в связи с ограниченной выразительностью по семантике языка С.

с С++ было чуть лучше но.... что то всегда, как я указал выше, мешало


свет забрезжил с появление стандарта С++17 с расширениями многих понятий, особенно шаблонов.


и вот! наконец то!


есть такая прекрасная умная женщина Хана Дусикова

Chair of SG7 "Compile-Time Programming Study Group" in WG21 "ISO C++ Committee" - думаю этого достаточно...


в одну жопу напилила просто восхитительную изящную и эффективную реализацию REGEX - CTRE.

последнее время циркулируют устойчивые слухи что ее реализацию возьмут за основу для GCC и LLVM

... а что вымучивали до этого - выпилят к хуам собачьим. вот так.




теперь о том что это дает нам - эмбеддерам!

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

многие системы имеют текстовую консоль для управления, у меня в каждом девайсе такое есть. руками парсить строки - вытягивать параметры, угадывать их типы и приводить в нужный формат - сложно и дорого и нудно, но я писал ручками чтобы было побыстрее. теперь переписал и парсер консоли и парсер HTTP запросов на CTRE - оказалось что мои рукописные перлы проиграли реализованному на CTRE как по размеру так и по скорости. а по лаконичности кода.... ваще красота. теперь добавление команд и их параметров не требует добавлять какой то код - достаточно дописать строку шаблона регулярного выражения!


теперь конткретика:


немного букв об этом

https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1433r0.pdf


она выступала у нас на конференции, можно глазами увидеть эту дородную "мать" (как же я пробакланил эту конфу? .... жалею сейчас)

youtube


очень занимательные картинки(презентация) посмотрите — очень интересно, сравнение с другими реализациями, картинки графики

https://www.compile-time.re/meeting-cpp-2019/slides/#/1


ее реализация

https://github.com/hanickadot/compile-time-regular-expressions



я бы ей вдул! разок! удивительная женщина.


надеюсь Вам будет также полезно и интересно как мне. мой код стал значительно лучше.


ложка дегтя - всем любителям С безнадежно страдать. у Вас хорошего выходного бинаря не будет! а на асме такое не напишешь - мозги завернутся от сложности вовнутрь и от сингулярности превратятся в черную дыру.