Re[19]: Языки общего назначения не имеют смысла!
От: artelk  
Дата: 10.04.12 14:24
Оценка: 14 (1) +1
Здравствуйте, netch80, Вы писали:

N>Я не считаю адекватной классификацию, в которой такими DSLями оказываются 90% языков.

Вообще-то больше

Вообще, DSL — это подход к решению задач, в рамках которого под задачу (или класс задач) сначала реализуется язык, на котором решение задачи становится более выразительным, понятным и простым.
DSL — это альтернатива сложившемуся подходу — реализации некой объектной (или еще какой) модели на каком-то языке общего назначения и последующее решение задачи "в терминах" взаимодействия объектов этой модели.
Такая модель, по сути, также выполняет функцию языка. Особенно это относится ко всякого рода фреймворкам. Или вот: boost.spirit — яркий пример, когда граница между DSL и фреймворком почти совсем размыта.
Но "честный" DSL начинается с грамматики и не ограничен выразительными возможностями того или иного языка общего назначения.

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

"DSL-ность", все же, это не свойство языка, а подход к решению задач.
Т.е. нельзя сказать, что тот или иной язык является DSL или нет, основываясь только на его синтаксисе и семантике. Тут главный вопрос: для чего был язык создан.
Если он создан для упрощения решения каких-то задач (aka в каком-то домене), то он DSL. Поэтому почти все языки программирования являются DSL-ями. "Почти", поскольку, например, Brainfuck не является таковым — его создали не для потому, что на нем проще реализовать тот или иной функционал (или может я чего-то не знаю ).

Нужно придумать так, чтобы ограничение было сильнее.
Re[20]: Языки общего назначения не имеют смысла!
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 10.04.12 14:38
Оценка: +2
Здравствуйте, WolfHound, Вы писали:

N>>Осталось понять, кто из вас более странный.

WH>Ты.

Это нарушение поискового домена.

N>>Я не считаю адекватной классификацию, в которой такими DSLями оказываются 90% языков.

N>>Нужно придумать так, чтобы ограничение было сильнее.
WH>А нельзя придумать классификацию, не привязанную к предметной области.
WH>Ибо Domain-specific language.

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

WH>А раз мы привязываемся к некоторому домену то для любого языка можно придумать домен (а обычно множество доменов) для которых данный язык является языком предельно высокого уровня. Те делай, что хочешь, но язык более высокого уровня не придумать. Ибо язык и так напрямую оперирует терминами предметной области.


Важно ещё, чтобы этот язык не оперировал чем-то ещё, кроме терминами *данной* предметной области.
Потому что по тому, что сейчас получается, у тебя Python является DSL для арифметики.
С этим вряд ли кто-то ещё согласится.

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


Исходная — неинтересна. Мало ли что там изначально придумывали.
Вон Erlang придумали для телефонного свича. Я не пишу на нём телефонные свичи.

WH>А для С, С++, C#,... написание произвольных программ.


Очень абстрактно и потому некорректно.
The God is real, unless declared integer.
Re[18]: Языки общего назначения не имеют смысла!
От: PSV100  
Дата: 10.04.12 14:43
Оценка: :)
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, AndrewVK, Вы писали:


AVK>>Формально тоже все в порядке. Выражения типа "язык танца" или "язык тела" не встречал? Языки вовсе не обязаны быть исключительно текстовыми.


_>В программирование язык — это всё же вполне формальная сущность с синтаксисом, семантикой и т.п. А их довольно трудно разглядеть в GUI редакторе. )


_>А в общемупотребительной терминологии конечно проблем нет тогда. Там вообще можно увидеть фразу "найти общий язык с компьютером". )))


alex_public, посмотри на ДРАКОН — Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность. Это один из редчайших случаев, когда графический язык реально используется в промышленности (!), причём именно для программирования, в основном, инженерами (в инете, где-то вокруг Оберона, была инфа от тех, кто с ним реально работал в тех "космических фантазиях").

