Size: a a a

Compiler Development

2020 February 26

МБ

Михаил Бахтерев in Compiler Development
IMHO, dsl-и это не самая здравая идея. Вот человек привык к какой-то семантике, автоматически воспринимает тексты, а тут ему: хопа-на! вот тебе другая структура и другие смыслы.

Легко видно по конфигурационным файлам в unix-world. Всяк горазд накрутить свой DSL. И ты вот сидишь с опухшей головой и постоянно переключаешься между контекстами и языками, настраивая какой-нибудь mailman поверх lighttpd или nginx.

Самое прекрасное, что я видел - это проекты от suckless.org или вот сборочные системы в clojure, или вот mailman. Берёшь Сишешчку, EDN или Python, и без всякой смены парадигмы конфигурируешь себе так, как надо. При чём, сразу понимаешь, как это всё будет работать. И хорошо.

А, главное, легко расширяемо чем-нибудь алгоритмическим нестандартным.

Поэтому, надо не к DSL стремится, imho, а к языкам с хорошим уровнем абстракций и встроенным eval-ом. Хм... Только eval, конечно, должен позволять получить в итоге процедуру, то есть, исполняемый код. Ну, в принципе, в UNIX такой eval называется ${CC} и, в принципе, нормально.

Хотя, это тут же приводит к мысли, что, конечно, на Сишечке писать какой-нибудь grep - это одно мучение. И DSL регулярных выражений, наверное, может быть и нужен. Но это проблема того, что в Сишечке плохо с абстракциями. В Haskell для этого DSL не нужен, например.

P.S. Имеется в виду писать grep всякий раз, когда надо строки поматчить нужным способом.
источник

ИЧ

Илья Чистяков in Compiler Development
Михаил Бахтерев
IMHO, dsl-и это не самая здравая идея. Вот человек привык к какой-то семантике, автоматически воспринимает тексты, а тут ему: хопа-на! вот тебе другая структура и другие смыслы.

Легко видно по конфигурационным файлам в unix-world. Всяк горазд накрутить свой DSL. И ты вот сидишь с опухшей головой и постоянно переключаешься между контекстами и языками, настраивая какой-нибудь mailman поверх lighttpd или nginx.

Самое прекрасное, что я видел - это проекты от suckless.org или вот сборочные системы в clojure, или вот mailman. Берёшь Сишешчку, EDN или Python, и без всякой смены парадигмы конфигурируешь себе так, как надо. При чём, сразу понимаешь, как это всё будет работать. И хорошо.

А, главное, легко расширяемо чем-нибудь алгоритмическим нестандартным.

Поэтому, надо не к DSL стремится, imho, а к языкам с хорошим уровнем абстракций и встроенным eval-ом. Хм... Только eval, конечно, должен позволять получить в итоге процедуру, то есть, исполняемый код. Ну, в принципе, в UNIX такой eval называется ${CC} и, в принципе, нормально.

Хотя, это тут же приводит к мысли, что, конечно, на Сишечке писать какой-нибудь grep - это одно мучение. И DSL регулярных выражений, наверное, может быть и нужен. Но это проблема того, что в Сишечке плохо с абстракциями. В Haskell для этого DSL не нужен, например.

P.S. Имеется в виду писать grep всякий раз, когда надо строки поматчить нужным способом.
это верно, нам даже метоклассы запрещают юзать
источник

ИЧ

Илья Чистяков in Compiler Development
но если никому не говорить, можно пропихнуть)
источник

DP

Dmitry Ponyatov in Compiler Development
Михаил Бахтерев
DCPL.pdf там всё это есть
DC Public Library
источник

МБ

Михаил Бахтерев in Compiler Development
Dmitry Ponyatov
DC Public Library
pdf добавлено не спроста ;)
источник

DP

Dmitry Ponyatov in Compiler Development
PSL-DCPL Electronics Components Distributor, Manufacturer
источник

МБ

Михаил Бахтерев in Compiler Development
Оу. Точно. Больше не гуглится. Сорри.

Design concepts in programming languages
источник

МБ

Михаил Бахтерев in Compiler Development
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
IMHO, dsl-и это не самая здравая идея. Вот человек привык к какой-то семантике, автоматически воспринимает тексты, а тут ему: хопа-на! вот тебе другая структура и другие смыслы.

Легко видно по конфигурационным файлам в unix-world. Всяк горазд накрутить свой DSL. И ты вот сидишь с опухшей головой и постоянно переключаешься между контекстами и языками, настраивая какой-нибудь mailman поверх lighttpd или nginx.

Самое прекрасное, что я видел - это проекты от suckless.org или вот сборочные системы в clojure, или вот mailman. Берёшь Сишешчку, EDN или Python, и без всякой смены парадигмы конфигурируешь себе так, как надо. При чём, сразу понимаешь, как это всё будет работать. И хорошо.

А, главное, легко расширяемо чем-нибудь алгоритмическим нестандартным.

Поэтому, надо не к DSL стремится, imho, а к языкам с хорошим уровнем абстракций и встроенным eval-ом. Хм... Только eval, конечно, должен позволять получить в итоге процедуру, то есть, исполняемый код. Ну, в принципе, в UNIX такой eval называется ${CC} и, в принципе, нормально.

