https://codeberg.org/cmargiotta/compile-time-fsm
The fsm provides an easy way to manage finite state machines, almost without overhead.
This library requires C++20 and is based on meson build system.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>https://codeberg.org/cmargiotta/compile-time-fsm LVV>The fsm provides an easy way to manage finite state machines, almost without overhead. LVV>This library requires C++20 and is based on meson build system.
В C++20 уже есть корутины, и можно делать спокойно делать structured concurrency. Чего хорошего в этом жутком синтаксисе для fsm хоть и с "almost without overhead"? Тут главное как его reuse и refactor, а не то что оверхед почти отсутствует.
_>В C++20 уже есть корутины, и можно делать спокойно делать structured concurrency. Чего хорошего в этом жутком синтаксисе для fsm хоть и с "almost without overhead"? Тут главное как его reuse и refactor, а не то что оверхед почти отсутствует.
а зачем его рефакторить, если это библиотека ?
И зачем тут structured concurrency ?
Мне интересно.
Вот один мой 3-курсник проходил стажировку в одной конторе на java
Там было задание: запилить разбор json не используя библиотеки.
А я им как раз про конечные автоматы рассказал. Разные реализации. Статью Кодта показал, Герба Саттера пример привел.
Так он сделал КА в лоб — на него сразу обратили внимание и потом взяли на работу.
Теперь еще такую реализацию показывать буду.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
_>>В C++20 уже есть корутины, и можно делать спокойно делать structured concurrency. Чего хорошего в этом жутком синтаксисе для fsm хоть и с "almost without overhead"? Тут главное как его reuse и refactor, а не то что оверхед почти отсутствует. LVV>а зачем его рефакторить, если это библиотека ?
Не библиотеку рефакторить, а сам конечный автомат.
LVV>И зачем тут structured concurrency ? LVV>Мне интересно.
Потому как позволяет решить туже задачу, но пордугому.
Здравствуйте, LaptevVV, Вы писали:
LVV>А я им как раз про конечные автоматы рассказал. Разные реализации. Статью Кодта показал, Герба Саттера пример привел. LVV>Так он сделал КА в лоб — на него сразу обратили внимание и потом взяли на работу.
Вообще, в современном корпоративном мире человек, который хоть немного умеет в алгоритмы, очень сильно выделяется на фоне коллег, которые в основном умеют в поиск и приклеивание готовых решений ("зачем изобретать велосипед?").
А ведь были времена, когда люди спокойно брались, например, за написание кода, который преобразует регулярное выражение в конечный автомат, и не считали это каким-то там особым подвигом...
Pzz>А ведь были времена, когда люди спокойно брались, например, за написание кода, который преобразует регулярное выражение в конечный автомат, и не считали это каким-то там особым подвигом...
интернета — не было.
Мы в одном договоре сделали:
1. Прикрутили Лисп к ПЛ-1
2. Придумали язык для разработки
3. Написали интерпретатор языка на ПЛ1+Лисп
4. На реализованном языке реализовали договор и сдали заказчику
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Pzz, Вы писали:
Pzz>Вообще, в современном корпоративном мире человек, который хоть немного умеет в алгоритмы, очень сильно выделяется на фоне коллег, которые в основном умеют в поиск и приклеивание готовых решений ("зачем изобретать велосипед?").
До первых 5 — 6 MR выделяется, а потом начинает делать как все: алгоритмы — "сложно", "код должен быть понятен джунам"(с). Особо выделиться не получится — большинство задач — 1 — 2 сторипоинта, и предполагает решение влоб. А учитывая, что под одним сторипоинтом обычно понимается 1 день работы над кодом, совмещённый с бесконечными чатами и созвонами, а для кода требуют минимум 70% покрытие юнит-тестами, то даже те, кто умеет, предпочитает искать библиотеки — библиотечные функции не надо покрывать тестами.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Философ, Вы писали:
Ф>До первых 5 — 6 MR выделяется, а потом начинает делать как все: алгоритмы — "сложно", "код должен быть понятен джунам"(с). Особо выделиться не получится — большинство задач — 1 — 2 сторипоинта, и предполагает решение влоб. А учитывая, что под одним сторипоинтом обычно понимается 1 день работы над кодом, совмещённый с бесконечными чатами и созвонами, а для кода требуют минимум 70% покрытие юнит-тестами, то даже те, кто умеет, предпочитает искать библиотеки — библиотечные функции не надо покрывать тестами.
Замечу, что писать код, понятный джунам, в разы сложнее, чем просто писать код. И где-то там в промежутке достигаешь редкого умения писать код, понятный самому себе. Ну, я имею ввиду код, который делает что-то осмысленное, а не просто место в git-е занимает.
Здравствуйте, LaptevVV, Вы писали:
Pzz>>А ведь были времена, когда люди спокойно брались, например, за написание кода, который преобразует регулярное выражение в конечный автомат, и не считали это каким-то там особым подвигом... LVV>интернета — не было.
Ну, были всякие другие файлопомойки.
Не знря Столман бучу про свободу распространения исходников поднял. Значит, было чего распространять и было как распространять, и были желающие этим заниматься.
LVV>Мы в одном договоре сделали: LVV>1. Прикрутили Лисп к ПЛ-1
Молодцы. Очень одобряю. Только зря ПЛ-1, лучше бы хоть Алгол, что ли...
ПЛ-1 вызывает рак глаз с острым течением и рак мозга с хроническим течением.
Pzz>>>А ведь были времена, когда люди спокойно брались, например, за написание кода, который преобразует регулярное выражение в конечный автомат, и не считали это каким-то там особым подвигом... LVV>>интернета — не было. Pzz>Ну, были всякие другие файлопомойки.
Не было. 1983-1987 годы.
Договор с питерскими морячками.
Мы — в Ташкенте. LVV>>Мы в одном договоре сделали: LVV>>1. Прикрутили Лисп к ПЛ-1 Pzz>Молодцы. Очень одобряю. Только зря ПЛ-1, лучше бы хоть Алгол, что ли...
Ну, опять же — 80-е годы. Pzz>ПЛ-1 вызывает рак глаз с острым течением и рак мозга с хроническим течением.
Ну, мне дало понимание, что такое язык-оболочка и язык-ядро.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
_>>В C++20 уже есть корутины, и можно делать спокойно делать structured concurrency. Чего хорошего в этом жутком синтаксисе для fsm хоть и с "almost without overhead"? Тут главное как его reuse и refactor, а не то что оверхед почти отсутствует. LVV>а зачем его рефакторить, если это библиотека ?
Во-первых, это велосипед. См. boost::msm, например.
LVV>И зачем тут structured concurrency ?
Как автор подобной библиотеки (18 лет назад дело было), имею заявить — при наличии корутин написание или использование подобных библиотек для реализации КА есть ошибка дизайна.
Идея на самом деле неплохая. Есть таблица переходов, какие-то проверки времени компиляции и т.п. Это само по себе в миллион раз лучше, чем гигантский вложенный switch..case с обязательным для него state explosion.
Только из-за того, что состояния описываются отдельными сущностями, логика алгоритма все равно размазывается по коду. Поддерживать ее безумно тяжело.
Реализация асинхронного алгоритма на корутинах позволяет полностью описать алгоритм в одном месте и вообще не отвлекаться на собственно механизм сохранения/перехода состояний.