Он используется в моей личной практике, но всё "программирование" происходит на бумаге с карандашом — язык очень простой, основная фишка: направленный граф без пересекающихся линий — это реально намного лучше того, что рисовалось до него не пойми как для своих всяких схем. Люди въезжают быстро, даже те, кто далёк от программирования и всяких блок-схем, быстро можно начать обсуждать предметную область на одном языке.
Рекомендую.
Re[21]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 10.04.12 14:47
Оценка:
Здравствуйте, netch80, Вы писали:

N>Важно ещё, чтобы этот язык не оперировал чем-то ещё, кроме терминами *данной* предметной области.

Это зависит от того как задать предметную область.

N>Потому что по тому, что сейчас получается, у тебя Python является DSL для арифметики.

У меня получается, что чуть менее чем все языки являются ДСЛями для арифметики.

Проблема в том, что очень мало задач, которые к этой самой арифметике сводятся.

N>С этим вряд ли кто-то ещё согласится.

Не говори за всех. И перестань спорить с определениями.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[20]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 10.04.12 14:50
Оценка:
Здравствуйте, artelk, Вы писали:

A>Но "честный" DSL начинается с грамматики и не ограничен выразительными возможностями того или иного языка общего назначения.

Честный ДСЛ начинается с семантики и не ограничен семантикой, какого либо другого языка.

A>"DSL-ность", все же, это не свойство языка, а подход к решению задач.

ДСЛность это свойства языка по отношению к конкретной задаче.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[22]: Языки общего назначения не имеют смысла!
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 10.04.12 14:59
Оценка: +2
Здравствуйте, WolfHound, Вы писали:

N>>Важно ещё, чтобы этот язык не оперировал чем-то ещё, кроме терминами *данной* предметной области.

WH>Это зависит от того как задать предметную область.

Ну ты же сам предложил сложить два числа.

N>>Потому что по тому, что сейчас получается, у тебя Python является DSL для арифметики.

WH>У меня получается, что чуть менее чем все языки являются ДСЛями для арифметики.

Вот это и плохо.

WH>Проблема в том, что очень мало задач, которые к этой самой арифметике сводятся.


И ещё и поэтому твоё рассмотрение некорректно.

N>>С этим вряд ли кто-то ещё согласится.

WH>Не говори за всех. И перестань спорить с определениями.

Мне как-то пофиг приказы с твоей стороны перестать спорить с "определениями", под которыми пока что никто кроме тебя не подписался.
The God is real, unless declared integer.
Re[21]: Языки общего назначения не имеют смысла!
От: artelk  
Дата: 10.04.12 15:30
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, artelk, Вы писали:


A>>Но "честный" DSL начинается с грамматики и не ограничен выразительными возможностями того или иного языка общего назначения.

WH>Честный ДСЛ начинается с семантики и не ограничен семантикой, какого либо другого языка.
Ухх боюсь я это слово произносить, когда ты поблизости...
Пример приведи, плз. С указанием, что является семантикой и какой ДСЛ создается.

A>>"DSL-ность", все же, это не свойство языка, а подход к решению задач.

WH>ДСЛность это свойства языка по отношению к конкретной задаче.
Я правильно понимаю, что по твоему язык является ДСЛем, если оперирует строго теми же понятиями, что используются в предметной области в контексте конкретной задачи?
Re[17]: Языки общего назначения не имеют смысла!
От: alex_public  
Дата: 10.04.12 16:51
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Да ладно. Кодокенерация у них встречается частенько. Для тех же ресурсов дотнета они генерируют классы-обертки.


Угу, это ещё в MFC было — ClassWizard и т.п. И помнится там был ещё генератор обёрток для COM. Но это именно пустые классы, а вот код с какой-то логикой работы... Такого не помню у них ни разу.

VD>Вопрос только в катастрофически низком уровне этой генерации.