Хотя, это тут же приводит к мысли, что, конечно, на Сишечке писать какой-нибудь grep - это одно мучение. И DSL регулярных выражений, наверное, может быть и нужен. Но это проблема того, что в Сишечке плохо с абстракциями. В Haskell для этого DSL не нужен, например.

P.S. Имеется в виду писать grep всякий раз, когда надо строки поматчить нужным способом.
Точно так же "с опухшей головой" приходится изучать математику, в которой используется множество встроенных DSL. А те же поклонники Haskell увлечены идеей DSL (как они ее понимают) многие и многие годы, это одно из главных применений языка и на эту тему написано огромное количество статей. Лично мне не близка идея универсального языка "с хорошим уровнем абстракций" абсолютно для всего. Впрочем, позволено еще существовать нотации регулярных выражений... %)
источник

YS

Yuriy Syrovetskiy in Compiler Development
математика в каком-то смысле из DSL полностью состоит
источник

YS

Yuriy Syrovetskiy in Compiler Development
математика без DSL — это что-то типа нотации Бурбаки
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Точно так же "с опухшей головой" приходится изучать математику, в которой используется множество встроенных DSL. А те же поклонники Haskell увлечены идеей DSL (как они ее понимают) многие и многие годы, это одно из главных применений языка и на эту тему написано огромное количество статей. Лично мне не близка идея универсального языка "с хорошим уровнем абстракций" абсолютно для всего. Впрочем, позволено еще существовать нотации регулярных выражений... %)
Идея с DSL в математике не очень понятна. Можно ли пояснить? В мэйнстриме же используется стандартный язык множеств, последовательностей и функуий. И, вроде, во всех разделах (ну, кроме оснований математики, которые ближе к PLT) нотация однообразна. Всякие закорючки математики, конечно, добавляют, но обычно это просто удобные идентификаторы функций.

В DSL же не так. У какого-нибудь TeX семантика резко отличается от семантики какого-нибудь troff, они заставляют думать иначе, чтобы выразить одно и то же. В математике такого не встречал. Ну... Это развитая дисциплина, там давно известно, как правильно. А ещё категорщики помогают уточнять.
источник

МБ

Михаил Бахтерев in Compiler Development
Yuriy Syrovetskiy
математика без DSL — это что-то типа нотации Бурбаки
Это не dsl, а абстрагирование. Этак и про любую библиотеку функций можно сказать, что она - dsl.
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Идея с DSL в математике не очень понятна. Можно ли пояснить? В мэйнстриме же используется стандартный язык множеств, последовательностей и функуий. И, вроде, во всех разделах (ну, кроме оснований математики, которые ближе к PLT) нотация однообразна. Всякие закорючки математики, конечно, добавляют, но обычно это просто удобные идентификаторы функций.

В DSL же не так. У какого-нибудь TeX семантика резко отличается от семантики какого-нибудь troff, они заставляют думать иначе, чтобы выразить одно и то же. В математике такого не встречал. Ну... Это развитая дисциплина, там давно известно, как правильно. А ещё категорщики помогают уточнять.
Предлагаю фокус обсуждения, все-таки, обратить к тематике чата. Вы готовы рассмотреть применение DSL в построении компиляторов?
источник

DF

Dollar Føølish in Compiler Development
Мне кажется очень хорошая идея
источник

DF

Dollar Føølish in Compiler Development
Генератор компиляторов на дсл
источник

PS

Peter Sovietov in Compiler Development
Я просто догадываюсь, куда нас уведет дискуссия в духе: "это язык! нет, это абстракция! вы оба не правы — это библиотека!". А главное, неясно, почему в процессе абстрагирования не может появиться новый DSL. В конце концов, и понятие есть — металингвистическая абстракция :)
источник

AT

Alexander Tchitchigin in Compiler Development
Dollar Føølish
Генератор компиляторов на дсл
Это как бы не новость и оно так и работает.
Как минимум, традиционные "генераторы компиляторов" aka "compiler compiler" работают на DSL - обычно, каком-нибудь варианте BNF.
Ближе к практике компиляторы типа GCC используют внутренние (для них) DSL языки, например, для описания peephole-оптимизаций.
Как максимум есть проекты Nanopass, MPS и Spoofax, построенные на DSL от и до.
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Предлагаю фокус обсуждения, все-таки, обратить к тематике чата. Вы готовы рассмотреть применение DSL в построении компиляторов?
Ага. Готов. Вот DSL в LLVM для описания машины лично меня крайне напрягает. В основном, потому что он требует последующего согласования его логики с логикой кода на Си++. А это согласование... Эмс... Ну. Ограниченное, что ли? Нельзя сделать слишком многих вещей, которые хотелось бы. Действлительно ли без этого DSL описание машины бы упёрлось в какие-то непреодолимые трудности?

В той же ChezScheme машины описаны на том же Scheme в виде табличек. И ничего, вроде хорошо. И делать с ними можно всё, что алгоритмической душе угодно.
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Это как бы не новость и оно так и работает.
Как минимум, традиционные "генераторы компиляторов" aka "compiler compiler" работают на DSL - обычно, каком-нибудь варианте BNF.
Ближе к практике компиляторы типа GCC используют внутренние (для них) DSL языки, например, для описания peephole-оптимизаций.
Как максимум есть проекты Nanopass, MPS и Spoofax, построенные на DSL от и до.
А о каком Nanopass идёт речь?
источник