tag:blogger.com,1999:blog-3208941668630248550.post1287881439851148835..comments2024-03-13T10:43:06.615+02:00Comments on 18-ть лет с Delphi: Чужая статья. Delphi и предметно-ориентированные языки. Знакомо до "БОЛИ"Alex W. Lulinhttp://www.blogger.com/profile/08400475846894229767noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-3208941668630248550.post-18756800188653961562013-08-30T01:15:58.817+03:002013-08-30T01:15:58.817+03:00Роман, идеология "FORTH-машины" мне нрав...Роман, идеология "FORTH-машины" мне нравится тем, что она позволяет "прикладной программе" влиять на сам процесс компиляции и разбора. Что позволяет настраивать и "дотачивать" грамматику прямо на лету и "по месту". Только и всего. А использование Lex/Yacc - сильно статичнее.Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-21379130976029064562013-08-29T20:57:33.212+03:002013-08-29T20:57:33.212+03:00Ответил в блоге :)Ответил в блоге :)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-50340924547672287482013-08-29T20:08:02.082+03:002013-08-29T20:08:02.082+03:00NameRec:
Что-то в блоге автора статьи у меня не о...NameRec:<br /><br />Что-то в блоге автора статьи у меня не очень получилось полноценно опубликовать комментарий :-(<br />Попробую здесь...<br /><br />Как-то интересно получается...<br />Начали с конфигурационных файлов, указали на их "недостатки" в контексте задачи, которую обычно не описывают посредством конфигурационных файлов, а затем предложили "решение" - собственный DSL.<br />Нет, ну можно, конечно и так... Но:<br /><br />1. Вот такой XML:<br />〈trafficlight〉<br />. 〈loop〉<br />. . 〈switch color="red" delay="10"/〉<br />. . 〈switch color="yellow" delay="1"/〉<br />. . 〈wait delay="1"/〉<br />. . 〈switch color="green" delay="7"/〉<br />. 〈/loop〉<br />〈/trafficlight〉<br />выглядит несколько естественнее того, что Вы привели.<br />На мой вкус, впрочем.<br />Разумеется, я не стал бы рекомендовать использоваить конфигурационный файл для управлением светофором, но... В Вашей постановке это ещё возможно ;-)<br /><br />2. Что же до программы на DSL, то на Python это будет, IMHO лаконичнее:<br />import trafficlight, red, green, yellow<br />t = trafficlight.Trafficlight()<br />while True:<br />. . t.switch(red, wait=10)<br />. . t.switch(yellow, wait=1)<br />. . t.wait(1)<br />. . t.switch(yellow, wait=1)<br />. . t.switch(green, wait=7)<br />кроме того, не нужен никакой парсинг LEX/YACC, а язык - очень распространённый, на который имеются "тонны" документации.<br /><br />3. Вообще же, тема DSL IMHO утратила актуальность с появлением XML, YAML/JSON с одной стороны, и встраиваемых скрипт-языков (Python, LUA) - с другой.<br />Общим недостатком всех DSL я вижу обратную сторону их достоинств, а именно - специализации на конкретике отдельной задачи.<br />До какого-то момента (пока язык простой) они помогают, но затем, по мере усложнения требований, усложняется и DSL, ввиду чего сдерживающим развитие проекта фактором становится уже он.<br />Поэтому я - за решения, использующие стандартные инструменты.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-37541759164815786172013-08-29T14:29:12.411+03:002013-08-29T14:29:12.411+03:00Я, честно говоря, не понимаю, почему ты противопос...Я, честно говоря, не понимаю, почему ты противопоставляешь Lex/Yacc и Forth/Lisp. Ведь задачи у них совершенно разные: Lex/Yacc парсят, Forth/Lisp выполняют.Anonymousnoreply@blogger.com