Вот мне не понятно почему оно у них тут низкое, для такой простой задачи.

VD>У них тоже. Только вот подключить свой довольно не просто. Кроме того уверен, что наворотов в вашем редакторе существенно меньше. А стало быть и проблем.


Ну он покрывает значительную часть фреймворка. Причём масштабирование форм и поддержка перевода интерфейса заложены изначально.

VD>В любом случае, если имеет место генерация в разные языки, то имеет место и ДСЛ. И МС, и вы создаете некую модель в памяти и правила ее изменения. И уже эту модель сериализуете в код (или еще куда-то). Единственное что — эту модель вы не записываете на диск в исходном виде. Вот и все.


Да, само собой это какая-то разновидность dsl. Но при этом без создания синтаксиса языка. Может это не плохое решение, пока нет удобных автоматических инструментов dsl-строения? )
Re[17]: Языки общего назначения не имеют смысла!
От: alex_public  
Дата: 10.04.12 17:04
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Конечно можете. Это и есть DSL. И когда вы поменяете этот формат, у вас встанут совершенно такие же проблемы, как всегда при смене языка — как мигрировать мегабайты существующего кода.


Как раз в данном случае проблем быть не должно — автоконвертер справится легко. Это же именно язык для программы, а не для человека, поэтому там никакого произвола.

S>То, что он у вас внутри какой-то некрасивый, как раз неважно. Важно, что он есть. Вы можете приделать к нему произвольное представление. Визуальное у вас уже есть. Можете приделать текстовое, и получите много замечательных бенефитов.


Оно кстати и есть текстовое сейчас. Только не реальное для редактированием человеком. Ну т.е. в теории конечно возможно, но на практике бред. )))

S>Пусть вас не обманывает тот факт, что вы редактируете UI мышкой, а не клавиатурой. Современный редактор текстового ЯП тоже крайне далёк от notepad — там тебе и раскраска синтаксиса, и автодополнение, и всё остальное. Если посмотреть на экран студии непредвзятым взглядом, то окажется, что редактор кода уже тоже достаточно "визуальный". Т.е. помимо чисто текста он рисует в канвас дофига всего. То, что на диске ничего этого реально нет (ну, если не считать наркомании типа Оберона), не делает язык не-языком.


Тут основной поинт был не в том что мышкой. А в том что мы по сути пользуемся DSL но при этом никто не продумывал для него синтаксис и т.п. не самые тривиальные детали.

DSL'ем я тут называю не тот формат для xml серелизации, а для именно "графический dsl".
Re[5]: Языки общего назначения не имеют смысла!
От: alex_public  
Дата: 10.04.12 17:17
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Тысячи их.

И везде одна и та же ерунда. )

S>Чуть менее, чем во всех GUI-фреймворках привязка обработчиков выполнена внутри "языка размётки". Сами обработчики традиционно отдаются в General-Purpose-язык, но это исключительно оттого, что не хочется делать "ещё один" turing-complete язык внутри разметочного.


Ну так я про то и говорю, что кругом просто "размётка". И в этом случае я невижу никакого смысла для отдельного языка под это — проще сразу генерировать в редакторе готовый код на системном языке.

А вот если бы у нас в gui dsl можно было бы задавать хотя бы минимальные действия... Весь значительная часть обработчиков замкнута самая же на себя. Т.е. зачем обращаться в мощный основной язык ради того что бы в обработчики команды меню вызвать команду "показать диалог такой-то". И таких вызовов очень много! Значительная часть обработчиков состоит из вызова одной строки — вызова функции другого gui контрола. Это всё можно было замкнуть внутри себя, сделав вызовы наружу (в системный язык) только уже для реальной функциональности. Вот на такой dsl я бы точно перешёл. Но таких gui фреймворков я не знаю вообще.

