Продолжение о DSL

Aug 25, 2010 19:22

Чето походу статья про DSL особо никому не приглянулась: комментариев нет, реакция в инете нулевая (за исключением недовольного ворчания archimag'a в своем блоге. Ну да архимаг известный брюзга: continuations в вебе архаизм, DSL застрял в середине 80-ых, и так далее ( Read more... )

article, code, dsl, sudoku, lisp, queens, common lisp

Leave a comment

Comments 54

love5an August 25 2010, 16:18:46 UTC
я, я прочитал!:) и понравилось
просто, часто комментировать лень

Reply

swizard August 25 2010, 17:27:31 UTC
Окей, в следующий раз добавлю быдло-кнопочки "понравилось"/"отстой" =)

Reply


antage August 25 2010, 16:57:34 UTC
А вы не считаете, что такое повальное использование DSL значительно затрудняет чтение и понимание кода? Вместо того чтобы прочитать, что делает та или иная функция, мы натыкаемся на совершенно непонятный DSL (вы же не пишите документацию к своему DSL) и вынуждены лезть в кишки макросов, чтобы попытаться понять, что на самом деле вставляется на место использования DSL. А ещё, участки программы написанные на DSL очень сложно расширять - приходится стать тут же не только программистов, но еще и языкописателем ( ... )

Reply

swizard August 25 2010, 17:25:51 UTC
> А вы не считаете, что такое повальное использование DSL значительно затрудняет чтение и понимание кода?

Нет, я считаю, что использование DSL значительно упрощает чтение и понимание кода :)

Я же привожу пример: имплементация move-valid-p против ее же имплементации на DSL defvalidator. Ну согласитесь же, что любой здоровый человек по DSL алгоритм работы поймет намного быстрее, чем если бы он полез разбираться в двойных циклах с невнятными счетчиками?

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

> вынуждены лезть в кишки макросов, чтобы попытаться понять, что на самом деле вставляется на место использования DSL

Да ладно уж, вынуждены :) Часто вы макроэкспандите loop, format или ppcre? На самом деле, практически никогда не бывает нужно узнать "что конкретно" делает код, достаточно осознать его алгоритм, параметры и результаты.

Например, большинству .NET программистов совершенно пофигу, как работает linq.

> участки программы написанные на DSL очень сложно ( ... )

Reply

antage August 25 2010, 18:39:49 UTC
> Да ладно уж, вынуждены :) Часто вы макроэкспандите loop, format или ppcre?
Я о чём и толкую. На loop, format и ppcre есть подробная документация. На ваш DSL - нет.

> На самом деле, практически никогда не бывает нужно узнать "что конкретно" делает код, достаточно осознать его алгоритм, параметры и результаты.

Это срабатывает до тех пор, пока программа на DSL работает как задумывалось. А вот если она начинает выдавать малопонятные ошибки, то в "кишки" лезть все равно придется. Или если захочется расширить или изменить семантику DSL.

Reply

swizard August 25 2010, 18:49:28 UTC
> На loop, format и ppcre есть подробная документация. На ваш DSL - нет.

Ну вы так говорите, как будто это неизбежный злой рок всех моих DSL-ей =) Разумеется, при расширении функционала или публичном релизе подробные доки будут написаны. Это как и везде.

> А вот если она начинает выдавать малопонятные ошибки, то в "кишки" лезть все равно придется.

Да ради Бога, в CL это не сложнее, чем залезть в кишки чьей-то левой и бажной библиотеки.

> Или если захочется расширить или изменить семантику DSL.

Я же говорю: для этого необязательно лезть в кишки, достаточно определить свой DSL поверх существующего.

Reply


(The comment has been removed)

swizard August 25 2010, 18:24:07 UTC
Всмысле, ты пытаешься донести, что и обратное верно: пишущий внятные DSL автор красиво и понятно напишет то же самое и хост-языком?

Но ведь это не так. У языка есть такое свойство: "Выразительность" -- даже у универсальных языков вне своей основной предметной области она может быть очень низкая. Например, зная ассемблер, очень тяжело разбираться в сложных программах на нем.

Reply

(The comment has been removed)

swizard August 25 2010, 18:36:21 UTC
Я еще раз обращаю внимание: "понять код" -- это не значит "понять смысл".

Чем длинней перед тобой простыня кода, тем больше шансов, что тебе даже не захочется ее читать.

Открой, например, случайный исходник мозиллы или опеноффиса. Увидишь там код, удовлетворяющий всем coding styles, stantards, best practices, etc, только, чтобы что-то понять, придется крепко повозиться =)

Reply


thedeemon August 25 2010, 18:21:40 UTC
Т.е. мы из простого цикла в пять строк сделали писят с потенциальными ошибками и побочными эффектами? Изящно.

Reply

(The comment has been removed)

thedeemon August 25 2010, 18:31:32 UTC
Не угадал. :)

Reply

swizard August 25 2010, 18:31:53 UTC
Нет, мы сделали из смеси невнятных вложенных циклов четыре строчки четкого и наглядного описания алгоритма.

Остальное -- это реализация языка программирования игровых ситуаций на прямоугольном поле. В качестве примера я на нем же решил другую задачу (о восьми ферзях).

Да, и о каких ошибках и побочных эффектах ты говоришь? Или ты это типа так, рандомно для красного словца упомянул? =)

Reply


rigidus August 25 2010, 18:42:43 UTC
так всегда бывает с большими хорошими статьями - их усваивают а не комментируют. печальиться об этом не стоит. респект.

Reply

swizard August 25 2010, 19:00:31 UTC
спасибо!

Reply


Leave a comment

Up