Alexander
кстати кому нужна либа с таким методом?
Leonid 🦇
А что, fsync нету? В unix например?
Alexander
да есть конечно
Alexander
я могу мою книжку по unix-ам достать и посмотреть насколько раньше он выходит
Alexander
Dmitry а какая у вас скорость реакции на отправленные доклады, а то я дня 2 назад отправил по мотивам разговоров по email, мне начинать волноваться, что форма не отправилась или что-то такое, или ещё не стоит. //CC @meilalina
Serghei
а бросьте ссылочек по "конечным автоматам для программистов", если кому-то что-то зашло в свое время
Ilya
Ilya
классическая книга
Serghei
Ахо Ульман у меня в печатном виде есть, но это не совсем то. вернее то, но еще плюс это и вот это, немного про это, это, ну и треть книги про это и это
Ilya
не распарсил
Serghei
отож )
Ilya
в чём проблема, если в книге есть другой материал кроме конечных автоматов?
Serghei
нужны конечные автоматы со страницы такой то-то по такую-то, а не в перемешку на весь том
Ilya
посмотри ещё вот эту
Ilya
http://trpl7.ru/t-books/_TRYAPBOOK_pdf.pdf
Dmitry
говорим "конечный автомат", подразумеваем шалыто!
Dmitry
зачем загонять себя в узкие рамки парсеров?
Serghei
Прикольная книженция
Serghei
не попадалась
Serghei
посидел пару ночей и понял что мат часть хромает
Dmitry
по оптимизации КА было много интересного в пейперах про Ragel
Dmitry
раньше встречалось в открытом доступе. не то, что бы прямо теория, но много теории в т.ч
Serghei
собсвтенно я уперся в то что проект использует LR(2) грамматику, не LR(1) и некоторые проблемы я слабо себе представляю как пофиксить
Dmitry
а что за проблемы?
Serghei
ну одна из проблем, которую я с наскоку не решил в том что у нкоторых токенов непонятно когда должна наступать свертка
Serghei
предположим есть jinja2 - язык шаблонизаторов у которого нет switch
Serghei
{% switch username %}
{% case "Jim" %}
I want to say:
{% case "Nik" %}
Hello man!
{% endcase %}
{% case "Bob" %}
Hi
{% default %}
Who are you?
{% endswitch %}
Serghei
не получилось за две ночи сделать
{% case expr %} statement_list(T) без {% endcase %}
Serghei
и {% default %}
Serghei
я понимаю краем мозга что решаемо ,как и то, что мне нужно что-то почитаь, чтоб понимать как это делается правильно
Serghei
это все не про jinja но проблема один в один
Serghei
там тоже нет switch и если его там реализовывать придется попотеть. наверное по этому его там и нет до сих пор
Dmitry
но ведь проблема наверняка не специфичная для свича?
Serghei
во да
Serghei
я с утра подумал что хочу похожие решения поискать
Misha
@serghei_k А можете объяснить, как вы пришли к тому что это LR(2)?
Dmitry
это похоже на проблему неоднозначности if then elsif else если я правильно понимаю, но наверное у неё есть и более общее название.
Misha
Вот мы сейчас видим в превью один токен case — какие есть иные варианты кроме как начать парсить кейс?
Dmitry
т.е если, опять де, я правильно понимаю, проблема в том, что может быть неоднозначность во вложености
Serghei
Serghei
проект использует Lemon (тот который в SQLite) а он LR(1)
Serghei
Вот мы сейчас видим в превью один токен case — какие есть иные варианты кроме как начать парсить кейс?
ну может я просто что-то не так понимаю, но у меня выходит так
switch_statement(R) ::= '{%' SWITCH '%}' case_clauses(C) '{%' ENDSWITCH '%}' . {
// ...
}
с этим проблем нет, но вот с case_clauses я просто пришелв тупик
case_clauses(R) ::= case_clauses(C) case_clause(K) . {
R = my_list(C, K);
}
case_clauses(R) ::= case_clause(K) . {
R = my_list(NULL, K);
}
case_clause(R) ::= '{%' CASE expr(E) '%}' statement_list(T) '{%' ENDCASE '%}' . {
R = case_clause(E, T, status->scanner_state);
}
похоже на правду ,и даже работает, а вот это нет
case_clause(R) ::= '{%' CASE expr(E) '%}' statement_list(T) . {
R = case_clause(E, T, status->scanner_state);
}
> This rule can not be reduced.
Serghei
простите за всю эту лапшу, я старался заменить блоки на псевдокод чтоб не засирать чатик
Serghei
если не очевидно про самое первое определение про swith,
statement_list(T) ::= switch_statement вот тут и приплыли
Serghei
statement_list => switch_statement => case_clause + statement_list
Alexander
вот у меня есть патч, который только меняет имена методов
Alexander
до него тест выполняется за минуту, после него за бесконечность
Alexander
и вот куда копать..
Dmitry
имена методов где?
Alexander
в модулях моих
Alexander
на самом деле там ещё всякие мелочи типа forM -> for
Alexander
видимо там где-то проблема
Alexander
причем там тест/логика кривая и можно сделать много лучше, но и ухудшение в бесконечность раз это тоже не радость
Alexander
!!!!!!!!!!!!!!!!!!!!
Alexander
отключил custom prelude, заработало
Alexander
блин вот за это я ненавижу custom prelude
Alexander
спецализации же уже не умеют принимать костомную реализацию, только rule?
Alexander
понапишут слишком обобщенных функций, а другим потом баги ловить :/
Алексей
Alexander
when :: Bool -> m a -> m ()
Alexander
хз точно
Alexander
я очень не хочу лезть в core
Alexander
сейчас попробую правило написать, чтобы его в обычный превращать если там ()
Alexander
видимо обламывается его упростить как-то или какое правило специализация для обычного when не срабатывает
Alexander
void же не форсит значение?
Alexander
тесты кстати на дефолтных настройках gc
Alexander
наверное это и не нужно менять
Alexander
чтобы такую хрень ловить
Алексей
Очень интересно. Войд вроде как не должен
Alexander
тогда наш общий when может быть неприятной для gc неожиданностью
Alexander
в общем я правило написал, сейчас проверяю
Алексей
А если этот when тупо выкинуть?
Alexander
тоже вариант
Алексей
И заменить на стандартный
Alexander
ну мой код со стандартным when работает
Alexander
с этим - нет
Alexander
либо выкидывать его из prelude совсем
Alexander
либо чинить
Alexander
я решил попробовать починить правилом, если не получится - выкину к чертям