А с текущей ситуацией "просто размётки с указанием имён обработчиков" и при наличие визуального редактора у меня на такие dsl действует только бритва Оккама.
Re[19]: Языки общего назначения не имеют смысла!
От: alex_public  
Дата: 10.04.12 17:21
Оценка:
Здравствуйте, PSV100, Вы писали:

PSV>alex_public, посмотри на ДРАКОН — Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность. Это один из редчайших случаев, когда графический язык реально используется в промышленности (!), причём именно для программирования, в основном, инженерами (в инете, где-то вокруг Оберона, была инфа от тех, кто с ним реально работал в тех "космических фантазиях").


Да, отличный пример демонстрации понятия "графический dsl".

PSV>Он используется в моей личной практике, но всё "программирование" происходит на бумаге с карандашом — язык очень простой, основная фишка: направленный граф без пересекающихся линий — это реально намного лучше того, что рисовалось до него не пойми как для своих всяких схем. Люди въезжают быстро, даже те, кто далёк от программирования и всяких блок-схем, быстро можно начать обсуждать предметную область на одном языке.


Используется где-то помимо его основного назначения? Интересно.

PSV>Рекомендую.


Хы, ну только для самообразования. Не вижу где его особо можно применить на практике. В смысле у нас, а не вообще в мире. )))
Re: Use LISP, Luke!
От: b-3 Россия  
Дата: 10.04.12 17:23
Оценка: -1 :)
Здравствуйте, WolfHound, Вы писали:

WH>Вот буквально только что презенташка попалась.

WH>http://suif.stanford.edu/~jwhaley/PLDITutorial.ppt
WH>http://bddbddb.sourceforge.net/index.html
WH>56 страниц сильно оптимизированного кода на жабе (год разработки) против 17 строк на ДСЛ (год разработки компилятора).
WH>ДСЛ работал в 2 раза быстрее. Плюс на этом ДСЛ еще кучу кода, потом понаписали. Как следствие сэкономили десятилетия работы.
WH>Про то, что код на ДСЛ проще понять, поддерживать, развивать и там намного меньше багов я думаю можно даже не заикаться.

WH>А для распространённых задач ДСЛи уже будут написаны.


Один известный язык с названием из четырёх букв пытается это подтвердить.
Уже 54 года пытается.

Сам язык идеален для строительства DSL-ей. Списки, потом макросы над списками, потом макросы над макросами и так до бесконечности.

Большая программа на LISP почти со 100% вероятностью включает собственный язык программирования.

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

Спрашивается: а где же успехи LISP-программирования?
Где сотни проектов, решающих научные и бизнес-задачи, рвущие конкурентов в клочья?

А получилось так...

  Скрытый текст

Башня строилась не год и не два. Одних кирпичей для нее понадобилось тридцать пять миллионов! И для себя пришлось еще дома построить, чтобы было где отдыхать после работы, а возле домов посадить кусты и деревья, чтобы птицам было где петь.

А на горе с каждым днем все выше и выше, уступами, поднималась красавица башня; внизу широкая, кверху все уже и уже. И каждый уступ этой башни красили в разный цвет; в черный, в желтый, в красный, в зеленый, в белый, в оранжевый. Верх придумали сделать синим, чтобы был как небо, а кровлю — золотой, чтобы, как солнце, сверкала!

И вот башня почти готова. Кузнецы уже золото куют для кровли, маляры окунают кисти в ведра с синей краской. Но вдруг, откуда ни возьмись, появляется среди людей сам бог Ягве. Не понравилась ему их затея — выстроить башню до самого неба. Не захотел он, чтобы люди добрались до неба.

"Это оттого они умудрились свою башню выстроить,- подумал он,- что у них один язык и всякий человек понимает другого. Вот они и договорились!"

И наслал Ягве на землю великую бурю. Пока буря бушевала, ветер унес все слова, которые люди привыкли друг другу говорить.

