Конечный автомат времени компиляции
От: LaptevVV Россия  
Дата: 26.07.25 05:42
Оценка: 2 (1)
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.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Конечный автомат времени компиляции
От: kov_serg Россия  
Дата: 26.07.25 10:13
Оценка: +3
Здравствуйте, 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, а не то что оверхед почти отсутствует.
Re[2]: Конечный автомат времени компиляции
От: LaptevVV Россия  
Дата: 26.07.25 13:31
Оценка:
_>В C++20 уже есть корутины, и можно делать спокойно делать structured concurrency. Чего хорошего в этом жутком синтаксисе для fsm хоть и с "almost without overhead"? Тут главное как его reuse и refactor, а не то что оверхед почти отсутствует.
а зачем его рефакторить, если это библиотека ?
И зачем тут structured concurrency ?
Мне интересно.
Вот один мой 3-курсник проходил стажировку в одной конторе на java
Там было задание: запилить разбор json не используя библиотеки.
А я им как раз про конечные автоматы рассказал. Разные реализации. Статью Кодта показал, Герба Саттера пример привел.
Так он сделал КА в лоб — на него сразу обратили внимание и потом взяли на работу.

Теперь еще такую реализацию показывать буду.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Конечный автомат времени компиляции
От: kov_serg Россия  
Дата: 26.07.25 13:43
Оценка:
Здравствуйте, LaptevVV, Вы писали:

_>>В C++20 уже есть корутины, и можно делать спокойно делать structured concurrency. Чего хорошего в этом жутком синтаксисе для fsm хоть и с "almost without overhead"? Тут главное как его reuse и refactor, а не то что оверхед почти отсутствует.

LVV>а зачем его рефакторить, если это библиотека ?
Не библиотеку рефакторить, а сам конечный автомат.

LVV>И зачем тут structured concurrency ?

LVV>Мне интересно.
Потому как позволяет решить туже задачу, но пордугому.
Re[3]: Конечный автомат времени компиляции
От: Pzz Россия https://github.com/alexpevzner
Дата: 28.07.25 10:17
Оценка: +2
Здравствуйте, LaptevVV, Вы писали:

LVV>А я им как раз про конечные автоматы рассказал. Разные реализации. Статью Кодта показал, Герба Саттера пример привел.

LVV>Так он сделал КА в лоб — на него сразу обратили внимание и потом взяли на работу.

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

А ведь были времена, когда люди спокойно брались, например, за написание кода, который преобразует регулярное выражение в конечный автомат, и не считали это каким-то там особым подвигом...
Re[4]: Конечный автомат времени компиляции
От: LaptevVV Россия  
Дата: 28.07.25 12:18
Оценка:
Pzz>А ведь были времена, когда люди спокойно брались, например, за написание кода, который преобразует регулярное выражение в конечный автомат, и не считали это каким-то там особым подвигом...
интернета — не было.
Мы в одном договоре сделали:
1. Прикрутили Лисп к ПЛ-1
2. Придумали язык для разработки
3. Написали интерпретатор языка на ПЛ1+Лисп
4. На реализованном языке реализовали договор и сдали заказчику
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Конечный автомат времени компиляции
От: Философ Ад http://vk.com/id10256428
Дата: 28.07.25 12:46
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Вообще, в современном корпоративном мире человек, который хоть немного умеет в алгоритмы, очень сильно выделяется на фоне коллег, которые в основном умеют в поиск и приклеивание готовых решений ("зачем изобретать велосипед?").


До первых 5 — 6 MR выделяется, а потом начинает делать как все: алгоритмы — "сложно", "код должен быть понятен джунам"(с). Особо выделиться не получится — большинство задач — 1 — 2 сторипоинта, и предполагает решение влоб. А учитывая, что под одним сторипоинтом обычно понимается 1 день работы над кодом, совмещённый с бесконечными чатами и созвонами, а для кода требуют минимум 70% покрытие юнит-тестами, то даже те, кто умеет, предпочитает искать библиотеки — библиотечные функции не надо покрывать тестами.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[5]: Конечный автомат времени компиляции
От: Pzz Россия https://github.com/alexpevzner
Дата: 28.07.25 13:13
Оценка: +1
Здравствуйте, Философ, Вы писали:

Ф>До первых 5 — 6 MR выделяется, а потом начинает делать как все: алгоритмы — "сложно", "код должен быть понятен джунам"(с). Особо выделиться не получится — большинство задач — 1 — 2 сторипоинта, и предполагает решение влоб. А учитывая, что под одним сторипоинтом обычно понимается 1 день работы над кодом, совмещённый с бесконечными чатами и созвонами, а для кода требуют минимум 70% покрытие юнит-тестами, то даже те, кто умеет, предпочитает искать библиотеки — библиотечные функции не надо покрывать тестами.


Замечу, что писать код, понятный джунам, в разы сложнее, чем просто писать код. И где-то там в промежутке достигаешь редкого умения писать код, понятный самому себе. Ну, я имею ввиду код, который делает что-то осмысленное, а не просто место в git-е занимает.
Re[5]: Конечный автомат времени компиляции
От: Pzz Россия https://github.com/alexpevzner
Дата: 28.07.25 13:16
Оценка:
Здравствуйте, LaptevVV, Вы писали:

Pzz>>А ведь были времена, когда люди спокойно брались, например, за написание кода, который преобразует регулярное выражение в конечный автомат, и не считали это каким-то там особым подвигом...

LVV>интернета — не было.

Ну, были всякие другие файлопомойки.

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

LVV>Мы в одном договоре сделали:

LVV>1. Прикрутили Лисп к ПЛ-1

Молодцы. Очень одобряю. Только зря ПЛ-1, лучше бы хоть Алгол, что ли...

ПЛ-1 вызывает рак глаз с острым течением и рак мозга с хроническим течением.
Re[6]: Конечный автомат времени компиляции
От: LaptevVV Россия  
Дата: 28.07.25 14:49
Оценка:
Pzz>>>А ведь были времена, когда люди спокойно брались, например, за написание кода, который преобразует регулярное выражение в конечный автомат, и не считали это каким-то там особым подвигом...
LVV>>интернета — не было.
Pzz>Ну, были всякие другие файлопомойки.
Не было. 1983-1987 годы.
Договор с питерскими морячками.
Мы — в Ташкенте.
LVV>>Мы в одном договоре сделали:
LVV>>1. Прикрутили Лисп к ПЛ-1
Pzz>Молодцы. Очень одобряю. Только зря ПЛ-1, лучше бы хоть Алгол, что ли...
Ну, опять же — 80-е годы.
Pzz>ПЛ-1 вызывает рак глаз с острым течением и рак мозга с хроническим течением.
Ну, мне дало понимание, что такое язык-оболочка и язык-ядро.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Конечный автомат времени компиляции
От: landerhigh Пират  
Дата: 19.08.25 22:02
Оценка: 19 (1) +1
Здравствуйте, LaptevVV, Вы писали:

_>>В C++20 уже есть корутины, и можно делать спокойно делать structured concurrency. Чего хорошего в этом жутком синтаксисе для fsm хоть и с "almost without overhead"? Тут главное как его reuse и refactor, а не то что оверхед почти отсутствует.

LVV>а зачем его рефакторить, если это библиотека ?

Во-первых, это велосипед. См. boost::msm, например.

LVV>И зачем тут structured concurrency ?


Как автор подобной библиотеки (18 лет назад дело было), имею заявить — при наличии корутин написание или использование подобных библиотек для реализации КА есть ошибка дизайна.
Идея на самом деле неплохая. Есть таблица переходов, какие-то проверки времени компиляции и т.п. Это само по себе в миллион раз лучше, чем гигантский вложенный switch..case с обязательным для него state explosion.

Только из-за того, что состояния описываются отдельными сущностями, логика алгоритма все равно размазывается по коду. Поддерживать ее безумно тяжело.

Реализация асинхронного алгоритма на корутинах позволяет полностью описать алгоритм в одном месте и вообще не отвлекаться на собственно механизм сохранения/перехода состояний.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.