Best viewed with LeechCraft on Microsoft Linux. Войти !bnw Сегодня Клубы

Подглядел няшный паттерн в бсдшном ините:
В его FSM обработчик каждого из состояний является отдельной функцией, которая в качестве возвращаемого значения возвращает адрес функции-обработчика следующего состояния.
Сам цикл автомата тогда сводится к for (;;) s = (state_t) (*s)();
Жутко просто, но я сам никогда не догадывался так сделать :<

Рекомендовали: @l29ah @j123123 @hongweibing
#N91SJB / @stiletto / 3856 дней назад

http://govnokod.ru/15980 посмотри на считалку чисел Фибоначчи на С, которую я написал. Думаю, тебе понравится
#N91SJB/J5D / @j123123 / 3856 дней назад
всегда плохо понимал, зачем ручками кодить эмуляцию конечного автомата, когда у твоего кода и так столько состояний, сколько строчек кода // а транзишены между состояниями делаются ПОНЯТНО с помощью традиционных операторов flow control
#N91SJB/ZDW / @ulidtko / 3856 дней назад
@ulidtko inb4: в моём %shitlanguagename% нет замыканий и корутин
#N91SJB/O92 / @ulidtko --> #N91SJB/ZDW / 3856 дней назад
@ulidtko (даже в сишечке есть! (неудобные) через `setjmp`)
#N91SJB/L6D / @ulidtko --> #N91SJB/O92 / 3856 дней назад
Но ведь это выглядит опасно и хрупко.
#N91SJB/AG3 / @engineer / 3856 дней назад
@engineer Если завернуть в предохраняющие макросы, то норм может быть (как в моем примере)
#N91SJB/PZG / @j123123 --> #N91SJB/AG3 / 3856 дней назад
@engineer ... и не шибко дебагабельно к тому же.
#N91SJB/5Q9 / @ulidtko --> #N91SJB/AG3 / 3856 дней назад
Можно просто вызывать следующую функцию и надеяться на то, что компилятор сделает sibling call optimization
#N91SJB/6J4 / @fix / 3856 дней назад
@j123123 > предохраняющие макросы > предохраняющие > макросы
#N91SJB/XFZ / @ulidtko --> #N91SJB/PZG / 3856 дней назад
@ulidtko А чем тебе #define ARR_ACS(a) (arr[MOD_L(a)]) //access to arr не предохраняющий макрос? Это макрос для доступа к элементу массива (на чтение или на запись), который проверяет чтобы мы не вылезли за пределы массива
#N91SJB/34L / @j123123 --> #N91SJB/XFZ / 3856 дней назад
было в эрланге
#N91SJB/L9A / @kerrigan / 3856 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.