Вскоре буря утихла, и люди снова принялись за работу. Они еще не знали, какая беда их постигла. Кровельщики пошли к кузнецам сказать, чтобы те скорее ковали тонкие золотые листы для кровли, а кузнецы не понимают ни слова.

И во всем городе Вавилоне люди перестали понимать друг друга.

Маляр кричит;

— Краска кончилась!

А у него получается:

— Номорпэнт!

— Ничего не понимаю! — кричит ему снизу другой. А получается

— Жэнэком пренепа!

И по всему Вавилону раздаются слова, понятные одним и непонятные Другим.

— Виндадоры!

— Маракири!

— Бобэоби!

— Дзын!

Все побросали работу, ходят как в воду опущенные и ищут: кто бы мог их понять?

И стали люди собираться кучками — кто с кем говорит одинаково, тот с тем и старсется держаться. И вместо одного народа получилось множество разных народов.

И разошлись люди в разные концы земли, каждый народ в свою сторону — строить свои города. А башня стала мало — помалу разваливаться.

Но говорят, что до сих пор в каждом городе можно найти обломки кирпичей от Вавилонской Башни. Потому что многие уносили их с собой на память о тех временах, когда на земле был мир и люди понимали друг друга.

И до сих пор на всех языках света люди рассказывают эту сказку о недостроенной Вавилонской башне.

Забанен с формулировкой "клинический дисидент".
Re[2]: Языки общего назначения не имеют смысла!
От: oldjackal Россия  
Дата: 10.04.12 18:33
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

WH>>56 страниц сильно оптимизированного кода на жабе (год разработки) против 17 строк на ДСЛ (год разработки компилятора).

WH>>ДСЛ работал в 2 раза быстрее. Плюс на этом ДСЛ еще кучу кода, потом понаписали. Как следствие сэкономили десятилетия работы.
G>Для большинства задач написание DSL не закончится к сроку завершения проекта.

Писать компиляторы и интерпретаторы намного проще чем принято думать. Это же тупая, формализованная и давно решенная задача. Мозгов не требует.

G>Для большинства задач требуется в разы меньшая квалификация, тем для разработки DSL.


Это не так.

WH>>А для распространённых задач ДСЛи уже будут написаны.

G>Когда будут? Мне вот срочно dsl для разработки веб-сайтов нужен, с кучей готовых модулей.

PHP. Серьезно.
Re[4]: Языки общего назначения не имеют смысла!
От: oldjackal Россия  
Дата: 10.04.12 18:43
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>В бизнесе чуть ли не все задачи типовые, но вот dsl для них не придумали.

G>Когда будут?

1С и тому подобные.

WH>>Один из таких типовых ДСЛ SQL. Променяешь его на прямые запросы по физической структуре БД?

G>Что-то этот типовой DSL во многих случаях превратился в полноценный ЯП. Есть даже тенденция создания DSL, который превращается в SQL.

Так он должен был быть eDSL, как Linq. А получилось наоборот.

G>DSL еще написать надо, это сложно.


Намного проще, чем хорошую библиотеку с удобным API.
Re[8]: Языки общего назначения не имеют смысла!
От: oldjackal Россия  
Дата: 10.04.12 18:45
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>У меня как раз был курс построения языков и мы там dsl рассматривали. Именно оттуда я выяснил что это сложная тема.


Если курс читают дебилы или теоретики, то и арифметика сложной темой покажется.
Re[6]: Языки общего назначения не имеют смысла!
От: oldjackal Россия  
Дата: 10.04.12 18:49
Оценка: -1
Здравствуйте, Хвост, Вы писали:


Х>вульфхунд, я с тебя пупею. дсл это же не только синтаксис, да? ещё семантика, угу? а семантику ты эту как будешь реализовывать? всё тем же объёмом кода, что и в случае с обычным подходом, или твой суперметагенератор автоматом тебе ещё и логику нагенерит? окстись. На выходе в обычном подходе ты получишь библиотеку, в подходе с дсл — собственно дсл, но разницы в результате окромя синтаксиса не будет совершенно. Я кажись очевидное же толкую, а ты всё упорото мантру свою повторяешь.


Семантика это всего лишь последовательность правил переписывания. Тупее и проще чем синтаксис в сто раз. И оптимизации всякие это не более чем правила. Вы просто совершенно не понимаете, что такое языки.
Re[2]: Языки общего назначения не имеют смысла!
От: oldjackal Россия  
Дата: 10.04.12 18:57
Оценка: +2
Здравствуйте, D. Mon, Вы писали:

DM>Слова сомнения:

DM>Следует помнить, что подход этот оправдан, когда есть множество похожих задач из одной области. Ведь вместо прямого решения задачи предлагается делать универсальный решатель задач подобного рода. Его сделать сложнее (и дело отнюдь не в парсинге), поэтому чтобы это дело окупилось, нужно решать им не одну задачу, а серию. Если же задача штучная, то смысла в таком подходе не видно, тут языки общего назначения и пригодятся. Так что совсем уж их объявлять бессмысленными не стоит.

Неверно. Подход окупается и для штучных задач. Во первых, такое решение проще в поддержке: не надо переносить логику на новые платформы и языки (а это неизбежность для долгоживущих проектов), достаточно пеписать dsl. Не надо оптимизировать логику, можно оптимизировать компилятор. Код проще понимать, в том числе и неспециалистам. И для почти любых сложных задач это прроще и быстрее чем тупое ручное кодирование.
Re[7]: Языки общего назначения не имеют смысла!
От: b-3 Россия  
Дата: 10.04.12 19:25
Оценка: +1 -1 :)
Здравствуйте, oldjackal, Вы писали:

O> Семантика это всего лишь последовательность правил переписывания. Тупее и проще чем синтаксис в сто раз.

Ну я б не согласился. Возмите квадратичное уравнение из учебника 6-го класса средней школы. Явно несложная штука, дети справляются.
Запишите последовательность правил переписывания при решении уравнения. Можно в псевдокоде.

В рабочий день уложитесь, с семантикой предметной области-то? А ведь если дошло до разработки DSL, предметная область как-никак сложнее, чем учебник шестиклассника. После этого откройте формальную грамматику парсера. Например Java. Например в форме Бекуса-Науэра
Что-то мне подсказывает, что разница "в разы тупее и проще" там будет совсем в другую сторону!
Забанен с формулировкой "клинический дисидент".
Re[8]: Языки общего назначения не имеют смысла!
От: oldjackal Россия  
Дата: 10.04.12 20:03
Оценка:
Здравствуйте, b-3, Вы писали:

b-3>Ну я б не согласился. Возмите квадратичное уравнение из учебника 6-го класса средней школы. Явно несложная штука, дети справляются.

b-3>Запишите последовательность правил переписывания при решении уравнения. Можно в псевдокоде.

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

b-3>В рабочий день уложитесь, с семантикой предметной области-то? А ведь если дошло до разработки DSL, предметная область как-никак сложнее, чем учебник шестиклассника. После этого откройте формальную грамматику парсера. Например Java. Например в форме Бекуса-Науэра


Не понял, вы вообще о чем?
Re[3]: Языки общего назначения не имеют смысла!
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.04.12 20:04
Оценка:
Здравствуйте, oldjackal, Вы писали:

O>Писать компиляторы и интерпретаторы намного проще чем принято думать. Это же тупая, формализованная и давно решенная задача. Мозгов не требует.


G>>Для большинства задач требуется в разы меньшая квалификация, тем для разработки DSL.

O> Это не так.

Покажи на примере чтоли?


WH>>>А для распространённых задач ДСЛи уже будут написаны.

G>>Когда будут? Мне вот срочно dsl для разработки веб-сайтов нужен, с кучей готовых модулей.
O> PHP. Серьезно.
PHP — язык общего назначения.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.