Re: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 23.01.13 22:46
Оценка: 36 (3) +3 -2 :)))
Здравствуйте, LaPerouse, Вы писали:

LP>В продолжение темы Языки общего назначения не имеют смысла
Автор: WolfHound
Дата: 07.04.12


LP>Wolf Hound утверждает, что разработка DSL для некоторой задачи и последующее ее решение на получившемся языке почти всегда более оправдано, нежели использование языка общего назначения.


Боюсь, если бы Wolf Hound столкнулся с решенной таким образом задачей, которая внезапно упала бы ему на поддержку (естественно, настоящим программистам DSLя было бы впадлу писать по своему дсл учебник — не быстро это как-то), и ему пришлось бы ее допиливать и развивать — Wolf Hound бы покрыл авторов такой оправданности нецензурными матюгами.

Но я уверен, при переписывании это не остановило бы его от оправданного создания собственного DSL. Под задачу. Без учебника — ибо настоящим программистам учебники по языку не нужны .
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 11.03.13 21:56
Оценка: 78 (5) +1 :))
G>И закончится тем, что разрабы будут писать на говнодсл с кучей интересных "багофич". И новонанятые разработчики, глядя на этот ужас, будут через одного увольняться на второй день после найма. Потому, что изучение этого недоязыка, сделанного кучкой доморощенных гениев, лично им никакого профита не принесет — следующий работодатель не оценит.

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

Началось все с того, что они честно попытались развивать все на LISP. Однако, Грэхем не смог донести до команды прелесть своего ДСЛ, и в результате легко вошел в конфликт с командой, и обозвал их идиотами. Эти самородки — они так, гхм, нетерпеливы, и резки, да. Особенно когда становятся успешными мультимиллионерами.

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

Менеджер в непростой ситуации. Он понимает, что Грехэму, который внезапно мультимиллионер, в сущности уже на все насрать. И единственный человек, которому что-то надо — это он, менеджер (этим всегда заканчивается). менеджер попросил разработчиков не ссорится, и прикинуть план поэтапного переписывания этого метаговнокода, чтобы его можно было размазать, потому, что другие планы просто не работают.

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

Вот так оно, скорее всего, было. Безрадостная картина. И те манеры сторонников ДСЛ, которые мы наблюдаем сейчас на РСДН, не дают никаких поводов для оптимизма. Видите-ли, код пишется не для компьютера. Он пишется в первую очередь для другого человека. И разработка — это в первую очередь общение человека с человеком, а не уникомов с компьютерами.
Re[2]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 21.12.12 17:03
Оценка: +3 :))) :)
Я писал:

K>Просто нужна правильная пропаганда.


Ещё немножко о необходимости пропаганды.

Я зареган на RSDN относительно недавно, но посещал этот ресурс уже давно (в режиме ридонли). Так вот, я помню времена, когда при упоминании немерлистами слова "макрос" на них тут же накидывались: "макросы — зло!"
Время шло, немерлисты продолжали упоминать всуе свои макросы, и местная публика постепенно привыкла. Большинство, по моему мнению, по-прежнему не понимают, что именно представляют из себя гигиенические макросы, но уже смирились с их присутствием где-то там, в параллельном мире. И, даже не понимая их, многие осторожно признают их полезность
Теперь мы видим аналогичные нападки на любое упоминание DSL. WolfHound растревожил улей.
Нужно просто продолжать часто упоминать как макросы, так и DSL, причём всегда с понятными примерами, и серые массы программерства свыкнутся с этим, перестанут кидаться как на красную тряпку.
Re[14]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.01.13 21:32
Оценка: 93 (3) +3
Здравствуйте, Ziaw, Вы писали:

Z>Regexp, SQL, format strings — это примеры DSL которыми мы все пользуемся постоянно.


Форматная строка на DSL, извини, не тянет. Что же касается остального — SQL обычно специально указывают в требованиях вакансии, что как бы намекает (при этом по настоящему хорошо его знает 1% от считающих так). А регексы это вообще что то с чем то — одно только количество вопросов форуме типа "подскажите регекс для ..." уже о многом говорит. Лично мне до сих пор иногда приходится вдумчиво вчитываться в доку по регекпам, и я уверен, что библиотека без этой птичей псевдографики была бы проще и удобнее.

Z>Причем для SQL и регэкспов она вообще за гранью реальности.


Можешь в янусе посмотреть — там все запросы к БД без использования QC написаны. Более того, SQL, который там был раньше — мутнее и сложнее. Особенно весело с запросом, обновляющим агрегаты — трехстраничное сиквельное чудовище превратилось в 60 хорошо читаемых строк.
А все потому что проектировщики SQL допустили ряд грубых ошибок в его дизайне. И это, заметь, люди, которые неплохо представляли то, чем они занимаются. Что же получится из под пера кучи ньюбов, пусть и вооруженных прекрасным инструментом для создания парсеров и анализаторов — я представляю себе с содроганием.

Z>Ты не встречал проблем, когда создана кривая библиотека, используемая повсеместно, а создатель уволился? И единственный выход, переписать все?


Масштаб проблем несколько разный. Библиотеку я в полуавтоматическом режиме почистить могу, где то вставляя временные подпорки (не заморачиваясь никакими языкостроительными тулами). А что делать, когда кастомный DSL надо сильно переделать или вообще выкинуть?
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 12.03.13 21:22
Оценка: +4 :)
Здравствуйте, Ziaw, Вы писали:

G>>Обычная логика говорит мне, что если бы этот код состоял из конструкций самоделкина, в котором я ищу ошибку, то доверять в нем нельзя ни единому слову. Например, LessThan может на деле в ряде ситуаций означать LesserOrEqual, или того хуже.


Z>Итак, проблема все таки не в DSL, а в самоделкине? Так с этим я и не спорил.


Не-не, ты не до конца понимаешь. Проблема в языке, написанном самоделкиным. А не в самом самоделкине.

Дело в том, что для общеизвестных языков есть:
1) Какой-никакой стандарт языка. Де-факто, либо публичный, либо таки стандарт.
2) Следующая из этого — стабильность языка. Ты знаешь, что пока ты его изучаешь — никакой самоделкин, проявляя свою свободу воли, его просто так не поменяет, так, что у тебя нахрен все отвалится. То есть, что твои инвестиции в образование (а к изучению нового языка следует относится именно так) — имеют небольшой риск, и прибыльны (то есть, знания языка имеют некоторую ценность за пределами одной системы и компании).
3) Я сказал про инвестиции не зря. Потерянные деньги можно обратно заработать или отыграть. А потраченное время вернуть нельзя. Время — самая ценная валюта, глупо тратить его на ерунду.
4) Следующая из (2) — наличие учебников.
5) Следующее из (2) — надежда на определенное качество платформы, она закрыта тестами.
6) И the last but not least — наличие широкого сообщества в сети и в реальной жизни, в котором ты не только можешь задать вопрос, но и получить на него содержательный ответ.

Много это, или мало? А неважно.

Главное, что всего этого ты лишен, контактируя с мега-DSL за авторством самоделкина.

G>>Чтобы ты прочувствовал, насколько это много — скажи мне, что тебе говорит вот этот код:

G>>Нет, это вовсе не язык непонятный. И программа вполне хорошо написана. Единственная проблема в том, что ты (скорее всего) читать его не умеешь — не надо путать это собственным невладением языком. Однако, эта проблема довольно просто решается — по J все-таки есть "учебники".

Z>Да, даже зная синтаксис я тут скорее всего ничего не пойму. Надо понимать, как такие программы пишутся, какие приемы используются. Знание синтаксиса не приблизит меня к пониманию ни на йоту. Вывод какой?


Ты себя, право, недооцениваешь. Ты способен разобраться в этом коде за 20 минут. Ставлю две кружки пива к одной.
http://dr-klm.livejournal.com/42312.html

J есть наследник APL (который был с греческими символами, не ложащимися на ASCII-клавиатуру), и это так называемый комбинаторный язык. Все очень просто, просто очень необычно. Проверишь? Я не обманываю.

Z>>>Несмотря на синтаксис C#, это обычный DSL. Чтобы его читать важнее знать домены (измерение времени и тестирование), чем ломать голову над вопросами неоднозначности синтаксиса:


G>>Неужели? А вот это самый обычный JavaScript, а конкретнее — вполне обычная библиотека should.js. Выглядит куда приличнее, чем "обычный DSL". Никаких таких "доменов" знать не надо — на, полюбопытствуй.


Z>Как это не надо? Я сходу не понимаю, что делает этот код, хотя чтение JS для меня не является проблемой. Надо знать область применения этой штуки и термины принятые там, то есть домен. Предположив, что это тестирование, я могу начать догадываться о смысле кода. И да, это DSL, вполне обычный, а не какой-то особо приличный.


Область ровно та же, что у кода, который ты мне привел в начале . И это, конечно, никакой не DSL. Это один из самых популярных assert-фреймворков для JS. Гражданский JS, выглядящий только на первый взгляд необычно. Любой человек, знающий JS, способен написать его исходник, глядя на пример кода. Т.е. понять, как он устроен внутри.

А все почему? Потому, что это обычный JS. Никакой не DSL.
Re[36]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 16.03.13 18:11
Оценка: +1 :))) :)
M>>Были бы хоть какие-то факты, а не только одни и те же сказки уже который год
WH>Фактов Сказок тонны. Но они тупо игнорируются.

Исправил твою фразу. Не благодари.

WH>Вот макросы, работающие с типами:

WH>https://github.com/rsdn/nemerle/blob/0771b8c91b7e2e98402cd6f0ce14b57d392fbb47/macros/DesignPatterns.n
WH>https://github.com/rsdn/nemerle/blob/0771b8c91b7e2e98402cd6f0ce14b57d392fbb47/macros/core.n#L444
WH>И их там много если поискать.

Да-да, главное гордо скинуть ссылку на непонятно что. Какой-то код, да. Практически полностью отсутсвуют комментарии, что с этим кодом делать, известно только создателю этого кода. Но это, видимо, правильный крутой инструмент, ага Тот самый, про который вещают годами, но даже фанатам проекта неизвестно его будущее (на вопрос «есть ли оно и когда оно будет» авторы гордо отвечают «идите в жопу»). Ну и т.д. и т.п., повторяться не буду.

То есть мало кому нужный, с непонятным будущим, зависящим от команды, которая неспособна ничего про это будущее (кроме старых сказок) расскахать, с интеграцией в полтора IDE инструмент — это правильный инструмент? Ну-ну.


dmitriid.comGitHubLinkedIn
А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: LaPerouse  
Дата: 21.12.12 10:42
Оценка: 16 (3) +1
В продолжение темы Языки общего назначения не имеют смысла
Автор: WolfHound
Дата: 07.04.12


Wolf Hound утверждает, что разработка DSL для некоторой задачи и последующее ее решение на получившемся языке почти всегда более оправдано, нежели использование языка общего назначения. В качестве примера он приводит программу, текст которой на языке общего назначения (Java) занимает 56 листов, а на "DSL" — 17 строк. Ссылки — ниже, откройте и просмотрите хотя бы начало:
http://suif.stanford.edu/~jwhaley/PLDITutorial.ppt
http://bddbddb.sourceforge.net/index.html

Секрет прост — java-программу переписали на принципиально другом языке программирования (Datalog) с совершенной иной парадигмой и вычислительной семантикой. Разница между java и Datalog-ом во много раз превосходит разницу между явой-же и к примеру, хаскелем. Да что там говорить — с точки зрения Datalog, языка сверхвысокого уровня, haskell и java — примерно одно и то же. Вот откуда растут ноги ошеломляющей разницы между 56 страницами и 17 строками.

Но:
1. Возможность подобного радикального сокращения существует только для задач, которые изначально плохо ложатся на выбранный императивный (объектно-ориентированный или функциональный) язык общего назначения. Но и задач, в которых оправдано использование декларативного языка (такого, как Datalog), совсем немного. По правде говоря, в практике обычного программиста их почти нет. Таким образом выгоды от использования декларативных dsl-ей, мягко говоря, преувеличены. Их просто негде применить. Неудивительно, что сторонники DSL "не поняли" код, предложенный AndrewVK в качестве примера для демонстрации мощи DSL-я. А секрет прост — Андрей предложил чисто императивный код, который не перепишешь на том же даталоге.
2. Спрашивается, при чем же здесь собственно сам DSL? Эдак ведь и тот же хаскель можно считать DSL-ем, да и вообще любой язык, отличный от языка реализации.
3. Пикантность ситуации в том, что DSL-и таки повсеместно используются в индустрии. Та же объектно-ориентированная модель предметной области — пример DSL-я (а точнее, его ядра), массово используемого на практике. И в приведенном Андреем коде уже используется DSL, составленный из модели инвентарных карточек и структур языка ОН для манипулирования ею. Модель предметной области может быть легко сгенерирована из UML-подобного представления. Я в последнее время, к примеру, описываю модели исключительно на EMF.
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: hardcase Пират http://nemerle.org
Дата: 31.12.12 16:45
Оценка: 10 (1) +3
Здравствуйте, AndrewVK, Вы писали:

AVK>Отличается. Одно дело разобраться в библиотеке, и совсем другое — разобраться вновом языке, особенно если это не как бы DSL типа флюента и не простенький сахарок типа линковского QC, а полноценные специализированные ЯП типа сиквела или упоминавшегося тут дейталога.


Ну ты все-таки соизмеряй масштабы примеров. Если предметная область оказалось настолько суровой, что потребовалось наколбасить крутой DSL уровня SQL, то и библиотека классов с аналогичным функционалом должна быть некислого размера.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 31.12.12 17:59
Оценка: 5 (1) +2 :)
Здравствуйте, AndrewVK, Вы писали:

AVK>Отличается. Одно дело разобраться в библиотеке, и совсем другое — разобраться вновом языке, особенно если это не как бы DSL типа флюента и не простенький сахарок типа линковского QC, а полноценные специализированные ЯП типа сиквела или упоминавшегося тут дейталога.


Чтобы разобраться в DSL надо разобраться в предметной области. Это придется делать в любом случае. Зато потом на SQL ты будешь легко писать каскадные джойны, а на уровне API дальше быстрого поиска по индексу дело не пойдет, слишком сложный API будет, не осилит народ.

То же самое и Datalog, ты все равно будешь программировать в терминах предикатов, правил и атомов. Только выглядеть это в коде будет китайской грамотой вперемешку с низкоуровневыми вызовами всякой ерунды типа indexLookup.

Думаешь WPF был бы так популярен, если бы вместо разметки пришлось писать на C#? Даже с учетом генерации кода графическим дизайнером. Продвинутые WPFщики дизайнер юзают редко (он больше нужен как костыль для новичков), а пишут прямо на XAML, хотя он далеко не образец удобного DSL.

Все примеры с DSL которые я вижу достаточно документированы и осваиваются быстрее чем аналогичный API, если у тебя есть контрпримеры, давай их.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 13.03.13 02:56
Оценка: 1 (1) +1 :))
Здравствуйте, Gaperton, Вы писали:

G>Метакод — он такой. Он дает "избранным" очень много власти. Слишком. И это очень нехорошо и опасно, когда такая власть оказывается в руках человека с ментальностью ребенка.


Так проблема в том, что у тебя отбирают власть?
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Klikujiskaaan КНДР  
Дата: 02.01.13 09:37
Оценка: +4
Здравствуйте, koodeer, Вы писали:

K>Дело в том, что в реальной практике приходится очень много писать тонны копипасты, о чём писал WolfHound. Тот же пример с INotifyPropertyChanged. Макросы позволяют избежать этого, избавляют от рутины.

K>Практически все виденные мною примеры простых макросов понятны без всякой документации, при условии, что я уже знаком с тем, что этот макрос заменяет (пример: замена assert'а макросом NotNull). Все опробованные мною примеры больших DSL: SQL, LINQ — имеют хорошую документацию, и опять же полностью понятны.
K>На этом основании я смотрю на развитие dsl-строения с оптимизмом.

Ну называть линк большим DSL — это ты канеш разогнался как тут ужо говорили, линк — стандартизирован, ровно как и сикуль. Со стандартизированными дслями — нет проблем; проблемы бывают, когда он не стандартизирован и писал его Вася, который уволился пол года назад, и тогда начинаются проблемы в стиле: что же Вася нахреначил-то, а это тот еще ад и содомия, сталкивался с этим на предыдущей работе.
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 02.01.13 11:51
Оценка: +4
Здравствуйте, Ziaw, Вы писали:

Z>Когда ты читаешь код a.Insert(b) и insert b into a у тебя примерно одинаково информации, для понимания того, что происходит. Но в первом случае тебе надо знать соглашения, чтобы понять, что происходит, а во втором не нужно.


Наоборот: в первом случае ничего не надо знать, т.к. это стандартный синтаксис вызова метода. В крайнем случае можно Ctrl+Click по имени метода и попадаем в его определение. А во втором случае — вообще непонятно кто это писал, как оно работает, и куда надо идти чтобы найти концы. То, что это выглядит как осмысленная фраза на естественном языке, не даёт никаких преимуществ, скорее наоборот, т.к.:

1. Может быть, там какой-нибудь бред в духе #define true false в реализации, переворачивающий весь этот "естественный язык" с ног на голову.
2. Я же не могу, прочитав эту естественную и возрадовавшись, начать писать вообще весь код в свободном стиле: "store sum of a and b to c".
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 17:24
Оценка: -2 :))
Здравствуйте, AndrewVK, Вы писали:

M>>У нас на работе используется три DSLя.

AVK>Бесполезно (я все ждал когда спор перейдет в эту плоскость).
К которым как мы выяснили он никакого отношения не имеет.

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

Те ты намеренно распространяешь заведомо ложные сведения о том, что в случае с ДСЛ его нельзя немного подпилить?
С какой целью?

AVK>Практики же, как правило, вообще ни одного промышленно применяющегося DSL не создали.

Побольше чем ты. Это уж точно.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.01.13 14:03
Оценка: +3 -1
Здравствуйте, _DAle_, Вы писали:

_DA>Ок, я тут нашел в репозитории старый код на джаве и тот вариант, на который его изначально переписали. Конечно, это далеко не одна конструкция, но там кто-то просил большой пример Это практически код некоторого очень простого модуля в системе. На практике преимущество DSL будет куда больше.


Ну, если честно, то, на мой взгляд, объем и сложность сопоставимы, особенно если джавовский вариант подрихтовать на предмет удобных инициализаторов, дабы избежать ненужных локальных переменных.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 26.03.13 15:10
Оценка: +1 -1 :))
Здравствуйте, DarkGray, Вы писали:

Да, с основами C# вроде бы несложно. Если не лезть в LINQ, например, бо там ни одно Err-DD не поможет.
Ну и с таким языком, как плюсы, этот способ не прокатит, ес-но. ))

============
Далее сугубо ИМХО и наблюдения.

Вменяемая библиотека — это самодокументируемая штука. Браузер АПИ (компонентов) дает неплохое представление, если наружу торчат адекватные идентификаторы + очевидные типизированные (обязательно!) зависимости. Для старта работы с такими либами действительно достаточно несложных примеров и далее можно двигаться постепенно, каждый раз генерируя пользу, бо достаточно изучать ровно те аспекты, либы которые нужны в реальной текущей работе.

В то же время с синтаксисом языка всё малость сложнее, его надо знать практически ВЕСЬ, чтобы хоть что-то полезное делать. В этом соль. Изучать язык постепенно можно, но что-то полезное делать нельзя до более-менее хорошего изучения. Увы. Для сравнения, на изучение синтаксиса современного языка до уровня, достаточного до писанины чего-то полезного я бы дал неделю минимум. И не врите мне тут про оценку в единицы часов, если речь о написании чего-то полезного, бо это как раз время "втыкания" в библиотеку, а не в язык. А на языке за эту неделю изучения (а то и больше для некоторых языков) надо очень много пописать и попробовать при этом всякого в нём, чтобы "прочувствовать" его силы и слабости. Т.е. это совсем другой уровень и трудоемкость освоения, чем требуется для либы. ИМХО, потому что язык — это самый нижний базис для итогового комбинаторного сочетания сущностей сколь угодно высокого уровня, а либа сама тебя ограничивает в сценариях её применения и там редко выше 2-3-х уровней зависимостей. Т.е. тьфу, несмотря на обилие идентификаторов и функционала.

Далее получаем такое наблюдение, что кол-во библиотек, с которыми работал в своей практике, запросто может стремиться к бесконечности. Они легко как приходят, так и уходят, включая целые фреймворки, типа дотнета, а кол-во языков — вовсе нет. Языков в тебя поместится дай бог пару десятков, если брать на том самом "хорошем уровне", а то и меньше. И подобная твоя ёмкость вовсе не резиновая, ей надо аккуратно распоряжаться. Выучишь и будешь плотно работать с новыми языками, обязательно вылетят за эти пару десятков старые. Я когда-то довольно много писал на Форте, но фиг сейчас напишу с лёёту чё-нить осмысленное. Опять подавай ту самую неделю... Ну, может чуть меньше, на старые дрожжи, но всё равно. С либами же совсем другая история.

Т.е. у меня такое ощущение, что когда речь о языках, то требуются совсем другие затраты ресурсов памяти и внимания. Ну и опять же — переключение м/у языками в процессе работы, это не то, что переключение м/у библиотеками. В день я могу переключиться через десяток библиотек не напрягаясь, где информационная ёмкость каждой из них намного больше любого языка... но переключиться через десяток языков в день — увы, утомительно.
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.01.13 10:03
Оценка: 147 (1) +2
Здравствуйте, AndrewVK, Вы писали:

AVK>Конечно же нет. Аналогом сиквела был бы подход, применявшийся Саном в джаве, когда выпускается стандартный набор контрактов, а потом под него несколько производителей выпускают свои реализации.

AVK>А в дотнете мы наблюдаем прямо противоположное — даже сам МС, выпуская две библиотеки, скажем UI, сделал абсолютно непохожие контракты у WPF и WinForms. Аналогом в случае СУБД были бы абсолютно непохожие языки запросов у каждого независимого производителя.
Так и было. Базы данных существуют значительно дольше, чем SQL. Просто за истекшее время он выдавил с рынка почти всех. И несмотря на это, NoSQL сейчас лезут как грибы после дождя.

AVK>Ага, ну то есть все сведется к тому, что DSL будет стандартным для отрасли в целом, типа какого нибудь UBL, и каждый будет свою реализацию при необходимости для него делать. Только что то мне подсказывает, что апологеты DSL в этом топике совсем не это имеют в виду.

Они имеют в виду стандартную закономерность: чтобы ваша сборная выиграла чемпионат, нужно, чтобы десять лет в футбол играли в каждом дворе. Тупо вбухать денег в покупку и тренировку 11 человек даёт не тот же результат.
Так и с DSL — для того, чтобы были единицы мегаудачных языков, должны создаваться (и умирать) тысячи кандидатов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.13 14:32
Оценка: 46 (2) +1
Здравствуйте, Mamut, Вы писали:

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


M>Какой ценой?


Ценой освобождения от предрассудков.

M>За счет чего?


За счет выбрасывания из кода болерплэйта и ограничения его решаемой задачей. Это позволяет отказаться от борьбы с языком реализации и не повторять себя.

M>С использованием каких инструментов?


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

Но тот же Немерл или Лисп вполне приемлемые (хотя и далекие от идеала) инструменты. Надеюсь, что Н2 будет куда ближе к идеалу. По крайней мере постараемся.

M>Где и когда эти возможности будут и будут ли они вообще?


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

M>Какова стоимость поддержки этих DSLей, написанный безымянными гениями?


Она уже в немерле не высокая. Вот возможности ограниченные. Только внутренние ДСЛ и только при соблюдении немерловых ограничений на расширение синтаксиса.

M>Вы же упорно избегаете этих вопросов, продолжая заливать уже опостылевшие сказки про то, что DSL — это мегакруто, мегапросто, мегадоступно, мега... мега... мега...


Никто ничего не избегает. Говорить о деталях Н2 мы пока не можем. Про немерл можно говорить все что угодно. Собственно пока что мы его для работы и используем. Так большая часть практического опыта как раз из немерла.

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

M>Пока что реальность никакой мега не показывает (за исключением исчезающе малого количества DSLей, с каждым из которых есть свои дополнительные проблемы).


Проблемы есть везде и всегда. Но я честно скажу, что написать код что у нас есть вручную практически невозможнго. По крайней мере теми силами что есть у нас (3 человека). А уж о серьезных проектных изменениях, в случае рукописного кода, можно было бы забыть раз и на всегда. У нас же за пол года таких изменений минимум с десяток. Вот только что закончили грандиозный пересмотр всего проекта. При этом синтаксически ничего не изменилось.

M>Нет, мы указываем на очевидные пробелы в ваших сказках.


Сказки это только для тебя. Для нас это уже давно быль.

Что до проблем, то я уже устал повторять. Они были всегда, есть и будут вечно. Но решать проблемы стало куда проще.

ДСЛ и МП — это ни разу не панацеи. Есть задачи которые вообще бессмысленно решать с их помощью (калькулятор, приведенный тут как-то, например). Но есть проблемы которые просто глупо решать без ДСЛ-ей и/или МП.

Умные люди применяют ДСЛ-и и сейчас. Вот только возможности поддержки этих ДСЛ-ей крайне ограничены, а затраты времени на их создание велико.

Мы же пытаемся изменить это. Снижение сложности создания и поддержки ДСЛ с уровня "хардкор" до уровня "средний пользователь, не дурак" вполне возможно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.01.13 16:14
Оценка: 34 (1) :))
Здравствуйте, Mamut, Вы писали:

M>У нас на работе используется три DSLя.


Бесполезно (я все ждал когда спор перейдет в эту плоскость). AVK вон последнее время большую часть времени занят написанием DSL, а все теоретик. Практики же, как правило, вообще ни одного промышленно применяющегося DSL не создали.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.13 14:25
Оценка: 15 (1) +1 :)
Здравствуйте, Ziaw, Вы писали:

I>>Вот реальный пример, надо без документации сказать в чем разница между "b render a" , "a render b" и "render a b"

I>>Валяй, полагаю, раз это дсл, то для тебя не составит труда рассказать в чем мулька.

Z>Давай сравним с b.render(a), a.render(b) и Render.render(a, b). Проще стало? Нету разницы, не надо демонизировать DSL.


Ты чего сказать хотел, что отличия только в синтаксисе ? Если так, то ДСЛ не нужен.

I>>Синтаксис это ерунда. В библиотеку очень легко заглянуть, а дсл это черный ящик и собственно черный ящик большей частью непригоден в софтостроении.


Z>Снова уперлись в недостатки тулзов. Ок, принято.


В случае с SQL или регексов этот недостаток так и не был преодолен
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Aikin Беларусь kavaleu.ru
Дата: 22.12.12 06:48
Оценка: 12 (1) +2
Здравствуйте, LaPerouse, Вы писали:

D>>Да хрен его знает, товарищ начальник, а почему нет? Разработчики и юзеры скалы — называют. ИМХО тут спор терминологический уже.

LP>Подобные вещи всегда называли сахаром. Но если называть отдельные структуры языка общего назначения дсл-ем, действительно, что же тогда dsl?
Вы забываете про другую букву в абривиатуре DSL, а именно D. Есть домен -- можно создать ДСЛ. Нет домена -- будет синтаксический сахар, ИХМО.
Я со скалой практически не знаком, но, ИХМО, в том что показывал dimgel домена нет.
Если мы обратимся к linq, то там домен есть -- наборы данных. Поэтому Linq -- DSL.

Еще хороший пример ДСЛ внутри языка общего назначения -- библиотека numpy для питона. Dомен -- операции над матрицами, списками. L у него страшный, с непривычки. Но задачу он свою решает великолепно.
Вот отсюда
Автор: Manticore
Дата: 14.09.12
:
hsv_map = np.arange(2000 * 3000 * 3).reshape(2000, 3000, 3)

h = hsv_map[:,:,0]
s = hsv_map[:,:,1]
v = hsv_map[:,:,2]

c = (h < 15) | ((h > 165) & (h < 195))
a = 255 * (v >= 245)
b = 255 * ((v < 245) & (v > 90) & (s > 20) & ((s < 90) & c))

hsv_map[:,:,0] = a
hsv_map[:,:,1] = b

И цитата оттуда же:

У меня этот код выполняется за 0.6 секунд вместо 40 для оригинального кода. Если сделать тип hsv_map реалистичным (uint8, если я правильно понял значение букв h, s, v) вместо int64, каким он выставляется по дефолту, то время уменьшается до 0.34 сек. Можно ускорить еще больше с помощью scipy.weave, но это уже почти С

Ну а если кто хочет еще посчитать строчки или, что лучше, сравнить сложность, то сравнивайте с решением в лоб
Автор: catBasilio
Дата: 14.09.12


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 26.03.13 10:57
Оценка: 6 (1) +1 :)
V>Знать бы с какого начать...

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

Для примера, C#-компилятор в этом хуже.
hz kak pisat

//error: A namespace cannot directly contain members such as fields or methods

т.е. надо догадаться, что ожидаются термы namespace, class и т.д.

дальше чуть лучше
class hz kak pisat

//(1,10,1,13): error CS1514: { expected


class hz {kak pisat

//(1,20,1,21): error CS1002: ; expected


class hz {kak pisat;

//(1,21,1,22): error CS1513: } expected


синтаксические ошибки закончились, дальше надо разбираться со смыслом
class hz {kak pisat;}

//(1,12,1,15): error CS0246: The type or namespace name 'kak' could not be found (are you missing a using directive or an assembly reference?)


ps
вообще, есть такой забавный метод написания кода, как error driven. С помощью этого метода, при хороших утилитах можно писать код, даже не зная синтаксиса и семантики, а изучая их на ходу на основе текста ошибок.
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.13 11:28
Оценка: 5 (1) +1 :)
Здравствуйте, Ziaw, Вы писали:

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


M>>Я об этом и говорю. Никакого «обычно» не будет. Он будет документирован не лучше и не хуже, чем любой другой код. Хотя, учитывая, что это будет domain-specific language, то будет документирован еще хуже, так как в условиях «о, у нас домен, давай колбасить DSL» никто не будет выписывать весь синтаксис, семантику и т.п.


Z>Непонятно о чем мы спорим тогда. Люди часто не документируют код. При этом иногда получается грамотный и читабельный код, который легко поддерживать, а иногда макаронный и нечитабельный. Это ортогонально тому, DSL они пишут или библиотеку.


Z>Когда ты читаешь код a.Insert(b) и insert b into a у тебя примерно одинаково информации, для понимания того, что происходит. Но в первом случае тебе надо знать соглашения, чтобы понять, что происходит, а во втором не нужно.


Вот реальный пример, надо без документации сказать в чем разница между "b render a" , "a render b" и "render a b"
Валяй, полагаю, раз это дсл, то для тебя не составит труда рассказать в чем мулька.

Z>DSL от аналогичной библиотеки отличается только тем, что у них разные синтаксисы. Но тот или другой все равно придется учить. И в каких-то предметных областях DSL получается проще чем родной синтаксис языка.


Синтаксис это ерунда. В библиотеку очень легко заглянуть, а дсл это черный ящик и собственно черный ящик большей частью непригоден в софтостроении.
Re[13]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 07.03.13 07:17
Оценка: 1 (1) +1 :)
Здравствуйте, VladD2, Вы писали:

T>>Как то так выходит, что в яхе c тобой не согласны http://smallbusiness.yahoo.com/


VD>Где и с чем не согласны? По подробнее, плиз. А то случайным образом данная ссылка как-то не сильно смахивает на аргумент.


ViaWeb -> Yahoo! Stores -> Yahoo! Smallbusiness Сдох только лисп, бизнес остался.
The animals went in two by two, hurrah, hurrah...
Re: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: elmal  
Дата: 22.12.12 07:48
Оценка: +3
Здравствуйте, LaPerouse, Вы писали:

LP>В продолжение темы Языки общего назначения не имеют смысла
Автор: WolfHound
Дата: 07.04.12

Вообще говоря — DSL это не обязательно другой язык. DSL во многих случаях представляет собой просто набор либ, упрощающие рутинные операции. jQuery, например — это вполне DSL для своих задач. Или arrowlets — тоже DSL для своих задач (чтоб не писать кучу подписчиков и отписчиков от событий). Когда ты решаешь более высокоуровневую объемную задачу, в которой многие операции повторяются изо дня в день — ты тоже напишешь свой DSL. Например для генерации формочек — ты описываешь какие элементы будут на формочке, как их биндить, сделаешь синтаксис максимально компактным читаемым и поддерживаемым, и будет тебе DSL. Который можно реализовать средствами своего языка программирования, а декларативность будет достигаться использованием мапок. SQL это тоже низкоуровневый DSL. Но когда делаешь более-менее универсальный поиск, SQLем обойтись сложно, хочется писать меньше кода и будет еще один DSL, который будет строить запросы.
А язык общего назначения — это if else for goto и ничего более. Минимальный набор операторов с помощью которых можно реализовать что требуется. Вот только оставаться в рамках только операторов — это большая глупость, и если тебе не платят за количество строк кода, ты так поступать не будешь и будешь городить что то, упрощающее тебе жизнь и позволяющее писать более компактно и понятно. Даже списки — это уже по существу DSL, хоть и вырожденный. Ты компактно описываешь все, что ты хочешь от области памяти, и пишешь код более компактно, а не каждый раз проверяешь выход за границу массива и тому подобное. А всякие JMockit — это вполне полноценный DSL, хоть и сделанный средствами языка и остающийся в рамках языка.
Re[4]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.12.12 12:45
Оценка: +3
Здравствуйте, Ziaw, Вы писали:

Z>DSL в этом плане ничем не отличается от библиотек которые не входят в поставку фреймворка.


Отличается. Одно дело разобраться в библиотеке, и совсем другое — разобраться вновом языке, особенно если это не как бы DSL типа флюента и не простенький сахарок типа линковского QC, а полноценные специализированные ЯП типа сиквела или упоминавшегося тут дейталога.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: minorlogic Украина  
Дата: 04.01.13 10:52
Оценка: +2 :)
Здравствуйте, WolfHound, Вы писали:

WH>Всё по тому, что через интерфейс библиотеки всегда просачивается реализация. А через ДСЛ нет.


Т.е. разработчик скорее болен чем то уникальным . если интерфейс назвать магическим DSL то он может отделить реализацию , а на уровне интерфейса к библиотеке нет ? И по такому анекдотичному примеру ты строишь предположеничя ?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 04.01.13 10:56
Оценка: +3
D>>А какое отношение ACID имеет к ds*L*?
WH>Наипрямейшие. SQL это обеспечивает. При этом тому, кто пишет запросы не нужно о нем думать.

Каким образом SQL обеспечивает ACID, можно узнать? А то в MySQL есть движок без гарантий ACID, но в нем есть SQL.


dmitriid.comGitHubLinkedIn
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 12:28
Оценка: -3
Здравствуйте, Mamut, Вы писали:

M>Каким образом SQL обеспечивает ACID, можно узнать? А то в MySQL есть движок без гарантий ACID, но в нем есть SQL.

Выключи дурака. Не смешно уже.
Сам по себе язык естественно ничего не обеспечивает. Обеспечивает его реализация. И там где она это обеспечивает про это вообще думать не надо.
Но при работе с файлом руками тебе каждый раз придется про это думать.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 04.01.13 16:25
Оценка: +3
Здравствуйте, _DAle_, Вы писали:

_DA>Давайте я покажу пример чуть сложнее из нашего проекта. Задание бизнес-логики, объявление функционала в виде композиции других функционалов.

_DA>java:
_DA>
_DA>LP entryPrice = addJProp(null, "entryPrice", "Цена входная", and(false), price, 1, 3, quantity, 1, 2, 3);
_DA>


_DA>DSL:

_DA>
_DA>entryPrice 'Цена входная' (invoice, stock, sku) = price(invoice, sku) IF quantity(invoice, stock, sku);
_DA>


1. Букв меньше не стало.
2. Понятность? Да куда там! Читать просто как текст — понятнее, но если приспичит исправить — сразу куча вопросов. Понятнее было бы тупо завернуть длинный список параметров в пару иерархий ParamObject, типа как-то так:

entryPrice = addJProp('Цена входная', new Price(...), new IfQuantity(...))


Вывод: низачот. Впрочем, я могу чего-то недопонимать (в частности, параметр "entryPrice" в первом примере указывает на наличие доп. сложности, мною не учтённой: динамика/рефлексия/хз что).
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.03.13 12:48
Оценка: :)))
Здравствуйте, Tanker, Вы писали:

T>Дай ка пруф, а то в яхе похоже не в курсе, что у них такой бизнес сдох.


Я ссылки не прикаповал, а гуглить ты и сам можешь. Это одна из известных "историй успеха" которые Грэхэм описывал в своей книге (если не ошибаюсь, в этой).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 12.03.13 04:21
Оценка: +3
Здравствуйте, Gaperton, Вы писали:

G>Отличается. Ты знаешь правила чтения и синтаксис обычного кода. Это дохрена, если вдуматься.


var lightsOut = 1.Hour(30.Minutes()).After(bedTime);

Assert.That(actual, Is.LessThan(50.Milliseconds().After(expected)));


Что про этот код говорит знание синтаксиса, а что обычная логика?

G>Ни одной строчке чужого дсл, ни одному слову ты доверять не можешь. Особо учитывая то, что в нем могут быть баги.


Несмотря на синтаксис C#, это обычный DSL. Чтобы его читать важнее знать домены (измерение времени и тестирование), чем ломать голову над вопросами неоднозначности синтаксиса:

а) Какая перегрузка метода Hour будет вызвана?
б) Assert и Is являются классами или полями/свойствами?
в) Какой тип возвращает Is.LessThan(50.Milliseconds().After(expected)) и какие данные хранятся в возвращаемом значении?

Чтобы читать и писать этот код данные знания просто не нужны, а дебажить его занятие не для слабонервных. Доверять нижележащему коду можно и нужно, несмотря на то, что в нем могут быть баги.
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 14.03.13 11:18
Оценка: +2 -1
Здравствуйте, Gaperton, Вы писали:

G>Вот, добрались наконец. Пойми, это никакой не DSL. Это обычная библиотека на JavaScript.

Это embedded DSL

G>Вещи надо называть своими именами, не надо играть терминами. И сыпать баззвордами налево и направо. Слова — это не игрушки. Это вещи, которые значат что-то.

А это обычный С++.
template <typename Iterator>
struct mini_xml_grammar : qi::grammar<Iterator, mini_xml(), ascii::space_type>
{
    mini_xml_grammar() : mini_xml_grammar::base_type(xml)
    {
        using qi::lit;
        using qi::lexeme;
        using ascii::char_;
        using ascii::string;
        using namespace qi::labels;

        using phoenix::at_c;
        using phoenix::push_back;

        text = lexeme[+(char_ - '<')        [_val += _1]];
        node = (xml | text)                 [_val = _1];

        start_tag =
                '<'
            >>  !lit('/')
            >>  lexeme[+(char_ - '>')       [_val += _1]]
            >>  '>'
        ;

        end_tag =
                "</"
            >>  string(_r1)
            >>  '>'
        ;

        xml =
                start_tag                   [at_c<0>(_val) = _1]
            >>  *node                       [push_back(at_c<1>(_val), _1)]
            >>  end_tag(at_c<0>(_val))
        ;
    }

    qi::rule<Iterator, mini_xml(), ascii::space_type> xml;
    qi::rule<Iterator, mini_xml_node(), ascii::space_type> node;
    qi::rule<Iterator, std::string(), ascii::space_type> text;
    qi::rule<Iterator, std::string(), ascii::space_type> start_tag;
    qi::rule<Iterator, void(std::string), ascii::space_type> end_tag;
};
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 15.03.13 22:57
Оценка: +3
Z>Не понял мысль. Ты не показал, чем .should.have для разработчика лучше should have. Вдобавок, зачем то, перешел на личности.

should.have полностью соответсвует правилам синтаксиса js. Заморочки и возможности этого синтаксиса известны и понятны любому внятному разработчику на JS. Для JS есть множество средств вплоть до браузерных, которые позволяют дебажить это дело, прототипировать «на коленке» (прямо в консоли, с автодополнением) и т.п.

Что у нас есть для "should have"? А нихрена нет
— Каковы правила синтаксиса? Что будет, если я вставлю перенос строки между should и have? Что с кавычками, можно ли использовать "? Есть или нет semicolon insertion? Где описан синтаксис анонимных функций? Да и вообще функций.
— Что с типами данных? Как они соотносятся с типами данных JS?
— Какие средства есть для этого DSL? Дебаггер? Консоль? Интроспекция хоть какая-нибудь?
— Кто автор компилятора, во что это компилируется? Каково качество генерируемого кода? Где в генерируемом коде возможные узкие места по производительности?

Это так, навскидку, в 12 ночи после пива.


dmitriid.comGitHubLinkedIn
Re[44]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.03.13 07:33
Оценка: :)))
Здравствуйте, FR, Вы писали:


WH>>Да и порог вхождения в сам питон просто огромен. Хотя и выглядит маленьким ибо простые вещи можно начать писать сразу но то что больше "привет мир"


FR>Ты не прав, но флеймить нет желания


Шота тебя мало бывает последнее время. Уклоняешься от холиваров ? Нехорошо !
Re[51]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.03.13 13:12
Оценка: +3
WH>Или ты еще и на генерированный код патчи накладываешь?

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

DG>>во-первых, теряется явное знание о том, что, как и зачем патчится.

WH>А история комитов на что?

не видел ни одного разработчика, который бы целенаправлено интересовался коммитами, которые были до него (кроме случаев, когда известно, что версия T работает, а версия T+dT уже не очень).
Соответственно, если знание хранится в коммитах, а не в исходнике, то значит эта информация не попадет к разработчику, который будет в следующий раз править данный код.

DG>>во-вторых, проект прибивается гвоздями к конкретному экземпляру и ветке git-а.

WH>А иначе он типа не прибивается?
WH>Как ты собрался патчи накатывать на другой код?

всё написано в makefile-е или его аналоге.

DG>>И это не из-за того, что разработчики были плохие, а из-за того, что это лучшее решение с точки зрения минимизации затрат и рисков.

WH>Ты на самом деле в это веришь?

имхо, ты привык работать в нише разработки общих либ, а не в нише решения конкретных задач, стоящих прямо здесь и сейчас.
В первом случае в отличии от второго, нет критических сроков из разряда: должно работать завтра, и не важно как, иначе пойдет потеря денег или контрактов. И это приводит к тому, что код превращается в сложную систему подпорок и противовесов, сделанных за минимум вмешательств в код, и хотя код, в итоге, успешно работает — не до конца понятно как именно, что усугубляет дальнейшее применение подпорок из-за опасения, что если тронуть основные модули, то всё развалится.
Код, конечно, периодически чистится с помощью крупных рефакторингов, но при этом в каждый момент времени в коде всё равно остается большое кол-во подпорок.
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 26.03.13 20:31
Оценка: +1 -1 :)
Здравствуйте, Ziaw, Вы писали:

Z>Все примеры с DSL которые я вижу достаточно документированы и осваиваются быстрее чем аналогичный API, если у тебя есть контрпримеры, давай их.


Очевидный контр-пример в том, что кол-во DSL, с которым ты работаешь, крайне низко, а сообщество, размер док и вообще информационного шума вокруг них — велико. Счет DSL из твоего примера идет на единицы и ты абсолютно прав, что они покрыты опупительной докой. А теперь представь дополнительные пару десятков самописных DSL к ним в твоем десятке поддерживаемых+разрабатываемых проектов, намажь сюда сверху отсутствие вменяемой доки или её невалидность/устаревшесть и получишь реальную впариваемую тебе картинку, когда любой окружающий тебя только что вылупившийся из ВУЗа программист будет ваять под каждый свой неожиданный чих новый язык.
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.04.13 02:39
Оценка: +2 :)
Здравствуйте, vdimas, Вы писали:

V>Гы-гы.

V>Итого, если из твоего списка выкинуть XML-based, или вариации на тему CSS-based, то не наберется даже десятка.
А чего только XML-based? Давай уж тогда все, которые основаны на Unicode. Если уж хочется повыкидывать языки на основе каких-то надуманных характеристик.
Ну или хотя бы те, в которых используются ключевые слова на латинице.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: _DAle_ Беларусь  
Дата: 04.01.13 20:22
Оценка: 20 (2)
Здравствуйте, dimgel, Вы писали:

_DA>>Давайте я покажу пример чуть сложнее из нашего проекта. Задание бизнес-логики, объявление функционала в виде композиции других функционалов.

_DA>>java:
_DA>>
_DA>>LP entryPrice = addJProp(null, "entryPrice", "Цена входная", and(false), price, 1, 3, quantity, 1, 2, 3);
_DA>>


_DA>>DSL:

_DA>>
_DA>>entryPrice 'Цена входная' (invoice, stock, sku) = price(invoice, sku) IF quantity(invoice, stock, sku);
_DA>>


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

D>1. Букв меньше не стало.

Я к этому не стремился в данном случае. Эти две строки не эквивалентны, но это действительно как было и как стало. Можно было на DSL написать
entryPrice 'Цена входная' = price($1, $3) IF quantity($1, $2, $3);

Это уже ближе к строке на джаве, но в продакшен коде так никто писать не будет.


D>2. Понятность? Да куда там! Читать просто как текст — понятнее, но если приспичит исправить — сразу куча вопросов.

Мне вот интересно, а что было понятно из строчки на джаве, если бы я не привел строку на DSL? Сразу стало понятно, что после строковых констант идет описание выражения в польской нотации? Сразу было понятно, что price — это функционал с двумя параметрами, которому передаются на вход первый и третий параметр создаваемого функционала?
Насчет исправлений предполагается, что те, кто будут на этом DSL писать, будут все-таки его знать и иметь возможность прочитать все интересующее в документации.

D>Понятнее было бы тупо завернуть длинный список параметров в пару иерархий ParamObject, типа как-то так:


D>
D>entryPrice = addJProp('Цена входная', new Price(...), new IfQuantity(...))
D>


Ну, вариант на джаве, конечно, кривой, но таким он был. Это было временное решение на старте проекта. Но можем пофантазировать, как это можно было улучшить на джаве.
Во-первых, можно сменить нотацию.
LP entryPrice = addJProp(null, "entryPrice", "Цена входная", and(false).map(price.map(1, 3), quantity.map(1, 2, 3));

Во-вторых, можно заменить порядковые номера параметров на какой-то аналог именованных параметров. Допустим, мы сделали вот так:
LP entryPrice = addJProp(null, "entryPrice", "Цена входная", PARAMS("invoice", "stock", "sku"), and(false).map(price.map("invoice", "sku"), quantity.map("invoice", "stock", "sku"));

Теперь вспомним код на DSL:
entryPrice 'Цена входная' (invoice, stock, sku) = price(invoice, sku) IF quantity(invoice, stock, sku);


У нас после перехода на DSL разработка, на мой взгляд, существенно ускорилась и упростилась. Более того, код на DSLе пишут и бизнес-аналитики, не имеющие технического образования, и уж тем более, не знающие java. Правда, объяснить, почему разработка ускорилась, каким-то одним примером точно не получится.

D>Вывод: низачот. Впрочем, я могу чего-то недопонимать (в частности, параметр "entryPrice" в первом примере указывает на наличие доп. сложности, мною не учтённой: динамика/рефлексия/хз что).
Re[41]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: FR  
Дата: 20.03.13 06:45
Оценка: 18 (2)
Здравствуйте, VladD2, Вы писали:

VD>В твоем мышлении есть одна ошибка. Ты почему-то не верно оцениваешь сложность поддержки рукописного кода. Если решения задачи можно сгенерировать по существенно более простой/короткой/ясной модели, то сравнимое по характеристикам рукописаное решение будет несоизмеримо сложно. И поддерживать его будет сложно просто из-за огромного объема кода и неизбежных для такого объема ошибок в проектировании и реализации.


VD>Чем более концептуальная ошибка/изменение, тем сложнее ее устранить/сделать в рукописном коде. В решение же на базе ДСЛ и кодогенерации это не критично, так как изменив код генератора можно устранить ошибку без полного переписывания кода.


Я тут читаю, но не пишу, потому что как в том анекдоте "а мне разорваться что-ли".
То есть МП я люблю, и когда раньше интенсивно писал на питоне, широко использовал, но вашего оптимизма
насчет его широкого применения не разделяю, по моему порог вхождения слишком высок.
Притом под порогом вхождения я имею в виду как и само освоение метапрограммирования так и чтения
и правки метакода.
Например, мне пришлось, когда ушел с одной работы, удаленно несколько лет (хоть и небольшие правки)
поддерживать свой МП код, пока удалось им вырастить приемника
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.13 09:18
Оценка: 10 (1) +1
Здравствуйте, dimgel, Вы писали:

D>А можно поподробнее? (Помню ещё сто лет назад сказанное Синклером, что накосячили в угоду "естественноязыковости", но тоже без деталей).


Это я писал, а не Синклер. Что конкретно тебя интересует? Ошибки, собственно, две основных — попытка сделать язык близким к естественному английскому, что привело к тяжеловесному индексу, и крайняя бедность средств декомпозиции, из-за чего копипаста в сиквеле цветет махровым цветом.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.13 13:10
Оценка: 8 (1) +1
Здравствуйте, dimgel, Вы писали:

D>Вот тут интересен набросок примера, как бы оно могло выглядеть лучше.


Даже нормальный набросок синтаксиса это большая и непростая работа. А если отдельные моменты — ну вот начинать запрос явно логичнее не с select list (выражения после ключевого слова select), а с перечисления источников данных (то что после ключевого слова from). Синтаксис джойнов мог бы быть полаконичнее. Вычурные формы функций из стандарта никому не нужны (хотя де-факто в реальных реализациях их почти нет). И т.д.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.02.13 02:09
Оценка: 8 (2)
Здравствуйте, Gaperton, Вы писали:

G>Боюсь, если бы Wolf Hound столкнулся с решенной таким образом задачей, которая внезапно упала бы ему на поддержку (естественно, настоящим программистам DSLя было бы впадлу писать по своему дсл учебник — не быстро это как-то), и ему пришлось бы ее допиливать и развивать — Wolf Hound бы покрыл авторов такой оправданности нецензурными матюгами.


Забавно, что похожая ситуация как раз случилась у нас не так давно. Код написанный Вольфхаундом с использованием паттерн-матчинга и какой-то матери ЯОН был переписан с использованием реализованного другими людьми ДСЛ-я.

Матюгов мы как-то не услышали, а на выкуривание в новые концепции (которые не хило изменились) у него ушло дня три.

Результат — теперь модификации синтаксиса Н2 стали занимать в разы меньше времени (часы вместо дней). Найти код отвечающий за синтаксис и семантику не составляет труда. Повысилась модульность и качество декомпозиции.

Так что практика твоих слов не подтверждает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.01.13 11:04
Оценка: 6 (1) +1
Здравствуйте, AndrewVK, Вы писали:
AVK>Нет, не доказывает. DSL это не весь линк, а конкретно query comprehension. И вот лично я им практически никогда не пользуюсь. Ключевой момент языка, который меняет картину, это прежде всего механизм квазицитирования ака expression tree, и это вполне себе general purpose штука, а никак не DSL.
Не соглашусь. В до-expr-tree-эпоху описывать выражения можно было только чудовищно неудобным образом.
А потом в шарп встроили специальный отдельный язык для описания деревьев выражений.
Он издалека, конечно, похож на "лямбду", но ведь мы хорошо знаем, что это вовсе не она. Далеко не всё то, что позволено в делегате, разрешено и в expression tree.
Так что этот язык вполне себе доменно-специфичный.
То, что его, в свою очередь, используют для других доменно-специфичных вещей — результат природы самого этого языка.
Ну, то есть с высоты птичкиного полёта это примерно то же самое, как и наличие в С++ (в отличие, скажем, от оригинального труъ фортрана) специального DSL для описания "строковых констант", с блэкдэжеком в виде zero-termination. Если выкинуть из плюсов понятие строковых констант, то мы по-прежнему сможем плодить char[] вручную.
Отсутствие строк в фортране явно показывает, что даже такая простая вещь была за пределами его домена (по матмоделированию).
А теперь модные пацаны в дотнете изображают на основе такой высокоуровневой конструкции, как строка, совсем уж запредельный стуфф типа connection strings, URI, и Regular Expressions.

Точно так же и появление в шарпе подъязыка для домена "описание деревьев выражений", который сам по себе мало кому нужен (т.к. люди, пишущие прикладные программы в домене "манипуляции деревьями выражений" встречаются чуть реже, чем никогда), позволяет внезапно построить на его основе DSL для таких мегаполезных доменов, как решение систем уравнений на основе Z3 и порождение статически валидируемого SQL кода.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 02.01.13 18:50
Оценка: 5 (1) :)
Здравствуйте, dimgel, Вы писали:

D>Наоборот: в первом случае ничего не надо знать, т.к. это стандартный синтаксис вызова метода. В крайнем случае можно Ctrl+Click по имени метода и попадаем в его определение.


В общем случае не попадаем, мы ведь не знаем точно тип a. Я правильно понимаю, что основная претензия к DSL свелась к отсутствию поддержки Ctrl-Click?

D>А во втором случае — вообще непонятно кто это писал, как оно работает, и куда надо идти чтобы найти концы. То, что это выглядит как осмысленная фраза на естественном языке, не даёт никаких преимуществ, скорее наоборот, т.к.:


Прикол в том, что в первом точно так же непонятно кто это писал и как оно работает. Сейчас вы с Мамутом успешно сводите проблему DSL к проблемам навигации. Которые были и до сих пор есть в C++, например, но решены в более современных языках.

D>1. Может быть, там какой-нибудь бред в духе #define true false в реализации, переворачивающий весь этот "естественный язык" с ног на голову.


Если начинать говорить про бред могу рассказать, как сделать, чтобы метод Insert начал очищать список. Но ты ведь и сам это прекрасно знаешь, зачем приводить такие аргументы?

D>2. Я же не могу, прочитав эту естественную и возрадовавшись, начать писать вообще весь код в свободном стиле: "store sum of a and b to c".


Конечно не можешь. Точно так же не можешь начать писать a.MakeTheUniverseWorkForMe(), узнав синтаксис вызова метода и не затрудняя себя изучением контракта a.
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 14:34
Оценка: 5 (1) +1
Здравствуйте, dimgel, Вы писали:

D>В основном я долблю в нежелание помнить новый синтаксис вместе с новой семантикой. Но ты ниже по этому поводу мне мозги прочистил
Автор: dimgel
Дата: 03.01.13
. Но в данном случае я ещё имею в виду ненависть по отношению ко всякой boilerplate-магии (e.g. аспекты, а в данном случае и макросы), в которую приходится вникать, чтобы понять, как оно работает. Зачастую эта магия на порядки сложнее не только, чем тот код, который её использует, но и чем аналогичный по функционалу код, который обошёлся без неё. А изучать её при отладке частенько приходится приходится.


Да, с синтаксисом есть такая беда. Надо лезть в доку, нельзя восстановить знания тыкаясь в комплишен. Вот это одна из основных проблем DSL, вторая — сложность его проектирования и рефакторинга. Инструментальные проблемы сейчас решают довольно много людей в мире, я думаю через несколько лет инструменты будут довольно приятные. Сложность проектирования DSL возникла от неправильной постановки задачи: "а давай забабахаем тут DSL". А должна она ставиться так — "вот эту конструкцию, проще и нагляднее будет записывать так, давай подумаем, сможем ли мы записать аналогичные конструкции так же красиво". Простенькие встроенные DSL хороши тем, что от них, зачастую, можно отказаться в пользу нижележащего API, просто рассахарить вручную, если DSL вдруг слажал и не дает сделать что-то нужное.

D>Гыгы, уел. Но я имел в виду, опять же, boilerplate-магию. В тех же макросах можно прикрутить другую семантику к синтаксису вызова метода (и вроде бы даже в каких-то простеньких макросах так и делали — а это уже тот самый #define true false), а без макросов вызов метода — это вызов метода и ничего более.


Макросы тут не являются чем-то особенным. Мне вот сейчас надо добавить функционал в мой старый проект, которому лет 10. Там аспекты безо всяких макросов, средствами spring и dynamic proxy. То, что выглядит как обычный вызов метода, с навешанными аспектами превращается в проверку прав и управление транзакциями. Это позволило сократить кучу кода и соответственно ошибок. Сначала меня охватила тоска, когда я понял, что придется кропотливо разбираться, как оно все работает. Но, когда разобрался, стало понятно, что это было оправдано, никакой альтернативы аспектам у меня не нашлось и сейчас.

К чему это я? Все эти магии они не от хорошей жизни возникают, а продиктованы отсутствием вменяемых альтернатив.
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 31.12.12 18:22
Оценка: 3 (1) +1
Здравствуйте, AndrewVK, Вы писали:

AVK>Нет, не доказывает. DSL это не весь линк, а конкретно query comprehension. И вот лично я им практически никогда не пользуюсь. Ключевой момент языка, который меняет картину, это прежде всего механизм квазицитирования ака expression tree, и это вполне себе general purpose штука, а никак не DSL.


query comprehension конечно можно не пользоваться, но глупо заменять несколько строчек с джойнами на букет нечитабельных SelectMany. Без синтаксиса linq не взлетел бы, ибо рассматривался бы только как игрушка для простых запросов и удобный билдер условий.

Если хочешь доказать, что query comprehension туфта, перепиши запрос без него:
orderDetails = 
    from o in db.Orders
    where o.OrderID == orderID
    join s in db.Shippers on o.ShipVia equals s.ShipperID
    join od in db.OrderDetails on o.OrderID equals od.OrderID
    join p in db.Products on od.ProductID equals p.ProductID
    join supplier in db.Suppliers on p.SupplierID equals supplier.SupplierID
    let total = od.Quantity * od.UnitPrice
    select new OrderDescription
    {
      Product = p.ProductName,
      Quantity = od.Quantity,
      ShipperName = s.CompanyName,
      Total = total,
      UnitPrice = od.UnitPrice,
      SupplierName = supplier.CompanyName
    };


Я считаю это будет отличный способ доказать, что использование API вместо DSL позволяет писать код понятнее и избавляет от необходимости изучения нового языка.
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 16:50
Оценка: 2 (1) +1
Здравствуйте, Mamut, Вы писали:

M>И DSL и библиотека являются интерфейсом к какому-то большому коду.

С ДСЛ это не совсем верно. Обычно компилятор получается сложнее чем рантайм.

M>Если на DSL уже написаны сотни/тысячи строк кода, то любое его изменение приведет к поломке всего этого кода или изменению его поведения. Точно так же, если библиотека используется в сотнях/тысячах мест, то эти места сломаются/поменяют поведение, если мы изменим библиотеку.

1)Ты отвечаешь на то, что кода на библиотеке будет намного больше.
2)Я именно это и говорю. Но мне тут пытаются втирать, что с библиотекой проблем не будет.

WH>>2)Как правило, старый ДСЛ очень легко можно трансформировать в новый. С библиотеками такое не всегда проходит.

M>Откуда внезапно взялось это правило?
Из практики.

M>КО напоминает, что если библиотека реализована, как черный ящик, то меняй эту реализацию хоть сто раз. Неубедительно.

Плохой у тебя КО.
В моей практике был случай, когда мне для дальнейшего развития библиотеки пришлось нахрен разломать весь интерфейс. Ибо в начале разработки было не ясно, что к чему.
При этом ДСЛ, которым пользовались люди, не изменился.
Всё по тому, что через интерфейс библиотеки всегда просачивается реализация. А через ДСЛ нет.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: hardcase Пират http://nemerle.org
Дата: 03.01.13 18:44
Оценка: 1 (1) +1
Здравствуйте, AlexRK, Вы писали:

ARK>Угу, просто компилятор написать. Элементарно, Ватсон.


Тут кто-то еще боится слова "компилятор"? Это так в универе напугали, что сей страх все еще преследует по жизни?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.02.13 22:47
Оценка: 1 (1) +1
Здравствуйте, Gaperton, Вы писали:

G>>>Боюсь, если бы Wolf Hound столкнулся с решенной таким образом задачей, которая внезапно упала бы ему на поддержку (естественно, настоящим программистам DSLя было бы впадлу писать по своему дсл учебник — не быстро это как-то), и ему пришлось бы ее допиливать и развивать — Wolf Hound бы покрыл авторов такой оправданности нецензурными матюгами.


VD>>...Матюгов мы как-то не услышали...


G>Ситуация другая. Непохожая.


На что не похожая? Ситуация 1 в 1. Документации тоже особо нет. С кодом он вынужден разбираться. Допиливать и развивать тоже придется.

VD>>Так что практика твоих слов не подтверждает.


G>Неправильно. Правильно так: у тебя нет практики, которая могла бы подтвердить и опровергнуть мои слова.


Вообще-то пример четко опровергает твои слова. Есть только одно "но". Возможно все зависит от качества ДСЛ-я и качества его реализации. Но тогда мы приходим к тому, что код на ДСЛ и обычный код имеют сходные свойства и вытекающие из него проблемы. Вопрос изучения ДСЛ-я ничем не отличается от вопрос изучения модели прикладной области и кода его описывающего.

И лично мне очевидно, что ДСЛ тут даст только облегчение, так как на его изучение тратится несоизмеримо меньше сил и времени чем на изучение реализации задачи описанной без ДСЛ-я.

Так что, если ДСЛ позволяет существенно сократить код или устранить некоторые (существенные) проблемы при его модификации/развитии, то ДСЛ несомненно полезен и выгоден.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Кстати, про PEG
От: Ziaw Россия  
Дата: 22.03.13 20:09
Оценка: 1 (1) +1
Здравствуйте, Tanker, Вы писали:

I>>Но ведь парсер и DSL выполняют свою задачу корректно, так что почему это аргумент не в пользу Peg, я


T>Речь то про тесты была изначально. Код не работает — значит тестов не было. Или в Немерле изобрели способ выполнять тесты вне рантайма ? Интересная техника, похоже, я чтото пропустил в этой жизни.


Еще раз. Есть парсер-генератор, есть сгенерированный им парсер и есть компилятор. К первым двум претензий, в данном случае, нет.

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

Прежде чем делать безапелляционные заявления надо попытаться понять о чем идет речь. А то получается слышал звон...
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 27.03.13 11:28
Оценка: 1 (1) :)
Здравствуйте, vdimas, Вы писали:

Z>>С разморозкой. Я устал уже отвечать на одно и то же. Кратко — не единцы, а десятки.


V>Ес-но ложь, насчет десятков. Давай список из нескольких десятков, с которыми постоянно реально работаешь, а не 5 лет назад последний раз.


Работаю уже превратилось в постоянно работаю? Даже таких я наберу более десятка.

less
scss
haml
xaml
sql
regular expressions
format strings
css selectors
xpath
xsl
cucumber
mongodb query language
knockout bindings syntax

Это только языки, которые не являются embedded, тех я еще больше наберу.

V>В сравнении с самописной приблудой — мегаопупительные. Да ещё полно учебников с примерами по Сети.


Что сказать-то хотел? Чем это отличается от самописного фреймворка? Ты ведь сейчас как-то решаешь проблему множества недокументированных самописных фреймворков в проекте от студентов?

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


Это не мое недопонимание. Это твое воображение рисует картину, как вчерашние студенты пишут недокументированный говно-DSL, который потом вся команда использует во всем проекте. Все вопросы к нему.
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 31.12.12 12:18
Оценка: +2
Здравствуйте, AndrewVK, Вы писали:

AVK>Между этими DSL и тем, что предлагается есть существенная разница — первые прописаны в универсальном стандарте C# и их знание можно ожидать от любого приличного разработчика, заявляющего о владении шарпом. Что же касается языков имени меня, то им придется обучать всех, кроме меня самого.


DSL в этом плане ничем не отличается от библиотек которые не входят в поставку фреймворка. Без которых редко обходится любое более менее крупное приложение. И уж точно, во всех проектах применяются классы имени меня. Их применению приходится обучать всех кроме меня самого. В чем отличие?

Вот я в упор не вижу разницы в читабельности кода:

var message = json {text: "Hello world!", data: {code: 1}};
// vs
var message = Json.Create(new {text = "Hello world!", data = Json.Create(new {code = 1})});


Точнее я ее вижу в пользу DSL, и убежден, что специально обучать кого-то использованию такого DSL придется не дольше чем применению аналогичной библиотеки.
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 09:49
Оценка: +2
M>>И?

K>В меньшем количестве кода легче разобраться. Даже без документации.

K>А с учётом того, что разрабу приходится писать меньше кода, у него останется больше времени, что может сподвигнуть на создание документации.

Сказки, пожалуйста в детский сад

M>>Продолжаю повторять:

M>>

M>>любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой


K>И?

K>В обычных библиотеках тоже бывает разный синтаксис.
K>Насчёт семантики сложно сказать. По идее, она соответствует предметной области. Если человек владеет ей (а он обязан ей владеть, если уж стал писать код), то легко поймёт DSL.

Есть две большие разницы между понимать и писать. При том, что понять можно неправильно.


M>>Я ссылку не зря привел. Казалось бы — там простой код, ага, его в разы меньше, ага. Я могу специально для тебя привести все 100% документации, что есть по этому языку:

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

Ты не поверишь, но именно об этом я и говорю. Нет никакого магического DSL'я, у которого «обычно есть документация». Так же, как не бывает магических библиотек, у которых она «обычно есть».

M>>Но я, надеюсь, ты согласишься, что это все не является заменой по документации по синтаксису и семантике DSLя, его возможностям, и т.п.? Поэтому я и повторяю: не надо рассказывать сказки, что DSL'и обычно документированы, или что их краткость каким-то образом компенсирует то, что они документированы не лучше остального кода.


K>Так я не рассказывают сказки. И не уверяю, что DSLи лучше/хуже документированы.

K>Однако я считаю, что краткость кода способствует лучшему пониманию. Это первое.

Не всегда, не везде, и этоне значит, что коращение кода компенсирует, например, недостаток документации.

K>Второе: именно метапрограммирование в ряде случаев помогает в разы сократить количество кода.


Покажи мне, где я с этим спорю.


K>Дело в том, что в реальной практике приходится очень много писать тонны копипасты, о чём писал WolfHound. Тот же пример с INotifyPropertyChanged. Макросы позволяют избежать этого, избавляют от рутины.


Какое это отношение имеет к тому, о чем я говорю?

K>Практически все виденные мною примеры простых макросов понятны без всякой документации, при условии, что я уже знаком с тем, что этот макрос заменяет (пример: замена assert'а макросом NotNull). Все опробованные мною примеры больших DSL: SQL, LINQ — имеют хорошую документацию, и опять же полностью понятны.


Выделенное — ключевое. Откуда возьмется это знание?

K> На этом основании я смотрю на развитие dsl-строения с оптимизмом.


Это потому что, по товим же словам, все опробованные тобой большие DSLи — это SQL и LINQ. Задолбался повторять, но приходится: при условии, что DSL сможет писать каждый первый для каждой второй предметной области, не стоит на деяться на то, что эти DSLи будут магическим образом моментально понятны или обретут документацию.

Предлагаю разобраться в «коротком коде, который понятен без документации» тех же LINQ'а и SQL'я или любого другого DSLя


dmitriid.comGitHubLinkedIn
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 02.01.13 10:48
Оценка: +1 :)
Здравствуйте, Mamut, Вы писали:

M>Правда, в итоге человека заставили написать вполне приличное описание, провести четыре (!) обзорных и одну техническую презентацию внутри компании и полностью задокументировать код, потмоу что он объявил о своих планах уйти, и он был единственным, кто понимал, как эта хрень работает


Молодой, неопытный...
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 02.01.13 11:33
Оценка: +2
Здравствуйте, Mamut, Вы писали:

M>Я об этом и говорю. Никакого «обычно» не будет. Он будет документирован не лучше и не хуже, чем любой другой код. Хотя, учитывая, что это будет domain-specific language, то будет документирован еще хуже, так как в условиях «о, у нас домен, давай колбасить DSL» никто не будет выписывать весь синтаксис, семантику и т.п.


Непонятно о чем мы спорим тогда. Люди часто не документируют код. При этом иногда получается грамотный и читабельный код, который легко поддерживать, а иногда макаронный и нечитабельный. Это ортогонально тому, DSL они пишут или библиотеку.

Когда ты читаешь код a.Insert(b) и insert b into a у тебя примерно одинаково информации, для понимания того, что происходит. Но в первом случае тебе надо знать соглашения, чтобы понять, что происходит, а во втором не нужно.

DSL от аналогичной библиотеки отличается только тем, что у них разные синтаксисы. Но тот или другой все равно придется учить. И в каких-то предметных областях DSL получается проще чем родной синтаксис языка.

К примеру, в ruby уже невозможно провести черту между DSL и обычным API. Можно, например, сказать, что рельсы это DSL для веб разработки. А можно, что это всего лишь набор из нескольких слабо связанных библиотек, каждая из которых выполняет свою функцию.

Мой основной поинт в этой дискуссии как раз в том, что не надо проводить границы и утверждать, что DSL априори лучше или хуже. Это такая же практика, как и любая другая. Не надо ее идеализировать или демонизировать. Будущее программирования в том, что мы перестанем различать DSL как отдельную технику, она станет просто рутинной.
Легкий офтоп.
От: minorlogic Украина  
Дата: 02.01.13 11:42
Оценка: +1 :)
В C++ функция printf это DSL или нет ? спасибо.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 02.01.13 22:23
Оценка: -2
Здравствуйте, AndrewVK, Вы писали:

AVK>Масштаб проблем несколько разный. Библиотеку я в полуавтоматическом режиме почистить могу, где то вставляя временные подпорки (не заморачиваясь никакими языкостроительными тулами). А что делать, когда кастомный DSL надо сильно переделать или вообще выкинуть?

Ну что за демагогию ты опять разводишь.
Откуда ты взял, что ДСЛ ради мелких изменений нужно выкидывать?
Точно так же спокойно подчищается. А если там такой песец что нужно всё выкинуть, то тебе и с библиотекой придется всё выкинуть.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 03.01.13 15:14
Оценка: +2
Здравствуйте, WolfHound, Вы писали:

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


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

WH>Это просто лож.
WH>ДСЛ исправлять проще, чем библиотеку.

Угу. Особенно если на этом DSL уже наколбашены сотни кода.
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.13 22:18
Оценка: +1 :)
Здравствуйте, hardcase, Вы писали:

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


Жаль только оно нафик никому кроме студентов не нужно.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 04.01.13 08:35
Оценка: +2
Здравствуйте, Ziaw, Вы писали:

Z> a.Insert(b) и insert b into a


Я именно такие примеры имел в виду, когда писал ранее о плохой подаче информации о макросах и дслях. Большинство обучающих примеров сделаны именно так: сперва пишется некая простая функция (Insert()), потом она заменяется на макрос (insert into). В итоге читатель не видит никакой разницы, уменьшения кода не происходит, понимание не улучшается.

Информацию следует подавать по другому: брать приличный кусок кода, который невозможно сократить с помощью стандартных средств (языки без МП), и показывать пример, как этот код может быть заменён однострочным макросом. Для затравки, привития интереса — самое то.
Re[6]: Легкий офтоп.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.01.13 08:43
Оценка: +1 :)
Здравствуйте, koodeer, Вы писали:

K>Я полагаю, именно пример printf из Nemerle можно приводить в качестве того, почему не следует бояться макросов. Как известно, в языках C, C++, C# и многих других строковые литералы (строки форматирования в printf, Console.Write, String.Format, регулярки в виде строк, выражения XPath и пр.) не проверяются на этапе компиляции; в случае банальной опечатки ошибка выпадет в рантайме. Макрос printf в Nemerle проверяет формат в компайл-тайме. Мелочь, а приятно. Не нужен ни решарпер, ни утилиты статического анализа кода, ни лишние тесты.


Ты путаешь результа и его достижение. Что бы выяснить, почему люди боятся макросов, надо выкатить код самого макроса printf а уже потом делать выводы.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 10:10
Оценка: +1 -1
Здравствуйте, Mamut, Вы писали:

WH>>С ДСЛ это не совсем верно. Обычно компилятор получается сложнее чем рантайм.

M>Если компилятор сложнее, то откуда появился миф, что DSL изменить легче, чем библиотеку? И да, DSL все равно является интерфейсом к какому-то большому коду.
Ты всё понял не правильно.
В случае с ДСЛ обычно получается маленький рантайм, куда складываются рукописные классы. То, что ты называешь "каким-то большим кодом".
И значительно более большая куча генерированного кода.
Именно поэтому компилятор и получается больше рантайма. Там просто вся работа делается.

M>У тебя удивительная способность читать тексты как-то по-другому, нежели их читают другие люди. Имхо, никто не говорит, что с библиотекой проблем не будет. Говорят, что проблем будет ровно столько же, сколько при изменении DSLя.

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

(C)http://www.rsdn.ru/forum/philosophy/5017793.1
Автор: AndrewVK
Дата: 03.01.13

При этом AVK теоретик.
А моя практика говорит о прямо противоположном.

M>В моей практике был противоположный случай. Ничья?

У тебя была практика? Извини не верю.

WH>>Всё по тому, что через интерфейс библиотеки всегда просачивается реализация. А через ДСЛ нет.

M>Да неужели?
А вот и доказательство того что практики у тебя не было.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 04.01.13 13:30
Оценка: +2
M>>Каким образом SQL обеспечивает ACID, можно узнать? А то в MySQL есть движок без гарантий ACID, но в нем есть SQL.
WH>Выключи дурака. Не смешно уже.

Ну, дурака явно включил только ты

WH>Сам по себе язык естественно ничего не обеспечивает. Обеспечивает его реализация.


Да неужели. Теперь перечитай то, что тебе пишут, и что ты говоришь:

D>А какое отношение ACID имеет к ds*L*?
Наипрямейшие. SQL это обеспечивает.



dmitriid.comGitHubLinkedIn
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 04.01.13 16:25
Оценка: +2
Здравствуйте, _DAle_, Вы писали:

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


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


Z>>> a.Insert(b) и insert b into a


K>>Я именно такие примеры имел в виду, когда писал ранее о плохой подаче информации о макросах и дслях. Большинство обучающих примеров сделаны именно так: сперва пишется некая простая функция (Insert()), потом она заменяется на макрос (insert into). В итоге читатель не видит никакой разницы, уменьшения кода не происходит, понимание не улучшается.


_DA>Давайте я покажу пример чуть сложнее из нашего проекта. Задание бизнес-логики, объявление функционала в виде композиции других функционалов.


ИМХО, ваш пример в точности соответствует тому, что вы хотели опровергнуть.
Т.е. "никакой разницы, уменьшения кода не происходит, понимание не улучшается".

Мало того, мне код на джаве более-менее понятен, а DSL...
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 04.01.13 17:56
Оценка: +1 -1
Здравствуйте, AndrewVK, Вы писали:

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


K>>Пусть это не тянет на DSL, но тянет на примеры того, где макросы могут сильно помочь, вводя проверки формата на этапе компиляции.


AVK>А при чем тут макросы?


Потому что макросы являются основой для создания DSL. Строка форматирования — своего рода микро-(нано-)DSL — это язык формата.


K>>Глянул сейчас форум Regular Expressions на MSDN — ни одного неотвеченного вопроса.


AVK>При чем тут неотвеченные вопросы?


На все вопросы даны ответы — значит много людей способны разобраться в языке регулярок, значит найдётся много людей способных разобраться в новом языке.
Я тоже признаю, что каждый раз, как приходится в очередной раз сочинять регулярку, я заглядываю в документацию. Но это потому, что редко приходится это делать. Если на длительное время заброшу C#, потом тоже полезу в доку. Без доки я и сейчас не скажу, как именно используется stackalloc, по той же причине: использовал его в последний раз очень давно.
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.01.13 23:15
Оценка: +1 -1
Здравствуйте, _DAle_, Вы писали:

_DA>Правда, объяснить, почему разработка ускорилась, каким-то одним примером точно не получится.


ИМХО если не удается внятно объяснить, чем DSL лучше кода на джаве, то что то здесь не то.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.01.13 11:11
Оценка: +2
Здравствуйте, AndrewVK, Вы писали:

AVK>Осталось заметить, что, в итоге, все выжившие более менее поддерживают единый отраслевой стандарт, а не каждый свой язык изобретает. Надо объяснять почему?


То же самое мы наблюдаем в мире библиотек. Сначала каждый пишет свой личный набор классов-контролов, потом появляются призанные производители, потом постепенно всё, кроме двух-трёх альтернатив вымирает.
Так и тут — будут миллионы недоDSL, будут десятки коммерческие либо опенсорсные DSL в духе рельсов, и будут доминаторы в каждой конкретной области.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.01.13 08:03
Оценка: +2
Здравствуйте, Mamut, Вы писали:

M>Ну да, из текста, который говорит: из 5к строчек мы получаем 50к сгенеренного кода ты делаешь далеко идущий вывод, что библиотека, существовашая до этого, имела 50 к кода. Ну-ну.

А в чём тут сложность?
Если была библиотека, для работы с которой было достаточно 5к строчек, то зачем потребовался этот DSL?
То есть теория, конечно же, не запрещает нам строить DSL, который будет требовать 50к строчек для замены 5к строчек библиотечных вызовов, но физического смысла в этом нет, и мы предполагаем, что вменяемые проекты таким идиотизмом заниматься не будут.

M>О да, компилятор их нового в старый с сохранением семантики — это, безусловно обязательно очень легкая задача, ага.

Коллеги, почему бы вам не рассмотреть конкретные примеры?
То, что у вас был конкретный баттхёрт, связано с одним из трёх:
1. Недостатки проектирования конкретно вашего DSL
2. Недостатки инструментальных средств, применяемых при построении и изменении вашего DSL
3. Проблемы в самом подходе DSL.
Вы делаете скрытое предположение о №3, оппонент — о №2.
Но я не понимаю, как вы собираетесь выяснить истину, не глядя ни на язык, ни на изменение, ни на инструменты.

M>Доказательств кроме «я, у меня» ты так и не смог предоставить ни одного.

Гм. Он опирается на свои примеры, которые для вашей задачи нерелевантны. А также на расширение множества решений за пределы известных ему примеров, делая неявные предположения, которые считает обоснованными.
Например, что никто в здравом уме не будет писать DSL, который многословнее библиотечных вызовов.
Или что никто в здравом уме не будет писать DSL, который скрывает подробности реализации хуже, чем библиотека.
Затем он усиливает эти утверждения — т.е. применение DSL считается обоснованным там, где удаётся получить значительное преимущество по сравнению с библиотекой по одному или двум из этих параметров.
Дальнейшие рассуждения тривиальны — скажем, если подробности реализации скрыты лучше, то при смене реализации наблюдаемые пертурбации прикладного кода будут иметь меньший масштаб, а стало быть и изменения станут дешевле.

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

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

M>Именно потому, что компилятор выдавал сообщения об ошибке, приходилось перелопачивать все места, где использоввался этот DSL. Мегаумному Вульфхаунду, который никогда не включает дурачка, не приходит в голову, что замена синтаксиса «a PLUS b» на «a + b» в DSLе приведет к тому, что надо будет менять все места, где эта конструкция вызывается?

Ну вот тупому Синклеру совершенно непонятно
а) какие задачи решал синтаксис (a PLUS b)
б) какие были проблемы у этого синтаксиса, которые повлекли за собой его замену на (a + b)
в) почему в качестве замены было выбрано именно (a + b) а не Plus(a, b) и не ещё пятьдесят кандидатов с хорошими родословными
г) в чём была сложность автоматически найти все вхождения (a PLUS b) и заменить их на (a + b) без потери семантики

Без ответов на эти жизненно важные вопросы беседа вынуждена скатываться на пенисометрию вроде "а моя бабушка ещё строже твоей".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 11.03.13 21:30
Оценка: +1 :)
Здравствуйте, Tanker, Вы писали:

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


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

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

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

Я, собственно, попадал в подобные ситуации дважды на руководящей позиции. Самое интересное — есть некоторые меры (сводящиеся к нечеловеческой дисциплине проектирования), которые помогут не просто избежать коллапса, но и извлечь из метафишек пользу.

И все эти меры ограничивают свободу, которой так восхищаются местные товарищи . Прям скажем — вырывают им зубы, и лишают всяческого кайфа от забористого наркотика — метапрограммирования .
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 12.03.13 11:01
Оценка: +2
Здравствуйте, Gaperton, Вы писали:

G>А если принять во внимание легкое отношение к дсл местной аудитории — в нем будет просто дохрена багов и кривой семантики. Ты обладаешь ментальным сканированием? Ты можешь знать, что этому марсианину показалось логичным? Книг он на эту тему не писал — западло.

Ты тут вещаешь про проблемы с общением у авторов ДСЛ. А из тебя самого адекватность прямо так и прет... Людей, про которых ты ничего не знаешь, марсианами обозвал... А потом удивляешься, почему эти люди посылают тебя. И, конечно же, приходишь к выводу, что проблема в этих людях. Ибо такой великий специалист по пониманию мотивов людей не прав быть не может.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 12.03.13 22:43
Оценка: +2
В целом, ты передергиваешь.

Был исходный тезис: использование DSL не добавляет новых проблем по сравнению с использованием сложных библиотек.

Читабельность кода для человека формируется двумя факторами:
1. известностью понятий используемых в коде
2. совпадаемостью системы кодирования понятий с системой кодирования, используемой читающим

Ты же для опровержения исходного тезиса приводишь пример плохих DSL-ей, которые нарушают оба этих пункта, а библиотеки берешь наоборот хорошие, те которые эти пункты не нарушают.
Но почему ты рассматриваешь только такие варианты? и не рассматриваешь пример библиотек, нарушающих эти факторы, и пример DSL, которые эти факторы не нарушают?

G>А все почему? Потому, что это обычный JS. Никакой не DSL.


вот это тоже обычный JS: он тебе понятен?

var u = {
    n: 'tj'
  , p: ['tobi', 'loki', 'jane', 'bandit']
};

u.s.h.p('name', 'tj');
u.s.h.p('pets').w.l(4);

sm(f, function(e, r){
  s.n.e(e);
  s.e(r);
  r.b.s.e(f);
});


я думаю не очень, потому что в нем нарушен один из вышеуказанных факторов.

а вот этот DSL ты скорее всего поймешь
var user = {
    name: 'tj'
  , pets: ['tobi', 'loki', 'jane', 'bandit']
};

user should have property ['name', 'tj'];
user should have property 'pets'
 with length of(4);

someAsyncTask(foo,
 (err, result) => 
  {
   should not exist err;
   should exist result;
   result.bar should equal foo;
  }
);
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 13.03.13 00:09
Оценка: +1 :)
вопрос более практический.

Если по DSL-у учебник вышел, то такой DSL уже использовать можно или еще нет?
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 13.03.13 03:29
Оценка: +1 :)
Здравствуйте, Gaperton, Вы писали:

G>Понятно. Менеджеры во всем виновыты. У них иррациональные страхи. Как это знакомо .


Да ладно. Во всём виноваты только девелоперы. Менеджеров если и можно в чём-то винить, то только в нехватке времени для ухода за своими нимбами.
Если нам не помогут, то мы тоже никого не пощадим.
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 15.03.13 11:46
Оценка: :))
Здравствуйте, IT, Вы писали:

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


IT>Таких проектов тысячи. Шаблоны в плюсах, ASP.NET MVC, T4 templates, миллиарды доморещенных кодогенераторов, System.Reflection.Emit, System.Linq.Expressions и построенные на них библиотеки вроде BLToolkit — это всё метапрограммирование.


Это МП в очень урезаном виде, собтсвенно компоненты разработаны большой конторой или имеют широкое коммюнити. Такое МП очень востребовано программистами, т.к. позволяет накапливать опыт как девелоперу, так и команде, фирме так и коммюнити. И это значит, что решение с большой вероятностью поймет другой разработчик.
А вот на счет "миллиарды доморощенных кодогенераторов" я не уверен, что там все гладко с т.з. бизнеса. Например потому что техническая сложность задачи и сложность решения задачи вещи между собой никак не связаные. Добиться что бы сложность решения соответствовала сложности решения да с одного тыка в доморощенном проекте это вобщем сказки, басни, выдумки и тд.
С метапрограммированием вроде T4 все очень просто — посмотрел, как нужно использовать, посмотрел где можно использовать, и с большой вероятностью решение не будет ни провальным, ни заумным.
Зато с самопальными ДСЛ, самопальным метакодом вроде макросов, все ровно наоборот — как правило код пишется такой, что понятен ровно одному человеку, максимум одной тиме. Собтсвенно ровно тоже с обычным фремворком, если девелопер будет писать код от скуки или это будет просто одноразовый код на выброс. Как правило это редкость. А в случае самопального МП это норма, забороть это можно только массированым применением решения и накоплением опыта использования и наблюдения за стоимостью майнтенанса, суппорта и траблшутинга.
Собтсвенно по ДСЛ и макрам ничего такого нет в помине, при этом стоимость суппорта и майнтенанса превышают стоимость стартапа иногда даже на порядки. Теперь, если учесть, что майнтенас и суппорт типично считаются "простыми" задачами, совершенно неочевидно, как сделать их дешовыми если использовано самопальное МП, которое практически всегда требует квалификацию вроде той, которая была у разрабов на стартапе. То есть, — суппортать и майнтейнить ВиаВеб могли только Грехем со товарищи, мультимиллионеры, что им тупо не было интересно. И найти надо было не просто лисперов, а лисперов которые могли поднять тот метакод. Парадокс — если такой лиспр найдется, то с большой вероятностью ему такой проект будет неинтересен, он уже готов, он скорее убежит в другой стартап и может даже станет очередным Грэхемом().
The animals went in two by two, hurrah, hurrah...
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 15.03.13 12:29
Оценка: :))
Здравствуйте, IT, Вы писали:

IT>А если серьёзно, то есть вещи, в которых, конечно же, должен принимать участие менеджер, а разработчик должен предоставить ему выбор. Например, решение на макросах — условно, месяц, решение без макросов — три. Выбирай, родной.


И опять ни слова про стоимость майнтенанса и суппорта. В большинстве проектов стоимостью стартапа можно пренебречь по сравнению с майнтенансом и суппортом. Это означает примерно следующее — на стартапе можно давать любые ЗП лишь бы проект сделали как надо. А на майнтенасе и суппорте все должно быть максимально предсказуемо, просто и самое главное — дешево. Если есть перспектива 10 лет трахаться с поисхом лисперов, функционалистов то здесь нет ни предсказуемости, ни дешевизны, так как таких специалистов от силы 1-2% от общей массы и ЗП у них часто вдвое втрое выше чем у рядовых девелоперов. С учетом того, что нужно снизить риски связаные с уходом специалиста, брать надо 2-3 человека. Внезапно оказывается, что по рискам и деньгам майнтенас у лисперов, функционалистов выходит намного дороже простых пхп-джавистов-дотнетчиков.
The animals went in two by two, hurrah, hurrah...
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 05:14
Оценка: +2
Здравствуйте, IT, Вы писали:

IT>Ты так говоришь как-будто у тебя богатейший опыт использования МП и DSL. И весь он при этом сугубо отрицательный. Ты сам когда-нибудь участвовал в таких проектах? Или это всё твои домыслы? Думаю, что второе. Поэтому советую тебе говорить обо всём об этом либо в будущем времени, либо в условном наклонении. Тогда можно будет это обсуждать. А так это всё выглядит как беспочвенные домыслы.


Ты можешь как то внятно обосновать, каким образом единичные самопальные практики станут гарантировано понятными девелоперам попроще ? Ну без намеков на мою квалификацию, но если хочешь, можешь и с намеками, если ничего другого нет.
The animals went in two by two, hurrah, hurrah...
Re[31]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 16.03.13 12:40
Оценка: +1 -1
Здравствуйте, Tanker, Вы писали:

T>Сами по себе они обеспечивают довольно высокий уровень вхождения. Инструментами это не забороть. Инструментами можно сделать так, что в некоторых случаях МП можно использовать "по рецепту", типа T4. В общем случае высокий порог вхождения так и остаётся. Радикально снизить этот порог можно только посредством введения МП и ДСЛ в университетскую программу во взрослом виде, а не в виде курсе на 18 часов и три с половиной лабораторных.

1)Порог вхождения в ООП намного больше. Я серьёзно. Ибо сделать хороший ОО дизайн намного сложнее, чем хороший ДСЛ. Более того хороший ДСЛ возможен для любой предметной области которую вообще возможно формализовать. Для ООП, ФП, ЛП,... и любого другого программирования, которое навязывает вычислительную модель это не верно.

2)Для распространенных задач будут распространенные языки с большим сообществом. Точно так же как сообщества организуются вокруг больших и хороших библиотек.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 16.03.13 17:59
Оценка: +2
Здравствуйте, Mamut, Вы писали:

Z>>Так они риторические, как на них надо реагировать? Эти проблемы не являются специфичными для DSL, они актуальны для любого кода. Хочешь о них поговорить — создай отдельную ветку.


M>Нифига они не риторические. Это — реально существующие проблемы, о апологеты DSL тут не хотят говорить вообще, продолжая рассказывать одни и те же басни уже который год
Автор: WolfHound
Дата: 16.03.13


Еще раз. Это общие проблемы повторного использования кода. ООП, ФП, МП и DSL в частности, не позволяют программисту о них забыть и подвержены проблеме в равной степени. Каким боком, ты их относишь к проблеме DSL и тащишь в каждый топик я понять не могу.

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

Я тебе рассказывал историю, как замерил быстродействие парсера джейсона, созданного на коленке для изучения Nemerle.Peg? Так вот, он оказался чуть быстрее Newton.Json (долгое время бывшего стандартом в мире .net), возраст которого был уже не один год и вопросами оптимизации автор занимался очень серьезно. Без DSL я бы достиг подобного результата за время минимум на пару порядков больше.

M>Никто не спорит, что DSL — рабочая технология. Спорят тут с излишне ярыми апологетами.


Лично ты регулярно выносишь в ключевые недостатки DSL вещи совершенно ортогональные. Качество документации, качество кода и порог вхождения. Все это, в случае с DSL будет не хуже, а порог вхождения еще лучше аналогичного решения без MP.
Re[41]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 19.03.13 12:56
Оценка: +1 :)
Здравствуйте, WolfHound, Вы писали:

T>>Он что, сам пишется и сам выполняется и сам же отлаживается ?

WH>Ну да. Один раз написал ДСЛ, а дальше всё само.
WH>Или хочешь сказать, тебя волнует тот машинный код, который получается в результате работы компилятора твоего любимого языка программирования? Я думаю, 99.999% программистов туда по делу ни разу не заглядывали.

Меня волнуют все особенности, свойства, сайдэффекты, расход памяти, перформанс и тд и тд и тд. Ты лучше выпусти какой нибудь Uber-продукт кроме фремворка-компилятора, а то одни обещания, что все буедт красиво.

WH>>>А всё по тому, что генерируемый код не требует поддержки.

T>>Это слишком сильное утверждение.
WH>Это факт.

Это просто глупость, потому что никто не предлагает фиксить руками генереный код. Тем не менее баги там бывают и фиксить их нужно. Сложность фиксов на порядок выше сложности фиксов простого рукописного кода.
The animals went in two by two, hurrah, hurrah...
Re[22]: Кстати, про PEG
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.13 13:12
Оценка: +1 :)
VD>Обожаю телепатов.
VD>Не говоря уже об отдельных тестах PegGrammar

Ога. Отдельные. Уж не эти ли, полностью закомментированные?

VD>используется в самом Nemerle для прсинга C# (Nemerle умеет компилировать C#-файлы). Так что он тестируется непосредственно в тестах немерла.


Я ждал этого ответа.



VD>Зайди вот сюда и поищи файлы с расширением ".cs".

M>>2. В случае возникновения ошибок в парсере/генерации кода, сколько времени тебе понадобится найти и изменить ошибку,

VD>Пока что больше часа эта задача не занимала.


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



M>>имея на руках два-три десятка исходников без комментариев и завязанных на неизвестно количество макросов, определенных неизвестно где, и неизвестно, во что разворачивающихся?


VD>А это все твои выдумки. И комментарии можно добавить (и они есть).


Две строчки комментариев на два десятка файлов — это не комментарии

VD>На что код завязан тоже легко ищется. Он же квази-цитатами генерируется. Так что соответствие между генерируемым кодом и шаблонами находится под подвыражениям на раз.


Что такое «подвыражение»? Более того, «находится на раз» != «моментально становится понятно, что это такое, и что оно там делает»


M>>Автор этого добра написал это добро, которое, цитирую «может генерировать любой говнокод с нарушением всех правил хорошего тона результирующего языка, за нарушение которых при ручной работе нужно отрывать руки», и уволился из компании. Через два дня это добро начало вылезать боком изо всех щелей. Что будешь делать? Продолжать вещать сказки про «ах-ах-ах, все так прекрасно»?


VD>Тебе уже устали повторять. История когда кто-то написал много не очевидного кода и уволился может произойти где угодно и когда угодно. Без разницы наколбасил ли человек кучу, который никто понять не может, кода руками или сгенерировал его. В любом случае, если нет лиц способных понять этот код, то дело плохо.


Нет. Это не мне устали повторять. Это мы устали повторять это сказочникам.

VD>И решение этой проблемы, очевидно, есть только одно. Нужно иметь более одного человека посвященного в проблему. Уходя человек должен посвятить в проблему еще кого-то. Если это произойдет скоропостижно, то задачу на себя должны взять другие.


Решение только и исключительно административное, заметь.


VD>То что кучу сложного кода может поддерживать кто угодно вот это и есть реальная сказка.


Ну вот вы ее постоянно и рассказываете


M>>Я и PEG пользуюсь и, скажем, SQL'ем или каким-нибудь гремлином с cypher'ом. Вот только не надо рассказывать ничем не подкрепленные сказки про мега...мега...мега... DSLей.


VD>Ярлыки "сказки" и "мега" приклеиваешь ты сам. Лично я пользуюсь МП и ДСЛ-ями каждый день и вижу очевидное преимущество этого подхода на реальных задачах. Не скажу, что ДСЛ и МП — это мега круто, но это очень мощный инструмент применение которого с умом дает очень много.


О, как интересно риторика у аплогетов ДСЛя начала меняться...


dmitriid.comGitHubLinkedIn
Re[25]: Кстати, про PEG
От: ionoy Эстония www.ammyui.com
Дата: 22.03.13 08:26
Оценка: +2
Здравствуйте, Tanker, Вы писали:

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


T>>>Это не тот Nemerle-C# который не может скомпилировать BLT ? Аргумент не в пользу Peg, скажем так.


VD>>Есть огромная разница между распарсить, и скомпилировать. Любой C# 4-код парсится без проблем.

VD>>К тому же компиляция BLT проходит. Но в немерле есть некоторые косяки которые приводят к падению скомпилированного кода в рантайме.

T>Компиляция и парсинг никому, кроме гиков, не нужны, если код падает в рантайме.

T>P.S. Приходишь ты в лабаз и говоришь — дайте мне BMV X5 последний. Они тебе дают и говорят — есть огромная разница между выпуском авто и кручением руля. У нас авто выпускаются без проблем. Да и руль крутить можно. Но есть некоторые косяки, из за которых X5 ехать не может.

Но ведь парсер и DSL выполняют свою задачу корректно, так что почему это аргумент не в пользу Peg, я
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.03.13 10:27
Оценка: :))
Здравствуйте, IT, Вы писали:

IT>Лучше прикинь другое. Для сапорта и мейнтененса никто не нужен, потому что сапорт и мейнтененс настолько тривиальны, что занимают от нуля до половины процента времени. У меня вообще хобби такое создавать решения не требующие саппорта. А если я уйду, то минимум год с моим кодом будет всё в порядке. В нём легко разберуться и легко начнут сапортить, пока не понавносят туда изменений, которые напрочь уничтожат всю вложенную туда простоту мейнтейнабилити и саппортобилити. И пофиг будут там МП и DSL или их там не будет.


Я вот подумал, ты вещаешь как заправский разработчик инфраструктурных проектов. На таких проектах никогда денег не бывает, так как деньги зарабатывает другой бизнес, который и является основным источником.

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

Чисто теоретически, так возможно и в продуктовых, но на деле ограничения другие. Над проектом могут работь несколько команд, в разных регионах, очень много суппорта и майнтенанса, потому что обычно тащится 2-3 мажорных версии.

В инфраструктурных проектах, что будет если ты накосячил ? Ну попользуются месяц-другой старой версией.

В продуктовых шансов на ошибку быть не может, а денег вобщем хватает.

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

А дальше, как ни странно, в первую очередь нужны не мега-супер-пупер девелоперов(хотя они безусловно нужны) а тщательные перепроверкии, качественными коммуникации. Самое главное — что бы низы хоршо понимали то, что пишут верхи и могли в случае чего заменить.

И вот здесь получается так, что мега-МП-ДСЛ создают сильные риски, которые сказываются на проекте.

В инфраструктурном, если ушел архитект, ну и хрен с ним, посидят на старой версии пока новый не подымет проект.

В продуктовом это фейл, цена которого равняется цене релиза.

То есть, с точки зрения оптимизации тоже не все гладко. Мега-девелоперы и мега-архитекты, если все команды во всех регионах не имеют адекватного понимания, всего лишь локальные оптимизации. А нам, девелоперам, известно, что локальные оптимизации в общем случае могут запросто конфликтовать с глобальными.

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

Единсвенное решение — административное. Например всегда иметь дублеров и желательно не одного, а двух.

И выходит так, что мега-МП-ДСЛ само по себе не работает, ему нужен административный костыль. Опаньки !
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 28.03.13 12:37
Оценка: +1 :)
Здравствуйте, vdimas, Вы писали:

V>Поэтому все твои аргументы, ес-но, идут прямиком в сад, бо ты пытаешься рассуждать о ситуации, в которой ни разу не был, бо привел небольшой пример языков с хорошим сообществом.


Все твои аргументы базируются на том, что твои студенты налепят говна из DSL. Уж извини, это не проблема DSL.

V>Уже говорили тебе — отличается самодокументируемостью любых библиотек на типизированном ЯВУ. Для понимания библиотеки через АПИ достаточно знания ЯЗЫКА, на котором и для которого эта библиотека. Язык — это фундамент. Знание языка — трамплин для понимания любых вещей внутри экосистемы языка.


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

Остальные переходы на личности я скипну и закончим обсуждение. Ничего интересного ты пока не сказал. Подменой предмета дискуссии на обсуждение личности собеседника ты тут никого не удивишь, бо не первый год тебя знаем.
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 28.03.13 12:56
Оценка: :))
Здравствуйте, Ziaw, Вы писали:

Z>Не понял мысль. Ты не показал, чем .should.have для разработчика лучше should have.


Лучше тем, что задается в некоторых рамках валидного уже известного языка.
Re[68]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.03.13 10:09
Оценка: :))
Здравствуйте, Sinclair, Вы писали:

I>>Тогда расскажи, про какой из всех возможных видов роутинга ты конкретно имел ввиду ?

S>про тот, который в AXD-301

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

S>Кстати, веб-сервер на эрланге гнёт в дугу сервера на православных императивных ОО-языках только в путь — и в первую очередь на одном процессоре и ограниченной памяти.

S>Это к вопросу о распределённости и "на одном проце".

Ждём, когда этот сервер вытеснит "сервера на православных императивных ОО-языках ".
Re[31]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 02.04.13 01:20
Оценка: +1 -1
Здравствуйте, Ikemefula, Вы писали:

I>Откуда старение возьмется, если стартапы, молодые фирмочки, мелкие студии плодятся как кролики ?


Элементарно, Ватсон! Чтобы старение было незаметным, нужно каждый год производить в десять раз больше молодых программистов, чем уже есть на рынке. И так было лет 15-ть назад. А сегодня приток молодёжи составляет несколько процентов в год и эта цифра с каждым годом уменьшается, а годы увеличиваются.
Если нам не помогут, то мы тоже никого не пощадим.
Re[68]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: nullxdth Россия  
Дата: 09.05.13 23:02
Оценка: :))
Здравствуйте, alex_public, Вы писали:

>На самом деле хочется следующего:


>1. Добавления удобного МП в мощные мейнстримовые языки. В идеале в C++ и Java, как обладающие самой развитой сейчас инфраструктурой.

>2. Способ добавление (препроцессор, фронтенд к существующему компилятору, альтернативный компилятор) значения не имеет. Хотя в случае C++ третий вариант вряд ли возможно сделать сравнимым по эффективности с существующими монстрами.
>3. Макросы обязательно должны работать с исходниками не как с текстом, а разбирая конструкции языка. Это естественно ключевой пункт, т.к. текстовых вариантов уже давным давно полно.
>4. Чтобы ключевые IDE не тошнило от этих макросов (плагины к ним или что-то подобное). В принципе это пункт опциональный, но очень очень желаемый...
>5. Язык самих макросов не принципиален. Но хочется что-то позволяющее одновременно и ненапряжно делать простейшие вещи (типа макросов C++) и создавать целые DSL при надобности.

>Вот такие скромные хотелки. За их реализацию в принципе и не жалко денег заплатить. В смысле за готовый продукт, а не за разработку. )))


Я вас обрадую. Всё это уже давным давно есть -- LISP и Emacs называется.
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 02.01.13 19:04
Оценка: 15 (1)
Здравствуйте, AlexRK, Вы писали:

ARK>Когда имеешь дело с библиотекой, надо выяснить только семантику методов. Когда с DSL — надо еще и синтаксис ковырять. Очевидно, что писать совсем простой DSL не имеет смысла. А немаленький DSL надо, во-первых, проектировать (что уже само по себе сложно), во-вторых он по любому будет содержать "темные углы". В придачу к темным углам языка добавляются темные углы DSL.


Если есть DSL, то он должен быть проще чем вызов методов. Поэтому учить его должно быть не сложнее, чем изучать семантику методов. Иначе он обычная ошибка проектирования и доставляет проблем столько же сколько любая другая ошибка проектирования.

ARK>В общем, DSL нужен только когда без него вообще не обойтись. И это надо в каждом конкретном случае показать.


В простых DSL совершенно простой синтаксис. Его учить не дольше, чем аналогичный API.
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: _DAle_ Беларусь  
Дата: 04.01.13 15:57
Оценка: 15 (1)
Здравствуйте, koodeer, Вы писали:

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


Z>> a.Insert(b) и insert b into a


K>Я именно такие примеры имел в виду, когда писал ранее о плохой подаче информации о макросах и дслях. Большинство обучающих примеров сделаны именно так: сперва пишется некая простая функция (Insert()), потом она заменяется на макрос (insert into). В итоге читатель не видит никакой разницы, уменьшения кода не происходит, понимание не улучшается.


Давайте я покажу пример чуть сложнее из нашего проекта. Задание бизнес-логики, объявление функционала в виде композиции других функционалов.
java:
LP entryPrice = addJProp(null, "entryPrice", "Цена входная", and(false), price, 1, 3, quantity, 1, 2, 3);


DSL:
entryPrice 'Цена входная' (invoice, stock, sku) = price(invoice, sku) IF quantity(invoice, stock, sku);


K>Информацию следует подавать по другому: брать приличный кусок кода, который невозможно сократить с помощью стандартных средств (языки без МП), и показывать пример, как этот код может быть заменён однострочным макросом. Для затравки, привития интереса — самое то.
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 12.03.13 15:02
Оценка: 12 (1)
Здравствуйте, Ziaw, Вы писали:

G>>Отличается. Ты знаешь правила чтения и синтаксис обычного кода. Это дохрена, если вдуматься.


Z>
Z>var lightsOut = 1.Hour(30.Minutes()).After(bedTime);

Z>Assert.That(actual, Is.LessThan(50.Milliseconds().After(expected)));
Z>


Z>Что про этот код говорит знание синтаксиса, а что обычная логика?


Обычная логика говорит мне, что если бы этот код состоял из конструкций самоделкина, в котором я ищу ошибку, то доверять в нем нельзя ни единому слову. Например, LessThan может на деле в ряде ситуаций означать LesserOrEqual, или того хуже.

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

Чтобы ты прочувствовал, насколько это много — скажи мне, что тебе говорит вот этот код:
s =: ({. , }. /: 12"_ o. }. - {.) @ /:~
l =: 11"_ o. [: (* +)/ }. - {!!
rr =: (1"_ , (0"_ > 3: l\ ]) , 1"_) # ]
hull =: [: rr^:_ s


Нет, это вовсе не язык непонятный. И программа вполне хорошо написана. Единственная проблема в том, что ты (скорее всего) читать его не умеешь — не надо путать это собственным невладением языком. Однако, эта проблема довольно просто решается — по J все-таки есть "учебники".

G>>Ни одной строчке чужого дсл, ни одному слову ты доверять не можешь. Особо учитывая то, что в нем могут быть баги.


Z>Несмотря на синтаксис C#, это обычный DSL. Чтобы его читать важнее знать домены (измерение времени и тестирование), чем ломать голову над вопросами неоднозначности синтаксиса:


Неужели? А вот это самый обычный JavaScript, а конкретнее — вполне обычная библиотека should.js. Выглядит куда приличнее, чем "обычный DSL". Никаких таких "доменов" знать не надо — на, полюбопытствуй.

var user = {
    name: 'tj'
  , pets: ['tobi', 'loki', 'jane', 'bandit']
};

user.should.have.property('name', 'tj');
user.should.have.property('pets').with.lengthOf(4);

someAsyncTask(foo, function(err, result){
  should.not.exist(err);
  should.exist(result);
  result.bar.should.equal(foo);
});
Re[46]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: ionoy Эстония www.ammyui.com
Дата: 18.03.13 13:52
Оценка: 7 (1)
Здравствуйте, Ikemefula, Вы писали:

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


WH>>Хотя и тут ООП будет вставлять палки в колеса.

WH>>Посмотри, как можно сделать ДСЛ для ГУИ.
WH>>http://nemerlewebsamples.apphb.com/

WH>>Сравни с WPF на C#...


I>Судя по тому что примеров в немерлевеб не добавляется, то за полгода, что ты показываешь эту ссылку, ничего не изменилось. Похоже, немерлевеб это фремворк для написания ровно таких UI как в примерах по твоей ссылке.


Сейчас просто нет смысла добавлять примеры, так как основная цель это достигнуть "релиз" статуса. На данный момент допиливаем поддержку парсинга Typescript, дальше надо будет убрать некоторые шероховатости и сделать шаблоны для проектов и файлов. Параллельно разрабатывается пара "больших примеров", на которых, собственно, обкатывается технология. Скажу так, делать страницы на этом фреймворке невероятно приятно, так как не нужен код обвязки, только чистая логика. Но пока ещё есть некоторые затыки, без исправления которых нельзя выпустить продукт в люди.

Когда зарелизимся, обязательно добавим побольше примеров, их создание много времени не занимает.
Потихоньку появляются люди, заинтересованные в том, чтобы помочь развитию проекта, но в любом случае рук не хватает. У всех участников много времени уходит на основную работу, поэтому на NemerleWeb не получается тратить столько времени, сколько хотелось бы.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 02.01.13 06:26
Оценка: 5 (1)
Здравствуйте, Ikemefula, Вы писали:

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


I>Как то так выходит, что самые лучшие примеры по ДСЛ и Немерле от людей, которые мягко говоря не в ладах с местными немерлистами.


А что тут удивительного? Ведь DSL — DOMAIN specific language. Предметная область действия разработчиков Немерле — разработка Немерле (кэп на связи). Поэтому они и мыслят в первую очередь об этом, и создают макросы, упрощающие жизнь им самим.
А примеры не из мира компиляторостроения должны выдавать разрабы, не создающие сам N, а пользующиеся им.


I>Думаю не дальше чем через пару страниц от вас снова появятся автоматы, калькуляторы, пермишны и прочая ерунда которая оскомину набила еще лет пять назад.


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


Внезапно подумалось: вообще-то, это даже хорошо. Ведь часто встречаются ситуации, когда код пишет (или правит) человек, не владеющий спецификой предметной области. Имеется в виду код на ЯОН. А если код будет написан на DSL, то в него просто так не влезет посторонний. В какой-то мере это будет способствовать тому, что люди не разбирающиеся в данной области, не будут совать свои грязные ручонки в код.
Re[46]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 18.03.13 04:56
Оценка: 4 (1)
Здравствуйте, C.A.B, Вы писали:

С комментариями там туго, да.

CAB>
CAB>using NemerleWeb;
CAB>using System.Linq;
CAB>using System.Collections.Generic;
CAB>using Nemerle.ComputationExpressions;

CAB>namespace NemerleWeb.Samples
CAB>{
CAB>  [Unit]
CAB>  class CompListPage
CAB>  {
CAB>    Alphabet : array[string] { get; set; }              //<-- что значит "{ get; set; }"? - автосвойство, стандартный синтаксис в Nemerle и C#
CAB>    OddLettersOnly : bool { get; set; }
CAB>    LetterCount : int { get; set; }
CAB>    Letters : list[string]
CAB>    {
CAB>      get
CAB>      {
CAB>        comp list
CAB>        {
CAB>          for (mutable i = 0; i < LetterCount; i++)    //<-- что здесь происходит(разве DSL для GUI не должен быть декларативным)? - это не DSL для GUI, это бизнеслогика
CAB>            when (!OddLettersOnly || i % 2 == 1)
CAB>              yield Alphabet[i];
CAB>        }
CAB>      }
CAB>    }
    
CAB>    public this()                                      
CAB>    {
CAB>      Alphabet = array["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];  
CAB>      LetterCount = 3;
CAB>    } 
 
CAB>    public More() : void                              //<-- зачем тащить логику в GUI-DSL?  - это тоже логика UI (ViewModel)
CAB>    {
CAB>      when (LetterCount < Alphabet.Count())        
CAB>        LetterCount++;
CAB>    }

CAB>    public Less() : void
CAB>    {
CAB>      when(LetterCount > 0)
CAB>        LetterCount--;
CAB>    }
    
CAB>    [Html]
CAB>    public View() : string
CAB>    {
CAB>      <#
CAB>        <div>                                         //<-- HTML имхо, тоже стоит спрятать(на фоне остального смотрится не айс). - а это как раз DSL для GUI, стоит его прятать или нет вопрос спорный, но к теме он не относится
CAB>          <h3>Alphabet</h3>
CAB>          <button click="$More">More</button>
CAB>          <button click="$Less">Less</button>
CAB>          Odd letters only <input type="checkbox" checked="$OddLettersOnly" />
CAB>          <div class="name-list">
CAB>            <span $foreach(l in Letters)>
CAB>              $(l + " ")
CAB>            </span>
CAB>          </div>
CAB>        </div>
CAB>      #>
CAB>    }
CAB>  }
CAB>}
CAB>


CAB>и графического редактора.


Графические редакторы для HTML не работают, провальная затея.
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 13.03.13 21:38
Оценка: 2 (1)
Здравствуйте, Ziaw, Вы писали:

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


G>>Не, не пойму. Потому, что это — типичный DSL самоделкина, за который надо отрубать руки. С налетом CoffyScript, причем не по делу и на ровном месте, что усугубляет. Понятно одно — автору по какой-то причине не нравится plain.js (или он его элементарно не знает), и он пишет на ровном месте, где полагается быть ровному коду, непонятную хрень.


Z>А если это будет не налет, а обычный CoffeeScript? Который, вполне заточен под подобные DSL. Его использование тоже будет продиктовано незнанием plain.js?


Дружище. Если это будет обычный CoffyScript, то для него не понадобится делать никакого DSL под эту задачу.

Потому, что из CoffyScript ты просто воспользуешься тем же самым should.js (с вызовами уже в синтаксисе CoffyScript), без каких-либо его изменений. И опять-таки, никакого DSL не возникнет. Should.js не перестанет быть простой библиотекой на JS, а CoffyScript не превратится в DSL.

Понимаешь разницу? У меня в программе CoffyScript с его правилами, и у меня вызовы assert.js с теми же самыми правилами, которые я знаю, потому что CoffyScript. И мне не надо гадать, что означают эти внезапные и немотивированные вкрапления пробелов в мою программу в момент, когда я вижу что-то типа ассертов. Мне не надо переключать мозг. Я пишу CoffyScript, я читаю CoffyScipt. Без вкраплений какого-то странного говна.

И я могу сколько угодно чужих библиотек подрубить на CoffyScript или JS, и моя программа с их использованием все равно будет написана на одном языке, с едиными правилами чтения вызовов. Это очень важно. Для читающего чужой код, не свой. А это, в нашем мире, штатная ситуация. Понимаешь?

G>>А вот should.js понять элементарно, потому, что это, во-первых

G>>a) это plain JS, и, во-вторых...
G>>b) ...should is an expressive, readable, test framework agnostic, assertion library for node. А не какой-то там DSL от самоделкина.

Z>Это именно DSL от самоделкина. Причем этот самоделкин создает как раз языки.


Вот, добрались наконец. Пойми, это никакой не DSL. Это обычная библиотека на JavaScript. Вещи надо называть своими именами, не надо играть терминами. И сыпать баззвордами налево и направо. Слова — это не игрушки. Это вещи, которые значат что-то.

Вот эта хрень с пробелами вместо точек, которую привели выше — это DSL. А should.js — библиотека на JS.

Z>


Z>Я регулярно сталкиваюсь с подобными, вполне приличными DSL от самоделкиных. Достаточно документированными и понятными, в существование которых истово не верит Мамут.


Пройдись по моему чеклисту на два моих поста выше. Проверь по нему этот язык. Например, сообщество большое по этому языку?
Re: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 21.12.12 14:02
Оценка: +1
Здравствуйте, LaPerouse.

Я думал-думал, я всё понял!

Главная причина непринятия DSL — крайне неудачные примеры введения в метапрограммирование. Сколько я видел кратких введений в МП — везде приводятся крайне неудачные примеры: ставится простенькая задача, пишется функция, решающая эту задачу, затем вместо функции пишется расширение (оператор) языка, решающий ту же задачу. Увы, именно такими примерами напрочь отбивают принятие МП и DSL. Ведь сокращение кода не происходит: была функция, стало новое слово языка; упрощение кода тоже не происходит (по той же причине).

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

Просто нужна правильная пропаганда. Нужны правильные примеры. Да, здесь, на РСДН, такие примеры есть (естессно, на Немерле). Здесь приведено множество крайне удачных примеров, когда МП в разы сокращает код, избавляет от копипасты, упрощает понимание кода. Увы, лишь некоторые дотнетчики обращают на них внимание. Все остальные — продолжают оставаться в дремучем неведении, что МП и DSL — не нужны.
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 21.12.12 14:24
Оценка: +1
Здравствуйте, dimgel, Вы писали:

D>Я вот щас полуфлеймовый полуоффтоп забабахаю. Не надо это воспринимать как несогласие с написанным, просто к слову пришлось. Уж сколько ругани было вокруг неудачного примера вычисления факториала, на котором в школах показывают рекурсию! Сколько ругани!!! И в реале, и в интернете. Мол, нафига городить огород с рекурсией там, где можно обойтись простым циклом? Я, разумеется, всячески поддерживал эту точку зрения. Пока не начал ФП изучать... С тех пор каждый раз, вспоминая про этот многострадальный факториал, хожу-хихикаю.


Кстати, да, хороший пример. Я тоже всегда раздражался, видя примеры вычисления факториала рекурсией.
Однако, и в ФЯП простая рекурсия не годится. Нужно её привести к хвостовой. Поэтому — хорошие примеры по-прежнему важны.
Re: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: minorlogic Украина  
Дата: 21.12.12 22:38
Оценка: :)
Создание программы на ЯОН не что иное как написание DSL. Вводить же для DSL другой синтаксис чем используемый в ЯОН было бы, мягко говоря, странно.

Отсюда ЯОН vs DSL существует только в воспаленном воображении.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 23.12.12 09:10
Оценка: +1
Здравствуйте, LaPerouse, Вы писали:

LP>1. Возможность подобного радикального сокращения существует только для задач, которые изначально плохо ложатся на выбранный императивный (объектно-ориентированный или функциональный) язык общего назначения. Но и задач, в которых оправдано использование декларативного языка (такого, как Datalog), совсем немного. По правде говоря, в практике обычного программиста их почти нет. Таким образом выгоды от использования декларативных dsl-ей, мягко говоря, преувеличены. Их просто негде применить. Неудивительно, что сторонники DSL "не поняли" код, предложенный AndrewVK в качестве примера для демонстрации мощи DSL-я. А секрет прост — Андрей предложил чисто императивный код, который не перепишешь на том же даталоге.


На Dataloge переписали всю программу, а не какой-то кусок одной из функций, как предложил сделать Андрей.

LP>2. Спрашивается, при чем же здесь собственно сам DSL? Эдак ведь и тот же хаскель можно считать DSL-ем, да и вообще любой язык, отличный от языка реализации.


Ессно любой. Тот же C# уже включает в себя несколько DSL, linq, async/await. Тот же using (для IDisposable) и lock это мини DSL. В яве DSL разрабатываются для ORM и DI контейнеров. DSL давно уже проникли в нашу жизнь, вопрос только в том, что их создание все еще чересчур трудоемкая процедура для повседневного применения. Вольфхаунд утверждает, что не за горами будущее, когда создание DSL будет равно созданию библиотеки. И применяться будет столь же часто.

LP>3. Пикантность ситуации в том, что DSL-и таки повсеместно используются в индустрии. Та же объектно-ориентированная модель предметной области — пример DSL-я (а точнее, его ядра), массово используемого на практике. И в приведенном Андреем коде уже используется DSL, составленный из модели инвентарных карточек и структур языка ОН для манипулирования ею. Модель предметной области может быть легко сгенерирована из UML-подобного представления. Я в последнее время, к примеру, описываю модели исключительно на EMF.


Совершенно верно. Графические дизайнеры это еще не все. За неимением средств расширения синтаксиса, часто, для предметной области сейчас делается некий API в рамках стандартного синтаксиса ЯОН. Этот API настолько близок к понятию DSL, что совершенно непонятно, где проводить границу. Особенно близко к отдельному языку получаются fluent API.

Query luceneQuery = mythQB
    .bool()
      .must( mythQB.keyword().onField("description_stem").matching("urban").createQuery() )
        .not()
      .must( mythQB
        .range()
        .onField("starred")
        .from(3).excludeLimit()
        .to(5)
        .createQuery() )
      .must( mythQB
        .range()
        .onField("creationDate")
        .above(twentiethCentury)
        .createQuery() )
    .createQuery();
Re[2]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.12.12 10:58
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>Тот же C# уже включает в себя несколько DSL, linq, async/await. Тот же using (для IDisposable) и lock это мини DSL.


Между этими DSL и тем, что предлагается есть существенная разница — первые прописаны в универсальном стандарте C# и их знание можно ожидать от любого приличного разработчика, заявляющего о владении шарпом. Что же касается языков имени меня, то им придется обучать всех, кроме меня самого.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 31.12.12 18:14
Оценка: +1
Здравствуйте, koodeer, Вы писали:



K>Главная причина непринятия DSL — крайне неудачные примеры введения в метапрограммирование. Сколько я видел кратких введений в МП — везде приводятся крайне неудачные примеры: ставится простенькая задача, пишется функция, решающая эту задачу, затем вместо функции пишется расширение (оператор) языка, решающий ту же задачу. Увы, именно такими примерами напрочь отбивают принятие МП и DSL. Ведь сокращение кода не происходит: была функция, стало новое слово языка; упрощение кода тоже не происходит (по той же причине).


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

K>Просто нужна правильная пропаганда. Нужны правильные примеры. Да, здесь, на РСДН, такие примеры есть (естессно, на Немерле). Здесь приведено множество крайне удачных примеров, когда МП в разы сокращает код, избавляет от копипасты, упрощает понимание кода. Увы, лишь некоторые дотнетчики обращают на них внимание. Все остальные — продолжают оставаться в дремучем неведении, что МП и DSL — не нужны.


Как то так выходит, что самые лучшие примеры по ДСЛ и Немерле от людей, которые мягко говоря не в ладах с местными немерлистами.
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 31.12.12 18:33
Оценка: +1
Здравствуйте, Mamut, Вы писали:

Z>>Обычно документированный.


M>С какого перепугу?


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

M>У нас на работе используется 3, по сути DSL'я. Уровень документации во всех трех — аховый. Без-DSLная алтернатива — описывать все то же в Erlang'е.


А как писать все то же, но в Erlange документировано лучше? Ты примеры давай, я тебе верю конечно на слово, но без примеров дискутировать не очень интересно.

M>Осталось понять, каким образом такой хороший DSL может появиться. Это во-первых. Во-вторых — выделенное.


Так же как и любой другой код для повторного использования. Он появляется потому, что без него еще хуже. А уж будет этот код документирован и продуман не зависит от того, DSL это или нет.
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 02.01.13 08:07
Оценка: +1
Здравствуйте, Mamut, Вы писали:

M>Они будут документированы не больше и не меньше, чем любой другой код.


Дык твои оппоненты говорят ровно то же самое. Что обычная либа, что DSL — никакой разницы. Только DSL типа компактнее.

M>МикроDSL — еще куда ни шло. Пока эти самые microDSL не выливаются в толпу микроДСЛей, нагроможденных друг на друга


Как раз микроDSL-и только так в такую толпу выливаются. Что мы и имеем на скале. Поэтому лично я сильно против них. Почему-то один сложный DSL уровня SQL, полезность которого очевидна, запоминается легче, чем того же суммарного объёма 100500 мелких разрозненных примочек там да сям, без которых вроде бы и так неплохо жилось.
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 08:44
Оценка: -1
D>Здравствуйте, Mamut, Вы писали:
M>>Они будут документированы не больше и не меньше, чем любой другой код.
D>Дык твои оппоненты говорят ровно то же самое. Что обычная либа, что DSL — никакой разницы. Только DSL типа компактнее.

Нет. Мои оппоненты говорят следующее, цитирую:

M> что любой DSL — это еще один язык, зачастую недокументированный

Обычно документированный.


Я не согласен с выделенным. Нет никакого «обычно».


M>>МикроDSL — еще куда ни шло. Пока эти самые microDSL не выливаются в толпу микроДСЛей, нагроможденных друг на друга


D>Как раз микроDSL-и только так в такую толпу выливаются. Что мы и имеем на скале. Поэтому лично я сильно против них. Почему-то один сложный DSL уровня SQL, полезность которого очевидна, запоминается легче, чем того же суммарного объёма 100500 мелких разрозненных примочек там да сям, без которых вроде бы и так неплохо жилось.


Да, согласен. Но DSL объема SQL должен быть документирован И хоть как-то стандартизирован, хотя бы в пределах компании. Потому что даже с SQL'ем можно напороться на интересные отличия между диалектами.


dmitriid.comGitHubLinkedIn
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 11:44
Оценка: +1
M>>Я об этом и говорю. Никакого «обычно» не будет. Он будет документирован не лучше и не хуже, чем любой другой код. Хотя, учитывая, что это будет domain-specific language, то будет документирован еще хуже, так как в условиях «о, у нас домен, давай колбасить DSL» никто не будет выписывать весь синтаксис, семантику и т.п.

Z>Непонятно о чем мы спорим тогда.


M>>Не знаю. У меня главная причина неприятия — то, что любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой, с отсутствием внятного инструментария и т.п.

Z>Обычно документированный.

С какого перепугу?


Z> Люди часто не документируют код. При этом иногда получается грамотный и читабельный код, который легко поддерживать, а иногда макаронный и нечитабельный. Это ортогонально тому, DSL они пишут или библиотеку.


Z>Когда ты читаешь код a.Insert(b) и insert b into a у тебя примерно одинаково информации, для понимания того, что происходит. Но в первом случае тебе надо знать соглашения, чтобы понять, что происходит, а во втором не нужно.


Да, безусловно, ведь всегда удобно привести уже не один десяток лет существующий, успешный, стандартизированный DSL, да еще построенный поверх мат. модели, и сказать — вот! Он понятен без соглашений!

Хотя понятно, что можно привести совершенно противоположныей пример. и даже в твоем insert into возникает толпа вопросов: что возврашает этот код? Что произойдет, если b уже существует в a и т.п.

Z>DSL от аналогичной библиотеки отличается только тем, что у них разные синтаксисы. Но тот или другой все равно придется учить. И в каких-то предметных областях DSL получается проще чем родной синтаксис языка.


Ключевое: каких-то. Ключевое: надо учить. Ключевое: документация Если DSL-и начнут клпеать все, кому не лень, сказки про «DSL обычно документирован» можно пешим строем отправлять в детский сад. Хотя, по большому счету, их надо туда отправлять уже сейчас.

И никакое «ах, там кода короче и он иногда понятней» это не компенсирует.

Z>К примеру, в ruby уже невозможно провести черту между DSL и обычным API. Можно, например, сказать, что рельсы это DSL для веб разработки. А можно, что это всего лишь набор из нескольких слабо связанных библиотек, каждая из которых выполняет свою функцию.


Безусловно. И, как любая библиотека, она требует изучения и документации. Никакого «обычно документирован» там нет и не прдевидится.

Z>Мой основной поинт в этой дискуссии как раз в том, что не надо проводить границы и утверждать, что DSL априори лучше или хуже. Это такая же практика, как и любая другая. Не надо ее идеализировать или демонизировать. Будущее программирования в том, что мы перестанем различать DSL как отдельную технику, она станет просто рутинной.


Я вообще не про это говорил, если что.


dmitriid.comGitHubLinkedIn
Re: Легкий офтоп.
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 11:48
Оценка: +1
M>В C++ функция printf это DSL или нет ? спасибо.

В С++ скорее cout/cin — это DSL.


dmitriid.comGitHubLinkedIn
Re[13]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 02.01.13 19:35
Оценка: +1
Здравствуйте, AlexRK, Вы писали:

Z>>Если есть DSL, то он должен быть проще чем вызов методов. Поэтому учить его должно быть не сложнее, чем изучать семантику методов.


ARK>Думаю, что он не проще, а просто позволяет короче записать нечто. Это вовсе не означает проще.


Regexp, SQL, format strings — это примеры DSL которыми мы все пользуемся постоянно. Любая безDSLная альтернатива будет на порядки сложнее в применении. Причем для SQL и регэкспов она вообще за гранью реальности.

ARK>Не уверен. Ошибка проектирования DSL будет стоить дороже, ИМХО. Знания внутреннего DSL в резюме не потребуешь. Сделали кривой DSL, наклепали на нем кучу кода и создатель уволился. КАК это все разгрести? Ковырять исходники компилятора? А если там нашли ошибку? Это будет жесть. Причем вы будете один на один с этим языком и кучей говнокода на нем.


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

Z>>В простых DSL совершенно простой синтаксис. Его учить не дольше, чем аналогичный API.


ARK>Только вот не надо его просто так учить (и делать DSL тоже). Надо если (и только если) будет показано, что DSL сократит объем кода в 10 раз, например.


Ок, давай обсудим простые DSL. Вот пример простого самописного DSL
Автор: Ziaw
Дата: 31.12.12
. Что тут учить? Разница тут далеко не на порядок, но и создать его очень просто, там не больше 40 строк кода. Простые DSL как раз самые дешевые и эффективные. Бояться проблем от них — чистое суеверие.
Re[14]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 02.01.13 19:57
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

Z>Regexp, SQL, format strings — это примеры DSL которыми мы все пользуемся постоянно. Любая безDSLная альтернатива будет на порядки сложнее в применении. Причем для SQL и регэкспов она вообще за гранью реальности.


"Если у вас есть проблема, и вы собираетесь решать ее с использованием регулярных выражений, то теперь у вас две проблемы" (с)

Кстати, шутка-то с долей шутки. Иные regexp-ы лучше бы расписать десятком методов — хоть понятно будет (всем будет понятно, а не одному гуру в толстых очках с черепаховой оправой).

SQL хороший DSL. Только он разрабатывался не за неделю на коленке местным архитектором, а умными людьми. Он общепризнан, по нему полно документации. И то часто возникают проблемы. Но с SQL решение проблемы найти элементарно, а вот с самописным языком...

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


Бывает. С проблемами в неподдерживаемой либе иногда сталкиваемся.

Со своей библиотекой (и уволившимся создателем) проще все-таки. Синтаксис всем известен, работают тулы, рефакторинги и прочая.
А вот с DSL асимптотика проблемы может и такая же, но еще есть большая скрытая константа, усугубляющая дело. ИМХО.
Есть груда непонятного кода и компилятор, обрабатывающий этот код по своим правилам (с высокой долей вероятности содержащий ошибки и непредвиденные побочные эффекты).

Z>Ок, давай обсудим простые DSL. Вот пример простого самописного DSL
Автор: Ziaw
Дата: 31.12.12
. Что тут учить? Разница тут далеко не на порядок, но и создать его очень просто, там не больше 40 строк кода. Простые DSL как раз самые дешевые и эффективные. Бояться проблем от них — чистое суеверие.


Лично мое мнение — я бы убрал из проекта все эти мелкие DSL. Глаз сразу выцепляет чужеродный код и внутри сразу возникает напряжение: ЧТО ЭТО? Зачем это нужно, излишнее усложнение на ровном месте? Мало того, что надо держать проблему в голове, еще натыкаешься на такие "упрощения" и это сразу сбивает с панталыку. Стандартного сахара в современных языках и так достаточно, а со своими мини-языками вместо кода получаем цветастое эклектичное полотно непонятно чего, дополненное потенциальными проблемами в макросах-компиляторах (которых даже если сейчас нет, то вполне могут появиться потом). И ради чего? Ради убирания двух-трех идентификаторов. За которые глаз программиста, кстати, "цепляется" при чтении кода.
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 02.01.13 20:48
Оценка: +1
Здравствуйте, AlexRK, Вы писали:

ARK>"Если у вас есть проблема, и вы собираетесь решать ее с использованием регулярных выражений, то теперь у вас две проблемы" (с)


ARK>Кстати, шутка-то с долей шутки. Иные regexp-ы лучше бы расписать десятком методов — хоть понятно будет (всем будет понятно, а не одному гуру в толстых очках с черепаховой оправой).


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

ARK>SQL хороший DSL. Только он разрабатывался не за неделю на коленке местным архитектором, а умными людьми. Он общепризнан, по нему полно документации. И то часто возникают проблемы. Но с SQL решение проблемы найти элементарно, а вот с самописным языком...


Он был приведен только как яркий пример, того, что DSL решения рвут бездсльные как тузик грелку. Я хотел сказать, что умные люди реализовали SQL в своих СУБД, остальные не выжили. Менее дальновидные совершенствовали мощность и простоту API, считая это лучшим сценарием.

ARK>Со своей библиотекой (и уволившимся создателем) проще все-таки. Синтаксис всем известен, работают тулы, рефакторинги и прочая.


Я выделил основную проблему. Потому и проще, что нет пока адекватных инструментов для создания DSL. Но это проблема не DSL, а неразвитости инструментов.

ARK>А вот с DSL асимптотика проблемы может и такая же, но еще есть большая скрытая константа, усугубляющая дело. ИМХО.

ARK>Есть груда непонятного кода и компилятор, обрабатывающий этот код по своим правилам (с высокой долей вероятности содержащий ошибки и непредвиденные побочные эффекты).

ARK>Лично мое мнение — я бы убрал из проекта все эти мелкие DSL. Глаз сразу выцепляет чужеродный код и внутри сразу возникает напряжение: ЧТО ЭТО? Зачем это нужно, излишнее усложнение на ровном месте?


Это дело привычки. Аналогично чтению var в C#. Подавляющее большинство на него плюется, до тех пор, пока не начнет использовать. Причем аргументы примерно те же идут.
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 21:07
Оценка: -1
Z>>Это дело привычки. Аналогично чтению var в C#. Подавляющее большинство на него плюется, до тех пор, пока не начнет использовать. Причем аргументы примерно те же идут.

ARK>Есть нюансик — var один на всех. Спроектирован, задокументирован, отлажен и стандартизирован. Чего не скажешь о наколенных решениях.


ARK>В общем, время покажет, кто где прав. [vanga]Предсказываю, что самописные DSL в ближайшие годы распространения не получат.[/vanga]


На самом деле, они давно получили распространение например, http://xml.coverpages.org/xmlApplications.html (найдено на Tim Bray: Don't Invent XML Languages). В этом списке — более 600 наименований

Только вот у некоторых пропонентов DSLей зашорены глаза: мол, DSLи и понятны сразу, и документированы сразу, и инструментарий есть и вообще, это панацея от всего (можно почитать предыдущие топики на эти же темы). Что, естественно, далеко не так.


dmitriid.comGitHubLinkedIn
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.13 11:49
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

AVK>>Единый универсальный язык всегда будет выигрывать в плане инструментального оснащения, какие бы замечательные тулы не существовали.

WH>Подсветка, навигация, автокомплит и переименование получаются вообще автоматом.
WH>А это 80% потребностей. С форматированием сложнее. Но и там не так уж и много придется написать.
WH>А более сложные вещи для 99% ДСЛ и не понадобятся никогда.

Для дсл нужен непосредственный доступ к модели, для изучения, исследования, оптимизации и тд, иначе будет как с SQL, большинство использует "по рецептам", малая часть думает что знает, и только ничтожная действительно знает SQL.
С регэксами тож самое, перестал пользоваться на время — все забыто и надо снова документацию перечитывать.
Т.е. нужен не дсл, а четкая прозрачная модель с хорошим апи.
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.13 14:40
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>Ну это помаленьку исправляется.


Нет, не исправляется.

Z> CTE например.


СТЕ это 99 год и он убог до ужаса.

Z> Не идеал, но шаг именно в эту сторону.


Если бы. СТЕ придумали для рекурсивных запросов, а то что оно через зад декомпозировать позволяет — побочный эффект.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.13 14:40
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

AVK>>Форматная строка на DSL, извини, не тянет.

Z>Еще как тянет

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

Z>Ты озвучь наконец свою позицию, полезны только широко известные DSL (тогда я отстану от SQL, а ты перестанешь указывать что его все знают) или все DSL вредны (тогда давай реальные альтернативы форматным строкам и регэкспам, без "я уверен, что библиотека без этой птичей псевдографики была бы проще и удобнее").


У меня нет простого ответа на этот вопрос. В каждой конкретной ситуации надо смотреть отдельно. Я могу утверждать лишь две вещи:
1) Изобретать DSL всегда и везде — безумная крайность
2) Решение о создании DSL должно приниматься только при наличии огромных бенефитов, размером в человекогоды экономии на разработке минимум.
3) Решение в принципе никогда не создавать DSL в любой ситуации — такая же безумная крайность.

Z>Допустили. C# это исправил другим DSLем. Недостатки SQL видны хорошо, ктож спорит.


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

Z>А что делать, если надо заменить или выкинуть ORM?


Я такое в том же янусе делал, два раза. Все срастается в разумные сроки в том числе благодаря решарперу.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 03.01.13 16:11
Оценка: +1
M>>Ого. Внезапно. Дай-ка я тебе процитирую мое высказывание, с которым ты внезапно не согласился, начав весь этот спор
M>>

M>>У меня главная причина неприятия — то, что любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой, с отсутствием внятного инструментария и т.п.


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


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

Ну и даже если это сторонняя библиотека. Вот у нас используется веб-сервер Yaws, который существует года этак с 2003-го. Вполне себе сторонняя библиотека. По идее должна быть уже задокументирована по самое нехочу. Ага, тот самый случай. Как начинаешь ковыряться чуть ниже уровня «а вот мы здесь создаем страницу», начинается трэш и угар. Аналогично для очень большого количества библиотек.

Что было бы, если бы это был DSL при таком же уровне документации? Расковыривать EBNF/Peg/Yacc/хз-что? Реверс-инжинирить работу компилятора/интерпретатора этого DSL? И если в Yaws при желании можно пройтись по кишкам дебаггером, то что ты предлагаешь для DSL? Сказки Вульфхаунда, что это все не проблема?


dmitriid.comGitHubLinkedIn
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.13 16:23
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

WH>>>Ага, конечно. Каким АПИ ты собрался SQL заменить?


I>>Например таким как в linq, если ты не забыл, linq это не query comprehension.


Z>Замени это
Автор: Ziaw
Дата: 31.12.12
.


Ты хочешь мне доказать, что в linq самое сложное это query comprehension , а все остальное это типовые задачи для студентов первого курса ?
Я прямо и не знаю, что и думать. Скажу, для пробы, да, ты прав, в linq самое сложное это query comprehension
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.13 16:39
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

I>>Ты чего сказать хотел, что отличия только в синтаксисе ? Если так, то ДСЛ не нужен.


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


Мне этот дсл ровно ничего не даёт, потому я обхожусь без него Причины простые — его дизайнил непойми кто. В говнобиблиотеке проще разбираться что в таких вот говнодсл. Не ясно, откуда возьмется должное количество дсл-архитекторов, что бы на каждый проект хватило.

I>>В случае с SQL или регексов этот недостаток так и не был преодолен

Z>И это не мешает им доминировать на рынке. При всех их недостатках, практически все альтернативы ужасно печальны.

Не знаю, как ты считал это доминирование, я через день нахожу в разных проектах самопальные парсеры Если посчитать количество этих самопальных парсеров, сильно сомневаютьс, что регэксы будут доминировать.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 17:19
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

I>Да все просто, в linq том же мне незачем приседать, что бы выяснить, что же там происходит. В принципе, с макросами почти так же, только дольше. А вот с дсл где взять внутренности вычислительной модели ?

Открываешь, исходники ДСЛ и читаешь.

I>Да как бы понятно — чего требуется от ДСЛ. Относительно автокомплитов и интелисенсов ты немного погорячился.

Почему? Есть весьма чёткий план как это сделать.

I>Нужен не просто рефакторинг, нужна возможность заглянуть внутрь модели, возможность изменить не название кейворда, а его семантику. Это уже получаются миграции, а не рефакторинг. На примере SQL или регэксов хорошо видно.

И часто тебе нужно сделать так чтобы метод Insert всю базу грохал?

I>На счет кривизны и тормознутости сумлеваюсь.

Это факты.

I>И рукописная модель тоже дсл. Светлое бущущее про которые ты говоришь уже давно настало, опаньки !



I>Кстати, ты рослин уже обогнал по перформансу или нет ?

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

При этом когда Н2 взлетит создание новых языков будет на порядки дешевле чем добавление нового языка в рослин.
Мы даже сможем без проблем сделать макросы для C#, VB.NET, Java итп.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: hardcase Пират http://nemerle.org
Дата: 03.01.13 20:02
Оценка: :)
Здравствуйте, AlexRK, Вы писали:

ARK>Ваше шапкозакидательство весьма забавно.


Ваша боязнь компиляторостроения весьма забавна. Уже сегодняшних инструментах совершенно обычному программисту по силам наколбасить компилятор простого паскалеобразного языка с автоматическим управлением памятью под пачку платформ и архитектур за крайне разумное время (для первого прототипа недельки будет достаточно). А тут речь шла про транслятор с одного языка в другой не слишком отличающийся, гипотетический пример уровня сложности задачи: транслятор из C# 2.0 в C# 3.0 делающиий подстановки var где возможно и заменяющий delegate на лямбды, и все это при наличии типизатора для обоих ревизий C#. Да такие задачи можно решать, что называется, не отрываясь от RSDN-а!
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.01.13 08:41
Оценка: +1
Здравствуйте, koodeer, Вы писали:

I>>Ага, должны. А что еще должны эти разрабы ?

I>>Обычно разработчики инструментария обычно хорошо в курсе потребностей своей целевой аудитории.
I>>А вот немерлисты почему то хорошо в курсе только компиляторов. Так шта...

K>А ты задайся вопросом, сколько написали библиотек те разрабы, которые создают компилятор C#. Насколько мне известно, некоторые из них присутствуют здесь, на RSDN. Так сколько они написали кода, не относящегося к компилятору? Естественно, имеется в виду, пока она работают (работали) над самим компилятором.


Когда вышел C#, от микрософта сразу вышел целый вагон примеров и разных приложений чуть не на все случаи жизни. Я например по ним и учился. Собтсвенно у них всегда так, из последнего это например TypeScript. Вышел язык, еще альфа, но уже есть целая куча примеров, которые полезны для потребителя.

K>Как-то странно требовать прикладной код от системных программистов, не находишь?


Абсолютно нормально, когда разработчик языка пишет на нём типовые сценарии потребителей еще задолго до выпуска версии. А вот у немерлистов типовой сценарий это компилятор немерле.
Собтсвенно в нормальных языках и хороших либах ровно так же — примеров и готовых решений на порядок больше, чем кода относящегося к проекту.
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 09:47
Оценка: -1
Здравствуйте, dimgel, Вы писали:

D>А какое отношение ACID имеет к ds*L*?

Наипрямейшие. SQL это обеспечивает. При этом тому, кто пишет запросы не нужно о нем думать.
А если напрямую ковыряться ручками в файле, то придется об этом думать.
Так что это просто ещё один пример того как ДСЛ скрывает подробности реализации.
Причем делает это настолько хорошо, что простые вещи можно делать даже не зная об этом.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 12:26
Оценка: :)
Здравствуйте, Mamut, Вы писали:

M>Проблемы есть. Если библиотека более-менее отражает логику бизнес-процесса или просто логику программы, то компилятор отразит что?

Не правильно. Это уже бизнес логика, написанная на библиотеке.
Библиотека отражает вычислительную модель бизнес логики.
Ровно тем же занимается компилятор. Только гораздо более прямым способом.

WH>>Это не сказки. Это УЖЕ работает.

M>Где?
У меня на компе.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 04.01.13 12:37
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

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


WH>>>У меня сейчас просто нет тех исходников.

ARK>>Я не прошу исходники, я прошу демонстрационный пример.
WH>Какой пример? Мне что его из пальца высосать?

Мне все равно, какой и откуда. Я прошу, чтобы вы свое утверждение — "Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ" — подтвердили примером, а не словами "в моей практике такое было".

Я прошу пример по той причине, что мне кажется, что это утверждение ложно.

ARK>>Кстати, я вполне могу представить ситуацию, когда язык изменится, а аналогичная библиотека — нет.

ARK>>К примеру, сейчас в линке в query comprehension нет Distinct(), а в библиотеке есть.
WH> Не делай мне так смешно.
WH>Библиотека уже изменилась, когда в ней появился Distinct.

Ну вы приведите пример-то, уж сколько прошу. А я тоже посмеюсь.

WH>Но я говорю вообще не об этом.

WH>Если я захочу переписывать query comprehension не в вызовы методов, а в что-то другое то я смогу это сделать.
WH>А в случае с библиотекой тебе придется выкинуть и переписать весь код.

Да ну? Что же мне мешает упрятать за вызовами методов что угодно иное?

ARK>>Вот когда построение DSL станет _общепринятой_ практикой, тогда и можно будет делать выводы наподобие "ДСЛ скрывает реализацию неизмеримо лучше, чем библиотека". А пока что это просто слова.

WH>Это просто факты. И никакая "общепринятость" не может их изменить.

Эти факты к вашим далеко идущим выводам отношения имеют не больше, чем наличие дядьки в Киеве.
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 18:29
Оценка: +1
Здравствуйте, koodeer, Вы писали:

K>Я тоже признаю, что каждый раз, как приходится в очередной раз сочинять регулярку, я заглядываю в документацию. Но это потому, что редко приходится это делать. Если на длительное время заброшу C#, потом тоже полезу в доку. Без доки я и сейчас не скажу, как именно используется stackalloc, по той же причине: использовал его в последний раз очень давно.

Точно так же почти никто из присутствующих не скажет без документации как использовать CreateFile из WinAPI.
Чего уж говорить про доморощенные библиотеки, которые никто за приделами конторы никогда не видел.

Но дело в том что у них просто цель любой ценой доказать что у ДСЛ есть куча проблем которых нет у библиотек.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 05.01.13 07:13
Оценка: -1
Здравствуйте, minorlogic, Вы писали:

M>В контексте разговора это абсурд. Т.е. для DSL интерфейс не нужен и можно писать "делай что мне надо" в каждой программе? Для меня не звучит разумно.

Это факт.
Интерфейс ДСЛ это синтаксис и семантика.
И они не содержат никаких завязок, на то во что этот ДСЛ будет скомпилирован.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: _DAle_ Беларусь  
Дата: 05.01.13 10:05
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

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


_DA>>Правда, объяснить, почему разработка ускорилась, каким-то одним примером точно не получится.


AVK>ИМХО если не удается внятно объяснить, чем DSL лучше кода на джаве, то что то здесь не то.


Я с этим согласен, но я не говорил, что вообще не смогу объяснить. Просто, чтобы объяснять преимущества конкретного DSL, нужно сначала объяснить domain. Мы делаем платформу для построения бизнес-приложений с довольно своеобразной концепцией, базисом, терминологией. Рассказать об этом в нескольких сообщениях на форуме у меня вряд ли получится. Нужны презентации, туториалы, которых сейчас либо нет, либо они уже устарели.
DSL нам позволил отобразить все наши концепции напрямую в более-менее лаконичные синтаксические конструкции, хорошо понимаемые при условии понимания нашей платформы. Код же на джаве без этого понимания выглядит, на мой взгляд, такой же абракадаброй, но только еще со своими синтаксическими и логическими ограничениями.
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 05.01.13 11:13
Оценка: -1
Здравствуйте, AlexRK, Вы писали:

ARK>Интерфейс библиотеки это только семантика.

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

ARK>И она не содержит никаких завязок, на то как эта библиотека будет реализована.

Это не правда.
1)Она завязаны на вычислительную модель языка.
2)Мы не можем превратить цепочку вызовов LINQ to Objects в кучу циклов.
При этом если мы работаем на языке, который напрямую поддерживает работу с коллекциями, то мы можем генерировать любой код.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[33]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 05.01.13 11:24
Оценка: -1
Здравствуйте, Mamut, Вы писали:

WH>>>>Нет. Я делаю вывод о том, что без ДСЛ у тебя было бы не 5К строк прикладной логики, а 50К.

M>>>Неверный вывод.
WH>>Почему?
M>А подумать?
Гадать, что творится у тебя в голове мне не интересно.
Особенно учитывая то, что ты читаешь не то, что написано.

M>Если код с использованием библиотеки выглядит как addRule(a,b,c), а код на DSL как rule a b c, то править одинаково.

Откуда тогда получается разница в 10 раз?
Хватит юлить.

M>Из этого так же никак не следует, что его будет написано 50к строк такого кода.

Именно что следует.
Не зря же ДСЛ сделали.

M>Эта фраза принадлежит тебе, и доказательств этой фразы вот уже который год ждем не дождемся.

В твоей ссылке написано, что генерируется в 10 раз больше кода, чем было на ДСЛ.

M>Ниже я устал, и местами спускаюсь на уровень твоей аргументации, ты уж извини.

У тебя аргументации вообще нет.
Всё на что ты способен это приписать мне то, что я не говорил и с этим спорить.

M>А, да. Единственный DSL, из «десятков каждый день», который ты способен предоставить.

Опять выдумал что-то и с этим споришь.

M>>>И то, что можно изменять библиотеки, не изменяя интерфейса библиотеки или не выкидывая весь код, — это тоже ложь. Естественно, ибо also sprach Wolfhound ©™.

WH>>Если тебя послушать то получается, что библиотеки это всё могут, а ДСЛ нет? Я тебя правильно понял?
M>Нет, неправильно
Ну, тогда расшифруй, что ты имеешь в виду.
Ибо разговор идет о том, что нужно ломать интерфейс.
А значит переделывать весь прикладной код.
А значит ни о каком черном ящике речи уже нет.

WH>>При этом объективно ДСЛ это могут лучше.

M>О да, объективно. Объективные вещи имеют в основе аргументацию лучше, чем «лож», «неправда», и «у меня на компьютере работают».
Я несколько раз объяснял почему.
Но ты тупо игнорируешь.

WH>>Просто по тому, что они не содержат никаких завязок на реализацию. А в тех случаях когда не получается прикладного кода на порядок другой меньше и исправить его на порядок другой проще.

M>DSL перестал быть прикладным кодом? Это в какой момент?
Ты вообще читаешь что написано?
Где в этой фразе написано выделенное?
У меня фантазии не хватает, как ты из моих слов сделал этот вывод.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.01.13 11:28
Оценка: +1
Здравствуйте, _DAle_, Вы писали:

_DA>DSL нам позволил отобразить все наши концепции напрямую в более-менее лаконичные синтаксические конструкции


Так можно же привести пример конструкции, которая более лаконична, чем код на джаве, нет? У меня вот, даже если не вникать в специфику, страница кода на DSL раскрывается в существенно большее количество кода на целевом языке или в набор команд какого нибудь интерпретатора. Свой такой пример я, вроде бы, уже здесь приводил:
DSL
USING Mock;

SELECT
  bc2.BoolAttr AS ba,
  bc2.BizClass1Link.IntAttr AS ia,
  sq.Identity.BoolAttr,
  jbc2l.BizClass1Link.IntAttr AS lia,
  jbc2r.BizClass1Link.IntAttr AS ria,
  sq.Identity.BizClass1Link.IntAttr AS tjia
FROM
  BizClass2 bc2,
  (SELECT Identity FROM BizClass2) AS sq,
  BizClass2 AS jbc2l JOIN BizClass2 AS jbc2r ON jbc2l.BizClass1Link = jbc2r.BizClass1Link;

Результирующий SQL (в данном случае для игрушечного SQL сервера, но отличие от реальных незначительное)
SELECT 
 [bc2].BoolAttr AS ba,
 [__join_0].IntAttr AS ia,
 [__join_1].BoolAttr AS BoolAttr,
 [__join_2].IntAttr AS lia,
 [__join_3].IntAttr AS ria,
 [__join_4].IntAttr AS tjia
FROM
 [MockSchema].[Tbl-Mock.BizClass2] AS [bc2]
  /*implicit*/LEFT OUTER JOIN [MockSchema].[Tbl-Mock.BizClass1] AS [__join_0] ON (([__join_0].id = [bc2].LinkTo_BizClass1Link_id) AND ([__join_0].tid = [bc2].LinkTo_BizClass1Link_tid)),
 (
  SELECT 
   [MockSchema].[Tbl-Mock.BizClass2].id AS Identity,
   [MockSchema].[Tbl-Mock.BizClass2].tid AS Identity_Type
  FROM
   [MockSchema].[Tbl-Mock.BizClass2]
 ) AS [sq]
  /*implicit*/LEFT OUTER JOIN [MockSchema].[Tbl-Mock.BizClass2] AS [__join_1] ON (([__join_1].id = [sq].Identity) AND ([__join_1].tid = [sq].Identity_Type))
  /*implicit*/LEFT OUTER JOIN [MockSchema].[Tbl-Mock.BizClass1] AS [__join_4] ON (([__join_4].id = [__join_1].LinkTo_BizClass1Link_id) AND ([__join_4].tid = [__join_1].LinkTo_BizClass1Link_tid)),
 [MockSchema].[Tbl-Mock.BizClass2] AS [jbc2l]
  /*implicit*/LEFT OUTER JOIN [MockSchema].[Tbl-Mock.BizClass1] AS [__join_2] ON (([__join_2].id = [jbc2l].LinkTo_BizClass1Link_id) AND ([__join_2].tid = [jbc2l].LinkTo_BizClass1Link_tid))
  INNER JOIN [MockSchema].[Tbl-Mock.BizClass2] AS [jbc2r]
   /*implicit*/LEFT OUTER JOIN [MockSchema].[Tbl-Mock.BizClass1] AS [__join_3] ON (([__join_3].id = [jbc2r].LinkTo_BizClass1Link_id) AND ([__join_3].tid = [jbc2r].LinkTo_BizClass1Link_tid)) ON (([jbc2l].LinkTo_BizClass1Link_id = [jbc2r].LinkTo_BizClass1Link_id) AND ([jbc2l].LinkTo_BizClass1Link_tid = [jbc2r].LinkTo_BizClass1Link_tid))

Бенефит DSL вполне нагляден даже без подробного объяснения специфики и презентаций. И это не боевой пример, это коротенький тест небольшого куска функционала. В реальности разница намного круче, потому что запросы существенно больше и, нередко, сложнее. А в твоем примере что джава, что DSL — примерно одно и тоже.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 05.01.13 11:36
Оценка: -1
Здравствуйте, Mamut, Вы писали:

WH>>1) Кода на ДСЛ будет на порядок другой меньше.

M>Далеко не факт. Зависит как от библиотеки так и от DSLя
По твоей ссылке ровно на порядок. И это далеко не придел.

WH>>а. Нужно будет переделать меньше клиентского кода.

M>Далеко не факт
Это как? Если у нас кода в 10 раз больше, то и переделывать нужно в 10 раз больше.

WH>>б. Компилятор ДСЛ может давать внятные сообщения с подсказками.

M>Может, но это не обязательно. Более того, компилятор может давать не менее внятные сообщения и для библиотеки
Не может. Всё на что способен компилятор языка общего назначения это сказать, что нет такого метода.

M>Внезапно можно просто сделать рефакторинг для вызовов библиотеки. В частности потому что существующие средства это уже позволяют. Откуда возьмутся средства для простого рефакторинга DSL известно только известным сказочникам.

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

M>Как там было в примерах? a.Insert(b) против insert b into a? Каким образом реализован этот самый insert вызывающего не волнует от слова вообще. Где там что путается под ногами неизвестно.

В моих примерах такого не было.
У меня примеры немного другие.
http://rsdn.ru/Forum/Message.aspx?mid=4694354&amp;only=1
Автор: WolfHound
Дата: 09.04.12
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: _DAle_ Беларусь  
Дата: 05.01.13 11:38
Оценка: +1
Здравствуйте, AlexRK, Вы писали:

_DA>>Мне вот интересно, а что было понятно из строчки на джаве, если бы я не привел строку на DSL?

ARK>Понятно, что вызывается функция addJProp. Судя по названию — добавление какого-то свойства. Лезем внутрь и смотрим, что там.

То что это "объявление функционала"/"добавление свойства" я и так сказал. Внутри там будет парсинг массива, маппинг каких-то одних объектов на другие, и добавление получившегося в результате объекта в какой-то контейнер. Не думаю, что станет сильно понятней, чем "добавление свойства".

_DA>>Сразу стало понятно, что после строковых констант идет описание выражения в польской нотации? Сразу было понятно, что price — это функционал с двумя параметрами, которому передаются на вход первый и третий параметр создаваемого функционала?


ARK> Чего? "Сразу понятно", угу. Может я тупой, но лично мне вся DSL-строка кажется полностью контр-интуитивной. Чего она делает, я до сих пор не понимаю.


Хм, неужели действительно непонятно? Ок, избавимся от предметной области:
f(x, y, z) = g(x, z) IF h(x, y, z);

Грубо говоря, объявляется новая функция f с тремя параметрами, которая будет равняться функции g(x, z) при условии, что h(x, y, z) не равно null. В ином случае ее значение будет равняться null. Так понятней?
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 05.01.13 14:51
Оценка: +1
M>>По моеуй ссылке нигде не говорится, что изначально кода было в 10 раз больше. Это твои бурные фантазии.
WH>Обычно генерируют код не сильно отличающийся от рукописного.

Ну-ну.

M>>Например тут же рядом
Автор: _DAle_
Дата: 04.01.13
в примерах DSL, от которого нет никакого явного в 10 раз меньше кода. Но тебе ж наплевать. Ты предпочитаешь видеть только то, что тебе хочется видеть.

WH>Ну и что?
WH>Бывают случаи, когда ДСЛ не дает существенного сокращения.

О чем тут тебе хором несколько человек и говорят. Утверждения, что DSL всегда, обычно, почти всегда и т.п. на порядок короче надо доказывать. С доказательствами у тебя очень и очень туго.

M>>Или неправильный тип. Или неправильное количество аргументов. В общем — достаточно для того, чтобы провести внятный рефакторинг. На что способен компилятор DSLя?

WH>Он способен распознать старый синтаксис.

С чего это вдруг?

WH>И сказать, что нужно переделать.


С чего это вдруг?

WH>А в сочетании с ИДЕ еще и quick fix сделать.


А, ну да. Сказочки про белого бычка в виде Н2.

M>>И у нас примеры другие
Автор: _DAle_
Дата: 04.01.13
. Но я уже говорил, что опыт других людей для тебя «лож» ©™

WH>Так я и не о его примерах говорю.
WH>Я говорю про более сложные случаи.

А, ну как всегда. Если опыт других людей тебе не нравится, ты это называешь ложью. Уже вдруг DSLи не такие. Естественно, если они не будут иллюстрировать твои мысли, то они обязательно будут ложью, не такими, теорией и т.п.

WH>Например, пример из моего поста сейчас генерирует совершенно другой код.

WH>Сделано это было без изменения синтаксиса.

Да неужели.

WH>Параллельно Влад в другом бранче менял синтаксис на более человечный.


Ни ссылок ни примеров мы не дождемся, я так понимаю.


dmitriid.comGitHubLinkedIn
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 05.01.13 15:16
Оценка: -1
Здравствуйте, Mamut, Вы писали:

WH>>Обычно генерируют код не сильно отличающийся от рукописного.

M>Ну-ну.
Ну, так покажи, что генерирует ДСЛ по твоей ссылке и что было, когда этот код писали руками?
Не можешь?

M>О чем тут тебе хором несколько человек и говорят. Утверждения, что DSL всегда, обычно, почти всегда и т.п. на порядок короче надо доказывать. С доказательствами у тебя очень и очень туго.

Так полно же ссылок когда разница на порядок другой.
А то, что можно просто изменить синтаксис на немного другой я с этим и не спорил.
Но когда делают что-то действительно серьезное, то там получается порядок.
Прямо как по твоей ссылке.

M>>>Или неправильный тип. Или неправильное количество аргументов. В общем — достаточно для того, чтобы провести внятный рефакторинг. На что способен компилятор DSLя?

WH>>Он способен распознать старый синтаксис.
M>С чего это вдруг?
С того что его этому очень просто обучить.

WH>>И сказать, что нужно переделать.

M>С чего это вдруг?
С того что его этому очень просто обучить.

WH>>А в сочетании с ИДЕ еще и quick fix сделать.

M>А, ну да. Сказочки про белого бычка в виде Н2.
Это не сказки. Многое из того о чем говорю уже работает.
Скоро доведем до состояния, когда можно будет показывать.

M>А, ну как всегда. Если опыт других людей тебе не нравится, ты это называешь ложью.

Ложною я называю лож.

M>Уже вдруг DSLи не такие. Естественно, если они не будут иллюстрировать твои мысли, то они обязательно будут ложью, не такими, теорией и т.п.

Нашел пример, где ДСЛ немного меняет синтаксис, и радуешься как ребенок.
При этом кучу ссылок, в том числе свою, где получается разница на порядок и больше, тупо игнорируешь.

WH>>Например, пример из моего поста сейчас генерирует совершенно другой код.

WH>>Сделано это было без изменения синтаксиса.
M>Да неужели.
А что тебя удивляет?
Раньше парсер сразу строил АСТ.
Теперь сначала заполняет хитрый массив интов, а потом отдельный код строит по нему АСТ.
Синтаксис языка при этом не изменился.

WH>>Параллельно Влад в другом бранче менял синтаксис на более человечный.

M>Ни ссылок ни примеров мы не дождемся, я так понимаю.
Через некоторое время Н2 будет в публичном доступе.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 06.01.13 22:54
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

Z>Да, fluent интерфейс тут мог бы помочь, но его проектирование, разработка и поддержка не легче проектирования, разработки и поддержки отдельного DSL. Ибо это тоже DSL, только с очень ограниченным синтаксисом.


С флюент интерфейсом цикл разработки короче. Берешь любой код любого девелопера, рефакторишь, сообщаешь об изменениях и все готово.

С языком все не так — девелопер должен вкурить сам язык, на это уходит время, просто сообщить об изменениях не получится по твой же причине — все изменения надо долбить и долбить, особенно если изменения нетривиальные вроде замены insert на insert into. Даже если предположить, что инструменты одинаковы по мощности в обоих случаях, изменения в языке гораздо медленнее доходят до людей. Это заметно уже по тому, как медленно люди осваивают новые кейворды скажем в том же C#. Даже свежак в микрософтовском до сих пор бывает идет с самопальными коллекциями, итераторами и прочей ересью. Про await и говорить не приходится.
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.13 21:34
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>То же самое мы наблюдаем в мире библиотек.


Конечно же нет. Аналогом сиквела был бы подход, применявшийся Саном в джаве, когда выпускается стандартный набор контрактов, а потом под него несколько производителей выпускают свои реализации.
А в дотнете мы наблюдаем прямо противоположное — даже сам МС, выпуская две библиотеки, скажем UI, сделал абсолютно непохожие контракты у WPF и WinForms. Аналогом в случае СУБД были бы абсолютно непохожие языки запросов у каждого независимого производителя.

S>Так и тут — будут миллионы недоDSL, будут десятки коммерческие либо опенсорсные DSL в духе рельсов, и будут доминаторы в каждой конкретной области.


Ага, ну то есть все сведется к тому, что DSL будет стандартным для отрасли в целом, типа какого нибудь UBL, и каждый будет свою реализацию при необходимости для него делать. Только что то мне подсказывает, что апологеты DSL в этом топике совсем не это имеют в виду.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 15.01.13 19:39
Оценка: :)
M>>Ну да, из текста, который говорит: из 5к строчек мы получаем 50к сгенеренного кода ты делаешь далеко идущий вывод, что библиотека, существовашая до этого, имела 50 к кода. Ну-ну.
S>А в чём тут сложность?
S>Если была библиотека, для работы с которой было достаточно 5к строчек, то зачем потребовался этот DSL?

Тут (или в презентации) это уже было описано. Все изменения должны были вноситься в код на Эрланге. Не-программеры из отдела Риска хотели вносить изменения сами.

S>То есть теория, конечно же, не запрещает нам строить DSL, который будет требовать 50к строчек для замены 5к строчек библиотечных вызовов, но физического смысла в этом нет, и мы предполагаем, что вменяемые проекты таким идиотизмом заниматься не будут.


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

M>>О да, компилятор их нового в старый с сохранением семантики — это, безусловно обязательно очень легкая задача, ага.

S>Коллеги, почему бы вам не рассмотреть конкретные примеры?

Я честно пытался

S>То, что у вас был конкретный баттхёрт, связано с одним из трёх:

S>1. Недостатки проектирования конкретно вашего DSL
S>2. Недостатки инструментальных средств, применяемых при построении и изменении вашего DSL
S>3. Проблемы в самом подходе DSL.
S>Вы делаете скрытое предположение о №3, оппонент — о №2.
S>Но я не понимаю, как вы собираетесь выяснить истину, не глядя ни на язык, ни на изменение, ни на инструменты.

Я привел как минимум два примера. Wolfhound предпочитает (уже года два) говорить только и исключительно о светлом будущем.

M>>Доказательств кроме «я, у меня» ты так и не смог предоставить ни одного.

S>Гм. Он опирается на свои примеры, которые для вашей задачи нерелевантны.

Нет, он опирается ровно на два примера. Один — парсер. Второй — библиотека на Java, которая позволила что-то там. Все. После этого человек-«я постоянно занимаюсь написаниями DSLей» неспособен привести ни одного другого примера
Автор: WolfHound
Дата: 04.01.13
на протяжении почти десятка сообщений.

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


Выделенное ключевое. В отсутсвие примеров больших, чем «у меня на компьютере все работает», обоснования считаются странными для любого его оппонента.

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


Это надо обосновывать, обосновывать, и еще раз обосновывать. Если мы делаем DSL для программистов, возможно. Если для не-программистов, то это далеко не факт.

S>Или что никто в здравом уме не будет писать DSL, который скрывает подробности реализации хуже, чем библиотека.


Про хуже никто и не говорил

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


Про это никто не спорит, если что

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


И про это никто не спорит Спорят с безаппеляционными утверждениями, носящими максимально общий и максимально максимальный (тавтология, ага) характер

S>Опять же, ситуация несимметрична: вы видите проблемы, которых не видит ваш коллега. Справедливо одно из двух:

S>- его кругозор не позволяет ему представить проблемы, которые плохо решаются его подходом
S>- ваш кругозор не позволяет вам представить решения ваших проблем, которые лишены наблюдаемых вами недостатков.

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


Мы пытаемся. Напомнить классическую реакцию Вульфхаунда?

M>>Именно потому, что компилятор выдавал сообщения об ошибке, приходилось перелопачивать все места, где использоввался этот DSL. Мегаумному Вульфхаунду, который никогда не включает дурачка, не приходит в голову, что замена синтаксиса «a PLUS b» на «a + b» в DSLе приведет к тому, что надо будет менять все места, где эта конструкция вызывается?

S>Ну вот тупому Синклеру совершенно непонятно

Что это был пример. Как там? Обоснованно и очевидно, что если меняется синтаксис DSLя, то надо вносить изменения везде, где использовался синтаксис этого DSLя. Разве нет? Тогда в чем ключевое отличие от библиотек? При том, что для большинства языков программирования существуют инструменты, способные быстро и безболезненно сделать это в случае использования библиотек. Что в случае DSL? Ах, да, мы же не конкретные языки обсуждаем, а который год мифический N2 по классическому сценарию.

S>Без ответов на эти жизненно важные вопросы беседа вынуждена скатываться на пенисометрию вроде "а моя бабушка ещё строже твоей".


С этим к Вульфхаунду.


dmitriid.comGitHubLinkedIn
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.01.13 08:18
Оценка: +1
Здравствуйте, Mamut, Вы писали:

M>Как там было в примерах? a.Insert(b) против insert b into a? Каким образом реализован этот самый insert вызывающего не волнует от слова вообще. Где там что путается под ногами неизвестно.

Это неудачный пример. Здесь нет никакого преимущества у DSL, т.к. код остаётся в целом таким же.
DSL начинают рулить там, где не удаётся сделать DRY средствами библиотеки.
Из обсуждавшихся за последние месяцы примеров можно взять INotifyPropertyChanged. "Библиотечная реализация" — вот она, перед глазами:
public string Name
{
    get { return _name; }
    set
    {
        _name = value;
        RaisePropertyChanged("Name");
    }
}

Если я был настолько глуп, что остановился на этом, то маленькое изменение в требованиях через полгода застанет меня врасплох: "надо сообщать только в тех случаях, когда значение меняется".
Что нам делать в библиотеке?
Два варианта: полагаться на клиента, либо изменить сигнатуру:
...
    set
    {
        if (_name != value) // вариант 1. 
        {
          _name = value;
          RaisePropertyChanged("Name");
        }
    }

    set
    {
       RaisePropertyChanged("Name", var _name, value); // вариант 2 - проверка и присвоение уехали в библиотеку.
    }
...

Ну так вот я не знаю средств рефакторинга, способных автоматически отпроцессить весь существующий код в любом из этих вариантов.
А на DSL я бы с самого начала имел
public notifying string Name {get; set;}

И семантика notifying бы менялась лёгким манием руки вообще без переделки клиентов.
Именно об этом говорит WH, когда говорит "из библиотеки торчат подробности реализации".
Даже если мы усложним задачу, типа "у нас есть клиенты, которые заточены на получение всех присваиваний, даже дублирующихся", то в DSL есть богатый выбор — либо ввести синтаксис notifying all, чтобы дать новое поведение по умолчанию всем, либо notifying distinct, чтобы сделать его добровольным.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: minorlogic Украина  
Дата: 18.01.13 10:50
Оценка: :)
Еще небольшой офтоп.

Полагаю , что часто DSL используется вместо данных для программы. Т.е. набирать данные на DSL, хотя оба спосба это архитектурная ошибка. Данные стоит отделять от программы и предоставлять в явном виде.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.01.13 09:08
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

Z>Предлагалось сравнить рефакторинг изменения синтаксиса в конкретном случае, когда оно действительно нужно.


Рефакторинг, это когда берешь и правишь один раз. А когда надо постоянно править, это уже нифига не рефакторинг.

Z> Оказалось, что в случае с библиотекой средств для автоматического тоже нет


Зато есть средства для полуавтоматического, в отличие от.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 19.02.13 13:51
Оценка: +1
D>2. Понятность? Да куда там! Читать просто как текст — понятнее, но если приспичит исправить — сразу куча вопросов. Понятнее было бы тупо завернуть длинный список параметров в пару иерархий ParamObject, типа как-то так:

Если добавить условие, чтобы набор правил должен при компиляции оптимизироваться, или опять же сразу при комиляции транслироваться в c#/byte-код и т.д., то fluent-решение сразу станосится не удобным.

Fluent подход плох тем, что он выполняется в runtime-е. И отсюда сразу куча проблем:
— невозможно использовать сложные преобразования (пользователь устанет ждать),
— невозможно проверить правильность при компиляции,
— значительно удлиняется время старта программы (пока она пережует все fluent-ы)
и т.д.

Взять тот же Linq — это синтаксический сахар поверх fluent-оболочки. И такой подход здорово тормозит из-за fluent на больших запросах. На инициализацию запроса может уходить до 500мс, при этом перенести эту работу на уровень компиляции сильно проблематично именно из-за ограничений fluent-подхода.

Подход продвигаемый WH с этим как раз мог бы помочь. Перенос компиляции всех linq-запросов из runtime-а на уровень компиляции занял бы пару вечеров.
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 23.02.13 17:42
Оценка: :)
Здравствуйте, VladD2, Вы писали:

G>>Боюсь, если бы Wolf Hound столкнулся с решенной таким образом задачей, которая внезапно упала бы ему на поддержку (естественно, настоящим программистам DSLя было бы впадлу писать по своему дсл учебник — не быстро это как-то), и ему пришлось бы ее допиливать и развивать — Wolf Hound бы покрыл авторов такой оправданности нецензурными матюгами.


VD>Забавно, что похожая ситуация как раз случилась у нас не так давно. Код написанный Вольфхаундом с использованием паттерн-матчинга и какой-то матери ЯОН был переписан с использованием реализованного другими людьми ДСЛ-я.


VD>Матюгов мы как-то не услышали...


Ситуация другая. Непохожая.

VD>Так что практика твоих слов не подтверждает.


Неправильно. Правильно так: у тебя нет практики, которая могла бы подтвердить и опровергнуть мои слова.
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 06.03.13 10:33
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Прав менеджер или не прав решает время. Судя по тому, что до решения переписать на С++ проект был успешным, а после переписывания сдох


Дай ка пруф, а то в яхе похоже не в курсе, что у них такой бизнес сдох.
The animals went in two by two, hurrah, hurrah...
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 11.03.13 21:39
Оценка: +1
Здравствуйте, Gaperton, Вы писали:

G>И закончится тем, что разрабы будут писать на говнодсл с кучей интересных "багофич". И новонанятые разработчики, глядя на этот ужас, будут через одного увольняться на второй день после найма. Потому, что изучение этого недоязыка, сделанного кучкой доморощенных гениев, лично им никакого профита не принесет — следующий работодатель не оценит.


Тут еще стоит добавить, что "доморощенные гении" обыкновенно крайне, как бы это сказать, за... диристы. . Они уверены, что они такие прям уникумы-уникумы.

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

Метакод — он такой. Он дает "избранным" очень много власти. Слишком. И это очень нехорошо и опасно, когда такая власть оказывается в руках человека с ментальностью ребенка.

Ой, прям чувствую, сейчас кто-нибудь начнет мне говорить, что я, якобы, испытал какую-то травму от контакта с неимоверно талантливыми самородками, и именно поэтому так пишу . Не, ребят, мне — пофигу. Это коллеги-программисты испытывали травмы, а я менеджер .
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 11.03.13 22:02
Оценка: +1
Здравствуйте, Gaperton, Вы писали:

G>Менеджер в непростой ситуации. Он понимает, что Грехэму, который внезапно мультимиллионер, в сущности уже на все насрать. И единственный человек, которому что-то надо — это он, менеджер (этим всегда заканчивается). менеджер попросил разработчиков не ссорится, и прикинуть план поэтапного переписывания этого метаговнокода, чтобы его можно было размазать, потому, что другие планы просто не работают.


А Грэхем, уволившись, пишет книжки про нереальный личный success story. Которыми вдохносляется молодежь. Пионер — это ж не возраст, он же молод душой, и характерен своей инфантильностью. Аудитория огромна.

Неудивительно. Для Грэхема story закончился продажей его стартапа. А для его братьев-программитов начались херовые будни, про которые никто не пишет книжек.
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 11.03.13 22:56
Оценка: :)
Здравствуйте, VladD2, Вы писали:

G>>Ты, Влад, хочешь верить в то, что окружающие тебя непонятные люди — идиоты.

VD>Давай лучше ты не будешь телепатией заниматься. У тебя не очень хорошо выходит.

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

G>>А они не идиоты. В системе Грехема было 40% метакода. Нанять в америке лисперов — два пальца об асфальт. В стартапе Грехема было двое, и оба уволились. Менеджер этого проекта — не идидот, он не более чем решал задачу методом наименьших усилий.


VD>Прав менеджер или не прав решает время. Судя по тому, что до решения переписать на С++ проект был успешным, а после переписывания сдох и определяет то, что менеджер был не прав. Вот если бы проект на Лиспе загибался, а на будучи переписанным на плюсы вдруг взлетел, то можно было бы твою трактовку обсудить. А так ты получается, что ты перевернул все с ног на голову.


Тебе ниже человек ответил, что и как у кого получается. По итогам, у тебя получается не очень хорошо.

VD>>>У Вольфханда же была та самая "проблема" что ты описал выше (первая цитата в этом сообщении). Ему вместо (вполне высокоуровневого) кода на ЯОН свалилась поддержка того же самого кода но на ДСЛ-е.

G>>Выше ты писал, что ему свалилась система на обычном языке, и он переписал ее на объясненном ему коллегами дсл. Разница.
VD>Переписал не он, а я (и Хардейс). А он как раз был вынужден в этом коде (на ДСЛ-е) разбираться.

Богатый опыт. Ну ты для начала самоустранись, как Грэхем. Чтобы ничего, кроме исходного кода, для разбирательства было недоступно. А до этого напиши столько кода, сколько написали они — для этого надо много времени и энергии. Тогда ты приблизишься к ситуации, о которой говорил я.

Правда после самоустранения ты результатов заметить не сможешь. Да и не интересно тебе будет. Займешься другими интересными вещами. Как Грэхем.
Re[14]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 11.03.13 23:02
Оценка: :)
Здравствуйте, Tanker, Вы писали:

T>ViaWeb -> Yahoo! Stores -> Yahoo! Smallbusiness Сдох только лисп, бизнес остался.


Я еще не видел темы, в которой программисты не разбирались бы лучше всех . А уж в бизнесе — ваще. Программист сказал — сдох, зачит — сдох .
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 12.03.13 22:31
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

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


G>>А если принять во внимание легкое отношение к дсл местной аудитории — в нем будет просто дохрена багов и кривой семантики. Ты обладаешь ментальным сканированием? Ты можешь знать, что этому марсианину показалось логичным? Книг он на эту тему не писал — западло.

WH>Ты тут вещаешь про проблемы с общением у авторов ДСЛ. А из тебя самого адекватность прямо так и прет...

Не "вещаю", а говорю.

WH>Людей, про которых ты ничего не знаешь, марсианами обозвал...


Я здесь говорю не про конкретных людей, а вообще, это из построения фраз понятно. Для примера.

Ты мне что-то про адекватность говоришь, да? Не воспринимай лично то, что лично (к тебе) даже задумано не было, для начала. Потом рассказывай мне про адекватность.

Впрочем, дыма-то без огня не бывает, да?

WH>А потом удивляешься, почему эти люди посылают тебя.


Кто это и где меня посылает? Извини, не приметил пока. Кажется, за такое у нас на форуме положен бан, да, дружище с правами модератора?

WH> И, конечно же, приходишь к выводу, что проблема в этих людях. Ибо такой великий специалист по пониманию мотивов людей не прав быть не может.


Сразу видно — ты небольшой специалист в понимании мотивов людей .
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 13.03.13 02:03
Оценка: +1
Здравствуйте, Gaperton, Вы писали:

G>Не, не пойму. Потому, что это — типичный DSL самоделкина, за который надо отрубать руки. С налетом CoffyScript, причем не по делу и на ровном месте, что усугубляет. Понятно одно — автору по какой-то причине не нравится plain.js (или он его элементарно не знает), и он пишет на ровном месте, где полагается быть ровному коду, непонятную хрень.


А если это будет не налет, а обычный CoffeeScript? Который, вполне заточен под подобные DSL. Его использование тоже будет продиктовано незнанием plain.js?

G>А вот should.js понять элементарно, потому, что это, во-первых

G>a) это plain JS, и, во-вторых...
G>b) ...should is an expressive, readable, test framework agnostic, assertion library for node. А не какой-то там DSL от самоделкина.

Это именно DSL от самоделкина. Причем этот самоделкин создает как раз языки.

Open-source perfectionist. Creator of the Luna programming language, Express, Stylus, Component, Mocha, Jade, rework, node-canvas and others. Pastafarian

Я регулярно сталкиваюсь с подобными, вполне приличными DSL от самоделкиных. Достаточно документированными и понятными, в существование которых истово не верит Мамут.
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 13.03.13 22:15
Оценка: :)
Здравствуйте, IT, Вы писали:

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


G>>Понятно. Менеджеры во всем виновыты. У них иррациональные страхи. Как это знакомо .


IT>Да ладно. Во всём виноваты только девелоперы. Менеджеров если и можно в чём-то винить, то только в нехватке времени для ухода за своими нимбами.


А в последнем виноват кто? Конечно, девелоперы. Таким образом, во всем виноваты девелоперы.
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 14.03.13 13:44
Оценка: :)
Здравствуйте, IT, Вы писали:

G>>Метакод — он такой. Он дает "избранным" очень много власти. Слишком. И это очень нехорошо и опасно, когда такая власть оказывается в руках человека с ментальностью ребенка.


IT>Так проблема в том, что у тебя отбирают власть?


Не власть отбирают, а ответсвенность и обязанности начинают распределяться случайным образом, что как правило приводит к
1. потеря времени-денег для бизнеса
2. Уход девелоперов, что означает потерю экспертизы у исполнителя
3. Головняк у менеджеров которые обязаны предотвратить 1 и 2
У Яхи именно это и произошло. Потеряли 6 лет, девелоперы ушли ибо мультимиллионеры, а значит яха потеряла экспертизу.
Судя по тому, что позже под продукт приспособили джаву, скачки на с++ и джаву оказались дешевле лиспа.
Пойми простую вещь — технарей можно удержать не языком и большой ЗП, а технической сложностью. При этом в крупных компаниях 30-80 задач это т.н. простая работа, то есть майнтенанс и суппорт. Эта простая работа должна быть максимально дешовой. Джава это обеспечивает — толпы индусов могут справляться с такой работой. А лисп — нет, не обеспечивает. И метапрограммирование не обеспечивает. При этом техническая сложность есть только на стартапе, дальше проект ничего не дает девелоперу. Учитывая, что майнтенанс и суппорт по совокупным расходам превышают бюджет стартапа в разы а бывает и десятки раз, то оказывается, что держать "стартаперов" на майнтенансе во первых дорого, во вторых из за отсутсвия технической сложности это просто бессмысленно.
Хочешь поспорить — покажи дешовый в майнтенансе проект, в котором вовсю используется метапрограммирование и который при этом сменил команду хотя бы один раз.
The animals went in two by two, hurrah, hurrah...
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 14.03.13 13:54
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

Z>Ты зря цепляешься к вызовам. То, что .have это свойство объекта, который хранится в свойстве .should чего-то там еще, тебе не дает никакой полезной инфы. Кстати, в CoffeeScript тебе все равно придется ставить точки либо писать обертку, которая позволит писать с пробелами.


Наоборот, дает и очень много. Новички очень долго таращат глаза когда видят ДСЛ, очень медленно вникают, еще медленнее начинают использовать, и уж совсем медленно пробуют расширять(если вообще берутся за это). А вот слепить хак и обойти ДСЛ — почему то все делается очень быстро. Как то так бывает, что проект заканчивается раньше, чем эти новички вкуривают весь бекграунд который лежит за ДСЛ. это можно отчасти переложить на инструменты, но похоже, Н2 выйдет не раньше чем лет через 5, а взлетит лет 10(судя по тому что Н1 еще не взлетел), то про эти радужные перспективы можно просто забыть.
То есть, новичку, который знаком с C#(JS и тд), простой тривиальный код на нем на порядки понятнее ДСЛ.
The animals went in two by two, hurrah, hurrah...
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 15.03.13 13:58
Оценка: +1
Здравствуйте, Tanker, Вы писали:

T>И опять ни слова про стоимость майнтенанса и суппорта. В большинстве проектов стоимостью стартапа можно пренебречь по сравнению с майнтенансом и суппортом. Это означает примерно следующее — на стартапе можно давать любые ЗП лишь бы проект сделали как надо. А на майнтенасе и суппорте все должно быть максимально предсказуемо, просто и самое главное — дешево. Если есть перспектива 10 лет трахаться с поисхом лисперов, функционалистов то здесь нет ни предсказуемости, ни дешевизны, так как таких специалистов от силы 1-2% от общей массы и ЗП у них часто вдвое втрое выше чем у рядовых девелоперов. С учетом того, что нужно снизить риски связаные с уходом специалиста, брать надо 2-3 человека. Внезапно оказывается, что по рискам и деньгам майнтенас у лисперов, функционалистов выходит намного дороже простых пхп-джавистов-дотнетчиков.


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

На самом деле это всё не проблема. Те кто хотя бы пробовал использовать макросы и DSL это знают. Проблема в другом. На сегодняшний день не существует вменяемых средств для разработки DSL и решений, базирующихся на МП. Их просто нет. Ни одного. Те что есть вменяемыми назвать никак нельзя, т.к. они требуют очень неочевидного шаманства и знаний потрохов компилятора, которые изрядно попахивают сами по себе.

То, что делает сейчас команда Немерле, как раз шаг в правильном направлении. Если они в своём порыве не оторвутся от реальной жизни и не улетят в далёкие дали (что порой проявляется), то мы вполне вероятно можем получить пример инструмента, кардинально упрощающего разработку DSL и использование МП.
Если нам не помогут, то мы тоже никого не пощадим.
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 15.03.13 22:57
Оценка: +1
Здравствуйте, Mamut, Вы писали:

M>Почему ты выносишь эти проблемы за рамки поддержки и развития? Борьба с этим поднимет цену на поддержку и развитие весьма неиллюзорно.


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

M>Чем этот самый гипотетический Лисп отличается от активно рекламируемых гипотетических DSLей?


В макросах List нет доступа к информации о типах. В результате применение таких макросов сильно ограничено и ценность их примерно на уровне текстуальных подстановок макросов C.
Если нам не помогут, то мы тоже никого не пощадим.
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 16.03.13 18:15
Оценка: :)
M>>Нифига они не риторические. Это — реально существующие проблемы, о апологеты DSL тут не хотят говорить вообще, продолжая рассказывать одни и те же басни уже который год
Автор: WolfHound
Дата: 16.03.13


Z>Еще раз. Это общие проблемы повторного использования кода. ООП, ФП, МП и DSL в частности, не позволяют программисту о них забыть и подвержены проблеме в равной степени. Каким боком, ты их относишь к проблеме DSL и тащишь в каждый топик я понять не могу.


Потому что для ООП и ФП уже существуют и инструменты и практики и т.п. Что есть для DSL кроме битья пяткой в грудь, что DSL — это мегакруто и там сразу все доступно?

Z>Более того быстродействие генерируемого кода можно тюнить намного эффективнее, чем оптимизировать библиотеку. Ибо доступны все возможности оптимизации библиотеки плюс очень серьезные оптимизации суперкомпиляции, недоступные в других техниках.


Да-да-да. Вот буквально каждый писатель DSL начнет заниматься суперкомпиляцией, ага

Z>Я тебе рассказывал историю, как замерил быстродействие парсера джейсона, созданного на коленке для изучения Nemerle.Peg?


Нет, не рассказывал

Z>Так вот, он оказался чуть быстрее Newton.Json (долгое время бывшего стандартом в мире .net), возраст которого был уже не один год и вопросами оптимизации автор занимался очень серьезно. Без DSL я бы достиг подобного результата за время минимум на пару порядков больше.


И из этого ты делаешь вывод, что все DSL будут такими?

M>>Никто не спорит, что DSL — рабочая технология. Спорят тут с излишне ярыми апологетами.


Z>Лично ты регулярно выносишь в ключевые недостатки DSL вещи совершенно ортогональные. Качество документации, качество кода и порог вхождения. Все это, в случае с DSL будет не хуже, а порог вхождения еще лучше аналогичного решения без MP.


Сказки. Аргументы, почему это сказки, уже приводились тут не раз. Пока что для DSL банально отсутсвуют какие-либо инструменты для обеспечения всего тобой перечисленного. Но да, «будет не хуже», ага-ага


dmitriid.comGitHubLinkedIn
Re[37]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 10:03
Оценка: :)
Здравствуйте, C.A.B, Вы писали:

WH>>>>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет. Из-за этого при решении задачи другими средствами тебе приходится не только решать задачу, но еще и бороться с инструментом.

CAB>>>Разве само МП не является "моделью вычислений"(с которой надо будет бороться)?
WH>>Нет.
CAB>Почему?
По тому, что МП работает не во время работы кода, а во время компиляции кода.
Те инструмент МП навязывает свою вычислительную модель компилятору, а не рабочей программе.
При этом вычислительная модель инструмента заточена именно под компиляторы из-за чего их легко делать.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 12:29
Оценка: :)
Здравствуйте, C.A.B, Вы писали:

CAB>Cool! Какое это имеет отношение к борьбе программиста с МП?

Никакого. Программист борется не с МП. Программист борется с ООП, ФП, ЛП итп. Ибо они навязывают вычислительную модель работающей программы. А на их компиляторы ты вообще никак повлиять не можешь.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.03.13 12:22
Оценка: +1
Здравствуйте, IT, Вы писали:

IT>Лучше прикинь другое. Для сапорта и мейнтененса никто не нужен, потому что сапорт и мейнтененс настолько тривиальны, что занимают от нуля до половины процента времени. У меня вообще хобби такое создавать решения не требующие саппорта. А если я уйду, то минимум год с моим кодом будет всё в порядке. В нём легко разберуться и легко начнут сапортить, пока не понавносят туда изменений, которые напрочь уничтожат всю вложенную туда простоту мейнтейнабилити и саппортобилити. И пофиг будут там МП и DSL или их там не будет.


Это у тебя так или вообще по индустрии ?

Где взять людей вроде тебя на каждый из проектов ?
Re[34]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 12:47
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>>>1)Порог вхождения в ООП намного больше. Я серьёзно. Ибо сделать хороший ОО дизайн намного сложнее, чем хороший ДСЛ. Более того хороший ДСЛ возможен для любой предметной области которую вообще возможно формализовать. Для ООП, ФП, ЛП,... и любого другого программирования, которое навязывает вычислительную модель это не верно.


T>>Где можно ознакомиться с методикой сравнения сложности ?


WH>Она вся в цитате, на которую ты отвечаешь.


Это неверно. МП можно изучать только после освоения ООП, ФП и тд. Открой код макров и убедись сам.

WH>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет. Из-за этого при решении задачи другими средствами тебе приходится не только решать задачу, но еще и бороться с инструментом.


Модель вычислений навязывает не ООП, а задача со своими требованиями и ограничениями. Сложность с дизайном в том, что это проектирование взаимодействия, а следовательно очень много элементов, которые влияют на конечное решение. Новичку просто невозможно взять в мозг все элементы.
The animals went in two by two, hurrah, hurrah...
Re[34]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 19:54
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

T>>Девелоперы не пишут на ИЛ, этот язык для прикладных и даже для фремворковых девелоперов чужой. Им нужно переводить все это в свой основной язык и поэтму все что я сказал про SRE абсолютно справедливо — результат ты или не увидишь вообще, или увидишь после н-приёмчиков.

WH>Те вся проблема в том, что ИЛ слишком низкого уровня?

Не важно, выше или ниже. Главное что он отличается от того уровня уверенности, на котором работает разработчик. Этот уровень определяется степерью прокачки понятий. То есть, у разработчика в голове строго определенный набор абстракций, которые соответствуют его опыту, других просто нет и скопировать просто невозможно. ДСЛ ничего не изменит у разраба в голове. Вот когда понятия будут прокачаны максимально глубоко, вот тогда от ДСЛ будет польза.
Knowledge transfer не компенсирует отставание, а опыт набирается только проверкой руками.
В большинсве бизнес-приложений такой момент никогда не наступает, вот в чем проблема, бизнес зачастую сам не дает до конца формализовать задачу, никто не будет ждать пока ты формализуешь и родишь ДСЛ под такую область как инвентаризация.
Кроме того, переключаться между языками дело очень затратное, а продуктивность на основном языке на порядки! выше чем на остальных.
The animals went in two by two, hurrah, hurrah...
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.13 00:51
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH>Главное в ДСЛ это вычислительная модель самого ДСЛ.

WH>Всё остальное мелочи, не заслуживающие внимания.

Это слишком сильное утверждение. Генерация кода может быть сложной задачей сама по себе. Ты генерируешь ни абы что, а алгоритмы. Прежде чем их сгенерировать их надо придумать (или подобрать из имеющихся). Верно лишь то, что сложность генерации не соизмерима с написанием аналогичного кода вручную. А алгоритмы приходится придумывать в любом случае. В случае же применения МП список допустимых алгоритмов расширяется, так как можно выбирать те из них которые не прошли бы по сложности поддержки в случае ручной реализации.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.13 08:21
Оценка: :)
M>>Ага-ага. Потом такой вот гений уволится, а нагенерированый его поделкой говнокод будет вылезать боком в самых неожиданных местах, ага.

VD>А действительно будешь править нагенерированный говнокод, а не код на ДСЛ и кодогенератор? Тогда конечно вылезет боком. Но это как раз об этом в той пословице говорилось — "Заставь дурака богу молиться он лоб расшибет.".


Нет, придется править DSL или кодогенератор. Кто сказал, что это будет просто? Ах, да, Вульфхаунд это сказал, и мы ему все моментально поверили, ага-ага.


VD>В твоем мышлении есть одна ошибка. Ты почему-то не верно оцениваешь сложность поддержки рукописного кода.


Я прекрасно оцениваю сложность поддержки рукописного кода, благо работаю сейчас но кровавый энтерпрайз ©


VD>Если решения задачи можно сгенерировать по существенно более простой/короткой/ясной модели, то сравнимое по характеристикам рукописаное решение будет несоизмеримо сложно. И поддерживать его будет сложно просто из-за огромного объема кода и неизбежных для такого объема ошибок в проектировании и реализации.


О да, а в DSL не будет ни ошибок проектирования, ни ошибок реализации, ага-ага.

VD>Чем более концептуальная ошибка/изменение, тем сложнее ее устранить/сделать в рукописном коде. В решение же на базе ДСЛ и кодогенерации это не критично, так как изменив код генератора можно устранить ошибку без полного переписывания кода.


Да-да-да. Ведь кодогенераторы написаные гениями без единого коммнетария так легко править!


dmitriid.comGitHubLinkedIn
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.13 08:55
Оценка: +1
M>>Почини свой телепатор. Я не верю в то, что все подряд DSLи максимально понятны, абсолютно легки в поддержке, самодокументируемы, мегаэффективны и т.п., как тут заливаете вы с вульфхаундом.
WH>Ох.
WH>ДСЛ можно сделать более понятным, более простым в поддержке, намного лучше самодокументируемым, и порой на порядки более эффективным, чем код на обычных языках.

Какой ценой? За счет чего? С использованием каких инструментов? Где и когда эти возможности будут и будут ли они вообще? Какова стоимость поддержки этих DSLей, написанный безымянными гениями? Вы же упорно избегаете этих вопросов, продолжая заливать уже опостылевшие сказки про то, что DSL — это мегакруто, мегапросто, мегадоступно, мега... мега... мега...

Пока что реальность никакой мега не показывает (за исключением исчезающе малого количества DSLей, с каждым из которых есть свои дополнительные проблемы).

WH>Мы говорим про существование, а не про всеобщесть.

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

Нет, мы указываем на очевидные пробелы в ваших сказках.


dmitriid.comGitHubLinkedIn
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: ionoy Эстония www.ammyui.com
Дата: 19.03.13 09:25
Оценка: +1
Здравствуйте, Mamut, Вы писали:

M>Какой ценой? За счет чего? С использованием каких инструментов? Где и когда эти возможности будут и будут ли они вообще? Какова стоимость поддержки этих DSLей, написанный безымянными гениями? Вы же упорно избегаете этих вопросов, продолжая заливать уже опостылевшие сказки про то, что DSL — это мегакруто, мегапросто, мегадоступно, мега... мега... мега...


M>Пока что реальность никакой мега не показывает (за исключением исчезающе малого количества DSLей, с каждым из которых есть свои дополнительные проблемы).


Да взять хотя бы Nemerle.PEG, попробуй попользоваться им, а потом попробуй напиши аналогичный парсер вручную.

Разговор ведь не о том, чтобы решать любую задачу написанием под неё DSL.
DSL помогает тогда, когда есть некоторое множество переиспользуемых алгоритмов, которые можно выразить в отдельном кратком языке, что значительно упрощает написание и поддержку кода, связанного с этими алгоритмами.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[20]: Кстати, про PEG
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.13 09:53
Оценка: +1
I>Да взять хотя бы Nemerle.PEG

Да, взять бы. https://github.com/rsdn/nemerle/tree/master/snippets/peg-parser

1. Ты абсолютно на 100% уверен, что это правильная реализация PEG? Количество тестов для этой реализации равно примерно нулю
2. В случае возникновения ошибок в парсере/генерации кода, сколько времени тебе понадобится найти и изменить ошибку, имея на руках два-три десятка исходников без комментариев и завязанных на неизвестно количество макросов, определенных неизвестно где, и неизвестно, во что разворачивающихся?

Автор этого добра написал это добро, которое, цитирую «может генерировать любой говнокод с нарушением всех правил хорошего тона результирующего языка, за нарушение которых при ручной работе нужно отрывать руки», и уволился из компании. Через два дня это добро начало вылезать боком изо всех щелей. Что будешь делать? Продолжать вещать сказки про «ах-ах-ах, все так прекрасно»?

ЗЫ. Не надо считать, что я против DSL, как класса. Я и PEG пользуюсь и, скажем, SQL'ем или каким-нибудь гремлином с cypher'ом. Вот только не надо рассказывать ничем не подкрепленные сказки про мега...мега...мега... DSLей.


dmitriid.comGitHubLinkedIn
Re[21]: Кстати, про PEG
От: ionoy Эстония www.ammyui.com
Дата: 19.03.13 10:21
Оценка: +1
Здравствуйте, Mamut, Вы писали:

I>>Да взять хотя бы Nemerle.PEG


M>Да, взять бы. https://github.com/rsdn/nemerle/tree/master/snippets/peg-parser


M>1. Ты абсолютно на 100% уверен, что это правильная реализация PEG? Количество тестов для этой реализации равно примерно нулю

M>2. В случае возникновения ошибок в парсере/генерации кода, сколько времени тебе понадобится найти и изменить ошибку, имея на руках два-три десятка исходников без комментариев и завязанных на неизвестно количество макросов, определенных неизвестно где, и неизвестно, во что разворачивающихся?

M>Автор этого добра написал это добро, которое, цитирую «может генерировать любой говнокод с нарушением всех правил хорошего тона результирующего языка, за нарушение которых при ручной работе нужно отрывать руки», и уволился из компании. Через два дня это добро начало вылезать боком изо всех щелей. Что будешь делать? Продолжать вещать сказки про «ах-ах-ах, все так прекрасно»?


M>ЗЫ. Не надо считать, что я против DSL, как класса. Я и PEG пользуюсь и, скажем, SQL'ем или каким-нибудь гремлином с cypher'ом. Вот только не надо рассказывать ничем не подкрепленные сказки про мега...мега...мега... DSLей.


Если бы не было этого самого ПЕГ'а, я бы просто не решился написать некоторые вещи, которые я написал. Никаких серъёзных проблем я за ним не заметил, но это темы и не касается, так как такой же аргумент можно предъявить и разработчику обычной библиотеки.
Главное, что есть инструмент, которым удобно пользоваться именно в виде отдельного синтаксиса. Без этого инструмента разработка усложняется, с ним упрощается, причём значительно. Что ещё надо?

Опять же, тут часто проскакивает фраза "что делать, если чувак уволился". Попробуй посмотреть на это со стороны разработчика библиотек. На каждый ли проект нужно писать отдельную библиотеку? Что делать, если разработчик библиотеки уволился?
DSL удобен тогда, когда его можно переиспользовать во многих местах и когда он значительно сокращает количество boilerplate кода.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[45]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 19.03.13 18:49
Оценка: +1
WH>Ты реально предлагаешь править текст, перед тем как давать его парсеру?

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

например, то же ядро линукса под специфическое реальное примение патчится именно таким способом.
Re[45]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 19.03.13 19:56
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

T>>А "мулька сбоку" это обычно хак в пару строчек-пару страниц кода. Например так — есть парсер, который валится на одном из выражений. "Мулька сбоку" — пропатчить выражения "в лоб" без модификации парсера.

WH>Чё за бред!?
WH>Ты реально предлагаешь править текст, перед тем как давать его парсеру?

Это пример "мульки сбоку", что бы тебе было понятно про что речь, которая по времени меньше чем копание в парсере.

WH>Ахринеть не встать.

WH>Пожалуй, разговор на этом можно закончить.
WH>Я понял, с кем разговариваю.

Не хочется учить тебя логике, но пример выше ничего не говорит о том, использую я его или нет. Раз ты считаешь иначе, я буду рад увидеть хоть какие то логически обоснованые выводы.
The animals went in two by two, hurrah, hurrah...
Re[45]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dilmah США  
Дата: 20.03.13 01:17
Оценка: :)
VD>По сути ДСЛ/модель + МП позволяет представить код в виде матрицы, где по вертикали располагается код на ДСЛ, а по горизонтали МП-код. Их перемножение и дает конечный код решающий задачу. Аналогичный рукописный код имеет сходный генерируемому объем кода. Именно это определяет синергизм данного подхода. Правим относительно мало кода, получаем решение содержащее много кода.

собственно, это и есть факторизация кода, которая меняется при рефакторинге
Re[49]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.03.13 11:29
Оценка: +1
WH> Он предлагает вместо того чтобы фиксить баг написать код который будет патчить код который поступает на вход парсеру.

Такое тоже часто встречал в проектах, в которых используется кодогенерация.

DG>>Если делать по твоему, то при каждом обновлении — попадаешь на кучу ручной работы.

WH>Что касается твоего случая, то git это делает одной командой. Где ты нашел кучу ручной работы, я не понимаю.

во-первых, теряется явное знание о том, что, как и зачем патчится.
во-вторых, проект прибивается гвоздями к конкретному экземпляру и ветке git-а.

WH>Я уже больше года так мержу изменение интеграции немерла, которое сделал лично для себя.


WH>Короче всё выглядит, так что кто-то накосячил и развел под это дело кучу идеологии.


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

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

И второе более критично, чем первое.
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.13 16:27
Оценка: :)
VD>>>Мы же пытаемся изменить это. Снижение сложности создания и поддержки ДСЛ с уровня "хардкор" до уровня "средний пользователь, не дурак" вполне возможно.

M>>Вот против такого объяснения, такого подхода к обсуждению и такого описания проблем тут никто на форуме вообще возражать не будет.


VD>Да ладно. Еще как будут. И возражают.


Да нет. Не возражают. Возражают, когда начинаются сказки про мегалегкость, мегапростоту, мегапонимаемость и т.д.


dmitriid.comGitHubLinkedIn
Re[45]: А при чем тут DSL? (в продолжении темы о языках обще
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.13 16:40
Оценка: +1
M>>Наличие не десятка мелких а хотя бы двух DSL-ей, в синтаксисе и компиляторах/кодогенераторах которых разбирается даже не 10% человек, а два-пять человек приводит к серьезным и плохо прогнозируемым проблемам.

VD>Реальность она несколько иная. При переходе на ДСЛ-и и кодогенерацию 100 человек заменяются десятью. Объем кода и его противоречивость так же ужимается в 10 раз. Выявляются и устраняются противоречивые ситуации. И проект из кучи навоза превращается в конфетку.



Вот это я и называю сказками

VD>Нужно только найти толковых людей.

VD>Хотя понимаю, найти толковых людей в энтерпрай, на разгребание говна не просто. Плюс еще платят там не всегда достойно.

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


dmitriid.comGitHubLinkedIn
Re[46]: А при чем тут DSL? (в продолжении темы о языках обще
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.03.13 17:56
Оценка: -1
Здравствуйте, Tanker, Вы писали:

T>100 человек не потому, что надо кода много писать, а потому, что количество требований и ограничений велико.


Это чушь. 100 человек вообще не могут написать вменяемый софт.

— Степан! У гостя карета сломалась.
— Вижу, барин. Ось полетела. И спицы менять надо.
— За сколько сделаешь?
— За день сделаю.
— А за два?
— Ну… За… Сделаем и за два.
— А за пять дней?
— Ну, ежели постараться — можно и за пять.
— А за десять?
— Ну, барин, ты задачи ставишь! За десять дён одному не справиться, тут помощник нужен — хомо сапиенс!
— Бери помощников, но чтобы не раньше!

(с) Формула любви
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.03.13 06:57
Оценка: +1
Здравствуйте, Tanker, Вы писали:

T>Именно те же и встанут.

Ну как это они вдруг встанут в языке, где вообще нет мутабельных типов?
Как только мы отказываемся от идеи модифицировать состояние, проблема моментально решается. Можно "наследовать" прямоугольник от квадрата, добавляя ему ещё один параметр, а можно — квадрат от прямоугольника.
А если отказаться от наследования, переместив полиморфизм на другую сторону call site, то и сам вопрос "кого от кого" вообще исчезнет.
Вот так язык влияет на мышление.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[42]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.03.13 07:03
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

T>>Именно те же и встанут.

S>Ну как это они вдруг встанут в языке, где вообще нет мутабельных типов?
S>Как только мы отказываемся от идеи модифицировать состояние, проблема моментально решается. Можно "наследовать" прямоугольник от квадрата, добавляя ему ещё один параметр, а можно — квадрат от прямоугольника.
S>А если отказаться от наследования, переместив полиморфизм на другую сторону call site, то и сам вопрос "кого от кого" вообще исчезнет.
S>Вот так язык влияет на мышление.

На мышление влияет не язык, а решаемая задача. Напиши полноценный ричэдит на хаскеле и чтоб не хуже, чем имеющаяся реализация. Ну или видео-звук обработай. Мне будет очень интересно посмотреть на реализацию без модификации состояния.
Re[47]: А при чем тут DSL? (в продолжении темы о языках обще
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.03.13 07:09
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


T>>100 человек не потому, что надо кода много писать, а потому, что количество требований и ограничений велико.


VD>Это чушь. 100 человек вообще не могут написать вменяемый софт.


100 человек естественно не пишут одну функцию.

Требования разбиваются на части, кажду часть разрабатывает одна команда.

Корпоративный софт именно так и написан.

Скажем сервисы современных контор гигантов так и пишутся и там не 100, а тысяча разработчиков это не предел.
Re[42]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 22.03.13 07:16
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

S>Ну как это они вдруг встанут в языке, где вообще нет мутабельных типов?

S>Как только мы отказываемся от идеи модифицировать состояние, проблема моментально решается. Можно "наследовать" прямоугольник от квадрата, добавляя ему ещё один параметр, а можно — квадрат от прямоугольника.
S>А если отказаться от наследования, переместив полиморфизм на другую сторону call site, то и сам вопрос "кого от кого" вообще исчезнет.
S>Вот так язык влияет на мышление.

Берем наследование прямоугольника от квадрата на примере иммутабельного списка. Новый класс внезапно добавляет методом Add не один, а два элемента. Ну то есть исправно возвращает новый список, но у него уже не на один элемент больше, а на два. Всё, приехали — модификации состояния нет, а проблема "прямоугольник от квадрата" как была, так и осталась.
The animals went in two by two, hurrah, hurrah...
Re[26]: Кстати, про PEG
От: Tanker  
Дата: 22.03.13 10:01
Оценка: :)
Здравствуйте, ionoy, Вы писали:

T>>Компиляция и парсинг никому, кроме гиков, не нужны, если код падает в рантайме.

T>>P.S. Приходишь ты в лабаз и говоришь — дайте мне BMV X5 последний. Они тебе дают и говорят — есть огромная разница между выпуском авто и кручением руля. У нас авто выпускаются без проблем. Да и руль крутить можно. Но есть некоторые косяки, из за которых X5 ехать не может.

I>Но ведь парсер и DSL выполняют свою задачу корректно, так что почему это аргумент не в пользу Peg, я


Речь то про тесты была изначально. Код не работает — значит тестов не было. Или в Немерле изобрели способ выполнять тесты вне рантайма ? Интересная техника, похоже, я чтото пропустил в этой жизни.
The animals went in two by two, hurrah, hurrah...
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 23.03.13 14:46
Оценка: +1
Здравствуйте, dimgel, Вы писали:

D>То ж была такая ж мысль, пока писал. Но мысль была нечёткой, и я побоялся такие громкие заявы делать.


Ну на SQL местные противники DSL могут возразить, что это язык придуманный гениями по крутой теории.

А вот HQL это уже вольная вариация на тему SQL, придуманная вполне рядовыми программистами. Вобщем все ужасы DSL, которые тут описали присутствуют. И никто не увольняется, никто не плачет, что синтаксис ставит в тупик и лучше уж старый добрый SQL. Живет и альтернатив в Java мире ему практически нет. В .net же он легко убит другим, встроенным в язык, DSL, совмещающим возможности HQL и CriteriaAPI.
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 25.03.13 15:24
Оценка: -1
Здравствуйте, hardcase, Вы писали:

H>Ну ты все-таки соизмеряй масштабы примеров. Если предметная область оказалось настолько суровой, что потребовалось наколбасить крутой DSL уровня SQL, то и библиотека классов с аналогичным функционалом должна быть некислого размера.


Ну и что, что некислого размера? Библиотеку помнить наизусть необязательно, бо современные IDE некисло помогают пользоваться библиотекой. Но пользоваться каким-то новым синтаксисом другого языка еще ни одна IDE не помогала. Синтаксис языка надо знать самому, увы.
Re[50]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.03.13 10:04
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

I>>Если не нравится рич-эдит, посмотри в те задачи, которые типично решаются с помощью С++, например видео или звук.

S>Или, например, роутинг пакетов. Название "эрланг" вам что-нибудь говорит?

Кстати говоря, я вот видел и кое где даже поучавствовал в написании алгоритмов роутинга (С++, джава и C#). А ты можешь похвастаться тем, что написал скажем хотя бы ричэдит на хаскеле ну или какую нибудь насквозь императивную задачу на том же хаскеле или другом функциональном языке ?
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 27.03.13 09:21
Оценка: :)
Здравствуйте, DarkGray, Вы писали:

DG>Если по DSL-у учебник вышел, то такой DSL уже использовать можно или еще нет?


Уже менее страшно.
Целессобразность инвестиций в язык зависит от вложения усилий ДРУГИХ людей в этот же язык. Се ля ви.
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.03.13 07:29
Оценка: +1
Здравствуйте, koodeer, Вы писали:

K>Я зареган на RSDN относительно недавно, но посещал этот ресурс уже давно (в режиме ридонли). Так вот, я помню времена, когда при упоминании немерлистами слова "макрос" на них тут же накидывались: "макросы — зло!"

K>Время шло, немерлисты продолжали упоминать всуе свои макросы, и местная публика постепенно привыкла. Большинство, по моему мнению, по-прежнему не понимают, что именно представляют из себя гигиенические макросы, но уже смирились с их присутствием где-то там, в параллельном мире. И, даже не понимая их, многие осторожно признают их полезность
K>Теперь мы видим аналогичные нападки на любое упоминание DSL. WolfHound растревожил улей.
K>Нужно просто продолжать часто упоминать как макросы, так и DSL, причём всегда с понятными примерами, и серые массы программерства свыкнутся с этим, перестанут кидаться как на красную тряпку.

Если скажем взять 2006й год, то как на красную тряпку кидались именно немерлисты, если ктото вдруг говорил "макросы зло" и тд, при чем с полным набором конструктива, в виде перехода на личности, намеки на квалификацию и тд и тд. При чем делали это практически во всех темах где хоть как то упоминались ЯП, вроде D, Руби и тд.

Собтсвенно легко можно проверить по сообщениям того человека, который лет 5 сюда не пишет и тем не менее до сих пор на первом месте

Что интересно — почти все его прогнозы(2006й год!) на счет немерле как то незаметно сбылись, Немерле так и остался "для сэбэ" и в практические задачи можно сказать и не проник.

P.S. Ну и заодно можно найти смешки розового слоника в адрес Страуструпа. Один в один с нынешними смешками в адрес Хейлсберга.
Re[42]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 13.04.13 09:31
Оценка: :)
Здравствуйте, IT, Вы писали:

IT>Какие ещё гимнасты? В моей конторе подавляющее большинство девелоперов за 30, потому что молодняк пусть пока подучится где-нибудь в другом месте. И как бы никого это не напрягает.


Всего навсего консервативная область
Re[48]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.05.13 06:03
Оценка: +1
Здравствуйте, IT, Вы писали:

IT>Если под затеей понимается эмуляция WinForms, то да, провальная. А если бы не страдали фигнёй и сделали редактор именно html, то может и что-то получилось бы.

Свежо предание, но верится с трудом. Я наблюдал минимум 4 движка по WYSISYG редактированию HTML. Все — отстой, включая Dreamweaver. У всех есть единственный способ написать то, что нужно — это переключиться в source view.
Просто потому, что есть принципиальная неопределённость — одному и тому же внешнему виду соответствует бесконечное количество внутренних представлений. Я могу вставить <span></span>, и он займёт ровно 0 места, благодаря чему будет невидимым.
И это — чистый HTML.
А с приложениями ещё хуже — всё видимое определяется стилями, а стили заимпортированы по ссылке на URL, который существует только в рантайме. Поэтому в редакторе я вижу всё в синих рамках и шрифт Times New Roman 12pt. Какой уж тут IWYG.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.05.13 07:30
Оценка: :)
Здравствуйте, vdimas, Вы писали:

V>Гы, то, чем ты тут так активно занимаешься. Написать пост.

Вам — не буду. Смысла нет.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 21.12.12 12:07
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>Но и задач, в которых оправдано использование декларативного языка (такого, как Datalog), совсем немного. По правде говоря, в практике обычного программиста их почти нет. Таким образом выгоды от использования декларативных dsl-ей, мягко говоря, преувеличены. Их просто негде применить. Неудивительно, что сторонники DSL "не поняли" код, предложенный AndrewVK в качестве примера для демонстрации мощи DSL-я. А секрет прост — Андрей предложил чисто императивный код, который не перепишешь на том же даталоге.


С одной стороны +1, с другой — мне не нравится формулировка "Андрей предложил императивный код". Я ту ветку не читал (точнее, читал, но не всю), но ИМХО надо предлагать не код, который нужно переписать, а задачу, которую нужно решить. Пример: тут неподалёку в рассуждениях про anemic domain model Синклер писал
Автор: Sinclair
Дата: 19.12.12
следующее:

В идеале, мы даже загрузку данных не выполняем. В идеале, бизнес-сценарий компилируется напрямую в батч на языке нижележащего tier, (что чуть более чем всегда сводится к SQL), и отправляется на сервер, где нет нужды заниматься нудным раунд-трипом.


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

Кроме того, на той же скале DSL-и часто используются в императивном коде для компактного решения всяких рутинных задач. К примеру, combinator parsers, позволяющий писать программы разбора грамматик прямо в синтаксисе BNF (и в отличие от всяких yacc/bison да javacc, тут не требуется промежуточный этап генерации исходного кода). Или запуск процессов.
Re[2]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 21.12.12 12:10
Оценка:
D>ИМХО надо предлагать не код, который нужно переписать, а задачу, которую нужно решить.

Ну и, разумеется, довольно глупо считать DSL-и очередной серебряной пулей, применимой к любым задачам.
Re[2]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: LaPerouse  
Дата: 21.12.12 13:17
Оценка:
Здравствуйте, dimgel, Вы писали:

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


LP>>Но и задач, в которых оправдано использование декларативного языка (такого, как Datalog), совсем немного. По правде говоря, в практике обычного программиста их почти нет. Таким образом выгоды от использования декларативных dsl-ей, мягко говоря, преувеличены. Их просто негде применить. Неудивительно, что сторонники DSL "не поняли" код, предложенный AndrewVK в качестве примера для демонстрации мощи DSL-я. А секрет прост — Андрей предложил чисто императивный код, который не перепишешь на том же даталоге.


D>С одной стороны +1, с другой — мне не нравится формулировка "Андрей предложил императивный код". Я ту ветку не читал (точнее, читал, но не всю), но ИМХО надо предлагать не код, который нужно переписать, а задачу, которую нужно решить. Пример: тут неподалёку в рассуждениях про anemic domain model Синклер писал
Автор: Sinclair
Дата: 19.12.12
следующее:


К сожалению, от современных реалий не получится оторваться. Вот тот же самый Datalog можно использовать гораздо шире, чем он используется сегодня (а в бизнесе он не используется чуть менее чем нигде). Причем есть очень много случаев, когда применение Datalog-подобных сверхвысоких языков в качестве языка запроса (вместо SQL) способно радикально упростить реализацию (почти как в приведенном случае — 56 страниц против 17 строк). Говорю не просто так — использовал сам Prolog для денормализации структуры бд. На нем действительно много можно сделать радикально проще, чем на SQL или императивном языке (объектно-ориентированном или функциональном). Но не всегда можно использовать оптимальный инструмент для задачи. Нужно исходить из реалий — сегодняшний мейнстрим, это SQL и/или объектно-реляционные средства с процедурными алгоритмами обработки. Как здесь может помочь DSL?
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 21.12.12 13:28
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>Нужно исходить из реалий — сегодняшний мейнстрим, это SQL и/или объектно-реляционные средства с процедурными алгоритмами обработки. Как здесь может помочь DSL?


Ну как я себе вижу типичную эволюцию проекта: если обнаруживаются повторяющиеся куски кода, они выносятся в повторно используемые функции. А если обнаруживаются повторяющиеся паттерны, реализованные разными людьми вразнобой, их реализации приводятся к общему виду, и тут возникает возможность тоже что-нибудь да подсократить, введя либо вспомогательное API, либо каркасное (в т.ч. макросы). А это уже можно рассматривать как DSL, даже если он не выглядит как "L" (откровенно говоря, помнить синтаксис настоящих "L" — так себе радость). Такие ситуации на больших проектах — на каждом шагу, и всё лучше прошивать паттерны в код, чтобы никто не смог сделать поперёк, чем писать многочисленные гайдлайны "а вот это делаем так-то", которые далеко не всегда помнят даже их авторы, а остальные так и вообще не читают.
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 21.12.12 13:32
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>Нужно исходить из реалий — сегодняшний мейнстрим, это SQL и/или объектно-реляционные средства с процедурными алгоритмами обработки. Как здесь может помочь DSL?


О, кстати! Про слона-то я и забыл! LINQ — это ж тоже DSL (по крайней мере, я так слышал, его к C# присобачили как захардкоженное синтаксическое расширение). А его аналоги на scala — и подавно DSL-и. Raw string queries щас только настоящие джедаи конструируют, все нормальные люди давно уже на статике сидят.
Re[4]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: LaPerouse  
Дата: 21.12.12 13:34
Оценка:
Здравствуйте, dimgel, Вы писали:

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


LP>>Нужно исходить из реалий — сегодняшний мейнстрим, это SQL и/или объектно-реляционные средства с процедурными алгоритмами обработки. Как здесь может помочь DSL?


D>Ну как я себе вижу типичную эволюцию проекта: если обнаруживаются повторяющиеся куски кода, они выносятся в повторно используемые функции. А если обнаруживаются повторяющиеся паттерны, реализованные разными людьми вразнобой, их реализации приводятся к общему виду, и тут возникает возможность тоже что-нибудь да подсократить, введя либо вспомогательное API, либо каркасное (в т.ч. макросы). А это уже можно рассматривать как DSL, даже если он не выглядит как "L" (откровенно говоря, помнить синтаксис настоящих "L" — так себе радость).


Если угодно называть API или SPI DSL-ем, тогда нужно признать, что DSL сегодня используется в каждом первом проекте. Другое дело, что все это бесконечно далеко от описанного в первом посте WolfHound-a.
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[4]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: LaPerouse  
Дата: 21.12.12 13:37
Оценка:
Здравствуйте, dimgel, Вы писали:

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


LP>>Нужно исходить из реалий — сегодняшний мейнстрим, это SQL и/или объектно-реляционные средства с процедурными алгоритмами обработки. Как здесь может помочь DSL?


D>О, кстати! Про слона-то я и забыл! LINQ — это ж тоже DSL (по крайней мере, я так слышал, его к C# присобачили как захардкоженное синтаксическое расширение). А его аналоги на scala — и подавно DSL-и. Raw string queries щас только настоящие джедаи конструируют, все нормальные люди давно уже на статике сидят.


В яве подобное непопулярно. Использование орм носит массовый характер. А LINQ вроде как является частью языка общего назначения. Ну ладно, даже если назвать его DSL-ем, он применяется достаточно часто, чтобы сетовать на игнорирование современными программистами возможностей DSL...
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 21.12.12 13:45
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>Если угодно называть API или SPI DSL-ем, тогда нужно признать, что DSL сегодня используется в каждом первом проекте. Другое дело, что все это бесконечно далеко от описанного в первом посте WolfHound-a.


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

Вот посмотреть на те же scala DSL: можно было бы написать методы Process.setOutputStream(os) и Process.run(), а они написали методы Process.>>(os) и Process.!(). По сути — не поменялось ничего. Синтаксически — код, использующий это API, стал гораздо короче, выразительнее и зачастую непонятнее — ни читающему, ни пишущему.

Та ж фигня, к примеру, с коллекциями: вместо ListBuffer.append(T) у нас имеется ListBuffer.+=(T). Можно ли считать DSL-ем запись

buf += "hello " += "world!"


вместо

buf.append("hello ").append("world")?


Да хрен его знает, товарищ начальник, а почему нет? Разработчики и юзеры скалы — называют. ИМХО тут спор терминологический уже.
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 21.12.12 13:54
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>В яве подобное непопулярно. Использование орм носит массовый характер.


Не имея желания начинать очередной срач anemic vs rich, равно как и обсуждать говномамонтовость явы, на которой нормальная реализация LINQ-подобной фигни без препроцессора попросту невозможна (хотя Cyberax не так давно говорил, что что-то такое имеется, но кажется даже название не дал), скажу лишь, что тот же хиберовский HQL — тоже ж DSL, по сути. То, что он не статически типизированный и на этапе компиляции не проверяется — вопрос ортогональный.
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: LaPerouse  
Дата: 21.12.12 14:14
Оценка:
Здравствуйте, dimgel, Вы писали:

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


LP>>Если угодно называть API или SPI DSL-ем, тогда нужно признать, что DSL сегодня используется в каждом первом проекте. Другое дело, что все это бесконечно далеко от описанного в первом посте WolfHound-a.


D>Перечитал тот пост, по ссылкам оттуда ходить лень, а без них не особо информативно. Но ничё, нам не впервой. :))


По ссылкам там реализация Datalog-a — компилятор, интерпретатор и рантайм. Причем разработка грамматики и парсера как таковой (то, что выдвигалось в качестве основной сложности разработки DSL) занимает от объема всей работы нуль целых хрен десятых. Основная сложность — разработка интерпретатора Datalog-a.

D>Да хрен его знает, товарищ начальник, а почему нет? Разработчики и юзеры скалы — называют. ИМХО тут спор терминологический уже.


Подобные вещи всегда называли сахаром. Но если называть отдельные структуры языка общего назначения дсл-ем, действительно, что же тогда dsl?
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[2]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 21.12.12 14:14
Оценка:
Здравствуйте, koodeer, Вы писали:

K>Главная причина непринятия DSL — крайне неудачные примеры введения в метапрограммирование. Сколько я видел кратких введений в МП — везде приводятся крайне неудачные примеры: ставится простенькая задача, пишется функция, решающая эту задачу, затем вместо функции пишется расширение (оператор) языка, решающий ту же задачу. Увы, именно такими примерами напрочь отбивают принятие МП и DSL. Ведь сокращение кода не происходит: была функция, стало новое слово языка; упрощение кода тоже не происходит (по той же причине).


Я вот щас полуфлеймовый полуоффтоп забабахаю. Не надо это воспринимать как несогласие с написанным, просто к слову пришлось. Уж сколько ругани было вокруг неудачного примера вычисления факториала, на котором в школах показывают рекурсию! Сколько ругани!!! И в реале, и в интернете. Мол, нафига городить огород с рекурсией там, где можно обойтись простым циклом? Я, разумеется, всячески поддерживал эту точку зрения. Пока не начал ФП изучать... С тех пор каждый раз, вспоминая про этот многострадальный факториал, хожу-хихикаю.
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: LaPerouse  
Дата: 21.12.12 14:18
Оценка:
Здравствуйте, dimgel, Вы писали:

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


LP>>В яве подобное непопулярно. Использование орм носит массовый характер.

D>тот же хиберовский HQL — тоже ж DSL, по сути. То, что он не статически типизированный и на этапе компиляции не проверяется — вопрос ортогональный.

Ну и SQL-то dsl не в меньшей степени.
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 21.12.12 14:26
Оценка:
Здравствуйте, LaPerouse, Вы писали:

D>>Да хрен его знает, товарищ начальник, а почему нет? Разработчики и юзеры скалы — называют. ИМХО тут спор терминологический уже.


LP>Подобные вещи всегда называли сахаром. Но если называть отдельные структуры языка общего назначения дсл-ем, действительно, что же тогда dsl?


Ну, может я неточно выразился. Называют DSL-ем они не такую тривиальщину типа ListBuffer, а вещи чуть посложнее. Но где эта грань проходит — хз. Возможность записи любых функций в инфиксной форме, плюс implicits, дают иной раз такие странные вещи, которые вообще непонятно как работают и как это чудо вообще рожали. Вот примерчик, как выглядит scalatest:

class ListBufferSpec extends FlatSpec with MustMatchers {
    it must "append items" in {
        val buf = new ListBuffer[Int]
        buf += 0
        buf.size must be(1)
    }
}


Я вот знаю, что кроме кучи вспомогательных классов-обёрток, кучи неявных преобразований типов, и кучи инфиксных вызовов методов здесь ничего быть не может. Но я хрен её знает, товарищ начальник, как эта хрень на самом деле компиляется и работает, и честно говоря, у меня начинает дёргаться глаз от одной мысли попытаться разобраться. Вот субъективно для меня это и есть, походу, отличие между скаловским сахаром и скаловскими DSL-ями: если понятно, как работает, — значит сахар, непонятно — значит DSL. Такая вот, панимаеш, петрушка. :/ Я очень жду, когда ж в скале появятся нормальные макросы, это должно радиально уменьшить чудесатость нынешних решений. (Походу, через год в версии 2.11 они появятся; первую попытку следует признать сырой и убогой.)
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 21.12.12 14:28
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>Ну и SQL-то dsl не в меньшей степени.


То ж была такая ж мысль, пока писал. Но мысль была нечёткой, и я побоялся такие громкие заявы делать.
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 22.12.12 07:06
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Вы забываете про другую букву в абривиатуре DSL, а именно D. Есть домен -- можно создать ДСЛ. Нет домена -- будет синтаксический сахар, ИХМО.


Логично, согласен.

A>Я со скалой практически не знаком, но, ИХМО, в том что показывал dimgel домена нет.


В ListBuffer, получается, нет. А в scalatest — есть: тестирование.

A>Если мы обратимся к linq, то там домен есть -- наборы данных. Поэтому Linq -- DSL.


+1.
Re[2]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 25.12.12 02:50
Оценка:
K>Я думал-думал, я всё понял!

K>Главная причина непринятия DSL — крайне неудачные примеры введения в метапрограммирование.


Не знаю. У меня главная причина неприятия — то, что любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой, с отсутствием внятного инструментария и т.п.

Потому что даже в том же SQL, который является DSL'ем с собственным стандартом и основан на известной мат. модели, разные реализации имеют собственные детали, инструменты, уровень документированности и проч. Про мелкие DSL'и, которые здесь пытаются активно продивигать (типа «каждой задаче по DSLю») я вообще промолчу.


dmitriid.comGitHubLinkedIn
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 31.12.12 12:26
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Не знаю. У меня главная причина неприятия — то, что любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой, с отсутствием внятного инструментария и т.п.


Обычно документированный. Давай примеры тех DSL с которыми тебе приходилось работать и безDSLную альтернативу, чтобы было с чем сравнивать.

M>Потому что даже в том же SQL, который является DSL'ем с собственным стандартом и основан на известной мат. модели, разные реализации имеют собственные детали, инструменты, уровень документированности и проч. Про мелкие DSL'и, которые здесь пытаются активно продивигать (типа «каждой задаче по DSLю») я вообще промолчу.


Пример SQL показывает, что как только появляется хороший DSL все остальные решения можно хоронить.
Re[4]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.12.12 12:46
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Пример SQL показывает, что как только появляется хороший DSL все остальные решения можно хоронить.


Пример SQL показывает, что при наличии в языке средств типа LINQ он нужен примерно как собаке пятая нога.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Jack128  
Дата: 31.12.12 13:28
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


Z>>Пример SQL показывает, что как только появляется хороший DSL все остальные решения можно хоронить.


AVK>Пример SQL показывает, что при наличии в языке средств типа LINQ он нужен примерно как собаке пятая нога.


ну так как раз линк и доказывает, что ДСЛ встроенный в "основной" язык — это и есть рулез нереальный.
Re[4]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 31.12.12 14:05
Оценка:
M>>Не знаю. У меня главная причина неприятия — то, что любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой, с отсутствием внятного инструментария и т.п.

Z>Обычно документированный.


С какого перепугу?

Z>Давай примеры тех DSL с которыми тебе приходилось работать и безDSLную альтернативу, чтобы было с чем сравнивать.


У нас на работе используется 3, по сути DSL'я. Уровень документации во всех трех — аховый. Без-DSLная алтернатива — описывать все то же в Erlang'е.

M>>Потому что даже в том же SQL, который является DSL'ем с собственным стандартом и основан на известной мат. модели, разные реализации имеют собственные детали, инструменты, уровень документированности и проч. Про мелкие DSL'и, которые здесь пытаются активно продивигать (типа «каждой задаче по DSLю») я вообще промолчу.


Z>Пример SQL показывает, что как только появляется хороший DSL все остальные решения можно хоронить.


Осталось понять, каким образом такой хороший DSL может появиться. Это во-первых. Во-вторых — выделенное.


dmitriid.comGitHubLinkedIn
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.12.12 14:22
Оценка:
Здравствуйте, Jack128, Вы писали:

J>ну так как раз линк и доказывает, что ДСЛ встроенный в "основной" язык — это и есть рулез нереальный.


Нет, не доказывает. DSL это не весь линк, а конкретно query comprehension. И вот лично я им практически никогда не пользуюсь. Ключевой момент языка, который меняет картину, это прежде всего механизм квазицитирования ака expression tree, и это вполне себе general purpose штука, а никак не DSL.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.12.12 18:13
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Если предметная область оказалось настолько суровой, что потребовалось наколбасить крутой DSL уровня SQL


А если такой DSL не нужен, то и пушка навроде той, что Влад предлагал, тоже не нужна.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: hardcase Пират http://nemerle.org
Дата: 31.12.12 18:33
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А если такой DSL не нужен, то и пушка навроде той, что Влад предлагал, тоже не нужна.


Мой акцент был не на сложности DSL-я, а на сложности прямого аналога этого DSL-я на типичном ООП языке.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.12.12 18:34
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Мой акцент был не на сложности DSL-я, а на сложности прямого аналога этого DSL-я на типичном ООП языке.


Когда логика не помогает, в ход идут акценты?
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: hardcase Пират http://nemerle.org
Дата: 31.12.12 18:35
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Как то так выходит, что самые лучшие примеры по ДСЛ и Немерле от людей, которые мягко говоря не в ладах с местными немерлистами.


Как все же ненавязчиво можно умудриться наступить тебе на любимый мозоль
/* иЗвиНите зА неРовнЫй поЧерК */
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: hardcase Пират http://nemerle.org
Дата: 31.12.12 18:36
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Когда логика не помогает, в ход идут акценты?


Скорее фигурная резка по двустрочным цитатам.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 31.12.12 18:38
Оценка:
Здравствуйте, hardcase, Вы писали:

I>>Как то так выходит, что самые лучшие примеры по ДСЛ и Немерле от людей, которые мягко говоря не в ладах с местными немерлистами.


H>Как все же ненавязчиво можно умудриться наступить тебе на любимый мозоль


Думаю не дальше чем через пару страниц от вас снова появятся автоматы, калькуляторы, пермишны и прочая ерунда которая оскомину набила еще лет пять назад.
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: hardcase Пират http://nemerle.org
Дата: 31.12.12 18:42
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Думаю не дальше чем через пару страниц от вас снова появятся автоматы, калькуляторы, пермишны и прочая ерунда которая оскомину набила еще лет пять назад.


От меня — вряд ли. Словоблудие пока не входит в круг моих интересов Так, иногда поглядываю что творится на знакомых рубежах бастионов флейма РСДН.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 31.12.12 21:36
Оценка:
Здравствуйте, hardcase,

I>>Думаю не дальше чем через пару страниц от вас снова появятся автоматы, калькуляторы, пермишны и прочая ерунда которая оскомину набила еще лет пять назад.


H>От меня — вряд ли. Словоблудие пока не входит в круг моих интересов Так, иногда поглядываю что творится на знакомых рубежах бастионов флейма РСДН.


Ладно, не боись, калькуляторов за тобой не водилось, у меня все записано
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: minorlogic Украина  
Дата: 01.01.13 12:35
Оценка:
Добавлю , что реализация решений уровня ПРОЛОГа может быть на порядок сложнее чем решение задачи в лоб.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 02:09
Оценка:
Z>>>Обычно документированный.

M>>С какого перепугу?


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


Откуда берется этот «обычно». Особенно если мы говорим о светлом будущем, когда DSL'и будет писать каждый первый для каждой второй задачи.

M>>У нас на работе используется 3, по сути DSL'я. Уровень документации во всех трех — аховый. Без-DSLная алтернатива — описывать все то же в Erlang'е.

Z>А как писать все то же, но в Erlange документировано лучше?

Нет, конечно.

Z>Ты примеры давай, я тебе верю конечно на слово, но без примеров дискутировать не очень интересно.


Ты выдвинул утверждение, что DSLи будут документированы, ты его и доказывай.

M>>Осталось понять, каким образом такой хороший DSL может появиться. Это во-первых. Во-вторых — выделенное.


Z>Так же как и любой другой код для повторного использования. Он появляется потому, что без него еще хуже. А уж будет этот код документирован и продуман не зависит от того, DSL это или нет.


Я об этом и говорю. Никакого «обычно» не будет. Он будет документирован не лучше и не хуже, чем любой другой код. Хотя, учитывая, что это будет domain-specific language, то будет документирован еще хуже, так как в условиях «о, у нас домен, давай колбасить DSL» никто не будет выписывать весь синтаксис, семантику и т.п.


dmitriid.comGitHubLinkedIn
Re[4]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 02.01.13 06:39
Оценка:
Здравствуйте, koodeer, Вы писали:

K>А что тут удивительного? Ведь DSL — DOMAIN specific language. Предметная область действия разработчиков Немерле — разработка Немерле (кэп на связи). Поэтому они и мыслят в первую очередь об этом, и создают макросы, упрощающие жизнь им самим.

K>А примеры не из мира компиляторостроения должны выдавать разрабы, не создающие сам N, а пользующиеся им.

Другой кэп хотел бы сказать, что решение задачи по переходу в реальный мир в таком случае — проблема этих разработчиков. Неужели у них не хватает фантазии адаптировать любую из реальных задач к учебному виду?

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


Если "они" увидят знакомые слова, они подставят другие знакомые слова и без понимания деталей происходящего.
Чтобы такого не случилось, нужен другой язык.
The God is real, unless declared integer.
Re[3]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 02.01.13 06:54
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Не знаю. У меня главная причина неприятия — то, что любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой, с отсутствием внятного инструментария и т.п.


Почему сразу недокументированный? Вероятность того, что DSL будет недокументирован равна вероятности того, что обычная библиотека классов будет недокументированной. Да, бывает такое. Но какая разница, будет нам непонятно ключевое слово foo в некоем DSL, или название метода foo() в некоей библиотеке?

Насчёт инструментария. Вроде как в N2 обещаны золотые горы. Ждём-с.

M>Потому что даже в том же SQL, который является DSL'ем с собственным стандартом и основан на известной мат. модели, разные реализации имеют собственные детали, инструменты, уровень документированности и проч. Про мелкие DSL'и, которые здесь пытаются активно продивигать (типа «каждой задаче по DSLю») я вообще промолчу.


А что плохого в микроDSL? Например, вот такой макрос NotNull. Или предлагаемый макрос INotifyPropertyChanged
Автор: WolfHound
Дата: 17.08.12
. Сокращение кода — на порядок. Понятность — имхо, выше некуда.
Re[4]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.01.13 07:48
Оценка:
Здравствуйте, koodeer, Вы писали:

I>>Как то так выходит, что самые лучшие примеры по ДСЛ и Немерле от людей, которые мягко говоря не в ладах с местными немерлистами.


K>А что тут удивительного? Ведь DSL — DOMAIN specific language. Предметная область действия разработчиков Немерле — разработка Немерле (кэп на связи). Поэтому они и мыслят в первую очередь об этом, и создают макросы, упрощающие жизнь им самим.

K>А примеры не из мира компиляторостроения должны выдавать разрабы, не создающие сам N, а пользующиеся им.

Ага, должны. А что еще должны эти разрабы ?
Обычно разработчики инструментария обычно хорошо в курсе потребностей своей целевой аудитории.
А вот немерлисты почему то хорошо в курсе только компиляторов. Так шта...

I>>Думаю не дальше чем через пару страниц от вас снова появятся автоматы, калькуляторы, пермишны и прочая ерунда которая оскомину набила еще лет пять назад.


K>Потому что калькуляторы и пермишны — это предметная область. Тому кто разбирается в этой области, нужно именно это. Для другой области деятельности — нужны свои языки.


Спасибо, Кеп, только я про популяризацию, а не про это. Перечислены задачки вобще говоря так себе, мягко говоря. Напримеh калькуляторы всерьез никто не пишет, хватает того что идет в комплекте с любой ОС. Для автоматов уже давно есть отработаные инструменты и подходы и с ними одна проблема — текст майнтейнить на порядок сложнее чем диаграму.

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


Конкретному программисту это разумеется хорошо — можно диктовать условия заказчику ибо найти замену будет крайне сложно.
А вообще такие вопросы решаются административными мерами, а не языком программирования.
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.01.13 07:55
Оценка:
Здравствуйте, netch80, Вы писали:

K>>А что тут удивительного? Ведь DSL — DOMAIN specific language. Предметная область действия разработчиков Немерле — разработка Немерле (кэп на связи). Поэтому они и мыслят в первую очередь об этом, и создают макросы, упрощающие жизнь им самим.

K>>А примеры не из мира компиляторостроения должны выдавать разрабы, не создающие сам N, а пользующиеся им.

N>Другой кэп хотел бы сказать, что решение задачи по переходу в реальный мир в таком случае — проблема этих разработчиков. Неужели у них не хватает фантазии адаптировать любую из реальных задач к учебному виду?


Спасение утопающих дело сами утопающих
Re[4]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 07:58
Оценка:
M>>Не знаю. У меня главная причина неприятия — то, что любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой, с отсутствием внятного инструментария и т.п.

K>Почему сразу недокументированный? Вероятность того, что DSL будет недокументирован равна вероятности того, что обычная библиотека классов будет недокументированной. Да, бывает такое. Но какая разница, будет нам непонятно ключевое слово foo в некоем DSL, или название метода foo() в некоей библиотеке?


Потоворяю еще раз. Для непонятливых. Тут активно педалируется идея того, что DSLи надо писать и они будут писаться всеми на каждый чих. Нет, это не будет библиотекой классов. Это будет еще одним куском кода в проекте. Как обстоит дело с документацией обычного повседневного кода в обычном проекте?

Вот есть у нас DSL: http://www.erlang-factory.com/upload/presentations/633/Metaprogramming.pdf страница 18-22. Когда этот DSL начинался, он был банально уровня на стр. 18. Потом туда добавились first of/all of, со страницы 19. А потом еще появился input() со страницы 20. А потом...

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

Поэтому повторю вопрос: откуда взялся этот миф, что DSLи обычно документированы? Это — ложь. Они будут документированы не больше и не меньше, чем любой другой код.


K>Насчёт инструментария. Вроде как в N2 обещаны золотые горы. Ждём-с.


M>>Потому что даже в том же SQL, который является DSL'ем с собственным стандартом и основан на известной мат. модели, разные реализации имеют собственные детали, инструменты, уровень документированности и проч. Про мелкие DSL'и, которые здесь пытаются активно продивигать (типа «каждой задаче по DSLю») я вообще промолчу.


K>А что плохого в микроDSL? Например, вот такой макрос NotNull. Или предлагаемый макрос INotifyPropertyChanged
Автор: WolfHound
Дата: 17.08.12
. Сокращение кода — на порядок. Понятность — имхо, выше некуда.


МикроDSL — еще куда ни шло. Пока эти самые microDSL не выливаются в толпу микроДСЛей, нагроможденных друг на друга


dmitriid.comGitHubLinkedIn
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 02.01.13 08:13
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Потоворяю еще раз. Для непонятливых. Тут активно педалируется идея того, что DSLи надо писать и они будут писаться всеми на каждый чих. Нет, это не будет библиотекой классов. Это будет еще одним куском кода в проекте. Как обстоит дело с документацией обычного повседневного кода в обычном проекте?


M>Вот есть у нас DSL: http://www.erlang-factory.com/upload/presentations/633/Metaprogramming.pdf страница 18-22. Когда этот DSL начинался, он был банально уровня на стр. 18. Потом туда добавились first of/all of, со страницы 19. А потом еще появился input() со страницы 20. А потом...


M>Стоит ли говорить, что документация (если она есть) присутсвует только кусками в коде и в голове людей, которые это дело писали или требовали таких изменений и сейчас с этим работают.


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



M>Поэтому повторю вопрос: откуда взялся этот миф, что DSLи обычно документированы? Это — ложь. Они будут документированы не больше и не меньше, чем любой другой код.


Согласен. Тут у нас консенсус. Степень документированности одинаковая. Но кода-то в разы (потенциально) меньше!
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 08:57
Оценка:
M>>Поэтому повторю вопрос: откуда взялся этот миф, что DSLи обычно документированы? Это — ложь. Они будут документированы не больше и не меньше, чем любой другой код.

K>Согласен. Тут у нас консенсус. Степень документированности одинаковая. Но кода-то в разы (потенциально) меньше!


И?

Продолжаю повторять:

любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой

Он будет документирован не лучше и не хуже, чем любой другой код. Хотя, учитывая, что это будет domain-specific language, то будет документирован еще хуже, так как в условиях «о, у нас домен, давай колбасить DSL» никто не будет выписывать весь синтаксис, семантику и т.п.


Я ссылку не зря привел. Казалось бы — там простой код, ага, его в разы меньше, ага. Я могу специально для тебя привести все 100% документации, что есть по этому языку:

Klarna Policy Language

* Overview

kpl implements Klarna Policy Language, a wiki-style language to express
policy rules. The language can be extended by additional functions that can
be invoked from the policy rule. For example, the function "lookup" is used
in acceptance rules to lookup information from external providers.

This application is side-effect free, it contains a compiler and an evaluator.


Всё

При том, что реализация этого языка — достаточно хорошо документирована, да. Например:
%% @spec equal(R::rule()|group()|seq(), R0::rule()|group()|seq()) -> bool()
%% @doc Equality test on data structures (ignores line number differences)
%%      see policy_rules.hrl for details; this is kept as simple as possible
%% @end

(только вот policy_rules.hrl в проекте давно отсутсвует, но это же меловчи, правда?)


И даже формальная грамматика в формате yecc есть. Например:
comp_expr -> concat_expr '=/=' concat_expr: #op{name='=/=', args=['$1', '$3']}.


И сами файлы местами документированы, но в терминах области (типа «если мы в Германии и клиенту меньше 18, даем отлуп, см. тикет XXX-123»).

Но я, надеюсь, ты согласишься, что это все не является заменой по документации по синтаксису и семантике DSLя, его возможностям, и т.п.? Поэтому я и повторяю: не надо рассказывать сказки, что DSL'и обычно документированы, или что их краткость каким-то образом компенсирует то, что они документированы не лучше остального кода.


dmitriid.comGitHubLinkedIn
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 02.01.13 09:29
Оценка:
Здравствуйте, Mamut, Вы писали:

K>>Согласен. Тут у нас консенсус. Степень документированности одинаковая. Но кода-то в разы (потенциально) меньше!


M>И?


В меньшем количестве кода легче разобраться. Даже без документации.
А с учётом того, что разрабу приходится писать меньше кода, у него останется больше времени, что может сподвигнуть на создание документации.

M>Продолжаю повторять:

M>

M>любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой


И?
В обычных библиотеках тоже бывает разный синтаксис.
Насчёт семантики сложно сказать. По идее, она соответствует предметной области. Если человек владеет ей (а он обязан ей владеть, если уж стал писать код), то легко поймёт DSL.

M>Я ссылку не зря привел. Казалось бы — там простой код, ага, его в разы меньше, ага. Я могу специально для тебя привести все 100% документации, что есть по этому языку:


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

M>Но я, надеюсь, ты согласишься, что это все не является заменой по документации по синтаксису и семантике DSLя, его возможностям, и т.п.? Поэтому я и повторяю: не надо рассказывать сказки, что DSL'и обычно документированы, или что их краткость каким-то образом компенсирует то, что они документированы не лучше остального кода.


Так я не рассказывают сказки. И не уверяю, что DSLи лучше/хуже документированы.
Однако я считаю, что краткость кода способствует лучшему пониманию. Это первое.
Второе: именно метапрограммирование в ряде случаев помогает в разы сократить количество кода.

Дело в том, что в реальной практике приходится очень много писать тонны копипасты, о чём писал WolfHound. Тот же пример с INotifyPropertyChanged. Макросы позволяют избежать этого, избавляют от рутины.
Практически все виденные мною примеры простых макросов понятны без всякой документации, при условии, что я уже знаком с тем, что этот макрос заменяет (пример: замена assert'а макросом NotNull). Все опробованные мною примеры больших DSL: SQL, LINQ — имеют хорошую документацию, и опять же полностью понятны.
На этом основании я смотрю на развитие dsl-строения с оптимизмом.
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.01.13 10:06
Оценка:
Здравствуйте, koodeer, Вы писали:

K>В меньшем количестве кода легче разобраться. Даже без документации.


Это если ты область исходил и решал типовые задачи раз сто вдоль и поперек, то так и будет.

K>А с учётом того, что разрабу приходится писать меньше кода, у него останется больше времени, что может сподвигнуть на создание документации.


Основное время у разраба уходит не на кодинг, если конечно он код не под диктовку пишет

K>Насчёт семантики сложно сказать. По идее, она соответствует предметной области. Если человек владеет ей (а он обязан ей владеть, если уж стал писать код), то легко поймёт DSL.


А если не владеет, то библиотеку понять в разы проще. Что собтсвенно типичный случай — приходит девелопер на новый проект и постепенно осваивает все что надо.
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 02.01.13 10:12
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Предлагаю разобраться в «коротком коде, который понятен без документации» тех же LINQ'а и SQL'я или любого другого DSLя


Гыгы, кстати +100.
(мечтательно) С кучей вложенных запросов...
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 10:33
Оценка:
M>>Предлагаю разобраться в «коротком коде, который понятен без документации» тех же LINQ'а и SQL'я или любого другого DSLя

D>Гыгы, кстати +100.

D>(мечтательно) С кучей вложенных запросов...

Кстати, я так предполагаю, что куча народа до сих пор думает, что LINQ только для баз данных, хотя известно, что он для коллекций в целом. Только вот как эти коллекции писать...

У нас тут есть DSL, который и жнец и швец и на дуде игрец. Краткое *неполное*, с большим количеством TODO: add description и быстро устаревающее описание занимало страниц десять

Правда, в итоге человека заставили написать вполне приличное описание, провести четыре (!) обзорных и одну техническую презентацию внутри компании и полностью задокументировать код, потмоу что он объявил о своих планах уйти, и он был единственным, кто понимал, как эта хрень работает


dmitriid.comGitHubLinkedIn
Re[2]: Легкий офтоп.
От: minorlogic Украина  
Дата: 02.01.13 11:55
Оценка:
Здравствуйте, Mamut, Вы писали:

M>>В C++ функция printf это DSL или нет ? спасибо.


M>В С++ скорее cout/cin — это DSL.


Своих синтаксических контсрукций они не вводят , все в пределах языка. А printf вводит.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[3]: Легкий офтоп.
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 11:59
Оценка:
M>>>В C++ функция printf это DSL или нет ? спасибо.

M>>В С++ скорее cout/cin — это DSL.


M>Своих синтаксических контсрукций они не вводят , все в пределах языка. А printf вводит.


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


dmitriid.comGitHubLinkedIn
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 02.01.13 18:36
Оценка:
Здравствуйте, Mamut, Вы писали:

Давай я уточню свою позицию, "DSL обычно документированы" относится только к нормальным DSL готовым к использованию.

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

Если у тебя доводы в пользу того, что DSL намного сложнее документировать и это является значимой проблемой DSL ты приводи доводы а не цепляйся к словам.

M>Хотя понятно, что можно привести совершенно противоположныей пример. и даже в твоем insert into возникает толпа вопросов: что возврашает этот код? Что произойдет, если b уже существует в a и т.п.


Это контр-пример? Что возвращает Insert? Что произойдет если b уже существует в а?

Z>>DSL от аналогичной библиотеки отличается только тем, что у них разные синтаксисы. Но тот или другой все равно придется учить. И в каких-то предметных областях DSL получается проще чем родной синтаксис языка.


M>Ключевое: каких-то. Ключевое: надо учить. Ключевое: документация Если DSL-и начнут клпеать все, кому не лень, сказки про «DSL обычно документирован» можно пешим строем отправлять в детский сад. Хотя, по большому счету, их надо туда отправлять уже сейчас.


А зачем тебе юзать DSL который клепают все кому не лень и зачем мы это обсуждаем? Иерархии классов клепают все кому не лень, документируют обычно никак, ООП на помоечку что ли?

Z>>К примеру, в ruby уже невозможно провести черту между DSL и обычным API. Можно, например, сказать, что рельсы это DSL для веб разработки. А можно, что это всего лишь набор из нескольких слабо связанных библиотек, каждая из которых выполняет свою функцию.


M>Безусловно. И, как любая библиотека, она требует изучения и документации. Никакого «обычно документирован» там нет и не прдевидится.


Рельсы плохо документированы? Где примеры плохих DSL? Ок, давай выкинем из спора DSL и начнем спорить о том, документированы ли обычно библиотеки. Примерно эту тему ты до сих пор пытаешься развить.

M>Я вообще не про это говорил, если что.


О чем ты говорил? О том, что миллионы индусов наклепают тонны недокументированных DSL и наступит ад? Почему ты до сих пор можешь работать, хотя они наклепали тонну аналогичных библиотек?
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 02.01.13 18:55
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>О чем ты говорил? О том, что миллионы индусов наклепают тонны недокументированных DSL и наступит ад? Почему ты до сих пор можешь работать, хотя они наклепали тонну аналогичных библиотек?


Когда имеешь дело с библиотекой, надо выяснить только семантику методов. Когда с DSL — надо еще и синтаксис ковырять. Очевидно, что писать совсем простой DSL не имеет смысла. А немаленький DSL надо, во-первых, проектировать (что уже само по себе сложно), во-вторых он по любому будет содержать "темные углы". В придачу к темным углам языка добавляются темные углы DSL.

В общем, DSL нужен только когда без него вообще не обойтись. И это надо в каждом конкретном случае показать.
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 02.01.13 19:12
Оценка:
Здравствуйте, Ziaw, Вы писали:

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


ARK>>Когда имеешь дело с библиотекой, надо выяснить только семантику методов. Когда с DSL — надо еще и синтаксис ковырять. Очевидно, что писать совсем простой DSL не имеет смысла. А немаленький DSL надо, во-первых, проектировать (что уже само по себе сложно), во-вторых он по любому будет содержать "темные углы". В придачу к темным углам языка добавляются темные углы DSL.


Z>Если есть DSL, то он должен быть проще чем вызов методов. Поэтому учить его должно быть не сложнее, чем изучать семантику методов.


Думаю, что он не проще, а просто позволяет короче записать нечто. Это вовсе не означает проще.

Z>Иначе он обычная ошибка проектирования и доставляет проблем столько же сколько любая другая ошибка проектирования.


Не уверен. Ошибка проектирования DSL будет стоить дороже, ИМХО. Знания внутреннего DSL в резюме не потребуешь. Сделали кривой DSL, наклепали на нем кучу кода и создатель уволился. КАК это все разгрести? Ковырять исходники компилятора? А если там нашли ошибку? Это будет жесть. Причем вы будете один на один с этим языком и кучей говнокода на нем.

ARK>>В общем, DSL нужен только когда без него вообще не обойтись. И это надо в каждом конкретном случае показать.


Z>В простых DSL совершенно простой синтаксис. Его учить не дольше, чем аналогичный API.


Только вот не надо его просто так учить (и делать DSL тоже). Надо если (и только если) будет показано, что DSL сократит объем кода в 10 раз, например.
Re[4]: Легкий офтоп.
От: Ziaw Россия  
Дата: 02.01.13 19:41
Оценка:
Здравствуйте, Mamut, Вы писали:

M>DSL не обязательно вводит новые синтаксические конструкции. А в printf конструкции форматирования вполне могут считаться DSL'ем, имхо.


Хотелось бы увидеть альтернативы этим DSL, ну и документацию к ним. Чтобы все, наконец, смогли понять чего следует бояться в DSL.
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 19:58
Оценка:
Z>Давай я уточню свою позицию, "DSL обычно документированы" относится только к нормальным DSL готовым к использованию.

Бла-бла-бла. Сказки в детский сад. Примеры я тут приводил.

Z>Я не рассматриваю DSL которые могут быть созданы по желанию левой пятки не пойми кого. Этот не пойми кто сейчас создает говнокод, который не лучше и не хуже гипотетического DSL, но нам-то этого какая беда и зачем мы вообще об этом говорим?


Ну да. «Я говорю только о том, что мне удобно, ко всему остальному у меня позиция страуса».

Z>Если у тебя доводы в пользу того, что DSL намного сложнее документировать и это является значимой проблемой DSL ты приводи доводы а не цепляйся к словам.


Я нигде не говорил про то, что DSL намного сложнее документировать.

M>>Хотя понятно, что можно привести совершенно противоположныей пример. и даже в твоем insert into возникает толпа вопросов: что возврашает этот код? Что произойдет, если b уже существует в a и т.п.


Z>Это контр-пример? Что возвращает Insert? Что произойдет если b уже существует в а?


Я про это и говорю, блин. Нет у DSL никакой магической самодокументируемости

Z>>>DSL от аналогичной библиотеки отличается только тем, что у них разные синтаксисы. Но тот или другой все равно придется учить. И в каких-то предметных областях DSL получается проще чем родной синтаксис языка.


M>>Ключевое: каких-то. Ключевое: надо учить. Ключевое: документация Если DSL-и начнут клпеать все, кому не лень, сказки про «DSL обычно документирован» можно пешим строем отправлять в детский сад. Хотя, по большому счету, их надо туда отправлять уже сейчас.


Z>А зачем тебе юзать DSL который клепают все кому не лень и зачем мы это обсуждаем? Иерархии классов клепают все кому не лень, документируют обычно никак, ООП на помоечку что ли?


Я нигде не говорю, что DSL надо на помойку. Я просто говорю, что фраза «DSL обычно документированы» — это ложь.

Z>>>К примеру, в ruby уже невозможно провести черту между DSL и обычным API. Можно, например, сказать, что рельсы это DSL для веб разработки. А можно, что это всего лишь набор из нескольких слабо связанных библиотек, каждая из которых выполняет свою функцию.


M>>Безусловно. И, как любая библиотека, она требует изучения и документации. Никакого «обычно документирован» там нет и не прдевидится.


Z>Рельсы плохо документированы?


Сейчас — уже нет. И то, там наверняка есть множество темных мест, особенно в сторонних расширениях

Z>Где примеры плохих DSL? Ок, давай выкинем из спора DSL и начнем спорить о том, документированы ли обычно библиотеки. Примерно эту тему ты до сих пор пытаешься развить.


Я просто говорю, что фраза «DSL обычно документированы» — это ложь. DSL «обычно документированы» не лучше и не хуже любого другого кода.

M>>Я вообще не про это говорил, если что.


Z>О чем ты говорил? О том, что миллионы индусов наклепают тонны недокументированных DSL и наступит ад? Почему ты до сих пор можешь работать, хотя они наклепали тонну аналогичных библиотек?


Почему ты уверен, что каждый DSL — это именно библиотека, которая обязательно документирована? Откуда у тебя берется такая уверенность?


dmitriid.comGitHubLinkedIn
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 20:01
Оценка:
Z>В общем случае не попадаем, мы ведь не знаем точно тип a. Я правильно понимаю, что основная претензия к DSL свелась к отсутствию поддержки Ctrl-Click?

Нет

Z>Сейчас вы с Мамутом успешно сводите проблему DSL к проблемам навигации.


Нет, не сводим

D>>1. Может быть, там какой-нибудь бред в духе #define true false в реализации, переворачивающий весь этот "естественный язык" с ног на голову.


Z>Если начинать говорить про бред могу рассказать, как сделать, чтобы метод Insert начал очищать список. Но ты ведь и сам это прекрасно знаешь, зачем приводить такие аргументы?


Это — именно аргументы. В отличие от явной лжи и сказок в виде безаппеляционных заявлений «DSL обычно документирован».


D>>2. Я же не могу, прочитав эту естественную и возрадовавшись, начать писать вообще весь код в свободном стиле: "store sum of a and b to c".

Z>Конечно не можешь. Точно так же не можешь начать писать a.MakeTheUniverseWorkForMe(), узнав синтаксис вызова метода и не затрудняя себя изучением контракта a.

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


dmitriid.comGitHubLinkedIn
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 02.01.13 20:24
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Я просто говорю, что фраза «DSL обычно документированы» — это ложь. DSL «обычно документированы» не лучше и не хуже любого другого кода.


Я говорю то же самое. фраза «DSL зачастую недокументированы» — это ложь. DSL «обычно документированы» не лучше и не хуже любого другого кода.

Закроем тему
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 02.01.13 20:36
Оценка:
Здравствуйте, Mamut, Вы писали:

Z>>Сейчас вы с Мамутом успешно сводите проблему DSL к проблемам навигации.


M>Нет, не сводим


А к чему? Пока это единственный, действительно объективный аргумент, который можно обсуждать серьезно. Мы не можем легко увидеть конечный код, который стоит за DSL.

D>>>1. Может быть, там какой-нибудь бред в духе #define true false в реализации, переворачивающий весь этот "естественный язык" с ног на голову.


Z>>Если начинать говорить про бред могу рассказать, как сделать, чтобы метод Insert начал очищать список. Но ты ведь и сам это прекрасно знаешь, зачем приводить такие аргументы?


M>Это — именно аргументы.


Так ведь слабенькие. Опровергаются элементарно.

M>В отличие от явной лжи и сказок в виде безаппеляционных заявлений «DSL обычно документирован».


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

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


Это ложь.
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 02.01.13 20:59
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Это дело привычки. Аналогично чтению var в C#. Подавляющее большинство на него плюется, до тех пор, пока не начнет использовать. Причем аргументы примерно те же идут.


Есть нюансик — var один на всех. Спроектирован, задокументирован, отлажен и стандартизирован. Чего не скажешь о наколенных решениях.

В общем, время покажет, кто где прав. [vanga]Предсказываю, что самописные DSL в ближайшие годы распространения не получат.[/vanga]
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 02.01.13 21:07
Оценка:
M>>Это — именно аргументы.
Z>Так ведь слабенькие. Опровергаются элементарно.

Ни одного ты не смог опровергнуть.

M>>В отличие от явной лжи и сказок в виде безаппеляционных заявлений «DSL обычно документирован».


Z>Безапелляционность была ответной. Я тебе несколько раз доступно разжевал, что я хотел этим сказать.


Да-да-да, я помню. «Если это недокументированный DSL, я его DSL-ем не считаю», «если его сделал кто-то, кто мне не нравится, я это DSL-ем не считаю» Извини, с такой аргументацией — в сад.

Z> Причем это ровно то же самое, что утверждаешь здесь ты. То, что тебе не надоело докапываться до этой фразы, означает, что больше тебе по теме сказать нечего. Все последующие попытки обыграть эту фразу в выгодном тебе свете будут идти в игнор, как махровая демагогия.


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


Z>Это ложь.


Ой да ну.

DSL обычно документирован
Когда ты читаешь код a.Insert(b) и insert b into a у тебя примерно одинаково информации, для понимания того, что происходит. Но в первом случае тебе надо знать соглашения, чтобы понять, что происходит, а во втором не нужно.


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

Повторю еще раз, о чем я говорю:

У меня главная причина неприятия — то, что любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой, с отсутствием внятного инструментария и т.п.


Что в этой фразе тебе непонятно и с чем ты несогласен?


dmitriid.comGitHubLinkedIn
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 02.01.13 21:18
Оценка:
Здравствуйте, Mamut, Вы писали:

M>На самом деле, они давно получили распространение например, http://xml.coverpages.org/xmlApplications.html (найдено на Tim Bray: Don't Invent XML Languages). В этом списке — более 600 наименований


По-моему, в этом списке одни языки разметки. Может, конечно, это тоже DSL, но я имел в виду, во-первых, языки программирования, а во-вторых, самописно-наколенные, которые якобы (насколько я понял сторонников DSL-подхода) каждый завалящий архитектор пачками писать будет.
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.01.13 22:02
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Я хотел сказать, что умные люди реализовали SQL в своих СУБД, остальные не выжили.


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

Z>Я выделил основную проблему. Потому и проще, что нет пока адекватных инструментов для создания DSL. Но это проблема не DSL, а неразвитости инструментов.


Единый универсальный язык всегда будет выигрывать в плане инструментального оснащения, какие бы замечательные тулы не существовали.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 02.01.13 22:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Осталось заметить, что, в итоге, все выжившие более менее поддерживают единый отраслевой стандарт, а не каждый свой язык изобретает. Надо объяснять почему?

Там от SQL только синтаксис одинаковый.

AVK>Единый универсальный язык всегда будет выигрывать в плане инструментального оснащения, какие бы замечательные тулы не существовали.

Подсветка, навигация, автокомплит и переименование получаются вообще автоматом.
А это 80% потребностей. С форматированием сложнее. Но и там не так уж и много придется написать.
А более сложные вещи для 99% ДСЛ и не понадобятся никогда.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 02.01.13 23:43
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Если есть DSL, то он должен быть проще чем вызов методов. Поэтому учить его должно быть не сложнее, чем изучать семантику методов. Иначе он обычная ошибка проектирования и доставляет проблем столько же сколько любая другая ошибка проектирования.


Ага, а вот это point. Т.е. мой пример с кастомным синтаксисом scalatest, не дающим ничего по сравнению со старым тупым junit-овским testX() {} — это проблема scalatest ("заставь дурака богу молиться"), заюзавшим DSL-и там, где не надо.

И хотя такая постановка ответа сразу резко сужает область применения DSL-ей с "а давайте забабахаем!" к "а нафига оно нам надо?", но проблемы тут не вижу (для меня языки общего назначения смысл-таки имеют).
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 02.01.13 23:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А все потому что проектировщики SQL допустили ряд грубых ошибок в его дизайне.


А можно поподробнее? (Помню ещё сто лет назад сказанное Синклером, что накосячили в угоду "естественноязыковости", но тоже без деталей).
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 03.01.13 00:17
Оценка:
Здравствуйте, Ziaw, Вы писали:

D>>Наоборот: в первом случае ничего не надо знать, т.к. это стандартный синтаксис вызова метода. В крайнем случае можно Ctrl+Click по имени метода и попадаем в его определение.


Z>В общем случае не попадаем, мы ведь не знаем точно тип a. Я правильно понимаю, что основная претензия к DSL свелась к отсутствию поддержки Ctrl-Click?


В основном я долблю в нежелание помнить новый синтаксис вместе с новой семантикой. Но ты ниже по этому поводу мне мозги прочистил
Автор: dimgel
Дата: 03.01.13
. Но в данном случае я ещё имею в виду ненависть по отношению ко всякой boilerplate-магии (e.g. аспекты, а в данном случае и макросы), в которую приходится вникать, чтобы понять, как оно работает. Зачастую эта магия на порядки сложнее не только, чем тот код, который её использует, но и чем аналогичный по функционалу код, который обошёлся без неё. А изучать её при отладке частенько приходится приходится.

D>>1. Может быть, там какой-нибудь бред в духе #define true false в реализации, переворачивающий весь этот "естественный язык" с ног на голову.


Z>Если начинать говорить про бред могу рассказать, как сделать, чтобы метод Insert начал очищать список. Но ты ведь и сам это прекрасно знаешь, зачем приводить такие аргументы?


Гыгы, уел. Но я имел в виду, опять же, boilerplate-магию. В тех же макросах можно прикрутить другую семантику к синтаксису вызова метода (и вроде бы даже в каких-то простеньких макросах так и делали — а это уже тот самый #define true false), а без макросов вызов метода — это вызов метода и ничего более.

D>>2. Я же не могу, прочитав эту естественную и возрадовавшись, начать писать вообще весь код в свободном стиле: "store sum of a and b to c".


Z>Конечно не можешь. Точно так же не можешь начать писать a.MakeTheUniverseWorkForMe(), узнав синтаксис вызова метода и не затрудняя себя изучением контракта a.


Хм. Ну тут WolfHound уже подключился и сказал, что code completion он для макросов в Nemerle даёт автоматом, так что тут ок.
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 03.01.13 07:22
Оценка:
M>>На самом деле, они давно получили распространение например, http://xml.coverpages.org/xmlApplications.html (найдено на Tim Bray: Don't Invent XML Languages). В этом списке — более 600 наименований

ARK>По-моему, в этом списке одни языки разметки. Может, конечно, это тоже DSL,


Да. Потому что они domain-specific и они language


dmitriid.comGitHubLinkedIn
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.13 08:35
Оценка:
Здравствуйте, WolfHound, Вы писали:

AVK>>Осталось заметить, что, в итоге, все выжившие более менее поддерживают единый отраслевой стандарт, а не каждый свой язык изобретает. Надо объяснять почему?

WH>Там от SQL только синтаксис одинаковый.

Этого мало? Ну и не только синтаксис — семантика всех конструкций тоже идентична.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 03.01.13 12:01
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


D>>А можно поподробнее? (Помню ещё сто лет назад сказанное Синклером, что накосячили в угоду "естественноязыковости", но тоже без деталей).


AVK>Это я писал, а не Синклер. Что конкретно тебя интересует? Ошибки, собственно, две основных — попытка сделать язык близким к естественному английскому, что привело к тяжеловесному индексу, и крайняя бедность средств декомпозиции, из-за чего копипаста в сиквеле цветет махровым цветом.


Тяжеловесный наверное все-таки синтаксис, а не индекс? А какой был бы менее тяжеловесный?
И какие могли бы быть средства декомпозиции, например?
Вот есть линк, он сильно похож на SQL. В нем есть все те же ошибки?
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 03.01.13 12:38
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ошибки, собственно, две основных — попытка сделать язык близким к естественному английскому, что привело к тяжеловесному индексу,


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

AVK>и крайняя бедность средств декомпозиции, из-за чего копипаста в сиквеле цветет махровым цветом.


Тут понял.
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.13 13:10
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Тяжеловесный наверное все-таки синтаксис, а не индекс?


Синтаксис, да.

ARK> А какой был бы менее тяжеловесный?


Например как query compregension в линке.

ARK>И какие могли бы быть средства декомпозиции, например?


Обычные — локальные подзапросы, условные ветки выражений и т.п.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 13:24
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Вот реальный пример, надо без документации сказать в чем разница между "b render a" , "a render b" и "render a b"

I>Валяй, полагаю, раз это дсл, то для тебя не составит труда рассказать в чем мулька.

Давай сравним с b.render(a), a.render(b) и Render.render(a, b). Проще стало? Нету разницы, не надо демонизировать DSL.

I>Синтаксис это ерунда. В библиотеку очень легко заглянуть, а дсл это черный ящик и собственно черный ящик большей частью непригоден в софтостроении.


Снова уперлись в недостатки тулзов. Ок, принято.
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 13:41
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Форматная строка на DSL, извини, не тянет.


Еще как тянет, ее обрабатывает парсер совмещенный с интерпретатором простеньких команд. Чем не язык?

AVK>Что же касается остального — SQL обычно специально указывают в требованиях вакансии, что как бы намекает (при этом по настоящему хорошо его знает 1% от считающих так). А регексы это вообще что то с чем то — одно только количество вопросов форуме типа "подскажите регекс для ..." уже о многом говорит. Лично мне до сих пор иногда приходится вдумчиво вчитываться в доку по регекпам, и я уверен, что библиотека без этой птичей псевдографики была бы проще и удобнее.


Ты озвучь наконец свою позицию, полезны только широко известные DSL (тогда я отстану от SQL, а ты перестанешь указывать что его все знают) или все DSL вредны (тогда давай реальные альтернативы форматным строкам и регэкспам, без "я уверен, что библиотека без этой птичей псевдографики была бы проще и удобнее").

AVK>Можешь в янусе посмотреть — там все запросы к БД без использования QC написаны. Более того, SQL, который там был раньше — мутнее и сложнее. Особенно весело с запросом, обновляющим агрегаты — трехстраничное сиквельное чудовище превратилось в 60 хорошо читаемых строк.


Значит тебе не составит труда ответить на это
Автор: Ziaw
Дата: 31.12.12
. Посылать меня в янус не надо, ты его код знаешь, сам и давай ссылки на сложные запросы.

AVK>А все потому что проектировщики SQL допустили ряд грубых ошибок в его дизайне. И это, заметь, люди, которые неплохо представляли то, чем они занимаются. Что же получится из под пера кучи ньюбов, пусть и вооруженных прекрасным инструментом для создания парсеров и анализаторов — я представляю себе с содроганием.


Допустили. C# это исправил другим DSLем. Недостатки SQL видны хорошо, ктож спорит. Идеальных решений не бывает. Альтерантивы только грустные, без DSL все равно все плохо.

AVK>Масштаб проблем несколько разный. Библиотеку я в полуавтоматическом режиме почистить могу, где то вставляя временные подпорки (не заморачиваясь никакими языкостроительными тулами). А что делать, когда кастомный DSL надо сильно переделать или вообще выкинуть?


А что делать, если надо заменить или выкинуть ORM? DI? Переколбасить пол проекта, делов-то. По этой причине люди не отказались ни от того ни от другого.
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 13:50
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Только вот у некоторых пропонентов DSLей зашорены глаза: мол, DSLи и понятны сразу, и документированы сразу, и инструментарий есть и вообще, это панацея от всего (можно почитать предыдущие топики на эти же темы). Что, естественно, далеко не так.


Конечно не так.

а) По понятности не уступают обычному коду.
б) Документированы обычно не хуже альтернативного инструмента без DSL.
в) Основной объективный недостаток на сегодняшний день — трудность создания и худшая поддержка IDE.
г) Панацеей не являются, но без DSL жизни нет во многих областях.

А твой прием демагогии называется "довести высказывания собеседника до абсурда".
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 13:54
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Обычные — локальные подзапросы, условные ветки выражений и т.п.


Ну это помаленьку исправляется. CTE например. Не идеал, но шаг именно в эту сторону.
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 03.01.13 14:10
Оценка:
M>>Только вот у некоторых пропонентов DSLей зашорены глаза: мол, DSLи и понятны сразу, и документированы сразу, и инструментарий есть и вообще, это панацея от всего (можно почитать предыдущие топики на эти же темы). Что, естественно, далеко не так.

Z>Конечно не так.


Z>а) По понятности не уступают обычному коду.

Z>б) Документированы обычно не хуже альтернативного инструмента без DSL.
Z>в) Основной объективный недостаток на сегодняшний день — трудность создания и худшая поддержка IDE.
Z>г) Панацеей не являются, но без DSL жизни нет во многих областях.


Ого. Внезапно. Дай-ка я тебе процитирую мое высказывание, с которым ты внезапно не согласился, начав весь этот спор

У меня главная причина неприятия — то, что любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой, с отсутствием внятного инструментария и т.п.



И внезапно ты, по сути, повторяешь мои слова

Z>А твой прием демагогии называется "довести высказывания собеседника до абсурда".


Я просто брал твои высказывания без изменений. До абсурда ты их доводил сам.


dmitriid.comGitHubLinkedIn
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 14:22
Оценка:
Здравствуйте, AndrewVK, Вы писали:

WH>>Там от SQL только синтаксис одинаковый.

AVK>Этого мало? Ну и не только синтаксис — семантика всех конструкций тоже идентична.
Это такая мелочь, что не стоит внимания. Но и даже с синтаксисом не всё хорошо. Он местами различается.
А вот с семантикой там всё очень по-разному. И зависит от реализации самой БД. А когда дело доходит до TSQL, PLSQL итп то там вообще всё разное.
К остальному как я понял, претензий нет.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 14:31
Оценка:
Здравствуйте, Ikemefula, Вы писали:

WH>>Подсветка, навигация, автокомплит и переименование получаются вообще автоматом.

WH>>А это 80% потребностей. С форматированием сложнее. Но и там не так уж и много придется написать.
WH>>А более сложные вещи для 99% ДСЛ и не понадобятся никогда.

Что характерно твоё сообщение не имеет ничего общего с тем, на что ты отвечаешь.

I>Для дсл нужен непосредственный доступ к модели, для изучения, исследования, оптимизации и тд,

Вот тут ДСЛ впереди планеты всей. Это я тебе говорю как человек, который только ими и занимается.

I>иначе будет как с SQL, большинство использует "по рецептам", малая часть думает что знает, и только ничтожная действительно знает SQL.

I>С регэксами тож самое, перестал пользоваться на время — все забыто и надо снова документацию перечитывать.
Я бы посмотрел на то как ты руками будешь выписывать работу с файлом с ACID в полный рост. Или хотя бы ДКА для разбора текста.

I>Т.е. нужен не дсл, а четкая прозрачная модель с хорошим апи.

Ага, конечно. Каким АПИ ты собрался SQL заменить?
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.13 14:40
Оценка:
Здравствуйте, WolfHound, Вы писали:

AVK>>Этого мало? Ну и не только синтаксис — семантика всех конструкций тоже идентична.

WH>Это такая мелочь, что не стоит внимания.

Конечно. Именно поэтому SQL и популярен.

WH> Но и даже с синтаксисом не всё хорошо. Он местами различается.


У большой тройки, если не брать экзотики, SQL'99 поддержан на 100%. У второго эшелона ситуация почти такая же, даже FB с его чудесами подтянулся. Так что расширения синтаксиса есть, изменений относительно базового нет.

WH>А вот с семантикой там всё очень по-разному. И зависит от реализации самой БД.


Например?

WH> А когда дело доходит до TSQL, PLSQL итп то там вообще всё разное.


Ну так потому императивные расширения и нужны только маньякам.

WH>К остальному как я понял, претензий нет.


К чему остальному?
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 15:01
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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

Это просто лож.
ДСЛ исправлять проще, чем библиотеку.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 03.01.13 15:30
Оценка:
AVK>>Вопрос в цене. Недостатки в библиотеках исправляются в последующих релизах, недостатки сиквела, видимо, по большей части уже не исправят никогда.
WH>Это просто лож.
WH>ДСЛ исправлять проще, чем библиотеку.

Вот есть DSL под названием SQL. Покажи мне, как можно его исправить проще, заменив нестандартный синтаксис на стандартный.


dmitriid.comGitHubLinkedIn
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.13 15:48
Оценка:
Здравствуйте, WolfHound, Вы писали:

I>>Для дсл нужен непосредственный доступ к модели, для изучения, исследования, оптимизации и тд,

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

Пока что во всех твоих примерах ты прячешь модель куда подальше.

I>>иначе будет как с SQL, большинство использует "по рецептам", малая часть думает что знает, и только ничтожная действительно знает SQL.

I>>С регэксами тож самое, перестал пользоваться на время — все забыто и надо снова документацию перечитывать.
WH>Я бы посмотрел на то как ты руками будешь выписывать работу с файлом с ACID в полный рост. Или хотя бы ДКА для разбора текста.

А я где то утверждал что все это надо руками выписывать ?

I>>Т.е. нужен не дсл, а четкая прозрачная модель с хорошим апи.

WH>Ага, конечно. Каким АПИ ты собрался SQL заменить?

Например таким как в linq, если ты не забыл, linq это не query comprehension.
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 15:51
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Ого. Внезапно. Дай-ка я тебе процитирую мое высказывание, с которым ты внезапно не согласился, начав весь этот спор

M>

M>У меня главная причина неприятия — то, что любой DSL — это еще один язык, зачастую недокументированный, часто со странной и отличающейся от других языков семантикой, с отсутствием внятного инструментария и т.п.


Ну так я и возразил, что документирован не хуже альтернативных библиотек. Ты зачастую используешь недокументированные библиотеки?
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 16:08
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>У меня нет простого ответа на этот вопрос. В каждой конкретной ситуации надо смотреть отдельно. Я могу утверждать лишь две вещи:

AVK>1) Изобретать DSL всегда и везде — безумная крайность

Согласен.

AVK>2) Решение о создании DSL должно приниматься только при наличии огромных бенефитов, размером в человекогоды экономии на разработке минимум.


Не согласен. В общем случае достаточно разницы по сложности в 3-4 раза, между решением с DSL и решением без него.

А в частных случаях микроDSL можно даже без особого профита в трудоемкости. Просто для чистоты кода. Типа макроса lazy в nemerle.

AVK>3) Решение в принципе никогда не создавать DSL в любой ситуации — такая же безумная крайность.


Согласен.

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


Да, вопрос в цене альтернатив. При всех недостатках он сослужил свою службу очень достойно, да и еще послужит немало. SQL как математика, хорош хотя бы тем, что мысли в порядок приводит.

AVK>Я такое в том же янусе делал, два раза. Все срастается в разумные сроки в том числе благодаря решарперу.


[trol mode on]
Вооо! не было бы ОРМ, не пришлось бы целых два раза все менять!
[trol mode off]

Зачастую проблемы взять все и переделать сильно преувеличенны и все срастается в разумные сроки. Описанный тобой риск конечно есть и его надо учитывать, как и все другие, но ведь их надо не тупо бояться, а соизмерять с альтернативой.
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 16:10
Оценка:
Здравствуйте, Ikemefula, Вы писали:

WH>>Ага, конечно. Каким АПИ ты собрался SQL заменить?


I>Например таким как в linq, если ты не забыл, linq это не query comprehension.


Замени это
Автор: Ziaw
Дата: 31.12.12
.
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 16:16
Оценка:
Здравствуйте, Ikemefula, Вы писали:

Z>>Давай сравним с b.render(a), a.render(b) и Render.render(a, b). Проще стало? Нету разницы, не надо демонизировать DSL.


I>Ты чего сказать хотел, что отличия только в синтаксисе ? Если так, то ДСЛ не нужен.


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

Z>>Снова уперлись в недостатки тулзов. Ок, принято.


I>В случае с SQL или регексов этот недостаток так и не был преодолен


И это не мешает им доминировать на рынке. При всех их недостатках, практически все альтернативы ужасно печальны.
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 16:21
Оценка:
Здравствуйте, AlexRK, Вы писали:

WH>>ДСЛ исправлять проще, чем библиотеку.

ARK>Угу. Особенно если на этом DSL уже наколбашены сотни кода.
Именно.
1)Просто по тому, что для решения той же задачи на библиотеке будут написаны тысячи, а то и миллионы кода.
2)Как правило, старый ДСЛ очень легко можно трансформировать в новый. С библиотеками такое не всегда проходит.
3)Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ.
Например, я полностью изменил реализацию парсера при этом синтаксис и семантика не изменились.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 16:23
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Вот есть DSL под названием SQL. Покажи мне, как можно его исправить проще, заменив нестандартный синтаксис на стандартный.

Тебе никак. А вот автору БД без проблем. Мы же тут говорим про создание своих ДСЛ. А значит, мы можем их исправлять.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 03.01.13 16:25
Оценка:
WH>>>ДСЛ исправлять проще, чем библиотеку.
ARK>>Угу. Особенно если на этом DSL уже наколбашены сотни кода.
WH>Именно.
WH>1)Просто по тому, что для решения той же задачи на библиотеке будут написаны тысячи, а то и миллионы кода.

И DSL и библиотека являются интерфейсом к какому-то большому коду. Если на DSL уже написаны сотни/тысячи строк кода, то любое его изменение приведет к поломке всего этого кода или изменению его поведения. Точно так же, если библиотека используется в сотнях/тысячах мест, то эти места сломаются/поменяют поведение, если мы изменим библиотеку.

WH>2)Как правило, старый ДСЛ очень легко можно трансформировать в новый. С библиотеками такое не всегда проходит.


Откуда внезапно взялось это правило?

WH>3)Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ.

WH>Например, я полностью изменил реализацию парсера при этом синтаксис и семантика не изменились.

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


dmitriid.comGitHubLinkedIn
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 16:28
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Пока что во всех твоих примерах ты прячешь модель куда подальше.

В смысле?

WH>>Я бы посмотрел на то как ты руками будешь выписывать работу с файлом с ACID в полный рост. Или хотя бы ДКА для разбора текста.

I>А я где то утверждал что все это надо руками выписывать ?
А к чему тогда ты это всё понаписал?

I>Например таким как в linq, если ты не забыл, linq это не query comprehension.

Те другим ДСЛ. Ибо fluent interface это тоже ДСЛ. Обычно очень кривой и тормозной.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 03.01.13 16:28
Оценка:
M>>Вот есть DSL под названием SQL. Покажи мне, как можно его исправить проще, заменив нестандартный синтаксис на стандартный.
WH>Тебе никак. А вот автору БД без проблем. Мы же тут говорим про создание своих ДСЛ. А значит, мы можем их исправлять.

Как ты там рядом говорил? Легкая трансформация? Вот мы трансформировали наш SQL на использование window functions вместо linit x,y. ВНЕЗАПНО оказалось, что все у всех перестало работать. А как же сказки о безболезненном изменении DSL
Автор: WolfHound
Дата: 03.01.13
?


dmitriid.comGitHubLinkedIn
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 16:36
Оценка:
Здравствуйте, Mamut, Вы писали:

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


M>Я уже давно понял, что для тебя DSL — это только и исключительно документированные сторонние библиотеки. Остальное ты DSLями не считаешь. Про это я уже тоже где-то говорил, вроде. DSL не обязательно является сторонней документированной библиотекой. Это может быть внутренний DSL, созданный для проекта. Я даже пример приводил.


Может быть и зачастую это разные вещи, ты не находишь? Обычно используются документированные сторонние DSL, внутренние для проекта сильно реже. Еще реже их не документируют. Еще раз, я протестую против слова "зачастую".

M>Ну и даже если это сторонняя библиотека. Вот у нас используется веб-сервер Yaws, который существует года этак с 2003-го. Вполне себе сторонняя библиотека. По идее должна быть уже задокументирована по самое нехочу. Ага, тот самый случай. Как начинаешь ковыряться чуть ниже уровня «а вот мы здесь создаем страницу», начинается трэш и угар. Аналогично для очень большого количества библиотек.


Ты еще конфиг для sendmail вспомни. Вот уж где эпичный фейл DSLстроения, но немногие хорошо освоившие юзают и считают, что без него было бы хуже. Даже ужасный DSL иногда кому-то может быть полезен. Но, главное, примеры ужасных библиотек, как и DSL не доказывают ровным счетом ничего, кроме возможности их существования. А сей факт мне доказывать не надо.

M>Что было бы, если бы это был DSL при таком же уровне документации? Расковыривать EBNF/Peg/Yacc/хз-что? Реверс-инжинирить работу компилятора/интерпретатора этого DSL? И если в Yaws при желании можно пройтись по кишкам дебаггером, то что ты предлагаешь для DSL? Сказки Вульфхаунда, что это все не проблема?


Предлагаю ругать не DSL а доступные тебе инструменты для его создания. Проблема в них.
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.13 16:37
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Замени это
Автор: Ziaw
Дата: 31.12.12
.


Какой то не очень удачный у тебя пример для демонстрации преимуществ QC. На BLT в виде method chain переписывается даже короче и получается что то вроде:
orderDetails =
  db
    .OrderDetails(od => od.Order.OrderID = orderID)
    .Select(
      od =>
        new OrderDescription
        {
          Product = od.Product.ProductName,
          Quantity = od.Quantity,
          ShipperName = od.Order.ShipVia.CompanyName,
          Total = od.Quantity * od.UnitPrice,
          UnitPrice = od.UnitPrice,
          SupplierName = od.Product.Supplier.CompanyName 
        });
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 16:38
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Что было бы, если бы это был DSL при таком же уровне документации?

Нормально все было бы.

M>Расковыривать EBNF/Peg/Yacc/хз-что?

А в чем проблема?
Это не сложнее чем читать код на ерланге.

M>Реверс-инжинирить работу компилятора/интерпретатора этого DSL?

А что просто в исходники заглянуть не судьба?

M>И если в Yaws при желании можно пройтись по кишкам дебаггером, то что ты предлагаешь для DSL?

Пройтись по кишкам отладчиком.
Можно ходить и по самому компилятору.
И по ДСЛ. И по сгенерированному коду. Н2 находится в зачаточном состоянии но уже можно ходить отладчиком как по сходному коду на ДСЛ. Так и по сгенерированному. В будущем можно будет во время отладки переключатся.

M>Сказки Вульфхаунда, что это все не проблема?

Не сказки а ежедневный опыт работы с ДСЛ на порядки более сложным чем те которые будут создавать 99% разработчиков.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 03.01.13 16:39
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


WH>>>ДСЛ исправлять проще, чем библиотеку.

ARK>>Угу. Особенно если на этом DSL уже наколбашены сотни кода.
WH>Именно.
WH>1)Просто по тому, что для решения той же задачи на библиотеке будут написаны тысячи, а то и миллионы кода.

Ну, это другой уже вопрос.

WH>2)Как правило, старый ДСЛ очень легко можно трансформировать в новый. С библиотеками такое не всегда проходит.


Вот в это я поверить не могу. Каким это магическим образом можно легко изменить весь код? Рефакторинг и в обычном коде иногда сложен, а с DSL...
А если этот DSL-код еще где-нибудь в строковых литералах лежит, как SQL?

WH>3)Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ.


И наоборот.

WH>Например, я полностью изменил реализацию парсера при этом синтаксис и семантика не изменились.


Ну, частный случай.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 03.01.13 16:46
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Какой то не очень удачный у тебя пример для демонстрации преимуществ QC. На BLT в виде method chain переписывается даже короче и получается что то вроде:

AVK>
AVK>orderDetails =
AVK>  db
AVK>    .OrderDetails(od => od.Order.OrderID = orderID)
AVK>    .Select(
AVK>      od =>
AVK>        new OrderDescription
AVK>        {
AVK>          Product = od.Product.ProductName,
AVK>          Quantity = od.Quantity,
AVK>          ShipperName = od.Order.ShipVia.CompanyName,
AVK>          Total = od.Quantity * od.UnitPrice,
AVK>          UnitPrice = od.UnitPrice,
AVK>          SupplierName = od.Product.Supplier.CompanyName 
AVK>        });
AVK>


Отлично Да, пример оказался неудачный, одни inner join. Как только добавятся left и right станет сразу менее уютно, по навигационным свойствам гулять станет непросто. Впрочем к синтаксису QC это тоже относится.
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.13 16:50
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


I>>Пока что во всех твоих примерах ты прячешь модель куда подальше.

WH>В смысле?

Да все просто, в linq том же мне незачем приседать, что бы выяснить, что же там происходит. В принципе, с макросами почти так же, только дольше. А вот с дсл где взять внутренности вычислительной модели ?

WH>>>Я бы посмотрел на то как ты руками будешь выписывать работу с файлом с ACID в полный рост. Или хотя бы ДКА для разбора текста.

I>>А я где то утверждал что все это надо руками выписывать ?
WH>А к чему тогда ты это всё понаписал?

Да как бы понятно — чего требуется от ДСЛ. Относительно автокомплитов и интелисенсов ты немного погорячился. Нужен не просто рефакторинг, нужна возможность заглянуть внутрь модели, возможность изменить не название кейворда, а его семантику. Это уже получаются миграции, а не рефакторинг. На примере SQL или регэксов хорошо видно.

I>>Например таким как в linq, если ты не забыл, linq это не query comprehension.

WH>Те другим ДСЛ. Ибо fluent interface это тоже ДСЛ. Обычно очень кривой и тормозной.

На счет кривизны и тормознутости сумлеваюсь. И рукописная модель тоже дсл. Светлое бущущее про которые ты говоришь уже давно настало, опаньки !
Кстати, ты рослин уже обогнал по перформансу или нет ?
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 16:55
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Как ты там рядом говорил? Легкая трансформация? Вот мы трансформировали наш SQL на использование window functions вместо linit x,y. ВНЕЗАПНО оказалось, что все у всех перестало работать. А как же сказки о безболезненном изменении DSL
Автор: WolfHound
Дата: 03.01.13
?

Ты можешь взять другой ДСЛ который это всё прячет. Например linq.
Или сделать транслятор стандартного SQL в конкретный диалект.
Но научить БД не изменяя саму БД ессно нельзя.
Я же всегда говорил в контексте того что мы можем править компилятор.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 17:03
Оценка:
Здравствуйте, AlexRK, Вы писали:

WH>>1)Просто по тому, что для решения той же задачи на библиотеке будут написаны тысячи, а то и миллионы кода.

ARK>Ну, это другой уже вопрос.
Да нет. Тот же.
Ибо если ты сломаешь библиотеку, то тебе придется чинить на порядок другой больше кода.
А это само по себе делает изменение интерфейса библиотеки более намного более болезненным, чем изменение ДСЛ.

ARK>Вот в это я поверить не могу. Каким это магическим образом можно легко изменить весь код? Рефакторинг и в обычном коде иногда сложен, а с DSL...

Не нужно верить. Нужно просто понять, что можно написать компилятор из старого в новый.
Более того на основе этого компилятора можно получить автоматическое превращение старого в новый.

ARK>А если этот DSL-код еще где-нибудь в строковых литералах лежит, как SQL?

Так я же не про строковые литералы говорю. А про нормальные языки.

WH>>3)Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ.

ARK>И наоборот.
Лож.

WH>>Например, я полностью изменил реализацию парсера при этом синтаксис и семантика не изменились.

ARK>Ну, частный случай.
Только что-то он у меня регулярно повторяется.
Причем не только с парсером. Но и с другими ДСЛ.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 03.01.13 17:11
Оценка:
Здравствуйте, WolfHound, Вы писали:

ARK>>Вот в это я поверить не могу. Каким это магическим образом можно легко изменить весь код? Рефакторинг и в обычном коде иногда сложен, а с DSL...

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

Угу, просто компилятор написать. Элементарно, Ватсон.

WH>>>3)Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ.

ARK>>И наоборот.
WH>Лож.

Почему?

WH>>>Например, я полностью изменил реализацию парсера при этом синтаксис и семантика не изменились.

ARK>>Ну, частный случай.
WH>Только что-то он у меня регулярно повторяется.
WH>Причем не только с парсером. Но и с другими ДСЛ.

Реализацию и для библиотеки можно менять без изменения интерфейса.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 03.01.13 17:24
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Угу, просто компилятор написать. Элементарно, Ватсон.

С нормальными инструментами действительно элементарно.

WH>>>>3)Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ.

ARK>>>И наоборот.
WH>>Лож.
ARK>Почему?
Ну, покажи пример, когда наоборот.

ARK>Реализацию и для библиотеки можно менять без изменения интерфейса.

Если повезёт. А на практике ДСЛ скрывает реализацию неизмеримо лучше, чем библиотека.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 03.01.13 17:34
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


ARK>>Угу, просто компилятор написать. Элементарно, Ватсон.

WH>С нормальными инструментами действительно элементарно.


"С нормальными инструментами что угодно сделать элементарно". Высказывание примерно того же типа.

WH>>>>>3)Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ.

ARK>>>>И наоборот.
WH>>>Лож.
ARK>>Почему?
WH>Ну, покажи пример, когда наоборот.

Сперва покажите пример, когда библиотеку надо менять, а DSL нет.

ARK>>Реализацию и для библиотеки можно менять без изменения интерфейса.

WH>Если повезёт. А на практике ДСЛ скрывает реализацию неизмеримо лучше, чем библиотека.

На вашей практике может и так. А когда (и если) будет такая практика у крутого архитектора из новозадрищенска — вот тогда и посмотрим, что лучше скрывает. Правда, это при нашей жизни вряд ли будет.
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 03.01.13 19:51
Оценка:
Здравствуйте, hardcase, Вы писали:

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


ARK>>Угу, просто компилятор написать. Элементарно, Ватсон.


H>Тут кто-то еще боится слова "компилятор"? Это так в универе напугали, что сей страх все еще преследует по жизни?


Ваше шапкозакидательство весьма забавно.
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 03.01.13 21:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

I>>иначе будет как с SQL, большинство использует "по рецептам", малая часть думает что знает, и только ничтожная действительно знает SQL.

I>>С регэксами тож самое, перестал пользоваться на время — все забыто и надо снова документацию перечитывать.
WH>Я бы посмотрел на то как ты руками будешь выписывать работу с файлом с ACID в полный рост. Или хотя бы ДКА для разбора текста.

А какое отношение ACID имеет к ds*L*?
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 03.01.13 21:54
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>У большой тройки, если не брать экзотики, SQL'99 поддержан на 100%. У второго эшелона ситуация почти такая же, даже FB с его чудесами подтянулся. Так что расширения синтаксиса есть, изменений относительно базового нет.


На вскидку:
1. совершенно разный синтаксис для identity (mssql — identity, mysql — auto_increment, postgresql — serial кажется);
2. у версионников и блокировочников по сути совершенно различные реализации параллелизма — далеко не последнего аспекта работы серверов.
Re[13]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 03.01.13 22:02
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


Гыгы, кстати +100. А я эти самопальные парсеры пишу.
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.13 22:04
Оценка:
Здравствуйте, dimgel, Вы писали:

D>1. совершенно разный синтаксис для identity (mssql — identity, mysql — auto_increment, postgresql — serial кажется);


На так потому что не покрывается стандартом (хотя я 2008 стандарт не смотрел внимательно). Вот и изобретает каждый во что горазд. Та же ситуация с ограничением выборки — стандартизовано только в 2008, да и то как то по уродски.

D>2. у версионников и блокировочников по сути совершенно различные реализации параллелизма — далеко не последнего аспекта работы серверов.


Это не имеет отношения ни к семантике самого языка, ни тем более к синтаксису. От того, что писанная на С# программа на рантайме дотнета и моно в некоторых моментах ведет себя по разному, шарп не становится двумя разными языками.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: dimgel Россия https://github.com/dimgel
Дата: 03.01.13 22:11
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Тут кто-то еще боится слова "компилятор"?


Я боюсь.
Автор: dimgel
Дата: 18.10.12
Как минимум, пока не сделали квазицитаты. Но с хорошей вероятностью и потом буду бояться, потому что сколько-нибудь нетривиальные вещи квазицитатами не обойдутся, и будет там адъ. Собственно, новый scala-reflect.jar уже сам по себе — адъ, а разработчики скалы им вполне довольны. И в этом адъу придётся разбираться, чтобы понять, что происходит. Староват я уже в таких наворотах разбираться, тем более, что требоваться это знание будет настолько редко, что каждый раз придётся заново изучать.
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 04.01.13 08:18
Оценка:
Здравствуйте, Ikemefula, Вы писали:

K>>А примеры не из мира компиляторостроения должны выдавать разрабы, не создающие сам N, а пользующиеся им.


I>Ага, должны. А что еще должны эти разрабы ?

I>Обычно разработчики инструментария обычно хорошо в курсе потребностей своей целевой аудитории.
I>А вот немерлисты почему то хорошо в курсе только компиляторов. Так шта...

А ты задайся вопросом, сколько написали библиотек те разрабы, которые создают компилятор C#. Насколько мне известно, некоторые из них присутствуют здесь, на RSDN. Так сколько они написали кода, не относящегося к компилятору? Естественно, имеется в виду, пока она работают (работали) над самим компилятором.

Как-то странно требовать прикладной код от системных программистов, не находишь?

Между тем, я для себя нашёл немало примеров макросов, написанных именно для прикладных целей. Это не полноценные DSL, а упомянутые мной однострочные NotNull и т. п. Так шта, было бы желание...
Re[5]: Легкий офтоп.
От: koodeer  
Дата: 04.01.13 08:27
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Хотелось бы увидеть альтернативы этим DSL, ну и документацию к ним. Чтобы все, наконец, смогли понять чего следует бояться в DSL.


Я полагаю, именно пример printf из Nemerle можно приводить в качестве того, почему не следует бояться макросов. Как известно, в языках C, C++, C# и многих других строковые литералы (строки форматирования в printf, Console.Write, String.Format, регулярки в виде строк, выражения XPath и пр.) не проверяются на этапе компиляции; в случае банальной опечатки ошибка выпадет в рантайме. Макрос printf в Nemerle проверяет формат в компайл-тайме. Мелочь, а приятно. Не нужен ни решарпер, ни утилиты статического анализа кода, ни лишние тесты.
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 04.01.13 08:43
Оценка:
M>>Как ты там рядом говорил? Легкая трансформация? Вот мы трансформировали наш SQL на использование window functions вместо linit x,y. ВНЕЗАПНО оказалось, что все у всех перестало работать. А как же сказки о безболезненном изменении DSL
Автор: WolfHound
Дата: 03.01.13
?

WH>Ты можешь взять другой ДСЛ который это всё прячет. Например linq.

Всех клиентов все равно придется менять

WH>Или сделать транслятор стандартного SQL в конкретный диалект.

WH>Но научить БД не изменяя саму БД ессно нельзя.
WH>Я же всегда говорил в контексте того что мы можем править компилятор.

Если у тебя есть возможность менять компилятор DSL, значит у тебя есть возможность менять библиотеку Почему внезапно ты пишешь, что библиотеку менять сложнее или нельзя ее поменять без изменения интерфейса?


dmitriid.comGitHubLinkedIn
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.01.13 08:46
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Ваша боязнь компиляторостроения весьма забавна. Уже сегодняшних инструментах совершенно обычному программисту по силам наколбасить компилятор простого паскалеобразного языка с автоматическим управлением памятью под пачку платформ и архитектур за крайне разумное время (для первого прототипа недельки будет достаточно). А тут речь шла про транслятор с одного языка в другой не слишком отличающийся, гипотетический пример уровня сложности задачи: транслятор из C# 2.0 в C# 3.0 делающиий подстановки var где возможно и заменяющий delegate на лямбды, и все это при наличии типизатора для обоих ревизий C#. Да такие задачи можно решать, что называется, не отрываясь от RSDN-а!


Запиши подробно видео или презентацию, что бы были видны все изменения от начала и до конца. Желательно что бы в этом было побольше фреймов/cтраниц чем начало и конец.
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 04.01.13 08:46
Оценка:
M>>И DSL и библиотека являются интерфейсом к какому-то большому коду.
WH>С ДСЛ это не совсем верно. Обычно компилятор получается сложнее чем рантайм.

Если компилятор сложнее, то откуда появился миф, что DSL изменить легче, чем библиотеку? И да, DSL все равно является интерфейсом к какому-то большому коду.

M>>Если на DSL уже написаны сотни/тысячи строк кода, то любое его изменение приведет к поломке всего этого кода или изменению его поведения. Точно так же, если библиотека используется в сотнях/тысячах мест, то эти места сломаются/поменяют поведение, если мы изменим библиотеку.

WH>1)Ты отвечаешь на то, что кода на библиотеке будет намного больше.
WH>2)Я именно это и говорю. Но мне тут пытаются втирать, что с библиотекой проблем не будет.

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

WH>>>2)Как правило, старый ДСЛ очень легко можно трансформировать в новый. С библиотеками такое не всегда проходит.

M>>Откуда внезапно взялось это правило?
WH>Из практики.

А, сказки, как обычно.

M>>КО напоминает, что если библиотека реализована, как черный ящик, то меняй эту реализацию хоть сто раз. Неубедительно.

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

В моей практике был противоположный случай. Ничья?

WH>Всё по тому, что через интерфейс библиотеки всегда просачивается реализация. А через ДСЛ нет.


Да неужели?


dmitriid.comGitHubLinkedIn
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.01.13 08:55
Оценка:
Здравствуйте, WolfHound, Вы писали:

I>>Да все просто, в linq том же мне незачем приседать, что бы выяснить, что же там происходит. В принципе, с макросами почти так же, только дольше. А вот с дсл где взять внутренности вычислительной модели ?

WH>Открываешь, исходники ДСЛ и читаешь.

Как книгу что ли ?

I>>Да как бы понятно — чего требуется от ДСЛ. Относительно автокомплитов и интелисенсов ты немного погорячился.

WH>Почему? Есть весьма чёткий план как это сделать.

На 80% потребностей это не тянет. В библиотеке в пару кликов мышом можно добраться до нужного места.

I>>Нужен не просто рефакторинг, нужна возможность заглянуть внутрь модели, возможность изменить не название кейворда, а его семантику. Это уже получаются миграции, а не рефакторинг. На примере SQL или регэксов хорошо видно.

WH>И часто тебе нужно сделать так чтобы метод Insert всю базу грохал?

Я про рефакторинг а не про базу грохнуть.

I>>На счет кривизны и тормознутости сумлеваюсь.

WH>Это факты.

Про парсер и типизацию рослина не ты писал ?

I>>Кстати, ты рослин уже обогнал по перформансу или нет ?

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

WH>При этом когда Н2 взлетит создание новых языков будет на порядки дешевле чем добавление нового языка в рослин.

WH>Мы даже сможем без проблем сделать макросы для C#, VB.NET, Java итп.

Если весь выхлоп это удешевление, то популярность будет как у Немерле
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 04.01.13 08:58
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


Z>>Regexp, SQL, format strings — это примеры DSL которыми мы все пользуемся постоянно.


AVK>Форматная строка на DSL, извини, не тянет. Что же касается остального — SQL обычно специально указывают в требованиях вакансии, что как бы намекает (при этом по настоящему хорошо его знает 1% от считающих так).


Пусть это не тянет на DSL, но тянет на примеры того, где макросы могут сильно помочь, вводя проверки формата на этапе компиляции.

AVK> А регексы это вообще что то с чем то — одно только количество вопросов форуме типа "подскажите регекс для ..." уже о многом говорит. Лично мне до сих пор иногда приходится вдумчиво вчитываться в доку по регекпам, и я уверен, что библиотека без этой птичей псевдографики была бы проще и удобнее.


Глянул сейчас форум Regular Expressions на MSDN — ни одного неотвеченного вопроса. Получается, что регулярки всё-таки понятны очень многим, и ответ/совет по ним всегда дадут.
Читать и понимать регулярки было бы намного легче, если бы их писали не сплошной строкой, а с форматированием. Такая возможность есть, жаль что ей почти никогда не пользуются. Также сложность их чтения вызвана отсутствием подсветки (полагаю, макросы N могут это сделать).
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 04.01.13 09:03
Оценка:
M>>Расковыривать EBNF/Peg/Yacc/хз-что?
WH>А в чем проблема?
WH>Это не сложнее чем читать код на ерланге.

Но и не легче.

M>>Реверс-инжинирить работу компилятора/интерпретатора этого DSL?

WH>А что просто в исходники заглянуть не судьба?

Это и есть реверс-инжиниринг

M>>И если в Yaws при желании можно пройтись по кишкам дебаггером, то что ты предлагаешь для DSL?

WH>Пройтись по кишкам отладчиком.
WH>Можно ходить и по самому компилятору.
WH>И по ДСЛ. И по сгенерированному коду. Н2 находится в зачаточном состоянии но уже можно ходить отладчиком как по сходному коду на ДСЛ. Так и по сгенерированному. В будущем можно будет во время отладки переключатся.

Да-да-да. Сказки про панацею мы слушаем уже который код. Не интересно.


dmitriid.comGitHubLinkedIn
Re[7]: Легкий офтоп.
От: koodeer  
Дата: 04.01.13 09:22
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Ты путаешь результа и его достижение. Что бы выяснить, почему люди боятся макросов, надо выкатить код самого макроса printf а уже потом делать выводы.


Ну так большинству и нужен результат.
А какой код внутри, и так понятно: там почти то же самое, что будет при ручной проверке строки формата.
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: koodeer  
Дата: 04.01.13 09:26
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Когда вышел C#, от микрософта сразу вышел целый вагон примеров и разных приложений чуть не на все случаи жизни. Я например по ним и учился. Собтсвенно у них всегда так, из последнего это например TypeScript. Вышел язык, еще альфа, но уже есть целая куча примеров, которые полезны для потребителя.


И всё-таки, полагаю, эти примеры писали не разработчики компилятора, а другие люди из команды Микрософта.
Вопрос в количестве людей, постоянно работающих над Немерлом. Пока что фанаты Н пишут макросы лично для своих нужд. Платили бы им деньги — наваяли бы тонны примеров.

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


I>Собтсвенно в нормальных языках и хороших либах ровно так же — примеров и готовых решений на порядок больше, чем кода относящегося к проекту.


Можно взять любой пример на C# — он годится для N
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 09:52
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Сперва покажите пример, когда библиотеку надо менять, а DSL нет.

http://www.rsdn.ru/forum/philosophy/5018641.1
Автор: WolfHound
Дата: 03.01.13

Давай теперь наоборот.

ARK>На вашей практике может и так. А когда (и если) будет такая практика у крутого архитектора из новозадрищенска — вот тогда и посмотрим, что лучше скрывает. Правда, это при нашей жизни вряд ли будет.

Те все претензии сводятся к тому, что найдется неосилятор и наломает дров? Так он и на C# дров наломает не меньше.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 04.01.13 10:00
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


ARK>>Сперва покажите пример, когда библиотеку надо менять, а DSL нет.

WH>http://www.rsdn.ru/forum/philosophy/5018641.1
Автор: WolfHound
Дата: 03.01.13

WH>Давай теперь наоборот.

Там нет примера, там есть фраза "в моей практике такое было".
Я из этого не могу сделать никаких выводов.
Прошу все же привести конкретный пример, желательно небольшой.

ARK>>На вашей практике может и так. А когда (и если) будет такая практика у крутого архитектора из новозадрищенска — вот тогда и посмотрим, что лучше скрывает. Правда, это при нашей жизни вряд ли будет.

WH>Те все претензии сводятся к тому, что найдется неосилятор и наломает дров? Так он и на C# дров наломает не меньше.

Меньше.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 10:01
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Если у тебя есть возможность менять компилятор DSL, значит у тебя есть возможность менять библиотеку Почему внезапно ты пишешь, что библиотеку менять сложнее или нельзя ее поменять без изменения интерфейса?

1) Кода на ДСЛ будет на порядок другой меньше.
а. Нужно будет переделать меньше клиентского кода.
б. Компилятор ДСЛ может давать внятные сообщения с подсказками.
в. Можно просто сделать рефакторинг который будет переделывать старый код в новый. Если конечно кода очень много.
2) ДСЛ намного лучше скрывает реализацию. Просто по тому что вычислительная модель языка на котором написана библиотека не путается под ногами.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 10:28
Оценка:
Здравствуйте, Ikemefula, Вы писали:

WH>>Открываешь, исходники ДСЛ и читаешь.

I>Как книгу что ли ?
Как исходники библиотеки.
Разницы нет.

I>На 80% потребностей это не тянет. В библиотеке в пару кликов мышом можно добраться до нужного места.

Так я же говорю, навигация будет просто автоматом. Вообще ничего делать не нужно.

WH>>И часто тебе нужно сделать так чтобы метод Insert всю базу грохал?

I>Я про рефакторинг а не про базу грохнуть.
Так рефакторинг не меняет семантику.

I>Про парсер и типизацию рослина не ты писал ?

Так там нет библиотеки для создания языков. Там ДВА захардкоженных языка. В реализацию которых вложили просто не реальное количество ресурсов.
Да и если бы я делал генератор монолитных языков, то я бы их обогнал.
Но у меня другая задача.
Так что сравнение просто не корректно.

I>Если весь выхлоп это удешевление, то популярность будет как у Немерле

Подумаешь, можно будет сделать компилятор C#10 в несколько платформ вместе с IDE за пару недель. Фигня какая.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 10:32
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Но и не легче.


M>Это и есть реверс-инжиниринг

Те никаких проблем по сравнению с библиотекой как мне тут пытаются втирать.

M>Да-да-да. Сказки про панацею мы слушаем уже который код. Не интересно.

Это не сказки. Это УЖЕ работает.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 10:36
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Там нет примера, там есть фраза "в моей практике такое было".

ARK>Я из этого не могу сделать никаких выводов.
ARK>Прошу все же привести конкретный пример, желательно небольшой.
У меня сейчас просто нет тех исходников.
При этом твое "наоборот" просто высосано из пальца.

WH>>Те все претензии сводятся к тому, что найдется неосилятор и наломает дров? Так он и на C# дров наломает не меньше.

ARK>Меньше.
Ой, да ладно сказки то рассказывать.
Вас послушать то вы тут всё сами понимаете, но вот про других людей всегда говорите плохо. Что, дескать, они точно не справятся.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.01.13 10:42
Оценка:
Здравствуйте, koodeer, Вы писали:

K>И всё-таки, полагаю, эти примеры писали не разработчики компилятора, а другие люди из команды Микрософта.


А .net фремворк сам по себе вырос, ага.
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 04.01.13 10:44
Оценка:
M>>У тебя удивительная способность читать тексты как-то по-другому, нежели их читают другие люди. Имхо, никто не говорит, что с библиотекой проблем не будет. Говорят, что проблем будет ровно столько же, сколько при изменении DSLя.
WH>

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

WH>(C)http://www.rsdn.ru/forum/philosophy/5017793.1
Автор: AndrewVK
Дата: 03.01.13

WH>При этом AVK теоретик.
WH>А моя практика говорит о прямо противоположном.

M>>В моей практике был противоположный случай. Ничья?

WH>У тебя была практика? Извини не верю.


У нас на работе используется три DSLя. Причем не в академическом проекте, который существует только в бурных подростковых фантазиях его авторов, а в реальной коммерческой системе, приносящей неиллюзорные деньги. О двух из них я немного говорил: http://rsdn.ru/forum/philosophy/5017200.1
Автор: Mamut
Дата: 02.01.13
, http://rsdn.ru/forum/philosophy/5017224.1
Автор: Mamut
Дата: 02.01.13
, http://rsdn.ru/forum/philosophy/5017272.1
Автор: Mamut
Дата: 02.01.13
. Изменение этих DSLей или изменение их поведения занимает по трудоемкости не меньше, чем изменение и обновление любой другой библиотеки в проекте.


dmitriid.comGitHubLinkedIn
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.01.13 10:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>>>И часто тебе нужно сделать так чтобы метод Insert всю базу грохал?

I>>Я про рефакторинг а не про базу грохнуть.
WH>Так рефакторинг не меняет семантику.

А с языком именно это и надо, потому что мало людей которые скажем теорию категорий на раз понимают.

I>>Если весь выхлоп это удешевление, то популярность будет как у Немерле

WH>Подумаешь, можно будет сделать компилятор C#10 в несколько платформ вместе с IDE за пару недель. Фигня какая.

ИДЕ с нынешними возможностями или ИДЕ того времени когда будет актуальным этот C#10 ?
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 04.01.13 10:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>У меня сейчас просто нет тех исходников.


Я не прошу исходники, я прошу демонстрационный пример.

WH>При этом твое "наоборот" просто высосано из пальца.


То, что у вас что-то было на практике, не означает, что это было правильно или обязательно.

Кстати, я вполне могу представить ситуацию, когда язык изменится, а аналогичная библиотека — нет.
К примеру, сейчас в линке в query comprehension нет Distinct(), а в библиотеке есть.

WH>Ой, да ладно сказки то рассказывать.

WH>Вас послушать то вы тут всё сами понимаете, но вот про других людей всегда говорите плохо. Что, дескать, они точно не справятся.

Вот когда построение DSL станет _общепринятой_ практикой, тогда и можно будет делать выводы наподобие "ДСЛ скрывает реализацию неизмеримо лучше, чем библиотека". А пока что это просто слова.
Re[8]: Легкий офтоп.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.01.13 10:51
Оценка:
Здравствуйте, koodeer, Вы писали:

K>Ну так большинству и нужен результат.

K>А какой код внутри, и так понятно: там почти то же самое, что будет при ручной проверке строки формата.

Ты лучше покажи этот макрос.
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 04.01.13 10:53
Оценка:
M>>Но и не легче.

M>>Это и есть реверс-инжиниринг

WH>Те никаких проблем по сравнению с библиотекой как мне тут пытаются втирать.

Проблемы есть. Если библиотека более-менее отражает логику бизнес-процесса или просто логику программы, то компилятор отразит что? Правильно, помимо собственно бизнес-логики, там будет еще полно ненужного никому парсинга, разбирания на токены, восстановления/установления контекста, отражения DSL на внутреннее представление, а того представления на собственно логику и т.д. и т.п. Причем в зависимости от компилятора и кривизны рук компиляторостроителя это может быть как кашей, так и не кашей.

M>>Да-да-да. Сказки про панацею мы слушаем уже который код. Не интересно.

WH>Это не сказки. Это УЖЕ работает.

Где?


dmitriid.comGitHubLinkedIn
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 12:06
Оценка:
Здравствуйте, Mamut, Вы писали:

M>У нас на работе используется три DSLя.

К которым ты не имеешь никакого отношения.

M>Причем не в академическом проекте, который существует только в бурных подростковых фантазиях его авторов, а в реальной коммерческой системе, приносящей неиллюзорные деньги.

Что наступил на мозоль?
Да и мои ДСЛ, в том числе в реальных системах работают.

M>О двух из них я немного говорил: http://rsdn.ru/forum/philosophy/5017200.1
Автор: Mamut
Дата: 02.01.13
, http://rsdn.ru/forum/philosophy/5017224.1
Автор: Mamut
Дата: 02.01.13
, http://rsdn.ru/forum/philosophy/5017272.1
Автор: Mamut
Дата: 02.01.13
. Изменение этих DSLей или изменение их поведения занимает по трудоемкости не меньше, чем изменение и обновление любой другой библиотеки в проекте.

Ох, как ты подставляешься то...
Из твоей презентации.

● Once, as a very young company, Klarna had all the business logic in Erlang code
● Management/Finance could not read it
● Developers required both to change logic and to explain the current logic
● Code upgrade necessary for all changes
● No trace of how decisions were made

Ровно то, что я говорю.

● From an input file of 5 K lines of rules
● To 50 K lines of (prettyprinted) Erlang

И даже размер разбухания кода как я и говорю на порядок. И это не самый запущенный случай.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 12:11
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>А с языком именно это и надо, потому что мало людей которые скажем теорию категорий на раз понимают.

Я уже вообще не понимаю, что ты сказать пытаешься.
Причем тут теория категорий?

I>ИДЕ с нынешними возможностями или ИДЕ того времени когда будет актуальным этот C#10 ?

Фичи ИДЕ очень близки к насыщению. Ничего революционного не видно.
Но даже если и будет, то я не сомневаюсь что поддержим.
Часть фичей, как я уже говорил, будет появляться вообще без строчки кода. Для других придется что-то написать, но это что-то будет на порядок меньше чем нужно писать сейчас.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 12:18
Оценка:
Здравствуйте, AlexRK, Вы писали:

WH>>У меня сейчас просто нет тех исходников.

ARK>Я не прошу исходники, я прошу демонстрационный пример.
Какой пример? Мне что его из пальца высосать?

ARK>Кстати, я вполне могу представить ситуацию, когда язык изменится, а аналогичная библиотека — нет.

ARK>К примеру, сейчас в линке в query comprehension нет Distinct(), а в библиотеке есть.
Не делай мне так смешно.
Библиотека уже изменилась, когда в ней появился Distinct.

Но я говорю вообще не об этом.
Если я захочу переписывать query comprehension не в вызовы методов, а в что-то другое то я смогу это сделать.
А в случае с библиотекой тебе придется выкинуть и переписать весь код.

ARK>Вот когда построение DSL станет _общепринятой_ практикой, тогда и можно будет делать выводы наподобие "ДСЛ скрывает реализацию неизмеримо лучше, чем библиотека". А пока что это просто слова.

Это просто факты. И никакая "общепринятость" не может их изменить.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 04.01.13 12:21
Оценка:
M>>Причем не в академическом проекте, который существует только в бурных подростковых фантазиях его авторов, а в реальной коммерческой системе, приносящей неиллюзорные деньги.
WH>Что наступил на мозоль?

На твою — возможно.

WH>Да и мои ДСЛ, в том числе в реальных системах работают.


M>>О двух из них я немного говорил: http://rsdn.ru/forum/philosophy/5017200.1
Автор: Mamut
Дата: 02.01.13
, http://rsdn.ru/forum/philosophy/5017224.1
Автор: Mamut
Дата: 02.01.13
, http://rsdn.ru/forum/philosophy/5017272.1
Автор: Mamut
Дата: 02.01.13
. Изменение этих DSLей или изменение их поведения занимает по трудоемкости не меньше, чем изменение и обновление любой другой библиотеки в проекте.

WH>Ох, как ты подставляешься то...
WH>Из твоей презентации.
WH>

WH>● Once, as a very young company, Klarna had all the business logic in Erlang code
WH>● Management/Finance could not read it
WH>● Developers required both to change logic and to explain the current logic
WH>● Code upgrade necessary for all changes
WH>● No trace of how decisions were made

WH>Ровно то, что я говорю.

Где тут то, о чем ты говоришь? В контексте ветки ты утверждаешь, что:

1)Просто по тому, что для решения той же задачи на библиотеке будут написаны тысячи, а то и миллионы кода.


Да, возможно.

2)Как правило, старый ДСЛ очень легко можно трансформировать в новый. С библиотеками такое не всегда проходит.


Общая фраза, требующая доказательств. Особенно про «очень».

3)Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ.


Как раз в моих описаниях говорится про то, что DSL пришлось изменять.

Более того, я говорил следующее:

Если на DSL уже написаны сотни/тысячи строк кода, то любое его изменение приведет к поломке всего этого кода или изменению его поведения.


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

Как там у тебя было,

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


У нас на практике, полгода тому назад пришлось ломать DSL. Места, которые его используют, пришлось переписывать. Но ведь это ложь © Потому что твоя практика говорит о противоположном ©, ага-ага.

В общем, с фанатиками разговаривать неинтересно.


dmitriid.comGitHubLinkedIn
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 12:22
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Т.е. разработчик скорее болен чем то уникальным . если интерфейс назвать магическим DSL то он может отделить реализацию , а на уровне интерфейса к библиотеке нет ? И по такому анекдотичному примеру ты строишь предположеничя ?

Начнем с того что интерфейс в терминах C# или жабы это УЖЕ детали реализации которые часто просто не нужны.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 12:38
Оценка:
Здравствуйте, Mamut, Вы писали:

M>

M>1)Просто по тому, что для решения той же задачи на библиотеке будут написаны тысячи, а то и миллионы кода.

M>Да, возможно.
По твоей ссылке на порядок.

M>

M>2)Как правило, старый ДСЛ очень легко можно трансформировать в новый. С библиотеками такое не всегда проходит.

M>Общая фраза, требующая доказательств. Особенно про «очень».
А что тут доказывать то?
Берем код на старом.
Парсим.
Компилируем его в новый.
Радуемся жизни.
Не раз так делал.

M>

M>3)Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ.

M>Как раз в моих описаниях говорится про то, что DSL пришлось изменять.
Где я написал, что ДСЛ никогда и ни при каких обстоятельствах не придется изменять?
Я утверждаю две вещи:
1)Если ДСЛ придется изменить, это потребует на порядок другой меньше работы, чем изменение интерфейса библиотеки, которая делает то же самое.
2)Многие вещи, которые требуют изменения интерфейса библиотеки, не требуют изменения ДСЛ.
Но ты споришь с чем попало кроме того что я говорю.

M>И на это мы один или два раза наткнулись, изменяя как этот DSL, так и другой. Но как ты там говоришь? А, то что твой опыт — единственно верный и правильный, а опыт других людей — ложь, ага.

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

M>В общем, с фанатиками разговаривать неинтересно.

В зеркало посмотри.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 04.01.13 13:39
Оценка:
M>>

M>>1)Просто по тому, что для решения той же задачи на библиотеке будут написаны тысячи, а то и миллионы кода.

M>>Да, возможно.
WH>По твоей ссылке на порядок.

Ну да, из текста, который говорит: из 5к строчек мы получаем 50к сгенеренного кода ты делаешь далеко идущий вывод, что библиотека, существовашая до этого, имела 50 к кода. Ну-ну.


M>>

M>>2)Как правило, старый ДСЛ очень легко можно трансформировать в новый. С библиотеками такое не всегда проходит.

M>>Общая фраза, требующая доказательств. Особенно про «очень».
WH>А что тут доказывать то?
WH>Берем код на старом.
WH>Парсим.
WH>Компилируем его в новый.
WH>Радуемся жизни.
WH>Не раз так делал.

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


M>>

M>>3)Многие вещи, которые требуют изменения интерфейса библиотеки можно делать без изменения ДСЛ.

M>>Как раз в моих описаниях говорится про то, что DSL пришлось изменять.
WH>Где я написал, что ДСЛ никогда и ни при каких обстоятельствах не придется изменять?
WH>Я утверждаю две вещи:
WH>1)Если ДСЛ придется изменить, это потребует на порядок другой меньше работы, чем изменение интерфейса библиотеки, которая делает то же самое.

Доказательств кроме «я, у меня» ты так и не смог предоставить ни одного.

WH>2)Многие вещи, которые требуют изменения интерфейса библиотеки, не требуют изменения ДСЛ.


Это ты тоже кроме как «я, у меня» аргументировать не смог.

M>>И на это мы один или два раза наткнулись, изменяя как этот DSL, так и другой. Но как ты там говоришь? А, то что твой опыт — единственно верный и правильный, а опыт других людей — ложь, ага.

WH>И что ваш компилятор не смог выдать сообщение об ошибке?
WH>Или предупреждение?
WH>Это же даже в рукопашном компиляторе на раз делается.

Именно потому, что компилятор выдавал сообщения об ошибке, приходилось перелопачивать все места, где использоввался этот DSL. Мегаумному Вульфхаунду, который никогда не включает дурачка, не приходит в голову, что замена синтаксиса «a PLUS b» на «a + b» в DSLе приведет к тому, что надо будет менять все места, где эта конструкция вызывается?


dmitriid.comGitHubLinkedIn
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.01.13 13:40
Оценка:
Здравствуйте, WolfHound, Вы писали:

I>>А с языком именно это и надо, потому что мало людей которые скажем теорию категорий на раз понимают.

WH>Я уже вообще не понимаю, что ты сказать пытаешься.
WH>Причем тут теория категорий?

При том, что язык поначалу может быть сколь угодно кривой. Что бы сделать рефакторинг, нужно не только поменять язык, нужно автоматически пофиксить кодовую базу, а это больше похоже на миграции.
Re[13]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 04.01.13 13:56
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Мне этот дсл ровно ничего не даёт, потому я обхожусь без него Причины простые — его дизайнил непойми кто. В говнобиблиотеке проще разбираться что в таких вот говнодсл. Не ясно, откуда возьмется должное количество дсл-архитекторов, что бы на каждый проект хватило.


Наследование используют? Оно покритичнее к ошибкам будет.

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


А они точно регулярные грамматики парсят?
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 04.01.13 14:22
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Ну да, из текста, который говорит: из 5к строчек мы получаем 50к сгенеренного кода ты делаешь далеко идущий вывод, что библиотека, существовашая до этого, имела 50 к кода. Ну-ну.

Нет. Я делаю вывод о том, что без ДСЛ у тебя было бы не 5К строк прикладной логики, а 50К.

M>О да, компилятор их нового в старый с сохранением семантики — это, безусловно обязательно очень легкая задача, ага.

Не раз такое делал.
Это очень просто.

WH>>1)Если ДСЛ придется изменить, это потребует на порядок другой меньше работы, чем изменение интерфейса библиотеки, которая делает то же самое.

M>Доказательств кроме «я, у меня» ты так и не смог предоставить ни одного.
А то, что это доказано по твоей ссылке не считается?
Ведь если бы у тебя было бы 50К строк на эрланге, то при изменении библиотеки тебе бы пришлось все их перелопатить.
А учитывая то что он динамически типизированный

WH>>2)Многие вещи, которые требуют изменения интерфейса библиотеки, не требуют изменения ДСЛ.

M>Это ты тоже кроме как «я, у меня» аргументировать не смог.
Опять же читай свою ссылку.
Видишь, тут нет ни одной завязки на реализацию.
== Allowed to Purchase ==
* first of
** person.is_vip
** person.income >= limits.min_income
** all of
*** person.country = "FI"
*** [[#Finnish Special Cases]]

Теперь сравни это с тем, что из этого кода генерируется.

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

Ты так говоришь как будто сообщения компилятора это что-то плохое.
Хотя, что еще ждать от фаната динамической типизации.

M>Мегаумному Вульфхаунду, который никогда не включает дурачка, не приходит в голову, что замена синтаксиса «a PLUS b» на «a + b» в DSLе приведет к тому, что надо будет менять все места, где эта конструкция вызывается?

А я хотя раз сказал, что не придется?
Всё что я говорю, что то же самое придется делать и в случае с библиотеками.
Но из-за того что кода будет на порядок больше придется заниматься этим в намного больших объемах.
А некоторые изменения, которые я делал в реализации ДСЛ, с библиотекой я бы никогда не сделал. Ибо пришлось бы выкинуть весь код. А в случае с ДСЛ пришлось только перекомпилировать написанный на нем код.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.01.13 15:29
Оценка:
Здравствуйте, koodeer, Вы писали:

K>Пусть это не тянет на DSL, но тянет на примеры того, где макросы могут сильно помочь, вводя проверки формата на этапе компиляции.


А при чем тут макросы?

K>Глянул сейчас форум Regular Expressions на MSDN — ни одного неотвеченного вопроса.


При чем тут неотвеченные вопросы?
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[14]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.01.13 16:14
Оценка:
Здравствуйте, Ziaw, Вы писали:

I>>Мне этот дсл ровно ничего не даёт, потому я обхожусь без него Причины простые — его дизайнил непойми кто. В говнобиблиотеке проще разбираться что в таких вот говнодсл. Не ясно, откуда возьмется должное количество дсл-архитекторов, что бы на каждый проект хватило.


Z>Наследование используют? Оно покритичнее к ошибкам будет.


Ну и что ? При современных средствах рефакторинга и тд фиксится за время много меньшее времени написания.

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


Z>А они точно регулярные грамматики парсят?


Точно.
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: minorlogic Украина  
Дата: 04.01.13 20:48
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


M>>Т.е. разработчик скорее болен чем то уникальным . если интерфейс назвать магическим DSL то он может отделить реализацию , а на уровне интерфейса к библиотеке нет ? И по такому анекдотичному примеру ты строишь предположеничя ?

WH>Начнем с того что интерфейс в терминах C# или жабы это УЖЕ детали реализации которые часто просто не нужны.

В контексте разговора это абсурд. Т.е. для DSL интерфейс не нужен и можно писать "делай что мне надо" в каждой программе? Для меня не звучит разумно.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 05.01.13 02:49
Оценка:
M>>>У нас на работе используется три DSLя.
AVK>>Бесполезно (я все ждал когда спор перейдет в эту плоскость).
WH>К которым как мы выяснили он никакого отношения не имеет.

Я с ними работаю, и привожу конкретные примеры. В отличие от тебя.

У меня сейчас нет исходников
У меня нет примеров
На моем компьютере все работает


Ага-ага. Что-то мне подсказывает, что к DSLям ты имеешь еще меньшее отношение, чем я. Иначе за последние два года пафосного вещания про них ты бы откопал и примеры и исходники. Но их как не было, так и нет и не предвидится.


dmitriid.comGitHubLinkedIn
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 05.01.13 03:01
Оценка:
M>>Ну да, из текста, который говорит: из 5к строчек мы получаем 50к сгенеренного кода ты делаешь далеко идущий вывод, что библиотека, существовашая до этого, имела 50 к кода. Ну-ну.
WH>Нет. Я делаю вывод о том, что без ДСЛ у тебя было бы не 5К строк прикладной логики, а 50К.

Неверный вывод.

WH>>>1)Если ДСЛ придется изменить, это потребует на порядок другой меньше работы, чем изменение интерфейса библиотеки, которая делает то же самое.

M>>Доказательств кроме «я, у меня» ты так и не смог предоставить ни одного.
WH>А то, что это доказано по твоей ссылке не считается?

Что именно доказано по моей ссылке?

WH>Ведь если бы у тебя было бы 50К строк на эрланге, то при изменении библиотеки тебе бы пришлось все их перелопатить.


По моей ссылке написано, что компилятор генерит столько-то строк. Из этого никак не следует, что в изначальной библиотеке было 50к строк. Это во-первых.
Во-вторых, изменив DSL нам все равно пришлось перелопачивать все места, где он используется.

WH>>>2)Многие вещи, которые требуют изменения интерфейса библиотеки, не требуют изменения ДСЛ.

M>>Это ты тоже кроме как «я, у меня» аргументировать не смог.
WH>Опять же читай свою ссылку.
WH>Видишь, тут нет ни одной завязки на реализацию.
WH>Теперь сравни это с тем, что из этого кода генерируется.

Ты банально не представляешь себе библиотеки в виде черных ящиков?


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

WH>Ты так говоришь как будто сообщения компилятора это что-то плохое.

Что ты там говорил? При изменении DSL надо будет менять что-то там меньше? Нам пришлось править все места, где этот DSL использовался. Как-то твоя сказочка про «править меньше» не сработала.

M>>Мегаумному Вульфхаунду, который никогда не включает дурачка, не приходит в голову, что замена синтаксиса «a PLUS b» на «a + b» в DSLе приведет к тому, что надо будет менять все места, где эта конструкция вызывается?

WH>А я хотя раз сказал, что не придется?
WH>Всё что я говорю, что то же самое придется делать и в случае с библиотеками.
WH>Но из-за того что кода будет на порядок больше придется заниматься этим в намного больших объемах.

Итак, DSL используется в сотне мест, вызов библиотеки используется в сотне мест.

WH>А некоторые изменения, которые я делал в реализации ДСЛ, с библиотекой я бы никогда не сделал. Ибо пришлось бы выкинуть весь код. А в случае с ДСЛ пришлось только перекомпилировать написанный на нем код.


Дададада. Мы тебе верим, потому что ты не способен привести ни единого примера, а опыт других людей — ложь. И то, что можно изменять библиотеки, не изменяя интерфейса библиотеки или не выкидывая весь код, — это тоже ложь. Естественно, ибо also sprach Wolfhound ©™.


dmitriid.comGitHubLinkedIn
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 05.01.13 07:23
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Я с ними работаю, и привожу конкретные примеры. В отличие от тебя.

Которые подтверждают мои слова и опровергают твои.

M>Ага-ага. Что-то мне подсказывает, что к DSLям ты имеешь еще меньшее отношение, чем я. Иначе за последние два года пафосного вещания про них ты бы откопал и примеры и исходники. Но их как не было, так и нет и не предвидится.

Так было. И не раз.
Только ты повесил на них ярлык, что это типа не промышленные ДСЛ.

А исходников тех ДСЛ код, на которых исполнился в продакшене сотни миллионов, если не миллиарды раз у меня сейчас просто нет.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 05.01.13 07:26
Оценка:
Здравствуйте, _DAle_, Вы писали:

_DA>Мне вот интересно, а что было понятно из строчки на джаве, если бы я не привел строку на DSL?


Понятно, что вызывается функция addJProp. Судя по названию — добавление какого-то свойства. Лезем внутрь и смотрим, что там.

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

_DA>Сразу стало понятно, что после строковых констант идет описание выражения в польской нотации? Сразу было понятно, что price — это функционал с двумя параметрами, которому передаются на вход первый и третий параметр создаваемого функционала?


Чего? "Сразу понятно", угу. Может я тупой, но лично мне вся DSL-строка кажется полностью контр-интуитивной. Чего она делает, я до сих пор не понимаю.
Re[31]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 05.01.13 07:38
Оценка:
Здравствуйте, Mamut, Вы писали:

WH>>Нет. Я делаю вывод о том, что без ДСЛ у тебя было бы не 5К строк прикладной логики, а 50К.

M>Неверный вывод.
Почему?

M>Что именно доказано по моей ссылке?

То, что код на ДСЛ на порядок меньше и как следствие исправить его на порядок проще, чем код на библиотеке.

M>По моей ссылке написано, что компилятор генерит столько-то строк. Из этого никак не следует, что в изначальной библиотеке было 50к строк. Это во-первых.

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

M>Во-вторых, изменив DSL нам все равно пришлось перелопачивать все места, где он используется.

А при изменении библиотеки тебе бы не пришлось переписывать все места, где эта библиотека используется?
А про то, что таких мест тупо в 10 раз больше чем случае с ДСЛ ты не забыл?
Те в случае с библиотекой процесс изменения прикладной логики потребовал бы минимум в 10 раз больше ресурсов.

M>Ты банально не представляешь себе библиотеки в виде черных ящиков?

Если мы говорим про изменения синтаксиса и семантики ДСЛ то интерфейс библиотеки которая делает то же самое будет изменен гарантировано.

M>Что ты там говорил? При изменении DSL надо будет менять что-то там меньше? Нам пришлось править все места, где этот DSL использовался. Как-то твоя сказочка про «править меньше» не сработала.

Если бы вы использовали библиотеку, то у вас было бы в 10 раз больше таких мест.
И вы убили бы в 10 раз больше времени на то чтобы их исправить.

M>Итак, DSL используется в сотне мест, вызов библиотеки используется в сотне мест.

По твоей ссылке кода получается в 10 раз больше.
Так что умножай на 10.

M>Дададада. Мы тебе верим, потому что ты не способен привести ни единого примера, а опыт других людей — ложь.

Опыт? Да ты сам себе противоречишь.
Я могу показать тебе генератор парсеров, в котором я это проделал.
Легче станет?
Хотя я уже знаю твой ответ: Это не промышленный ДСЛ и ничего не доказывает.

M>И то, что можно изменять библиотеки, не изменяя интерфейса библиотеки или не выкидывая весь код, — это тоже ложь. Естественно, ибо also sprach Wolfhound ©™.

Если тебя послушать то получается, что библиотеки это всё могут, а ДСЛ нет? Я тебя правильно понял?
При этом объективно ДСЛ это могут лучше.
Просто по тому, что они не содержат никаких завязок на реализацию. А в тех случаях когда не получается прикладного кода на порядок другой меньше и исправить его на порядок другой проще.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 05.01.13 07:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Интерфейс ДСЛ это синтаксис и семантика.


Интерфейс библиотеки это только семантика.

WH>И они не содержат никаких завязок, на то во что этот ДСЛ будет скомпилирован.


И она не содержит никаких завязок, на то как эта библиотека будет реализована.
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 05.01.13 07:51
Оценка:
M>>Я с ними работаю, и привожу конкретные примеры. В отличие от тебя.
WH>Которые подтверждают мои слова и опровергают твои.

Твои слова они не подтверждают.

M>>Ага-ага. Что-то мне подсказывает, что к DSLям ты имеешь еще меньшее отношение, чем я. Иначе за последние два года пафосного вещания про них ты бы откопал и примеры и исходники. Но их как не было, так и нет и не предвидится.

WH>Так было. И не раз.

Где. Хоть одну ссылку. Потому что только в этом топике, показательно, что ты юлишь, как уж на сковороде, лишь бы не приводить ни одного примера вообще: http://rsdn.ru/forum/philosophy/5019509.1
Автор: AlexRK
Дата: 04.01.13


WH>А исходников тех ДСЛ код, на которых исполнился в продакшене сотни миллионов, если не миллиарды раз у меня сейчас просто нет.


Дадада. Ох уж эти сказки, ох уж эти сказочники ©


dmitriid.comGitHubLinkedIn
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 05.01.13 07:57
Оценка:
WH>>>Нет. Я делаю вывод о том, что без ДСЛ у тебя было бы не 5К строк прикладной логики, а 50К.
M>>Неверный вывод.
WH>Почему?

А подумать?

M>>Что именно доказано по моей ссылке?

WH>То, что код на ДСЛ на порядок меньше и как следствие исправить его на порядок проще, чем код на библиотеке.

Если код с использованием библиотеки выглядит как addRule(a,b,c), а код на DSL как rule a b c, то править одинаково.


M>>По моей ссылке написано, что компилятор генерит столько-то строк. Из этого никак не следует, что в изначальной библиотеке было 50к строк. Это во-первых.

WH>Так я и не про библиотеку говорю.
WH>И я тебе уже не раз это сказал.
WH>Я говорю про тот код, который будет написан с использованием библиотеки.

Из этого так же никак не следует, что его будет написано 50к строк такого кода.

M>>Во-вторых, изменив DSL нам все равно пришлось перелопачивать все места, где он используется.

WH>А при изменении библиотеки тебе бы не пришлось переписывать все места, где эта библиотека используется?
WH>А про то, что таких мест тупо в 10 раз больше чем случае с ДСЛ ты не забыл?

Эта фраза принадлежит тебе, и доказательств этой фразы вот уже который год ждем не дождемся.
Ниже я устал, и местами спускаюсь на уровень твоей аргументации, ты уж извини.

WH>Те в случае с библиотекой процесс изменения прикладной логики потребовал бы минимум в 10 раз больше ресурсов.


Лож ©

M>>Ты банально не представляешь себе библиотеки в виде черных ящиков?

WH>Если мы говорим про изменения синтаксиса и семантики ДСЛ то интерфейс библиотеки которая делает то же самое будет изменен гарантировано.

И?


M>>Что ты там говорил? При изменении DSL надо будет менять что-то там меньше? Нам пришлось править все места, где этот DSL использовался. Как-то твоя сказочка про «править меньше» не сработала.

WH>Если бы вы использовали библиотеку, то у вас было бы в 10 раз больше таких мест.
WH>И вы убили бы в 10 раз больше времени на то чтобы их исправить.

Лож ©


M>>Итак, DSL используется в сотне мест, вызов библиотеки используется в сотне мест.

WH>По твоей ссылке кода получается в 10 раз больше.
WH>Так что умножай на 10.

Лож ©

M>>Дададада. Мы тебе верим, потому что ты не способен привести ни единого примера, а опыт других людей — ложь.

WH>Опыт? Да ты сам себе противоречишь.
WH>Я могу показать тебе генератор парсеров, в котором я это проделал.

А, да. Единственный DSL, из «десятков каждый день», который ты способен предоставить. Видимо потому что это — единственный DSL, который хоть как-то подтверждает твои слова. Или единственный DSL, который ты вообще написал. Или единственный, который вообще используется.

M>>И то, что можно изменять библиотеки, не изменяя интерфейса библиотеки или не выкидывая весь код, — это тоже ложь. Естественно, ибо also sprach Wolfhound ©™.

WH>Если тебя послушать то получается, что библиотеки это всё могут, а ДСЛ нет? Я тебя правильно понял?

Нет, неправильно

WH>При этом объективно ДСЛ это могут лучше.


О да, объективно. Объективные вещи имеют в основе аргументацию лучше, чем «лож», «неправда», и «у меня на компьютере работают».

WH>Просто по тому, что они не содержат никаких завязок на реализацию. А в тех случаях когда не получается прикладного кода на порядок другой меньше и исправить его на порядок другой проще.


DSL перестал быть прикладным кодом? Это в какой момент?


dmitriid.comGitHubLinkedIn
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 05.01.13 08:08
Оценка:
M>>Если у тебя есть возможность менять компилятор DSL, значит у тебя есть возможность менять библиотеку Почему внезапно ты пишешь, что библиотеку менять сложнее или нельзя ее поменять без изменения интерфейса?
WH>1) Кода на ДСЛ будет на порядок другой меньше.

Далеко не факт. Зависит как от библиотеки так и от DSLя

WH>а. Нужно будет переделать меньше клиентского кода.


Далеко не факт

WH>б. Компилятор ДСЛ может давать внятные сообщения с подсказками.


Может, но это не обязательно. Более того, компилятор может давать не менее внятные сообщения и для библиотеки

WH>в. Можно просто сделать рефакторинг который будет переделывать старый код в новый. Если конечно кода очень много.


Внезапно можно просто сделать рефакторинг для вызовов библиотеки. В частности потому что существующие средства это уже позволяют. Откуда возьмутся средства для простого рефакторинга DSL известно только известным сказочникам.

WH>2) ДСЛ намного лучше скрывает реализацию. Просто по тому что вычислительная модель языка на котором написана библиотека не путается под ногами.


Как там было в примерах? a.Insert(b) против insert b into a? Каким образом реализован этот самый insert вызывающего не волнует от слова вообще. Где там что путается под ногами неизвестно.


dmitriid.comGitHubLinkedIn
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 05.01.13 11:51
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>А синтаксис задан языком, в котором эта библиотека используется.

WH>И ты даже если очень захочешь, не сможешь его изменить.

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

WH>1)Она завязаны на вычислительную модель языка.

WH>2)Мы не можем превратить цепочку вызовов LINQ to Objects в кучу циклов.

В принципе очевидно, что вещи, которые можно сделать только на уровне компилятора, на уровне языка недоступны.

Но это ортогонально проблеме "DSL vs. не-DSL". Если желаете делать оптимизации на уровне компилятора, берите модульный компилятор и ковыряйте его как угодно. В том числе "превращайте цепочку вызовов LINQ to Objects в кучу циклов". В чем проблема? Причем тут DSL?
Re[14]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 05.01.13 12:01
Оценка:
Здравствуйте, _DAle_, Вы писали:

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


_DA>>>Мне вот интересно, а что было понятно из строчки на джаве, если бы я не привел строку на DSL?

ARK>>Понятно, что вызывается функция addJProp. Судя по названию — добавление какого-то свойства. Лезем внутрь и смотрим, что там.

_DA>То что это "объявление функционала"/"добавление свойства" я и так сказал. Внутри там будет парсинг массива, маппинг каких-то одних объектов на другие, и добавление получившегося в результате объекта в какой-то контейнер. Не думаю, что станет сильно понятней, чем "добавление свойства".


Алгоритм по крайней мере понятен будет.

_DA>>>Сразу стало понятно, что после строковых констант идет описание выражения в польской нотации? Сразу было понятно, что price — это функционал с двумя параметрами, которому передаются на вход первый и третий параметр создаваемого функционала?


ARK>> Чего? "Сразу понятно", угу. Может я тупой, но лично мне вся DSL-строка кажется полностью контр-интуитивной. Чего она делает, я до сих пор не понимаю.


_DA>Хм, неужели действительно непонятно?


Так точно.

Ок, избавимся от предметной области:
_DA>
_DA>f(x, y, z) = g(x, z) IF h(x, y, z);
_DA>

_DA>Грубо говоря, объявляется новая функция f с тремя параметрами, которая будет равняться функции g(x, z) при условии, что h(x, y, z) не равно null. В ином случае ее значение будет равняться null. Так понятней?

Нда, жесть. Без вашего описания по виду функции я бы не догадался.

Лично мне было бы понятно что-то вроде:

f = function(x, y, z)
{
  return (h(x, y, z) != null) ? g(x, z) : null;
}


или

function f(x, y, z) is
  when h(x, y, z) is not null => g(x, z)
  else null;


ну или еще что-то такое.
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 05.01.13 12:16
Оценка:
Здравствуйте, AlexRK, Вы писали:

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

ARK>Но в целом верно. Синтаксис задан языком, изменить его нельзя. И это скорее плюс.
Необходимость написать кучу лишнего кода плюс несомненный.

ARK> В принципе очевидно, что вещи, которые можно сделать только на уровне компилятора, на уровне языка недоступны.

Ну, хоть это тебе понятно.

ARK>Но это ортогонально проблеме "DSL vs. не-DSL". Если желаете делать оптимизации на уровне компилятора, берите модульный компилятор и ковыряйте его как угодно. В том числе "превращайте цепочку вызовов LINQ to Objects в кучу циклов". В чем проблема? Причем тут DSL?

Я тебе просто простой пример привел. Чтобы ты понял.
Но обычно семантика кода на ДСЛ не имеет ничего общего с семантикой базового языка.
Максимум что ты можешь сделать, чтобы приблизится к выразительности ДСЛ это сгенерировать вызовами метода код и натравить на него интерпретатор.
Но и в этом случае у тебя просто ДСЛ. Кривой и тормозной ДСЛ.

Еще можно взять, как ты говоришь "модульный компилятор" и с его помощью переписать код так чтобы он делал не то, что он должен делать по правилам языка. Но это будет еще ближе к нормальным ДСЛ. Но очень криво и трудоёмко.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 05.01.13 12:49
Оценка:
WH>>>1) Кода на ДСЛ будет на порядок другой меньше.
M>>Далеко не факт. Зависит как от библиотеки так и от DSLя
WH>По твоей ссылке ровно на порядок. И это далеко не придел.

По моеуй ссылке нигде не говорится, что изначально кода было в 10 раз больше. Это твои бурные фантазии. Например тут же рядом
Автор: _DAle_
Дата: 04.01.13
в примерах DSL, от которого нет никакого явного в 10 раз меньше кода. Но тебе ж наплевать. Ты предпочитаешь видеть только то, что тебе хочется видеть.

WH>>>а. Нужно будет переделать меньше клиентского кода.

M>>Далеко не факт
WH>Это как? Если у нас кода в 10 раз больше, то и переделывать нужно в 10 раз больше.

Осталось доказать утверждение про в 10 раз больше кода, но ведь ты неспособен ни на одно доказательство. Где примеры твоих DSLей, а?

WH>>>б. Компилятор ДСЛ может давать внятные сообщения с подсказками.

M>>Может, но это не обязательно. Более того, компилятор может давать не менее внятные сообщения и для библиотеки
WH>Не может. Всё на что способен компилятор языка общего назначения это сказать, что нет такого метода.

Или неправильный тип. Или неправильное количество аргументов. В общем — достаточно для того, чтобы провести внятный рефакторинг. На что способен компилятор DSLя?

M>>Внезапно можно просто сделать рефакторинг для вызовов библиотеки. В частности потому что существующие средства это уже позволяют. Откуда возьмутся средства для простого рефакторинга DSL известно только известным сказочникам.

WH>Лож. Если интерфейс изменился серьезнее чем переименование имени метода, то никаким существующим способом ты ничего не сделаешь.

О да, а с DSLем никаких проблем, ага-ага. Хватит лапшу на уши вешать.


M>>Как там было в примерах? a.Insert(b) против insert b into a? Каким образом реализован этот самый insert вызывающего не волнует от слова вообще. Где там что путается под ногами неизвестно.

WH>В моих примерах такого не было.
WH>У меня примеры немного другие.
WH>http://rsdn.ru/Forum/Message.aspx?mid=4694354&amp;only=1
Автор: WolfHound
Дата: 09.04.12


И у нас примеры другие
Автор: _DAle_
Дата: 04.01.13
. Но я уже говорил, что опыт других людей для тебя «лож» ©™


dmitriid.comGitHubLinkedIn
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 05.01.13 13:20
Оценка:
Здравствуйте, Mamut, Вы писали:

M>По моеуй ссылке нигде не говорится, что изначально кода было в 10 раз больше. Это твои бурные фантазии.

Обычно генерируют код не сильно отличающийся от рукописного.

M>Например тут же рядом
Автор: _DAle_
Дата: 04.01.13
в примерах DSL, от которого нет никакого явного в 10 раз меньше кода. Но тебе ж наплевать. Ты предпочитаешь видеть только то, что тебе хочется видеть.

Ну и что?
Бывают случаи, когда ДСЛ не дает существенного сокращения.
Например, если нужно складывать два Int32, то почти любой язык с этим справится, так что никаким ДСЛ ни буквы не сократить.

M>Осталось доказать утверждение про в 10 раз больше кода, но ведь ты неспособен ни на одно доказательство. Где примеры твоих DSLей, а?

В том сообщении, на которое ты отвечаешь.
Но ты их в упор не видишь.

M>Или неправильный тип. Или неправильное количество аргументов. В общем — достаточно для того, чтобы провести внятный рефакторинг. На что способен компилятор DSLя?

Он способен распознать старый синтаксис.
И сказать, что нужно переделать.
А в сочетании с ИДЕ еще и quick fix сделать.

M>О да, а с DSLем никаких проблем, ага-ага. Хватит лапшу на уши вешать.

См выше.

M>И у нас примеры другие
Автор: _DAle_
Дата: 04.01.13
. Но я уже говорил, что опыт других людей для тебя «лож» ©™

Так я и не о его примерах говорю.
Я говорю про более сложные случаи.
Например, пример из моего поста сейчас генерирует совершенно другой код.
Сделано это было без изменения синтаксиса.
Параллельно Влад в другом бранче менял синтаксис на более человечный.
После чего спокойно смержились. И это при том, что пишем на языке общего назначения. Хотя бутстрапа становится всё больше.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: _DAle_ Беларусь  
Дата: 05.01.13 13:53
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Так можно же привести пример конструкции, которая более лаконична, чем код на джаве, нет?


Ок, я тут нашел в репозитории старый код на джаве и тот вариант, на который его изначально переписали. Конечно, это далеко не одна конструкция, но там кто-то просил большой пример Это практически код некоторого очень простого модуля в системе. На практике преимущество DSL будет куда больше.
DSL:
REQUIRE System, I18n, Currency;

CLASS Сountry 'Страна' : Named, MultiLanguageNamed;

TABLE countryDate(Country, DATE);
TABLE country(Country);

nameOriginCountry 'Наименование (ориг.)' = DATA ISTRING[50] (Country) IN baseGroup; 
sidCountry 'Код страны' = DATA INTEGER (Country) IN baseGroup; 
countrySID 'Страна' (sid) =  GROUP UNIQUE country BY sidCountry(country);

sidOrigin2Country 'Код 2 знака (ориг.)' = DATA STRING[2] (Country) IN baseGroup MINCHARWIDTH 15; 
sidOrigin3Country 'Код 3 знака (ориг.)' = DATA STRING[3] (Country) IN baseGroup MINCHARWIDTH 15; 

currencyCountry 'Валюта' = DATA currency (Country); 
nameCurrencyCountry 'Валюта' (country) = name(currencyCountry(country)) IN baseGroup PREFCHARWIDTH 10;

isDayOffCountryDate 'Выходной' = DATA BOOLEAN (Country, DATE) IN baseGroup; 
defaultCountry 'Страна по умолчанию' = DATA Country (); 
nameDefaultCountry 'Страна по умолчанию' () = name(defaultCountry()) PREFCHARWIDTH 30; 

FORM daysOffForm 'Выходные дни' 
OBJECTS Country 'Страна' INIT PANEL, day=DATE 'День', newDate=DATE 'Дата' FIXED PANEL
PROPERTIES(country) nameOriginCountry, sidCountry, sidOrigin2Country, sidOrigin3Country, nameCurrencyCountry
PROPERTIES OBJVALUE(day), isDayOffCountryDate(country, day), OBJVALUE(newDate), isDayOffCountryDate(country, newDate)
FILTERS isDayOffCountryDate(country, day)
;

NAVIGATOR {
    catalogs {
        ADD daysOffForm;
    }
}


Java:
private ConcreteCustomClass Сountry;
private LP isDayOffCountryDate;
  
public initClasses() {
    Сountry = addConcreteClass("Сountry", "Страна", baseClass.Named, BL.getModule("I18n").getClassByName("MultiLanguageNamed"));
}

public initTables() {
        addTable("countryDate", Country, DateClass.instance);
        addTable("country", Country);
}

public initProperties() {
        LP nameOriginCountry = addDProp(baseLM.baseGroup, "nameOriginCountry", getString("Наименование (ориг.)"), InsensitiveStringClass.get(50), Country);        
        LP sidCountry = addDProp(baseLM.baseGroup, "sidCountry", "Код страны", IntegerClass.instance, Country);
        LP countrySID = addAGProp("CountrySID", "Страна", sidCountry);

        sidOrigin2Country = addDProp(baseLM.baseGroup, "sidOrigin2Country", "Код 2 знака (ориг.)", StringClass.get(2), Country);
        sidOrigin2Country.setMinimumCharWidth(15);
        sidOrigin3Country = addDProp(baseLM.baseGroup, "sidOrigin3Country", "Код 3 знака (ориг.)", StringClass.get(3), Country);
        sidOrigin3Country.setMinimumCharWidth(15);

        currencyCountry = addDProp(baseLM.privateGroup, "currencyCountry", "Валюта", BL.getModule("Currency").getClassByName("Сurrency"), Сountry);
        nameCurrencyCountry = addJProp(baseLM.baseGroup, "nameCurrencyCountry", "Валюта", baseLM.name, currencyCountry, 1);
        nameCurrencyCountry.setPreferredCharWidth(10);

        isDayOffCountryDate = addDProp(baseLM.baseGroup, "isDayOffCountryDate", "Выходной", LogicalClass.instance, Country, DateClass.instance);
        defaultCountry = addDProp("defaultCountry", "Страна по умолчанию", Сountry);
        nameDefaultCountry = addJProp("nameDefaultCountry", "Страна по умолчанию", baseLM.name, defaultCountry);
}

public initNavigators()
{
        addFormEntity(new DaysOffFormEntity(catalogElement, "daysOffForm"));
}

private class DaysOffFormEntity extends FormEntity {
        public DaysOffFormEntity(NavigatorElement parent, String sID) {
            super(parent, sID, "Выходные дни");

            ObjectEntity objCountry = addSingleGroupObject(country, "Страна");
            objCountry.groupTo.initClassView = ClassViewType.PANEL;

            ObjectEntity objDays = addSingleGroupObject(DateClass.instance, "День");

            ObjectEntity objNewDate = addSingleGroupObject(DateClass.instance, "Дата");
            objNewDate.groupTo.setSingleClassView(ClassViewType.PANEL);

            addPropertyDraw(objCountry, baseLM.baseGroup);
            addPropertyDraw(objDays, baseLM.objectValue);
            addPropertyDraw(isDayOffCountryDate, objCountry, objDays);
            addPropertyDraw(objNewDate, baseLM.objectValue);
            addPropertyDraw(isDayOffCountryDate, objCountry, objNewDate);

            addFixedFilter(new NotNullFilterEntity(addPropertyObject(isDayOffCountryDate, objCountry, objDays)));
        }
}
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 05.01.13 15:46
Оценка:
WH>>>Обычно генерируют код не сильно отличающийся от рукописного.
M>>Ну-ну.
WH>Ну, так покажи, что генерирует ДСЛ по твоей ссылке и что было, когда этот код писали руками?
WH>Не можешь?

Нет, потому что NDA, естественно. Но текущий DSL мало отличается от существовавшего библиотечного кода (если найду его, выложу). Главная проблема была в том, что его не могли править не-программисты, а не то, что в нем было 50к кода. Во многом ситуация была, как тут
Автор: _DAle_
Дата: 04.01.13
, но это же «лож»©™.


M>>О чем тут тебе хором несколько человек и говорят. Утверждения, что DSL всегда, обычно, почти всегда и т.п. на порядок короче надо доказывать. С доказательствами у тебя очень и очень туго.

WH>Так полно же ссылок когда разница на порядок другой.
WH>А то, что можно просто изменить синтаксис на немного другой я с этим и не спорил.
WH>Но когда делают что-то действительно серьезное, то там получается порядок.
WH>Прямо как по твоей ссылке.

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


M>>>>Или неправильный тип. Или неправильное количество аргументов. В общем — достаточно для того, чтобы провести внятный рефакторинг. На что способен компилятор DSLя?

WH>>>Он способен распознать старый синтаксис.
M>>С чего это вдруг?
WH>С того что его этому очень просто обучить.

Да неужели? Ничего, что эта «легкость» зависит от многих факторов?

WH>>>А в сочетании с ИДЕ еще и quick fix сделать.

M>>А, ну да. Сказочки про белого бычка в виде Н2.
WH>Это не сказки. Многое из того о чем говорю уже работает.
WH>Скоро доведем до состояния, когда можно будет показывать.

Вот когда доведете, тогда и рассказывай.

M>>А, ну как всегда. Если опыт других людей тебе не нравится, ты это называешь ложью.

WH>Ложною я называю лож.

Нет, ложью ты называешь все, что тебе не нравится.

M>>Уже вдруг DSLи не такие. Естественно, если они не будут иллюстрировать твои мысли, то они обязательно будут ложью, не такими, теорией и т.п.

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

Про свою ссылку я все сказал. Ты делаешь из нее выводы, которые из нее не делаются никак. Остальная «куча ссылок» просто напросто отсутствует. Потому что никакой кучи не существует, кроме ровно двух — на твой парсер и на ту Java-библиотеку по работе с какими-то сложными данными. Ими ты любишь размахивать, как флагом. Но даже на простое «приведи примеры» ты юлишь на протяжении пяти-шести сообщений, лишь бы их не предоставлять.

WH>>>Например, пример из моего поста сейчас генерирует совершенно другой код.

WH>>>Сделано это было без изменения синтаксиса.
M>>Да неужели.
WH>А что тебя удивляет?
WH>Раньше парсер сразу строил АСТ.
WH>Теперь сначала заполняет хитрый массив интов, а потом отдельный код строит по нему АСТ.
WH>Синтаксис языка при этом не изменился.

Да неужели это к твоей ребячей радости про изменение реализации DSL и уверенности, что в библиотеках придется менять интерфейс.


WH>>>Параллельно Влад в другом бранче менял синтаксис на более человечный.

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

Вот когда будет, тогда и стоит что-то про него говорить. Например даже на описываемое тобой изменение реализации без изменение синтаксиса. Ах, да «у меня все работает на моем компьютере», да.


dmitriid.comGitHubLinkedIn
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.01.13 16:16
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


I>>А с языком именно это и надо, потому что мало людей которые скажем теорию категорий на раз понимают.

WH>Я уже вообще не понимаю, что ты сказать пытаешься.
WH>Причем тут теория категорий?

Это пример. Что бы придумать такую вещь как linq, нужна теория категорий. Разумеется, если рассматривать linq как нечто отличное от query comprehension. В другой облсти будет чтото другое.
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 06.01.13 17:09
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну, если честно, то, на мой взгляд, объем и сложность сопоставимы, особенно если джавовский вариант подрихтовать на предмет удобных инициализаторов, дабы избежать ненужных локальных переменных.


А на мой первый взгляд, оперировать понятиями CLASS, TABLE, OBJETCS, GROUPS, PROPERTIES, FILTERS гораздо лучше, чем понятиями DProp, AGProp, JProp, SingleGroupObject, NotNullFilterEntity.

Да, fluent интерфейс тут мог бы помочь, но его проектирование, разработка и поддержка не легче проектирования, разработки и поддержки отдельного DSL. Ибо это тоже DSL, только с очень ограниченным синтаксисом.
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 06.01.13 17:17
Оценка:
Здравствуйте, AlexRK, Вы писали:

_DA>>То что это "объявление функционала"/"добавление свойства" я и так сказал. Внутри там будет парсинг массива, маппинг каких-то одних объектов на другие, и добавление получившегося в результате объекта в какой-то контейнер. Не думаю, что станет сильно понятней, чем "добавление свойства".


ARK>Алгоритм по крайней мере понятен будет.


Алгоритм чего? Реализации? Это совершенно неинтересно при чтении вышележащего слоя логики. Где важно быстро понять, что алгоритм именно логики.

ARK>>> Чего? "Сразу понятно", угу. Может я тупой, но лично мне вся DSL-строка кажется полностью контр-интуитивной. Чего она делает, я до сих пор не понимаю.

_DA>>Хм, неужели действительно непонятно?
ARK>Так точно.

Это с непривычки. Видимо не использовали языков в которых есть подобный способ записи условий.

ARK>Лично мне было бы понятно что-то вроде:


  Скрытый текст
ARK>
ARK>f = function(x, y, z)
ARK>{
ARK>  return (h(x, y, z) != null) ? g(x, z) : null;
ARK>}
ARK>


ARK>или


ARK>
ARK>function f(x, y, z) is
ARK>  when h(x, y, z) is not null => g(x, z)
ARK>  else null;
ARK>


ARK>ну или еще что-то такое.


Насколько я понял, это не аналог, фишка в том, что функция определяется только в случае когда h(x, y, z) is not null, если это так, то синтаксис вполне нормальный. В вашем же случае функция есть всегда, но иногда возвращает null.
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 06.01.13 18:14
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>А на мой первый взгляд, оперировать понятиями CLASS, TABLE, OBJETCS, GROUPS, PROPERTIES, FILTERS гораздо лучше, чем понятиями DProp, AGProp, JProp, SingleGroupObject, NotNullFilterEntity.


Чем лучше?

Z>Да, fluent интерфейс тут мог бы помочь, но его проектирование, разработка и поддержка не легче проектирования, разработки и поддержки отдельного DSL.


Даже не смешно.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AlexRK  
Дата: 06.01.13 19:27
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Алгоритм чего? Реализации? Это совершенно неинтересно при чтении вышележащего слоя логики. Где важно быстро понять, что алгоритм именно логики.


Ну, тут грань довольно тонкая...

Z>Это с непривычки. Видимо не использовали языков в которых есть подобный способ записи условий.


Вполне возможно.

Z>Насколько я понял, это не аналог, фишка в том, что функция определяется только в случае когда h(x, y, z) is not null, если это так, то синтаксис вполне нормальный. В вашем же случае функция есть всегда, но иногда возвращает null.


Ну вот видите, уже неочевидность.

Но мне кажется, что я понял правильно, иначе что бы могло значить "В ином случае ее значение будет равняться null".
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: _DAle_ Беларусь  
Дата: 06.01.13 19:52
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Насколько я понял, это не аналог, фишка в том, что функция определяется только в случае когда h(x, y, z) is not null, если это так, то синтаксис вполне нормальный. В вашем же случае функция есть всегда, но иногда возвращает null.


Скажем так, это примерно аналог. Только первый вариант c return зачем-то имитирует императивные языки в отсутствие contol flow, а второй может и был бы нормальным, если бы у нас процентов 80 вычислительной логики не описывалось бы подобными инструкциями, и было бы true/false/null, а не true/null.

Цели сделать синтаксис близким к каким-то распространенным языкам (тем более императивным) не было, потому что платформа в основном предназначена для тех, кто их все равно не знает. Это должен быть примерно уровень 1C/ABAP программистов и толковых бизнес-аналитиков.
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 06.01.13 22:23
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Да, fluent интерфейс тут мог бы помочь, но его проектирование, разработка и поддержка не легче проектирования, разработки и поддержки отдельного DSL. Ибо это тоже DSL, только с очень ограниченным синтаксисом.


А что с чем сравнивается, современные IDE с мега-супер-шедевром от WH лет через десять ?
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 07.01.13 06:59
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>А что с чем сравнивается, современные IDE с мега-супер-шедевром от WH лет через десять ?


Я сейчас сравнивал с fluent на C# с DSL на текущей версии Nemerle. С моим небольшим (по сравнению с WH) опытом на этом языке я предпочту написать простенький DSL, чем городить кучу интерфейсов и их реализаций для fluent. У реализации DSL будет прямее логика, проще и легче для поддержки код.
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 07.01.13 09:23
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Я сейчас сравнивал с fluent на C# с DSL на текущей версии Nemerle. С моим небольшим (по сравнению с WH) опытом на этом языке я предпочту написать простенький DSL, чем городить кучу интерфейсов и их реализаций для fluent. У реализации DSL будет прямее логика, проще и легче для поддержки код.


что, немерл уже научился автоматически макры рефакторить ?
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 07.01.13 14:02
Оценка:
Здравствуйте, Ikemefula, Вы писали:

Z>>Я сейчас сравнивал с fluent на C# с DSL на текущей версии Nemerle. С моим небольшим (по сравнению с WH) опытом на этом языке я предпочту написать простенький DSL, чем городить кучу интерфейсов и их реализаций для fluent. У реализации DSL будет прямее логика, проще и легче для поддержки код.


I>что, немерл уже научился автоматически макры рефакторить ?


Нет, но для нормального рефакторинга флюента (с изменением синтаксиса) автоматических средств все равно будет недостаточно. А менять синтаксис в DSL будет даже проще.
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 10.01.13 10:13
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Я сейчас сравнивал с fluent на C# с DSL на текущей версии Nemerle. С моим небольшим (по сравнению с WH) опытом на этом языке я предпочту написать простенький DSL, чем городить кучу интерфейсов и их реализаций для fluent. У реализации DSL будет прямее логика, проще и легче для поддержки код.


С языком получается примерно так — пишешь первую версию, отдаешь разрабам, они быстро плодят в десятки раз больше кода, чем ты этого ожидал. Ты меняешь чтото в языке и тут надо обладать достаточной харизмой что бы убедить разрабов переписать их код.
Вобщем обычно ни у кого не хватает достаточной харизмы уже к третьей итерации + на каждые изменения разрабам нужно долго втыкать в код, поскольку у них нет той степени понимания вычислительной модели и разных требований-ограничений.
В случае с библиотекой можно добиться того, что бы код рефакторился без привлечения самих разрабов, главное что бы они тесты реализовали в самой первой версии.
The animals went in two by two, hurrah, hurrah...
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 10.01.13 10:17
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Нет, но для нормального рефакторинга флюента (с изменением синтаксиса) автоматических средств все равно будет недостаточно. А менять синтаксис в DSL будет даже проще.


За счет чего проще ? Изоляция-переколбас-инлайн работает на раз с флюент интерфейсом. А вот непонятно, как это будет работать хотя бы с макросами Ну вот хотя бы изменение сигнатуры макроса, насколько легко это сделать, если скажем 10 разрабов колбасят код на старой версии макров денно и нощно ?
The animals went in two by two, hurrah, hurrah...
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.01.13 11:16
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Каким образом SQL обеспечивает ACID, можно узнать?

Очевидно, при помощи ANSI SQL конструкций begin transaction/commit transaction/rollback transaction.
Про set transaction isolation level я уж и не говорю.
M> А то в MySQL есть движок без гарантий ACID, но в нем есть SQL.
Это такой же SQL, как я — Эрик Мейер.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.01.13 11:19
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Это я писал, а не Синклер. Что конкретно тебя интересует? Ошибки, собственно, две основных — попытка сделать язык близким к естественному английскому, что привело к тяжеловесному индексу, и крайняя бедность средств декомпозиции, из-за чего копипаста в сиквеле цветет махровым цветом.

Да я тоже это уже писал и неоднократно.
Плюс ещё прочное желание игнорировать сравнительные частоты различных сценариев в угоду "ну у нас же есть многословный и корявый способ сделать то же самое".
Из-за чего скажем джойны очень долго находили себе место в языке, а для star-join, который и нужен в 99% случаев всех джойнов, и до сих пор приемлемо нормального решения нет.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 11.01.13 11:58
Оценка:
M>>Каким образом SQL обеспечивает ACID, можно узнать?
S>Очевидно, при помощи ANSI SQL конструкций begin transaction/commit transaction/rollback transaction.
S>Про set transaction isolation level я уж и не говорю.
M>> А то в MySQL есть движок без гарантий ACID, но в нем есть SQL.
S>Это такой же SQL, как я — Эрик Мейер.

Пробежался глазами по стандарту SQLя (92, правда, а не более новым). Все нормально READ UNCOMMITED isolation level и вперед.

ЗЫ. И да, судя по стандарту, там взаимное влияние развития движков на SQL и SQLя на движки. То есть да, можно сказать, что SQL гарантирует транзакции.


dmitriid.comGitHubLinkedIn
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.01.13 18:32
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Ты еще конфиг для sendmail вспомни. Вот уж где эпичный фейл DSLстроения, но немногие хорошо освоившие юзают и считают, что без него было бы хуже.


У него вообще-то фейл не в самом языке (он был как раз хорош — ты не хочешь посмотреть, как разбираются адреса вида <@a,@b:c%d!e@f>, а?), а в том, что дальше его начали применять совершенно не к месту.
И вот тут все недостатки подхода вылезли в полный рост.
The God is real, unless declared integer.
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.13 21:34
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А потом в шарп встроили специальный отдельный язык для описания деревьев выражений.


Нет специального отдельного языка. Есть тот же самый шарп, хоть и несколько ограниченный (даже ключевого слова отдельного для ЕТ не вводили). Разница не в языке, разница в том, куда дерево направляется после универсального семантического анализа — на генератор прямого IL или генератор IL генерирующего дерево.

S> Далеко не всё то, что позволено в делегате, разрешено и в expression tree.


Ну и что? В инициализаторе поля тоже не все позволено, но от этого выражения в этом инициализаторе не становятся другим языком.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.13 21:34
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Плюс ещё прочное желание игнорировать сравнительные частоты различных сценариев в угоду "ну у нас же есть многословный и корявый способ сделать то же самое".


Это вообще не лечится. Ну вот есть старая как мир задача — лимитировать выборку. У постгреса и sqlite есть идеальный, на мой вкус, для этого синтаксис — <запрос> LIMIT 123 OFFSET 456. В 2008 комитет разродился поддержкой сего в стандарте. Вот только синтаксис ... Ну я просто пример приведу:
SELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS Row, 
    FirstName, LastName, ROUND(SalesYTD,2,1) AS "Sales YTD" 
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;

Не, я так подозреваю что этот вариант будет покруче в плане возможностей, так как поддерживает какие нибудь хитро высушенные сценарии, когда ограничивать выборку надо каким нибудь череззаборным способом. Но в 99.99% случаев, когда мне просто страницу надо выдрать отсюда досюда, писать такое угробище ...
Вот и с СТЕ тоже самое — вроде и сделали какой то способ реюза кусков запроса, а результат такой что лучше бы они ничего не делали. Вот что им мешало вместо уродского синтаксиса СТЕ сделать что то похожее на линковский let?
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.01.13 10:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Нет специального отдельного языка. Есть тот же самый шарп, хоть и несколько ограниченный (даже ключевого слова отдельного для ЕТ не вводили).

По факту — есть. То, что он "тот же самый", неверно. Синтаксис — тот же. Семантика — совершенно другая.
Ключевого слова не вводили, а могли бы. Обошлись без него, магией компилятора. С ключевым словом было бы надёжнее, не требовалось бы угадывать, что требуется — делегат или ExprTree.

AVK>Разница не в языке, разница в том, куда дерево направляется после универсального семантического анализа — на генератор прямого IL или генератор IL генерирующего дерево.


AVK>Ну и что? В инициализаторе поля тоже не все позволено, но от этого выражения в этом инициализаторе не становятся другим языком.

Семантика выражений в инициализаторе поля и семантика выражений в expression tree существенно разная.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.01.13 10:08
Оценка:
Здравствуйте, AndrewVK, Вы писали:
AVK>Не, я так подозреваю что этот вариант будет покруче в плане возможностей, так как поддерживает какие нибудь хитро высушенные сценарии, когда ограничивать выборку надо каким нибудь череззаборным способом. Но в 99.99% случаев, когда мне просто страницу надо выдрать отсюда досюда, писать такое угробище ...
AVK>Вот и с СТЕ тоже самое — вроде и сделали какой то способ реюза кусков запроса, а результат такой что лучше бы они ничего не делали. Вот что им мешало вместо уродского синтаксиса СТЕ сделать что то похожее на линковский let?
Тут — понятно что. Они боятся вводить какие-то вещи "в ширину", т.к. это снижает шансы получить распространение реализации стандарта за обозримое время. Фактически, они надеются уговорить вендоров сделать только одну фичу, и хотят засунуть в эту фичу 50 пользовательских сценариев. Типа если бы они сразу предложили 50 фич, по одной на сценарий, то вендоры бы реализовали по 2-3 фичи, причём каждый свои.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.01.13 14:48
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>По факту — есть.


Неа, нету.

S> То, что он "тот же самый", неверно. Синтаксис — тот же. Семантика — совершенно другая.


Семантика в понимании компиляторостроения — та же. Даже семантический анализатор в компиляторе физически тот же, просто режим немного другой, с ограничениями. Отличается только бекенд.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.01.13 14:48
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Так и было.


Было. Но в итоге все договорились о стандарном языке.

S>И несмотря на это, NoSQL сейчас лезут как грибы после дождя.


При чем тут NoSQL? У них как правило вообще никаких языков запросов нет, только программное API.

S>Так и с DSL — для того, чтобы были единицы мегаудачных языков, должны создаваться (и умирать) тысячи кандидатов.


Аналогия в качестве доказательства логически некорректна.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.01.13 06:06
Оценка:
Здравствуйте, AndrewVK, Вы писали:


AVK>Семантика в понимании компиляторостроения — та же. Даже семантический анализатор в компиляторе физически тот же, просто режим немного другой, с ограничениями. Отличается только бекенд.

Ну, наш спор зашёл в тупик, т.к. противоречие неразрешимо. Ты считаешь бэкенд несущественным, я — существенным.
Ты считаешь важным то, как работает компилятор, я — получаемый результат. Предлагаю на этом закруглиться, т.к. по остальным пунктам противоречий нет.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.01.13 09:34
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну, наш спор зашёл в тупик, т.к. противоречие неразрешимо. Ты считаешь бэкенд несущественным, я — существенным.


Я не считаю бекенд несущественным, я не считаю что замена бекенда создает новый язык. Классический VС++, компилирующий в IL, это все тот же С++, gcc, компилирующий в LLVM, это тоже, по прежнему, С++.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.01.13 08:24
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Как ты там рядом говорил? Легкая трансформация? Вот мы трансформировали наш SQL на использование window functions вместо linit x,y. ВНЕЗАПНО оказалось, что все у всех перестало работать. А как же сказки о безболезненном изменении DSL
Автор: WolfHound
Дата: 03.01.13
?

Не очень понятно, почему оно должно прямо-таки "перестать работать". Что помешает нам иметь и то и другое сразу? Скажем, MS SQL умеет и TOP и window functions.
Далее, если мы всё же на это решились, то у нас есть парсер, способный построить AST для версии с limit x, y.
И у нас есть несложная формула для трансформации этих деревьев в window functions.
Пишем Visitor, скармливаем его результат в pretty printer, и вуаля! у нас готов конвертер из версии 1 в версию 2.
Для случая библиотеки это будет затруднительно, т.к. вопрос не сводится к простому рефакторингу, а парсера в AST у нас под рукой нету — библиотека опирается на монолитный компилятор.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 16.01.13 15:02
Оценка:
M>>Как там было в примерах? a.Insert(b) против insert b into a? Каким образом реализован этот самый insert вызывающего не волнует от слова вообще. Где там что путается под ногами неизвестно.
S>Это неудачный пример. Здесь нет никакого преимущества у DSL, т.к. код остаётся в целом таким же.
S>DSL начинают рулить там, где не удаётся сделать DRY средствами библиотеки.

С этим, как бы, никто и не спорит

[skipped чтобы не засорять экран ]

За пример спасибо. Именно такие примеры и просили приводить. Тут я с аргументами, приведенными ниже, согласен.

S>И семантика notifying бы менялась лёгким манием руки вообще без переделки клиентов.

S>Именно об этом говорит WH, когда говорит "из библиотеки торчат подробности реализации".
S>Даже если мы усложним задачу, типа "у нас есть клиенты, которые заточены на получение всех присваиваний, даже дублирующихся", то в DSL есть богатый выбор — либо ввести синтаксис notifying all, чтобы дать новое поведение по умолчанию всем, либо notifying distinct, чтобы сделать его добровольным.


dmitriid.comGitHubLinkedIn
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.01.13 18:18
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Далее, если мы всё же на это решились, то у нас есть парсер, способный построить AST для версии с limit x, y.

S>И у нас есть несложная формула для трансформации этих деревьев в window functions.

Практика показывает, что не такая уж она и несложная. Одно обязательное наличие order by во втором случае уже много вопросов ставит.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.01.13 03:49
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Практика показывает, что не такая уж она и несложная. Одно обязательное наличие order by во втором случае уже много вопросов ставит.

Ну, не то чтобы много, но ставит. С очевидным ответом — т.к. сами запросы с limit но без order by не имеют внятной семантики, то конвертер имеет право вносить порядок на своё усмотрение.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.01.13 08:40
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>С очевидным ответом — т.к. сами запросы с limit но без order by не имеют внятной семантики, то конвертер имеет право вносить порядок на своё усмотрение.


Ну вот это внесение уже не так тривиально. Собственно, по странной случайности я этим в декабре как раз занимался, поэтому точно представляю, что да как.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.01.13 09:17
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну вот это внесение уже не так тривиально. Собственно, по странной случайности я этим в декабре как раз занимался, поэтому точно представляю, что да как.

Ну, мы же имеем в виду сравнение с вариантом замены "вызовов библиотечного кода".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.01.13 10:10
Оценка:
Здравствуйте, Sinclair, Вы писали:

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


Это понятно. Только я не вижу в данном случае никакой разницы между DSL и библиотекой. Что изменить реализацию "SKIP 10 TAKE 30" в движке запросов, что поправить обработку .Skip(10).Take(30) в коде провайдера.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.01.13 10:53
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Это понятно. Только я не вижу в данном случае никакой разницы между DSL и библиотекой. Что изменить реализацию "SKIP 10 TAKE 30" в движке запросов, что поправить обработку .Skip(10).Take(30) в коде провайдера.

Я, наверное, туплю, но я так понял, что речь идёт как раз о том, как сменить представление запроса в связи с пересмотром политики партии.
То есть сравнивается переход от "SKIP 10 TAKE 30" к "where Rownumber() over (order by ID) between 11 and 40" c переходом от ".Skip(10).Take(30)" к ".Where(r => r.RowNumber(r => r.PK) <= 40 && r.RowNumber(r=>r.PK) > 10)"
(Я пишу, понятное дело, из воздуха, т.к. с трудом себе представляю, как эту адскую наркоманию оконных функций представить в виде С#).
Ну и вот первый переход хотя бы примерно понятно, как делать — имея в наличии парсер, разбирающий SKIP 10 TAKE 30 в AST и инфраструктуру по анализу этого AST. А как получить второй на традиционном pre-Roslyn компиляторе, грепе, и решарпере мне непонятно.

А замена реализации при сохранении клиентского представления кода — она, понятное дело, интереса не вызывает, т.к. выглядит одинаково с точностью до второстепенных мелочей.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.01.13 11:01
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>То есть сравнивается переход от "SKIP 10 TAKE 30" к "where Rownumber() over (order by ID) between 11 and 40" c переходом от ".Skip(10).Take(30)" к ".Where(r => r.RowNumber(r => r.PK) <= 40 && r.RowNumber(r=>r.PK) > 10)"

S>(Я пишу, понятное дело, из воздуха, т.к. с трудом себе представляю, как эту адскую наркоманию оконных функций представить в виде С#).

Такая постановка малоосмысленна, но и в этом случае, максимум, DSL и библиотека будут эквивалентны. Что более реально — специально заточенные под универсальный язык средства рефакторинга дадут 100 очков вперед сгенерированным средствам для кастомного DSL.

S>Ну и вот первый переход хотя бы примерно понятно, как делать — имея в наличии парсер, разбирающий SKIP 10 TAKE 30 в AST и инфраструктуру по анализу этого AST. А как получить второй на традиционном pre-Roslyn компиляторе, грепе, и решарпере мне непонятно.


Плагин к решарперу, если уж приспичило полностью автоматично это делать.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 19.01.13 14:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Плагин к решарперу, если уж приспичило полностью автоматично это делать.


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

Ты же понимаешь, что этот плагин будет по сложности сопоставим с DSL. Тот же анализатор и преобразователь AST. Только вдобавок еще куча кода для самого решарпера.
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.01.13 15:37
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Ты же понимаешь, что этот плагин будет по сложности сопоставим с DSL.


Какая постановка задачи, такой и результат. Это не я предлагал непременно править исходники полностью автоматично. В реальности при изменении в библиотеках один раз проводится рефакторинг в полуавтоматическом режиме. А вот с DSL да, только руками преобразователи выписывать, кроме совсем уж примитивных, которые удасться обобщить на любой DSL.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[31]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 20.01.13 07:38
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Какая постановка задачи, такой и результат. Это не я предлагал непременно править исходники полностью автоматично. В реальности при изменении в библиотеках один раз проводится рефакторинг в полуавтоматическом режиме. А вот с DSL да, только руками преобразователи выписывать, кроме совсем уж примитивных, которые удасться обобщить на любой DSL.


Предлагалось сравнить рефакторинг изменения синтаксиса в конкретном случае, когда оно действительно нужно. Оказалось, что в случае с библиотекой средств для автоматического тоже нет, а их написание является задачей сравнимой по сложности с созданием DSL.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 21.01.13 11:21
Оценка:
Здравствуйте, Tanker, Вы писали:

T>За счет чего проще ? Изоляция-переколбас-инлайн работает на раз с флюент интерфейсом. А вот непонятно, как это будет работать хотя бы с макросами Ну вот хотя бы изменение сигнатуры макроса, насколько легко это сделать, если скажем 10 разрабов колбасят код на старой версии макров денно и нощно ?


Смерджить к себе обновленную версию и пройтись по ошибкам компиляции — это стандартный алгоритм действий разраба в обоих случаях.
Re[2]: А при чем тут DSL? (в продолжении темы о языках общег
От: IT Россия linq2db.com
Дата: 28.01.13 17:55
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Боюсь, если бы Wolf Hound столкнулся с решенной таким образом задачей, которая внезапно упала бы ему на поддержку...


Резонно. Только всё равно не понятно, сколько же мы будем обсуждать преимущества и недостатки T4 vs post-compile time code generation, ломать моск об XAML, вместо использования нормального языка для разработки GUI, и использовать для ASP.NET MVC внешнюю приблуду вместо родного компилятора.
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 26.02.13 13:34
Оценка:
Здравствуйте, VladD2, Вы писали:

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


G>>>>Боюсь, если бы Wolf Hound столкнулся с решенной таким образом задачей, которая внезапно упала бы ему на поддержку (естественно, настоящим программистам DSLя было бы впадлу писать по своему дсл учебник — не быстро это как-то), и ему пришлось бы ее допиливать и развивать — Wolf Hound бы покрыл авторов такой оправданности нецензурными матюгами.


VD>>>...Матюгов мы как-то не услышали...

G>>Ситуация другая. Непохожая.
VD>На что не похожая? Ситуация 1 в 1. Документации тоже особо нет. С кодом он вынужден разбираться. Допиливать и развивать тоже придется.

Непохожая на ту, которую я привел. Никому на поддержку не валилась система с недокументированным метакодом, как это, например, произошло с Yahoo.Shops после покупки одного стартапа с веселым кодом на Common LISP, за авторством, кажется, Пола Грэхема.

VD>>>Так что практика твоих слов не подтверждает.


G>>Неправильно. Правильно так: у тебя нет практики, которая могла бы подтвердить и опровергнуть мои слова.


VD>Вообще-то пример четко опровергает твои слова.


Вообще-то пример никак не относится к моим словам. Посему ничего опровергать не может.
Re[6]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.02.13 19:21
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>>>>>Боюсь, если бы Wolf Hound столкнулся с решенной таким образом задачей, которая внезапно упала бы ему на поддержку (естественно, настоящим программистам DSLя было бы впадлу писать по своему дсл учебник — не быстро это как-то), и ему пришлось бы ее допиливать и развивать — Wolf Hound бы покрыл авторов такой оправданности нецензурными матюгами.


G>...Непохожая на ту, которую я привел. Никому на поддержку не валилась система с недокументированным метакодом, как это, например, произошло с Yahoo.Shops после покупки одного стартапа с веселым кодом на Common LISP, за авторством, кажется, Пола Грэхема.


Не надо передергивать. В Яху тупо решили избавиться от лиспа и переписать все на Труъ языке — С++. Результат той истории был провальным именно потому, что приняли глупое решение. А Грехем как раз создал вполне себе успешный проект. Там еще сам язык играет большую роль. Лисп есть лисп. Его не каждый читать может. Но это отдельная история. Если хочешь, создай отдельную тему — обсудим.

У Вольфханда же была та самая "проблема" что ты описал выше (первая цитата в этом сообщении). Ему вместо (вполне высокоуровневого) кода на ЯОН свалилась поддержка того же самого кода но на ДСЛ-е.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 27.02.13 08:14
Оценка:
Здравствуйте, VladD2, Вы писали:

G>>...Непохожая на ту, которую я привел. Никому на поддержку не валилась система с недокументированным метакодом, как это, например, произошло с Yahoo.Shops после покупки одного стартапа с веселым кодом на Common LISP, за авторством, кажется, Пола Грэхема.


VD>Не надо передергивать. В Яху тупо решили избавиться от лиспа и переписать все на Труъ языке — С++. Результат той истории был провальным именно потому, что приняли глупое решение.


А где в той истории провальный результат ? Яху купила бизнес и он взлетел. Это оно ? Или провал в отказе от лиспа ? В чем успех бизнеса мерить, в доходности или строчках кода на лиспе ?
The animals went in two by two, hurrah, hurrah...
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 27.02.13 12:12
Оценка:
VD>Там еще сам язык играет большую роль. Лисп есть лисп. Его не каждый читать может. Но это отдельная история. Если хочешь, создай отдельную тему — обсудим.

все зависит от качества ДСЛ-я и качества его реализации. Но тогда мы приходим к тому, что код на ДСЛ и обычный код имеют сходные свойства и вытекающие из него проблемы. Вопрос изучения ДСЛ-я ничем не отличается от вопрос изучения модели прикладной области и кода его описывающего.




dmitriid.comGitHubLinkedIn
Re[8]: А при чем тут DSL? (в продолжении темы о языках общег
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.02.13 16:37
Оценка:
Здравствуйте, Tanker, Вы писали:

T>А где в той истории провальный результат ?


Проект сдох после переписывание на плюсы. Это успех что ли?

T>Яху купила бизнес и он взлетел.


Куда взлетел? Где он?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: А при чем тут DSL? (в продолжении темы о языках общег
От: Tanker  
Дата: 01.03.13 18:07
Оценка:
Здравствуйте, VladD2, Вы писали:

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


T>>А где в той истории провальный результат ?


VD>Проект сдох после переписывание на плюсы. Это успех что ли?


Яху купила бизнес, а лисповый проект ей не нужен.

T>>Яху купила бизнес и он взлетел.

VD>Куда взлетел? Где он?

http://smallbusiness.yahoo.com/
The animals went in two by two, hurrah, hurrah...
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 04.03.13 22:52
Оценка:
Здравствуйте, VladD2,

G>>...Непохожая на ту, которую я привел. Никому на поддержку не валилась система с недокументированным метакодом, как это, например, произошло с Yahoo.Shops после покупки одного стартапа с веселым кодом на Common LISP, за авторством, кажется, Пола Грэхема.


VD>Не надо передергивать. В Яху тупо решили избавиться от лиспа и переписать все на Труъ языке — С++. Результат той истории был провальным именно потому, что приняли глупое решение. А Грехем как раз создал вполне себе успешный проект. Там еще сам язык играет большую роль. Лисп есть лисп. Его не каждый читать может. Но это отдельная история. Если хочешь, создай отдельную тему — обсудим.


Ты, Влад, хочешь верить в то, что окружающие тебя непонятные люди — идиоты.

А они не идиоты. В системе Грехема было 40% метакода. Нанять в америке лисперов — два пальца об асфальт. В стартапе Грехема было двое, и оба уволились. Менеджер этого проекта — не идидот, он не более чем решал задачу методом наименьших усилий.


VD>У Вольфханда же была та самая "проблема" что ты описал выше (первая цитата в этом сообщении). Ему вместо (вполне высокоуровневого) кода на ЯОН свалилась поддержка того же самого кода но на ДСЛ-е.


Выше ты писал, что ему свалилась система на обычном языке, и он переписал ее на объясненном ему коллегами дсл. Разница.
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 05.03.13 00:10
Оценка:
Здравствуйте, Mamut, Вы писали:

VD>>Там еще сам язык играет большую роль. Лисп есть лисп. Его не каждый читать может. Но это отдельная история. Если хочешь, создай отдельную тему — обсудим.


M>

M>все зависит от качества ДСЛ-я и качества его реализации. Но тогда мы приходим к тому, что код на ДСЛ и обычный код имеют сходные свойства и вытекающие из него проблемы. Вопрос изучения ДСЛ-я ничем не отличается от вопрос изучения модели прикладной области и кода его описывающего.


M>


Отличается. Ты знаешь правила чтения и синтаксис обычного кода. Это дохрена, если вдуматься. Ни одной строчке чужого дсл, ни одному слову ты доверять не можешь. Особо учитывая то, что в нем могут быть баги.
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 05.03.13 00:14
Оценка:
Здравствуйте, Gaperton, Вы писали:

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


VD>>>Там еще сам язык играет большую роль. Лисп есть лисп. Его не каждый читать может. Но это отдельная история. Если хочешь, создай отдельную тему — обсудим.


M>>

M>>все зависит от качества ДСЛ-я и качества его реализации. Но тогда мы приходим к тому, что код на ДСЛ и обычный код имеют сходные свойства и вытекающие из него проблемы. Вопрос изучения ДСЛ-я ничем не отличается от вопрос изучения модели прикладной области и кода его описывающего.


M>>


G>Отличается. Ты знаешь правила чтения и синтаксис обычного кода. Это дохрена, если вдуматься. Ни одной строчке чужого дсл, ни одному слову ты доверять не можешь. Особо учитывая то, что в нем могут быть баги.


А если принять во внимание легкое отношение к дсл местной аудитории — в нем будет просто дохрена багов и кривой семантики. Ты обладаешь ментальным сканированием? Ты можешь знать, что этому марсианину показалось логичным? Книг он на эту тему не писал — западло.
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.03.13 17:26
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Ты, Влад, хочешь верить в то, что окружающие тебя непонятные люди — идиоты.


Давай лучше ты не будешь телепатией заниматься. У тебя не очень хорошо выходит.

G>А они не идиоты. В системе Грехема было 40% метакода. Нанять в америке лисперов — два пальца об асфальт. В стартапе Грехема было двое, и оба уволились. Менеджер этого проекта — не идидот, он не более чем решал задачу методом наименьших усилий.


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

VD>>У Вольфханда же была та самая "проблема" что ты описал выше (первая цитата в этом сообщении). Ему вместо (вполне высокоуровневого) кода на ЯОН свалилась поддержка того же самого кода но на ДСЛ-е.


G>Выше ты писал, что ему свалилась система на обычном языке, и он переписал ее на объясненном ему коллегами дсл. Разница.


Переписал не он, а я (и Хардейс). А он как раз был вынужден в этом коде (на ДСЛ-е) разбираться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 06.03.13 18:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я ссылки не прикаповал, а гуглить ты и сам можешь. Это одна из известных "историй успеха" которые Грэхэм описывал в своей книге (если не ошибаюсь, в этой).


Как то так выходит, что в яхе c тобой не согласны http://smallbusiness.yahoo.com/
The animals went in two by two, hurrah, hurrah...
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.03.13 22:58
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Как то так выходит, что в яхе c тобой не согласны http://smallbusiness.yahoo.com/


Где и с чем не согласны? По подробнее, плиз. А то случайным образом данная ссылка как-то не сильно смахивает на аргумент.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 12.03.13 03:12
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>И он, осознавая беспомощность, следующую из отсутствия маневра и завязанности на одном малоадекватном человеке, ставит команде одно условие. Больше никаких метаязыков. Выбирайте любой.


Это частная проблема завязаности на неадекватного гения, а не DSL в общем. Уж насколько ООП позволяет набить шишек, но ничего, получили несколько раз граблями по лбу, выработали SOLID и ООП стал не таким страшным. И злые гении самоучки, проектировавшие мозгодробительные иерархии, сменились вменяемыми людьми, которые действительно могут это делать. DSL-строение не получило еще адекватных инструментов и практик, вроде паттернов/антипаттернов, занимаются им в основном "гении" с горящими глазами, отсюда идут описанные тобой страхи менеджеров. Менеджеры боятся — технология не идет в мейнстрим, не идет в мейнстрим — нет серьезной теории, которая должна быть основана на практике, как SOLID, а не высосана из пальца.

С другой стороны, в тех же рельсовых гемах DSL'и уже мейнстрим и их учат разрабы, а не увольняются на второй день. Неудачные эксперименты просто не находят популярности. Дефакто на это есть стандарты, стили кодирования. Пока негласные, но понятные людям, которые читают код.

G>Вот так оно, скорее всего, было. Безрадостная картина. И те манеры сторонников ДСЛ, которые мы наблюдаем сейчас на РСДН, не дают никаких поводов для оптимизма. Видите-ли, код пишется не для компьютера. Он пишется в первую очередь для другого человека. И разработка — это в первую очередь общение человека с человеком, а не уникомов с компьютерами.


Манеры на РСДН я наблюдаю очень разные. Как у сторонников так и у противников.
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 12.03.13 11:26
Оценка:
Здравствуйте, Gaperton, Вы писали:

T>>ViaWeb -> Yahoo! Stores -> Yahoo! Smallbusiness Сдох только лисп, бизнес остался.

G>Я еще не видел темы, в которой программисты не разбирались бы лучше всех . А уж в бизнесе — ваще. Программист сказал — сдох, зачит — сдох .
Ага... он настолько жив, что яха его даже продать не смогла. Хотя пыталась...
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 12.03.13 15:04
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z> DSL-строение не получило еще адекватных инструментов и практик, вроде паттернов/антипаттернов, занимаются им в основном "гении" с горящими глазами, отсюда идут описанные тобой страхи менеджеров. Менеджеры боятся — технология не идет в мейнстрим, не идет в мейнстрим — нет серьезной теории, которая должна быть основана на практике, как SOLID, а не высосана из пальца.


Понятно. Менеджеры во всем виновыты. У них иррациональные страхи. Как это знакомо .
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 12.03.13 15:37
Оценка:
Здравствуйте, WolfHound, Вы писали:

T>>>ViaWeb -> Yahoo! Stores -> Yahoo! Smallbusiness Сдох только лисп, бизнес остался.

G>>Я еще не видел темы, в которой программисты не разбирались бы лучше всех . А уж в бизнесе — ваще. Программист сказал — сдох, зачит — сдох .
WH>Ага... он настолько жив, что яха его даже продать не смогла. Хотя пыталась...

Ага. И по-твоему, если бы он был написан на LISP, то был бы гораздо живее, да?
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 12.03.13 15:45
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Понятно. Менеджеры во всем виновыты. У них иррациональные страхи. Как это знакомо .


Я этого не говорил. Видимо тебе просто захотелось это услышать.
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 12.03.13 15:51
Оценка:
Здравствуйте, Gaperton, Вы писали:

WH>>Ага... он настолько жив, что яха его даже продать не смогла. Хотя пыталась...

G>Ага. И по-твоему, если бы он был написан на LISP, то был бы гораздо живее, да?
Не переводи стрелки. Тут пытаются втирать, что проект жив. А это не правда.
Он еще трепыхается по тому, что в его названии есть слово яха. Без него он сдохнет сразу. Поэтому его никто и не купил.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 12.03.13 16:09
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Обычная логика говорит мне, что если бы этот код состоял из конструкций самоделкина, в котором я ищу ошибку, то доверять в нем нельзя ни единому слову. Например, LessThan может на деле в ряде ситуаций означать LesserOrEqual, или того хуже.


Итак, проблема все таки не в DSL, а в самоделкине? Так с этим я и не спорил.

G>Чтобы ты прочувствовал, насколько это много — скажи мне, что тебе говорит вот этот код:

G>Нет, это вовсе не язык непонятный. И программа вполне хорошо написана. Единственная проблема в том, что ты (скорее всего) читать его не умеешь — не надо путать это собственным невладением языком. Однако, эта проблема довольно просто решается — по J все-таки есть "учебники".

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

Z>>Несмотря на синтаксис C#, это обычный DSL. Чтобы его читать важнее знать домены (измерение времени и тестирование), чем ломать голову над вопросами неоднозначности синтаксиса:


G>Неужели? А вот это самый обычный JavaScript, а конкретнее — вполне обычная библиотека should.js. Выглядит куда приличнее, чем "обычный DSL". Никаких таких "доменов" знать не надо — на, полюбопытствуй.


Как это не надо? Я сходу не понимаю, что делает этот код, хотя чтение JS для меня не является проблемой. Надо знать область применения этой штуки и термины принятые там, то есть домен. Предположив, что это тестирование, я могу начать догадываться о смысле кода. И да, это DSL, вполне обычный, а не какой-то особо приличный.
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 12.03.13 19:09
Оценка:
G>>Чтобы ты прочувствовал, насколько это много — скажи мне, что тебе говорит вот этот код:
G>>Нет, это вовсе не язык непонятный. И программа вполне хорошо написана. Единственная проблема в том, что ты (скорее всего) читать его не умеешь — не надо путать это собственным невладением языком. Однако, эта проблема довольно просто решается — по J все-таки есть "учебники".

Z>Да, даже зная синтаксис я тут скорее всего ничего не пойму. Надо понимать, как такие программы пишутся, какие приемы используются. Знание синтаксиса не приблизит меня к пониманию ни на йоту. Вывод какой?


Что не надо рассказывать сказки про золотые всем понятные и самодокументируемые DSL'и, которые сразу всех спасут.


dmitriid.comGitHubLinkedIn
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 12.03.13 21:02
Оценка:
Здравствуйте, Ziaw, Вы писали:

G>>Понятно. Менеджеры во всем виновыты. У них иррациональные страхи. Как это знакомо .


Z>Я этого не говорил. Видимо тебе просто захотелось это услышать.


Не, не хочется. Я специально и вполне сознательно утрирую.

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

Так как это выстрел наощупь, возможно, он ушел в молоко. А может быть, и нет. Тебе совершенно необязательно давать мне это понять.
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 12.03.13 21:51
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>>>Ага... он настолько жив, что яха его даже продать не смогла. Хотя пыталась...

G>>Ага. И по-твоему, если бы он был написан на LISP, то был бы гораздо живее, да?
WH>Не переводи стрелки. Тут пытаются втирать, что проект жив. А это не правда.
WH>Он еще трепыхается по тому, что в его названии есть слово яха. Без него он сдохнет сразу. Поэтому его никто и не купил.

Жив он или не мертв сейчас, причина по любому не в языке, на котором он написан, дружище.
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 12.03.13 21:53
Оценка:
G>Жив он или не мертв сейчас, причина по любому не в языке, на котором он написан, дружище.

У яху достаточно денег, чтобы его хоть на ассемблере переписать. Не язык есть причина комменческого успеха стартапа Грехэма.
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 12.03.13 22:36
Оценка:
А вообще, прикольно . Весь твой пост посвящен обсуждению моей личности .

Так забавно. Ну никак не можешь ты удержать себя в технически рамках, хотя, казалось бы, такой крупный специалист . А все больше такой мелочью интересуешься, как эфемерная виртуальная личность Гапертона, у которого даже профиля гордого на русском языке нет .
Re[14]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 12.03.13 23:01
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>а вот этот DSL ты скорее всего поймешь

DG>
DG>var user = {
DG>    name: 'tj'
DG>  , pets: ['tobi', 'loki', 'jane', 'bandit']
DG>};

DG>user should have property ['name', 'tj'];
DG>user should have property 'pets'
DG> with length of(4);

DG>someAsyncTask(foo,
DG> (err, result) => 
DG>  {
DG>   should not exist err;
DG>   should exist result;
DG>   result.bar should equal foo;
DG>  }
DG>);
DG>


Не, не пойму. Потому, что это — типичный DSL самоделкина, за который надо отрубать руки. С налетом CoffyScript, причем не по делу и на ровном месте, что усугубляет. Понятно одно — автору по какой-то причине не нравится plain.js (или он его элементарно не знает), и он пишет на ровном месте, где полагается быть ровному коду, непонятную хрень.

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

Жаль, что прав на написание кода не выдают. С отпечатками пальцев тех самых рук, которые надо отрубать.

А вот should.js понять элементарно, потому, что это, во-первых
a) это plain JS, и, во-вторых...
b) ...should is an expressive, readable, test framework agnostic, assertion library for node. А не какой-то там DSL от самоделкина.

DG>В целом, ты передергиваешь.


Не, не передергиваю.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.13 23:30
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>...Началось все с того, что они честно попытались развивать все на LISP. Однако, Грэхем не смог донести до команды прелесть своего ДСЛ, и в результате легко вошел в конфликт с командой, и обозвал их идиотами. Эти самородки — они так, гхм, нетерпеливы, и резки, да. Особенно когда становятся успешными мультимиллионерами...


Обожаю читать плоды твоих телепатических способностей твоей фантазии. Живо, убедительно и красочно! Жаль только с реальностью имеет мало общего.

Реальность же была несколько банальнее. Viaweb был куплен за ~46 лимонов баксов в 1996 году. Ту часть которая была написана на Лиспе переписали на С++ только в 2003 году. То есть 7 лет проект жил на лиспе.

Причины переписывания и его последствия озвучены самим Грэхемом в том же 2003 году:
http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg02367.html

(a) The reason they rewrote it was entirely that the
current engineers didn't understand Lisp and were too
afraid to learn it.

(b) The resulting program is a new world's record case
of Greenspun's Tenth Rule. The Yahoo Store Editor called
compile at runtime on s-expressions made on the fly.
To translate this into C++ they literally had to write a
Lisp interpreter.

(c) Even then, they had to drop some features (involving
advanced uses of closures).


Другими словами основной причиной явился сам Лисп и его незнание работниками Яху.

Так что тренируй телепатор лучше.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.13 23:33
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>А Грэхем, уволившись, пишет книжки про нереальный личный success story. Которыми вдохносляется молодежь. Пионер — это ж не возраст, он же молод душой, и характерен своей инфантильностью. Аудитория огромна.


Дык, когда у тебя кто-то купит проект за 46 миллионов баксов, то ты сможешь писать историю успеха, а не кусачие сообщения на форумах.

Если бы в то же время были другие продукты делающие тоже самое, то возможно с ним можно было бы поспорить. Но в 1996-ом таких не нашлось. И судя по тому, что Яху стал переписывать все сам таковых не нашлось и через 5 лет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.13 23:42
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Я еще не видел темы, в которой программисты не разбирались бы лучше всех . А уж в бизнесе — ваще. Программист сказал — сдох, зачит — сдох .


Тот, написанный на С++ и Перле, сдох. "Yahoo! Small Business" это совсем другой продукт. Если не ошибаюсь написан в основном на Яве Яваскрипте. И на сегодня не имеет ничего выдающегося. Аналогичных сервисов хватает. 1996-ом ViaWeb был уникален и прожил сильно дольше своего С++-анлога.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.13 23:46
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Это частная проблема завязаности на неадекватного гения, а не DSL в общем.


У тебя есть особенность принимать на веру демагогию. Ты бы для начала узнал бы что Гапертон говорит правду, а не выдумывает. А то ведь и гений вполне адекватным может оказаться, и проблемы особой может не быть.

Реальность банальна. Пришла новая метла и стала мести по своему. Приняли глупейшее решение — переписать программу с Лиспа на С++. Результат оказался печальным. Потом спохватились и переписали все еще раз (вроде как на Яве).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 13.03.13 02:24
Оценка:
Здравствуйте, VladD2, Вы писали:

Z>>Это частная проблема завязаности на неадекватного гения, а не DSL в общем.


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


Конкретный случай в данной ситуации не так важен. Проблема есть, да. К сожалению она есть всегда, когда ПМ не в состоянии, в крайнем случае, сам все быстренько починить или объяснить как это сделать. В этой ситуации он теряет контроль над ситуацией, а этого никто не любит. Его понять можно и нужно, нам с ним работать. Я встречал грамотных программистов, но про грамотных ПМ я только книжки читал, так уж повезло. Обычные люди со своими головняками, их редко похвалят, если проект будет сделан в два раза быстрее, чем мог бы в теории. Зато им прищемят яйца за отклонение от плана, даже если этот план изначально предполагал экономию ресурсов в десять раз, по сравнению с другим, менее рисковым. Смысла рисковать яйцами у них нет, потому и рулить менее рисковым проектом они предпочтут всегда. То есть для них любая обкатанная технология вполне объективно лучше.

VD>Реальность банальна. Пришла новая метла и стала мести по своему. Приняли глупейшее решение — переписать программу с Лиспа на С++. Результат оказался печальным. Потом спохватились и переписали все еще раз (вроде как на Яве).


Вполне вероятно. Таких примеров масса.
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 13.03.13 10:42
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Я здесь говорю не про конкретных людей, а вообще, это из построения фраз понятно. Для примера.

Другими словами обкакать неопределенный круг людей для тебя нормально.

G>Ты мне что-то про адекватность говоришь, да? Не воспринимай лично то, что лично (к тебе) даже задумано не было, для начала. Потом рассказывай мне про адекватность.

А откуда ты выдумал, что я воспринял это лично?

G>Кто это и где меня посылает? Извини, не приметил пока. Кажется, за такое у нас на форуме положен бан, да, дружище с правами модератора?

Ты очень хорошо знаешь, как можно послать, не нарушая правил.

G>Сразу видно — ты небольшой специалист в понимании мотивов людей .

Ты действительно думаешь, что понять мотивы человека, который бегает по интернету и поливает грязью неопределенный круг людей сложно?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 13.03.13 10:45
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Так забавно. Ну никак не можешь ты удержать себя в технически рамках,

Покажи в своих сообщениях хоть одну букву на техническую тему...
Их там нет. Ни одной. Все что ты можешь это поливать грязью всех подряд.
А когда разговор действительно переходит в техническую плоскость, ты сливаешь в 100% случаев.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 13.03.13 21:23
Оценка:
Здравствуйте, VladD2, Вы писали:

G>>Я еще не видел темы, в которой программисты не разбирались бы лучше всех . А уж в бизнесе — ваще. Программист сказал — сдох, зачит — сдох .


VD>Тот, написанный на С++ и Перле, сдох. "Yahoo! Small Business" это совсем другой продукт. Если не ошибаюсь написан в основном на Яве Яваскрипте. И на сегодня не имеет ничего выдающегося. Аналогичных сервисов хватает. 1996-ом ViaWeb был уникален и прожил сильно дольше своего С++-анлога.


Влад. Совершенно не важно, на чем он написан. Дело не в этом.
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 13.03.13 22:22
Оценка:
Здравствуйте, IT, Вы писали:

G>>Метакод — он такой. Он дает "избранным" очень много власти. Слишком. И это очень нехорошо и опасно, когда такая власть оказывается в руках человека с ментальностью ребенка.


IT>Так проблема в том, что у тебя отбирают власть?


Конечно. Именно в этом.

А что, должно быть как-то по другому, да? Ну, там, земля — крестьянам, а заводы — рабочим?

Че-то другие рабочие и крестьяне на гитхабе не особо берут ваш метакод . Все больше предпочитают старый добрый С да новомодный JS.

Проблема, видать, в том, что тупые, прям как российский крестьянин (который, по Достоевскому, без веры говно), вероятно, надо как-то заставить, принудительно просветить? Ну и, конечно, для начала, у нас, менеджеров, власть отобрать, иначе щастье никак не наступит. Последнее не обсуждается.

Нет?
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 13.03.13 22:35
Оценка:
Здравствуйте, VladD2, Вы писали:

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


G>>...Началось все с того, что они честно попытались развивать все на LISP. Однако, Грэхем не смог донести до команды прелесть своего ДСЛ, и в результате легко вошел в конфликт с командой, и обозвал их идиотами. Эти самородки — они так, гхм, нетерпеливы, и резки, да. Особенно когда становятся успешными мультимиллионерами...


VD>Обожаю читать плоды твоих телепатических способностей твоей фантазии. Живо, убедительно и красочно! Жаль только с реальностью имеет мало общего.


Насколько я тебя, Влад, знаю — ты всегда про реальность знаешь лучше всех .

Вот помню, когда лет 7 назад ты здесь же доказывал мне, что С# рулез, а паттерн-матчинг и ФЯ полный отстой, не имеющий никакого отношения к реальности (а я приводил тебе в пример разные языки, и в первый раз на этом форуме упомянул Nemerle) — ты и тогда тоже гораздо круче, чем я, знал про реальность . Ну ни чудо ли .

ЗЫ: Охренеть, сколько все-таки лет я тебя знаю
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 13.03.13 22:45
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Вот помню, когда лет 7 назад ты здесь же доказывал мне, что С# рулез, а паттерн-матчинг и ФЯ полный отстой, не имеющий никакого отношения к реальности (а я приводил тебе в пример разные языки, и в первый раз на этом форуме упомянул Nemerle) — ты и тогда тоже гораздо круче, чем я, знал про реальность . Ну ни чудо ли .


G>ЗЫ: Охренеть, сколько все-таки лет я тебя знаю


Влад, не семь. По ходу, скорее десять. Какие мы уже старые, правда?
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 13.03.13 22:47
Оценка:
G>>Вот помню, когда лет 7 назад ты здесь же доказывал мне, что С# рулез, а паттерн-матчинг и ФЯ полный отстой, не имеющий никакого отношения к реальности (а я приводил тебе в пример разные языки, и в первый раз на этом форуме упомянул Nemerle) — ты и тогда тоже гораздо круче, чем я, знал про реальность . Ну ни чудо ли .

G>>ЗЫ: Охренеть, сколько все-таки лет я тебя знаю


G>Влад, не семь. По ходу, скорее десять. Какие мы уже старые, правда?


А прикинь, что будет еще через десять лет? Ничего ведь по сути не поменяется, Влад .
Re[14]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Gaperton http://gaperton.livejournal.com
Дата: 13.03.13 23:03
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


G>>Так забавно. Ну никак не можешь ты удержать себя в технически рамках,

WH> Покажи в своих сообщениях хоть одну букву на техническую тему...

Не вопрос.

http://rsdn.ru/forum/philosophy/5097810.1
Автор: Gaperton
Дата: 12.03.13


Прочти код на J.

WH>Их там нет. Ни одной. Все что ты можешь это поливать грязью всех подряд.

WH>А когда разговор действительно переходит в техническую плоскость, ты сливаешь в 100% случаев.

Бла. Бла. Бла. Вентилятор выключен, WolfHound. Извини. Сам в дерьме.
Re[14]: Нарушение правил
От: Gaperton http://gaperton.livejournal.com
Дата: 13.03.13 23:19
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


G>>Так забавно. Ну никак не можешь ты удержать себя в технически рамках,

WH> Покажи в своих сообщениях хоть одну букву на техническую тему...
WH>Их там нет. Ни одной. Все что ты можешь это поливать грязью всех подряд.
WH>А когда разговор действительно переходит в техническую плоскость, ты сливаешь в 100% случаев.

И, кстати, ты только что нарушил правила форума. Пятый пункт. Нарушение выделено.

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


Нарушение в этот раз чистое, что делать будем?
Re[15]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 14.03.13 11:12
Оценка:
Здравствуйте, Gaperton, Вы писали:

WH>> Покажи в своих сообщениях хоть одну букву на техническую тему...

G>Не вопрос.
G>http://rsdn.ru/forum/philosophy/5097810.1
Автор: Gaperton
Дата: 12.03.13

G>Прочти код на J.
Прочти код на С
  Скрытый текст
#include                                     <math.h>
#include                                   <sys/time.h>
#include                                   <X11/Xlib.h>
#include                                  <X11/keysym.h>
                                          double L ,o ,P
                                         ,_=dt,T,Z,D=1,d,
                                         s[999],E,h= 8,I,
                                         J,K,w[999],M,m,O
                                        ,n[999],j=33e-3,i=
                                        1E3,r,t, u,v ,W,S=
                                        74.5,l=221,X=7.26,
                                        a,B,A=32.2,c, F,H;
                                        int N,q, C, y,p,U;
                                       Window z; char f[52]
                                    ; GC k; main(){ Display*e=
 XOpenDisplay( 0); z=RootWindow(e,0); for (XSetForeground(e,k=XCreateGC (e,z,0,0),BlackPixel(e,0))
; scanf("%lf%lf%lf",y +n,w+y, y+s)+1; y ++); XSelectInput(e,z= XCreateSimpleWindow(e,z,0,0,400,400,
0,0,WhitePixel(e,0) ),KeyPressMask); for(XMapWindow(e,z); ; T=sin(O)){ struct timeval G={ 0,dt*1e6}
; K= cos(j); N=1e4; M+= H*_; Z=D*K; F+=_*P; r=E*K; W=cos( O); m=K*W; H=K*T; O+=D*_*F/ K+d/K*E*_; B=
sin(j); a=B*T*D-E*W; XClearWindow(e,z); t=T*E+ D*B*W; j+=d*_*D-_*F*E; P=W*E*B-T*D; for (o+=(I=D*W+E
*T*B,E*d/K *B+v+B/K*F*D)*_; p<y; ){ T=p[s]+i; E=c-p[w]; D=n[p]-L; K=D*m-B*T-H*E; if(p [n]+w[ p]+p[s
]== 0|K <fabs(W=T*r-I*E +D*P) |fabs(D=t *D+Z *T-a *E)> K)N=1e4; else{ q=W/K *4E2+2e2; C= 2E2+4e2/ K
 *D; N-1E4&& XDrawLine(e ,z,k,N ,U,q,C); N=q; U=C; } ++p; } L+=_* (X*t +P*M+m*l); T=X*X+ l*l+M *M;
  XDrawString(e,z,k ,20,380,f,17); D=v/l*15; i+=(B *l-M*r -X*Z)*_; for(; XPending(e); u *=CS!=N){
                                   XEvent z; XNextEvent(e ,&z);
                                       ++*((N=XLookupKeysym
                                         (&z.xkey,0))-IT?
                                         N-LT? UP-N?& E:&
                                         J:& u: &h); --*(
                                         DN -N? N-DT ?N==
                                         RT?&u: & W:&h:&J
                                          ); } m=15*F/l;
                                          c+=(I=M/ l,l*H
                                          +I*M+a*X)*_; H
                                          =A*r+v*X-F*l+(
                                          E=.1+X*4.9/l,t
                                          =T*m/32-I*T/24
                                           )/S; K=F*M+(
                                           h* 1e4/l-(T+
                                           E*5*T*E)/3e2
                                           )/S-X*d-B*A;
                                           a=2.63 /l*d;
                                           X+=( d*l-T/S
                                            *(.19*E +a
                                            *.64+J/1e3
                                            )-M* v +A*
                                            Z)*_; l +=
                                            K *_; W=d;
                                            sprintf(f,
                                            "%5d  %3d"
                                            "%7d",p =l
                                           /1.7,(C=9E3+
                              O*57.3)%0550,(int)i); d+=T*(.45-14/l*
                             X-a*130-J* .14)*_/125e2+F*_*v; P=(T*(47
                             *I-m* 52+E*94 *D-t*.38+u*.21*E) /1e2+W*
                             179*v)/2312; select(p=0,0,0,0,&G); v-=(
                              W*F-T*(.63*m-I*.086+m*E*19-D*25-.11*u
                               )/107e2)*_; D=cos(o); E=sin(o); } }

Ты же знаешь синтаксис С. "Это же до хрена если вдуматься"...(С) Ты.

Всё что у тебя есть это демагогия и передергивание. Ты пытаешься доказать что бывают плохие ДСЛ. Ну да. Бывают. Кто бы спорил. Но код на обычных языках тоже бывает плохой.
И при этом ты пытаешься делать вид, что код на обычных языках всегда хороший. А на ДСЛ всегда плохой.

Короче очередной слив.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[15]: Нарушение правил
От: WolfHound  
Дата: 14.03.13 11:12
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>И, кстати, ты только что нарушил правила форума. Пятый пункт. Нарушение выделено.

хъ
G>Нарушение в этот раз чистое, что делать будем?
Где? Тут чистая констатация факта.
Каждый раз, когда дело переходит в техническую плоскость, ты испаряешься.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 14.03.13 12:12
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Причины переписывания и его последствия озвучены самим Грэхемом в том же 2003 году:

VD>http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg02367.html
VD>

VD>(a) The reason they rewrote it was entirely that the
VD>current engineers didn't understand Lisp and were too
VD>afraid to learn it.

VD>Другими словами основной причиной явился сам Лисп и его незнание работниками Яху.

Сам подумай, Яха предпочла ждать 6 лет, вместо того, что бы быренько нахватать лисперов и поднять этот проект. Похоже, 6 лет простоя оказались дешевле лиспа.
The animals went in two by two, hurrah, hurrah...
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.03.13 12:48
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Влад. Совершенно не важно, на чем он написан. Дело не в этом.


По большому счету — да. Дело в том, что причина переписывания была не ДСЛ, и даже макросы. Так что телепатор тебя подвел на этот раз.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 14.03.13 12:58
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>И я могу сколько угодно чужих библиотек подрубить на CoffyScript или JS, и моя программа с их использованием все равно будет написана на одном языке, с едиными правилами чтения вызовов. Это очень важно. Для читающего чужой код, не свой. А это, в нашем мире, штатная ситуация. Понимаешь?


Ты зря цепляешься к вызовам. То, что .have это свойство объекта, который хранится в свойстве .should чего-то там еще, тебе не дает никакой полезной инфы. Кстати, в CoffeeScript тебе все равно придется ставить точки либо писать обертку, которая позволит писать с пробелами.

G>Вот, добрались наконец. Пойми, это никакой не DSL. Это обычная библиотека на JavaScript. Вещи надо называть своими именами, не надо играть терминами. И сыпать баззвордами налево и направо. Слова — это не игрушки. Это вещи, которые значат что-то.


Это embedded DSL, как выше уже заметили. Там специальные, костыльные свойства в объектах, созданные не для того, чтобы хранить нужные данные, а для того, чтобы позволить писать легко читаемый код. Эти костыли создают грамматику данного DSL.

G>Вот эта хрень с пробелами вместо точек, которую привели выше — это DSL. А should.js — библиотека на JS.


Почему оно одновременно не может быть и DSL и библиотекой?

G>Пройдись по моему чеклисту на два моих поста выше. Проверь по нему этот язык. Например, сообщество большое по этому языку?


А я знаю? Я о нем от тебя узнал.
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 14.03.13 13:11
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Тот, написанный на С++ и Перле, сдох. "Yahoo! Small Business" это совсем другой продукт. Если не ошибаюсь написан в основном на Яве Яваскрипте. И на сегодня не имеет ничего выдающегося. Аналогичных сервисов хватает. 1996-ом ViaWeb был уникален и прожил сильно дольше своего С++-анлога.


Продукт другой, а бизнес тот же.
The animals went in two by two, hurrah, hurrah...
Re[19]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 14.03.13 14:07
Оценка:
Здравствуйте, Tanker, Вы писали:

Z>>Ты зря цепляешься к вызовам. То, что .have это свойство объекта, который хранится в свойстве .should чего-то там еще, тебе не дает никакой полезной инфы. Кстати, в CoffeeScript тебе все равно придется ставить точки либо писать обертку, которая позволит писать с пробелами.


T>Наоборот, дает и очень много. Новички очень долго таращат глаза когда видят ДСЛ, очень медленно вникают, еще медленнее начинают использовать, и уж совсем медленно пробуют расширять(если вообще берутся за это).


Очень много чего дает? Ты же не говоришь новичкам, что .should возвращает объект, который имеет свойство .have. Ты им говоришь, что нужно писать точка should точка have, только так и никак иначе. Это ничем не отличается от того, что ты им скажешь, что писать надо пробел should пробел have. Конкретно эта точка — дает тебе лишь иллюзию понимания.

Еще в статически типизированных языках я бы понял, там интелисенс помогает. Но в JS-то мы его все равно не имеем.
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 14.03.13 15:27
Оценка:
Здравствуйте, Gaperton, Вы писали:

IT>>Так проблема в том, что у тебя отбирают власть?

G>Конечно. Именно в этом.
G>Нет?

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

А если серьёзно, то есть вещи, в которых, конечно же, должен принимать участие менеджер, а разработчик должен предоставить ему выбор. Например, решение на макросах — условно, месяц, решение без макросов — три. Выбирай, родной.
Если нам не помогут, то мы тоже никого не пощадим.
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 14.03.13 15:39
Оценка:
Здравствуйте, Tanker, Вы писали:

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


Таких проектов тысячи. Шаблоны в плюсах, ASP.NET MVC, T4 templates, миллиарды доморещенных кодогенераторов, System.Reflection.Emit, System.Linq.Expressions и построенные на них библиотеки вроде BLToolkit — это всё метапрограммирование. Оно вокруг нас везде и повсюду. Нужно очень сильно хотеть, чтобы этого не видеть. Примеры DLS-ей, которые используются всеми повсеместно приводить?
Если нам не помогут, то мы тоже никого не пощадим.
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 15.03.13 11:35
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Очень много чего дает? Ты же не говоришь новичкам, что .should возвращает объект, который имеет свойство .have. Ты им говоришь, что нужно писать точка should точка have, только так и никак иначе. Это ничем не отличается от того, что ты им скажешь, что писать надо пробел should пробел have. Конкретно эта точка — дает тебе лишь иллюзию понимания.


Так можно рассказать вчерашнему выпускнику инъяза который подался в ИТ — вот рецепт, пиши так, менять надо вот так, и то если он не будет заниматься разработкой а максимум будет фиксать готовый код автоматических тестов. И то в этом случае не ясно, что ему придет в голову, т.к. у него возможности английского языка будут гораздо выше shouldJS и ему нужно будет четко понимать, чего может этот shouldJS, а чего нет.
Разработчик, в отличие от гуманитария, решает задачи намного большего масштаба, все это в уме и лазить каждый раз в словарик вербов или доку слишком дорого. Ты может быть так и делаешь, а обычно дев имеет в голове четкое представление модели и сам может хорошо предсказывать, где какие методы-вызовы-возможности могут быть, а где какие не могут.
Соответственно разработчику нужно в обязательном порядке понимать всю вычислительную модель, знать что когда вычисляется, а что когда конфигуриуется, какая модель используется, какие у неё свойства, возможности и тд и тд и тд. То есть, сущности, связи, контракты, инварианты, побочные эффекты, ленивость, энергичность, издержки — это все надо надо держать в уме,т.к. от этого зависит качество решения.
Типичная реакция разработчика на конструкцию DSL .DoWhatever((x) => x + y) — посмотреть, когда вызовется лямбда, и чего будет происходить с данными вплоть до момента появляения на UI или в БД. И здесь ничего не меняется, если DSL вдруг станет другим — DoWhatever x + y. В любом случае нужно разобраться с вычислительной моделью на уровне, достаточном для решения задач с определенным качеством решения.
Теперь очень понятно удивление людей которые первый раз видят Linq — лямбды оказывается вызываются не сразу, а результат никуда не сохраняется. И меня абсолютно не удивляет тот факт, что хорошее знание хотя бы тех же Linq2Objects имеют только кандидаты с опытом от 5 лет в среднем. Остальные, проверено, пишут "по рецепту".
The animals went in two by two, hurrah, hurrah...
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 15.03.13 13:21
Оценка:
Здравствуйте, Tanker, Вы писали:

T> Зато с самопальными ДСЛ, самопальным метакодом вроде макросов, все ровно наоборот — как правило код пишется такой, что понятен ровно одному человеку, максимум одной тиме...


Ты так говоришь как-будто у тебя богатейший опыт использования МП и DSL. И весь он при этом сугубо отрицательный. Ты сам когда-нибудь участвовал в таких проектах? Или это всё твои домыслы? Думаю, что второе. Поэтому советую тебе говорить обо всём об этом либо в будущем времени, либо в условном наклонении. Тогда можно будет это обсуждать. А так это всё выглядит как беспочвенные домыслы.

T>И найти надо было не просто лисперов, а лисперов которые могли поднять тот метакод. Парадокс — если такой лиспр найдется, то с большой вероятностью ему такой проект будет неинтересен, он уже готов, он скорее убежит в другой стартап и может даже станет очередным Грэхемом().


Я не знаю в чём там у них была проблема, но в этой ветке я вижу массу разных мнений. Твоё лишь одно из них и основано оно, как видно выше, исключительно на домыслах.
Если нам не помогут, то мы тоже никого не пощадим.
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 15.03.13 15:27
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Так можно рассказать вчерашнему выпускнику инъяза который подался в ИТ — вот рецепт, пиши так, менять надо вот так, и то если он не будет заниматься разработкой а максимум будет фиксать готовый код автоматических тестов. И то в этом случае не ясно, что ему придет в голову, т.к. у него возможности английского языка будут гораздо выше shouldJS и ему нужно будет четко понимать, чего может этот shouldJS, а чего нет.

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

Не понял мысль. Ты не показал, чем .should.have для разработчика лучше should have. Вдобавок, зачем то, перешел на личности.

T>Соответственно разработчику нужно в обязательном порядке понимать всю вычислительную модель, знать что когда вычисляется, а что когда конфигуриуется, какая модель используется, какие у неё свойства, возможности и тд и тд и тд. То есть, сущности, связи, контракты, инварианты, побочные эффекты, ленивость, энергичность, издержки — это все надо надо держать в уме,т.к. от этого зависит качество решения.


Что мешает это делать с DSL?

T>Типичная реакция разработчика на конструкцию DSL .DoWhatever((x) => x + y) — посмотреть, когда вызовется лямбда, и чего будет происходить с данными вплоть до момента появляения на UI или в БД. И здесь ничего не меняется, если DSL вдруг станет другим — DoWhatever x + y. В любом случае нужно разобраться с вычислительной моделью на уровне, достаточном для решения задач с определенным качеством решения.


Именно. И там и там — либо понимать, либо делать заученные вещи по рецептам.

T>Теперь очень понятно удивление людей которые первый раз видят Linq — лямбды оказывается вызываются не сразу, а результат никуда не сохраняется. И меня абсолютно не удивляет тот факт, что хорошее знание хотя бы тех же Linq2Objects имеют только кандидаты с опытом от 5 лет в среднем. Остальные, проверено, пишут "по рецепту".


Еще большее удивление у людей появляется, когда они понимают, что то, что выглядит точно как лямбда, на самом деле ни разу не лямбда и вообще никогда не вызывается. Казалось бы, разработчики должны изгнать эту бесовскую технологию, которая все запутывает и не дает "понимать всю вычислительную модель, знать что когда вычисляется, а что когда конфигуриуется, какая модель используется, какие у неё свойства, возможности". Вот ты лично знаешь все эти вещи про провайдеры linq2x?

Может быть ты легко держишь в голове модель строящегося по экспрешенам запроса? Черта с два, максимум, ты четко понимаешь, какой запрос будет построен в итоге, а чаще всего, вместо знания у тебя наиболее вероятная догадка. Как экспрешены превращаются в SQL в кишках провайдера знают только разработчики этого провайдера. Для всех остальных — it just works.

Вобщем linq отличный контрпример твоей теории, спасибо за подсказку.
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 15.03.13 22:42
Оценка:
IT>На самом деле это всё не проблема. Те кто хотя бы пробовал использовать макросы и DSL это знают. Проблема в другом. На сегодняшний день не существует вменяемых средств для разработки DSL и решений, базирующихся на МП. Их просто нет. Ни одного. Те что есть вменяемыми назвать никак нельзя, т.к. они требуют очень неочевидного шаманства и знаний потрохов компилятора, которые изрядно попахивают сами по себе.

Почему ты выносишь эти проблемы за рамки поддержки и развития? Борьба с этим поднимет цену на поддержку и развитие весьма неиллюзорно.

Тут рядом
Автор: VladD2
Дата: 24.02.13
один из DSL-апологетов в двух подряд сообщениях говорит

Возможно все зависит от качества ДСЛ-я и качества его реализации. Но тогда мы приходим к тому, что код на ДСЛ и обычный код имеют сходные свойства и вытекающие из него проблемы....

В Яху тупо решили избавиться от лиспа и переписать все на Труъ языке — С++... Там еще сам язык играет большую роль. Лисп есть лисп. Его не каждый читать может. Но это отдельная история.


Чем этот самый гипотетический Лисп отличается от активно рекламируемых гипотетических DSLей?


dmitriid.comGitHubLinkedIn
Re[16]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 15.03.13 22:48
Оценка:
Z>Я регулярно сталкиваюсь с подобными, вполне приличными DSL от самоделкиных. Достаточно документированными и понятными, в существование которых истово не верит Мамут.

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


dmitriid.comGitHubLinkedIn
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 16.03.13 02:14
Оценка:
Здравствуйте, IT, Вы писали:

IT>Проблема в том, что инструменты для использования, которые мы имеем сейчас в сравнении с тем же ООП находятся примерно на уровне каменного века.


Не только инструменты. Еще не наработаны различные практики, мало литературы и рекомендаций. Но основное, да, инструменты.

Практически все описанные тут людьми проблемы сводятся к двум вещам: чтобы придумать хороший DSL надо быть гением и это какой-то чертов текст, который непонятно как работает, а не код, с которым легко работать. Правда легкость работы с кодом сильно преувеличивается.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 16.03.13 02:21
Оценка:
Здравствуйте, Mamut, Вы писали:


Z>>Не понял мысль. Ты не показал, чем .should.have для разработчика лучше should have. Вдобавок, зачем то, перешел на личности.


M>should.have полностью соответсвует правилам синтаксиса js. Заморочки и возможности этого синтаксиса известны и понятны любому внятному разработчику на JS. Для JS есть множество средств вплоть до браузерных, которые позволяют дебажить это дело, прототипировать «на коленке» (прямо в консоли, с автодополнением) и т.п.


M>Что у нас есть для "should have"? А нихрена нет

M>- Каковы правила синтаксиса? Что будет, если я вставлю перенос строки между should и have? Что с кавычками, можно ли использовать "? Есть или нет semicolon insertion? Где описан синтаксис анонимных функций? Да и вообще функций.
M>- Что с типами данных? Как они соотносятся с типами данных JS?

Если язык встраивается в js он будет иметь те же правила и типы, что и js. За исключением языков, которые специально делаются для изменения правил или системы типов.

M>- Какие средства есть для этого DSL? Дебаггер? Консоль? Интроспекция хоть какая-нибудь?


Source maps и любой дебагер который его понимает.

M>- Кто автор компилятора, во что это компилируется? Каково качество генерируемого кода? Где в генерируемом коде возможные узкие места по производительности?


Это вопросы перпендикулярны срезу DSL/код.

M>Это так, навскидку, в 12 ночи после пива.


Навскидку, cucumber довольно неплохо живет, несмотря на наличие всех описанных тобой проблем.
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 05:33
Оценка:
Здравствуйте, Ziaw, Вы писали:

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


Z>Не понял мысль. Ты не показал, чем .should.have для разработчика лучше should have. Вдобавок, зачем то, перешел на личности.


Не понял, где тут переход на личности. should.have это просто JS, вот и все.

T>>Соответственно разработчику нужно в обязательном порядке понимать всю вычислительную модель, знать что когда вычисляется, а что когда конфигуриуется, какая модель используется, какие у неё свойства, возможности и тд и тд и тд. То есть, сущности, связи, контракты, инварианты, побочные эффекты, ленивость, энергичность, издержки — это все надо надо держать в уме,т.к. от этого зависит качество решения.


Z>Что мешает это делать с DSL?


ДСЛ пока что редка практика, потому вопрос надо ставить так — за счет чего это легко делается в случае с ДСЛ.


T>>Теперь очень понятно удивление людей которые первый раз видят Linq — лямбды оказывается вызываются не сразу, а результат никуда не сохраняется. И меня абсолютно не удивляет тот факт, что хорошее знание хотя бы тех же Linq2Objects имеют только кандидаты с опытом от 5 лет в среднем. Остальные, проверено, пишут "по рецепту".


Z>Еще большее удивление у людей появляется, когда они понимают, что то, что выглядит точно как лямбда, на самом деле ни разу не лямбда и вообще никогда не вызывается. Казалось бы, разработчики должны изгнать эту бесовскую технологию, которая все запутывает и не дает "понимать всю вычислительную модель, знать что когда вычисляется, а что когда конфигуриуется, какая модель используется, какие у неё свойства, возможности". Вот ты лично знаешь все эти вещи про провайдеры linq2x?


Чем шире используешь, тем глубже приходится понимать. Что касается деревьев выражений, то это еще один пример ДСЛ, который демонстрирует собственно прелести ДСЛ во всей красе. Получается так, что даже инженеры от Микрософта, которым вроде как положено хорошо понимать что такое ЯП, накосячили с ДСЛ.

Z>Может быть ты легко держишь в голове модель строящегося по экспрешенам запроса? Черта с два, максимум, ты четко понимаешь, какой запрос будет построен в итоге, а чаще всего, вместо знания у тебя наиболее вероятная догадка. Как экспрешены превращаются в SQL в кишках провайдера знают только разработчики этого провайдера. Для всех остальных — it just works.


Как минимум с деревьями выражений нужно работать достаточно свободно. В кишки провайдера может и сложновато лазить, но очень классный код на LInq2EF может запросто оказаться непригодным к использованию. Что бы найти приемлемое решение, надо знать и понимать ограничения EF. С BLT вобщем ровно то же. И качественный DSL поверх всего этого ровно ничего не меняет — просто добавляет новый синтаксис, который нужно задолбить до автоматизма.

Z>Вобщем linq отличный контрпример твоей теории, спасибо за подсказку.


Наоборот. Linq и Деревья выражений показывают, что даже команде разработчиков C# хорошие ДСЛ оказались не под силу.
The animals went in two by two, hurrah, hurrah...
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 05:46
Оценка:
Здравствуйте, IT, Вы писали:

IT>Стоимость сапотра уменьшается в разы. Это я тебе не на основании домыслов говорю, а как человек, проводивший соответсвующие эксперименты на реальных проектах. Элементарная автоматизация кодирования с помощью макросов сокращает в несколько раз код, делает его понятней за счёт декларативности, выявляются и устраняются мелкие баги, которые раньше были незаметны и т.п. Поддержка такого кода тоже элементарна, т.к. не требует детального изучения макросов, а их использование тривиально.


Наверняка если макросы пишутся по некоторым соглашениям, подходам которе вырабатывались десятками раз на других проектах(и потому уже фактически не самопальные, максимум — условно самопальные) и разработкой занимается человек(команда) у которого лет 10 опыта минимум(имеется ввиду фултайм на продакшне и связаная с этим ответсвенность). Я угадал ?
Вот в таком варианте все очень правдоподобно. Теперь, если посмотреть на возраст типичного разработчика, то оказывается что ему ~27 лет, то есть, 5 лет после университета в виде фуллтайма на продакшне, а разрабы от 10 лет и выше составляют всего единицы процентов, от силы десяток, если случится чудо. При этом только они способны писать простой код и вырабатывать подходы-соглашения. То есть, если предположить, что такие разрабы равномерно распределены по всем проектам, окажется что >90% проектов вообще не имеют никаких шансов. Реально же все гораздо хуже — этим десятилетним как правило нужна значительная техническая сложность, что бы был хоть какой то интерес работать. А это значит, что такие опытные разрабы просто кучкуются вокруг интересных им проектов.
А вот в других проектах все немного иначе. Когда молодые девелоперы начинают писать самопальный ДСЛ или изобретать подход к генерации, то кроме дикого ужаса это ничего не вызывает и такие проекты дохнут быстрее чем ты успеваешь о них узнавать.
The animals went in two by two, hurrah, hurrah...
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 16.03.13 05:57
Оценка:
M>>Почему ты выносишь эти проблемы за рамки поддержки и развития? Борьба с этим поднимет цену на поддержку и развитие весьма неиллюзорно.

IT>Я никуда их не выношу. Я как раз и говорю, что это проблема. Сами по себе DSL и МП вовсе не проблема. Проблема в том, что инструменты для использования, которые мы имеем сейчас в сравнении с тем же ООП находятся примерно на уровне каменного века.


Интересно, что про это тут говорят абсолютно все, кроме, скажем, вульфхаунда, который постоянно верещит про «нада пользавацца правильными инструментами!!одинодин»


M>>Чем этот самый гипотетический Лисп отличается от активно рекламируемых гипотетических DSLей?


IT>В макросах List нет доступа к информации о типах. В результате применение таких макросов сильно ограничено и ценность их примерно на уровне текстуальных подстановок макросов C.


Это не ответ. Откуда возьмется информация о типах в DSL тоже никому неизвестно. Инструменты-то для разработки отсутсвуют


dmitriid.comGitHubLinkedIn
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 16.03.13 06:02
Оценка:
M>>Что у нас есть для "should have"? А нихрена нет
M>>- Каковы правила синтаксиса? Что будет, если я вставлю перенос строки между should и have? Что с кавычками, можно ли использовать "? Есть или нет semicolon insertion? Где описан синтаксис анонимных функций? Да и вообще функций.
M>>- Что с типами данных? Как они соотносятся с типами данных JS?

Z>Если язык встраивается в js он будет иметь те же правила и типы, что и js. За исключением языков, которые специально делаются для изменения правил или системы типов.


Как ты хитро сам себе противоречишь в двух предложениях. Итак, в твоем варианте — что там с типами данных? Они такие же как в js или это все таки исключение?

M>>- Какие средства есть для этого DSL? Дебаггер? Консоль? Интроспекция хоть какая-нибудь?


Z>Source maps и любой дебагер который его понимает.


Которые в природе отсутсвуют.

M>>- Кто автор компилятора, во что это компилируется? Каково качество генерируемого кода? Где в генерируемом коде возможные узкие места по производительности?


Z>Это вопросы перпендикулярны срезу DSL/код.


Ни разу не перпендикулярны. Ярые апологеты DSLя активно пытаются игнорировать эти вопросы.

M>>Это так, навскидку, в 12 ночи после пива.

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

Навскидку, неплохо дивет немало DSLей, но почему-то только вы делаете из этого вывод, что DSL — панацея, они — всегда хорошо и они всегда лучше, и под них всегда есть необходимые средства разработки, и проблем с ними не возникает и т.п.


dmitriid.comGitHubLinkedIn
Re[31]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 06:08
Оценка:
Здравствуйте, Ziaw, Вы писали:

IT>>Проблема в том, что инструменты для использования, которые мы имеем сейчас в сравнении с тем же ООП находятся примерно на уровне каменного века.


Z>Не только инструменты. Еще не наработаны различные практики, мало литературы и рекомендаций. Но основное, да, инструменты.


Основное это отсутствие практик и высокий порог вхождения в сами ДСЛ. Инструменты здесь мало чего изменят. Нужно широкое распространение практики, что бы скажем любой новичок мог в состоянии создавать ДСЛ вроде Linq. Нужно получить гарантии, что такой подход будет эффективнее на старте, дешевле, предсказуемее в майнтенансе и в суппорте. Так вот, инструменты эти гарантии не обеспечивают, как и везде это всего лишь вспомогательные средства. А что является основным средством ?
The animals went in two by two, hurrah, hurrah...
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 06:19
Оценка:
Здравствуйте, IT, Вы писали:

IT>Я никуда их не выношу. Я как раз и говорю, что это проблема. Сами по себе DSL и МП вовсе не проблема. Проблема в том, что инструменты для использования, которые мы имеем сейчас в сравнении с тем же ООП находятся примерно на уровне каменного века.


Сами по себе они обеспечивают довольно высокий уровень вхождения. Инструментами это не забороть. Инструментами можно сделать так, что в некоторых случаях МП можно использовать "по рецепту", типа T4. В общем случае высокий порог вхождения так и остаётся. Радикально снизить этот порог можно только посредством введения МП и ДСЛ в университетскую программу во взрослом виде, а не в виде курсе на 18 часов и три с половиной лабораторных.
The animals went in two by two, hurrah, hurrah...
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 16.03.13 08:27
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Наоборот. Linq и Деревья выражений показывают, что даже команде разработчиков C# хорошие ДСЛ оказались не под силу.


Прикольно. Я правильно понимаю, что ты у себя эту каку не используешь, а вернулся к старым добрым текстовым запросам? Вопросов больше не имею.
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 16.03.13 08:36
Оценка:
Здравствуйте, Mamut, Вы писали:

Z>>Если язык встраивается в js он будет иметь те же правила и типы, что и js. За исключением языков, которые специально делаются для изменения правил или системы типов.


M>Как ты хитро сам себе противоречишь в двух предложениях. Итак, в твоем варианте — что там с типами данных? Они такие же как в js или это все таки исключение?


В чем противоречие, в том, что в правиле есть исключения? Что ты называешь моим вариантом?

Z>>Source maps и любой дебагер который его понимает.


M>Которые в природе отсутсвуют.


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

M>Ни разу не перпендикулярны. Ярые апологеты DSLя активно пытаются игнорировать эти вопросы.


Так они риторические, как на них надо реагировать? Эти проблемы не являются специфичными для DSL, они актуальны для любого кода. Хочешь о них поговорить — создай отдельную ветку.

M>Навскидку, неплохо дивет немало DSLей, но почему-то только вы делаете из этого вывод, что DSL — панацея, они — всегда хорошо и они всегда лучше, и под них всегда есть необходимые средства разработки, и проблем с ними не возникает и т.п.


Мы делаем вывод, что DSL вполне рабочая технология, а не красная тряпка, на которую надо кидаться и затаптывать при каждом удобном случае.
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 16.03.13 08:49
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Основное это отсутствие практик и высокий порог вхождения в сами ДСЛ. Инструменты здесь мало чего изменят.


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

T>Нужно широкое распространение практики, что бы скажем любой новичок мог в состоянии создавать ДСЛ вроде Linq.


Это фантастика. Вот сейчас ООП имеет кучу практик и инструментов, сколько новичков в состоянии написать stl? То же самое с DSL, подавляющее большинство самопальных DSL будут просты до дебилизма и создаваться для решения очень узких задач. Будут кривые и удачные, сложные в саппорте и не требующие поддержки.

T>Нужно получить гарантии, что такой подход будет эффективнее на старте, дешевле, предсказуемее в майнтенансе и в суппорте. Так вот, инструменты эти гарантии не обеспечивают, как и везде это всего лишь вспомогательные средства. А что является основным средством ?


Не бывает таких гарантий, ни одна техника тебе их не дает, почему ты их требуешь от МП?
Re[31]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 16.03.13 12:31
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Интересно, что про это тут говорят абсолютно все, кроме, скажем, вульфхаунда, который постоянно верещит про «нада пользавацца правильными инструментами!!одинодин»

Немерле вполне приличный.
Но можно сделать еще лучше.
Чем я сейчас и занимаюсь.

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

M>Это не ответ. Откуда возьмется информация о типах в DSL тоже никому неизвестно. Инструменты-то для разработки отсутсвуют

Присутствуют. В немерле куча макросов работают с типами.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[33]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 12:42
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Даже Nemerle уже достаточно хороший инструмент для снижения порога вхождения. У него есть свои проблемы, но порог вхождения очень низкий.


Как ты это проверил ? Не хочу слышать аргументы вроде "у меня получилось, значит там всё легко" или "у меня в команде все от 10 лет опыта и у нас все классно"

T>>Нужно широкое распространение практики, что бы скажем любой новичок мог в состоянии создавать ДСЛ вроде Linq.


Z>Это фантастика. Вот сейчас ООП имеет кучу практик и инструментов, сколько новичков в состоянии написать stl?


Хороший аргумент. Только стл это обобщенное программирование, метапрограммирование, а не ООП. Ну ты понял

T>>Нужно получить гарантии, что такой подход будет эффективнее на старте, дешевле, предсказуемее в майнтенансе и в суппорте. Так вот, инструменты эти гарантии не обеспечивают, как и везде это всего лишь вспомогательные средства. А что является основным средством ?


Z>Не бывает таких гарантий, ни одна техника тебе их не дает, почему ты их требуешь от МП?


Ну это смотря как считать. ООП само по себе не дает гарантий. Зато сотни миллионов программистов используют и этот опыт можно заимствовать, что в итоге дает очень предсказуемую разработку.
The animals went in two by two, hurrah, hurrah...
Re[17]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 16.03.13 13:47
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Почини свой телепатор. Я не верю в то, что все подряд DSLи максимально понятны, абсолютно легки в поддержке, самодокументируемы, мегаэффективны и т.п., как тут заливаете вы с вульфхаундом.

Ох.
ДСЛ можно сделать более понятным, более простым в поддержке, намного лучше самодокументируемым, и порой на порядки более эффективным, чем код на обычных языках.
Мы говорим про существование, а не про всеобщесть.
А вы ломитесь в открытую дверь пытаясь доказать что ДСЛ может быть плохим. Но с этим никто не спорит.

Другими словами:
Для любой задачи* существует предметно ориентированный язык, который решает эту задачу лучше, чем язык общего назначения.

*Исключение задачи, вычислительная модель которых точно совпадает с вычислительной моделью предметной области. В этом случае лучший ДСЛ будет равен ЯОН. Но таких задач на практике не существуют.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 16.03.13 13:54
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Хороший аргумент. Только стл это обобщенное программирование, метапрограммирование, а не ООП. Ну ты понял

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

T>Ну это смотря как считать. ООП само по себе не дает гарантий. Зато сотни миллионов программистов используют и этот опыт можно заимствовать, что в итоге дает очень предсказуемую разработку.

Нельзя. Опыт из головы в голову не переложишь. Его можно только на своих ошибках набить.
Ну ты можешь сам посмотреть что студенты творят с ООП... За очень редким исключением.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 16.03.13 16:17
Оценка:
M>>Интересно, что про это тут говорят абсолютно все, кроме, скажем, вульфхаунда, который постоянно верещит про «нада пользавацца правильными инструментами!!одинодин»
WH>Немерле вполне приличный.
WH>Но можно сделать еще лучше.
WH>Чем я сейчас и занимаюсь.

WH>А уж в сравнении с твоими любимыми, динамически типизированными языками и сам немерле и ИДЕ для него просто супер.


Да-да-да. Свежо предание.

M>>Это не ответ. Откуда возьмется информация о типах в DSL тоже никому неизвестно. Инструменты-то для разработки отсутсвуют

WH>Присутствуют. В немерле куча макросов работают с типами.


Да-да-да. Свежо предание.


dmitriid.comGitHubLinkedIn
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 16.03.13 16:20
Оценка:
M>>Ни разу не перпендикулярны. Ярые апологеты DSLя активно пытаются игнорировать эти вопросы.

Z>Так они риторические, как на них надо реагировать? Эти проблемы не являются специфичными для DSL, они актуальны для любого кода. Хочешь о них поговорить — создай отдельную ветку.


Нифига они не риторические. Это — реально существующие проблемы, о апологеты DSL тут не хотят говорить вообще, продолжая рассказывать одни и те же басни уже который год
Автор: WolfHound
Дата: 16.03.13



M>>Навскидку, неплохо дивет немало DSLей, но почему-то только вы делаете из этого вывод, что DSL — панацея, они — всегда хорошо и они всегда лучше, и под них всегда есть необходимые средства разработки, и проблем с ними не возникает и т.п.


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


Никто не спорит, что DSL — рабочая технология. Спорят тут с излишне ярыми апологетами.


dmitriid.comGitHubLinkedIn
Re[33]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 16.03.13 16:32
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Да-да-да. Свежо предание.

Если факты противоречат теории тем хуже для фактов...
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 16.03.13 17:28
Оценка:
M>>Да-да-да. Свежо предание.
WH>Если факты противоречат теории тем хуже для фактов...

Были бы хоть какие-то факты, а не только одни и те же сказки уже который год


dmitriid.comGitHubLinkedIn
Re[35]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 16.03.13 17:37
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Были бы хоть какие-то факты, а не только одни и те же сказки уже который год

Фактов тонны. Но они тупо игнорируются.
Вот макросы, работающие с типами:
https://github.com/rsdn/nemerle/blob/0771b8c91b7e2e98402cd6f0ce14b57d392fbb47/macros/DesignPatterns.n
https://github.com/rsdn/nemerle/blob/0771b8c91b7e2e98402cd6f0ce14b57d392fbb47/macros/core.n#L444
И их там много если поискать.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 16.03.13 19:04
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Ты можешь как то внятно обосновать, каким образом единичные самопальные практики станут гарантировано понятными девелоперам попроще ? Ну без намеков на мою квалификацию, но если хочешь, можешь и с намеками, если ничего другого нет.


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

Что касается обоснований, то я могу привести простой пример с конкретными технологиями, использующимися для метапрограммирования. Речь идёт о run-time генерации кода. В .NET есть такая очень низкоуровневая штука — System.Reflection.Emit. Решения на SRE получаются сложными, малопонятными и хрупкими. Так вот за 10 лет существования библиотки BLToolkit практически никто кроме меня не трогал код, где используется SRE. С 3-м фреймворком мы получили другую технологию, которая может использоваться для тех же целей, что и SRE — System.Linq.Expressions. Это гораздо более высокоуровневая вещь. Если SRE оперирует примитивами соответствующими ассемблерному коду, то SLE использует уже что-то вроде языковых конструкций. В результате народ стал править мой код с SLE и писать свой налево и направо. SLE позволяет преодолеть некий барьер сложности, метапрограммировать становиться на порядок проще и народ потянулся.

Другой пример — T4 шаблоны. В них используется тот же самый C#, т.е. язык, к которому мы все привыкли и хорошо знаем. Тем не менее, написание шаблонов задачка не для слабонервных. А причина в том, что для того C#, который в T4 практически нет никакой поддержки со стороны студии, нет рефакторингов, нет интелисенса, навигации, подсветки и даже отладки. Т.е. написание кода сравнимо с написанием кода в нотепаде. Язык тот же, а вот окружение отсутствует и всё, результат очень печален.

Поэтому я ещё раз повторяю. Дело не в МП и DSLs, дело в инструментах, которых у нас пока нет.
Если нам не помогут, то мы тоже никого не пощадим.
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 16.03.13 19:16
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Теперь, если посмотреть на возраст типичного разработчика, то оказывается что ему ~27 лет, то есть, 5 лет после университета в виде фуллтайма на продакшне, а разрабы от 10 лет и выше составляют всего единицы процентов, от силы десяток, если случится чудо.


Боюсь, что твои сведения устарели минимум лет на пять и средний возраст давно уже перевалил за тридцатник. Индустрия стремительно стареет, хотелось бы, чтобы она при этом ещё и так же стремительно мудрела.

T>А вот в других проектах все немного иначе. Когда молодые девелоперы начинают писать самопальный ДСЛ или изобретать подход к генерации, то кроме дикого ужаса это ничего не вызывает и такие проекты дохнут быстрее чем ты успеваешь о них узнавать.


Вообще-то проблемы с молодняком остро наблюдались лет 10 назад. Сегодня такое возможно, если ваша бизнес модель построена на просеве молодняка, которому можно почти ничего не платить. Но в таком случае кто же вам доктор? Пересмотрите свои устаревшие взгляды, может ситуация изменится в лучшую сторону.
Если нам не помогут, то мы тоже никого не пощадим.
Re[31]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 16.03.13 19:25
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Интересно, что про это тут говорят абсолютно все, кроме, скажем, вульфхаунда, который постоянно верещит про «нада пользавацца правильными инструментами!!одинодин»


Я тут уже помоему говорил о дальных далях, так это тот самый случай. Вольфхаунд полностью погружен в среду, о которой говорит, и слегка путает настоящее с пока ещё не очень внятным будущим. Давай ему это простим

IT>>В макросах List нет доступа к информации о типах. В результате применение таких макросов сильно ограничено и ценность их примерно на уровне текстуальных подстановок макросов C.

M>Это не ответ. Откуда возьмется информация о типах в DSL тоже никому неизвестно. Инструменты-то для разработки отсутсвуют

Не понял этой реплики. Я говорю, что макросы Lisp не имеют информации о типах. А любой более менее полезный макрос для того же C# будет нуждаться в такой информации. Команда Немерле это прекрасно понимает и то решение, над которым они работают, будет это всё учитывать. Существующие макросы Немерла и сегодня предоставляют информацию о типах, но всё это сделано через такую задницу, что подобное решение нельзя назвать даже приемлемым.
Если нам не помогут, то мы тоже никого не пощадим.
Re[31]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 16.03.13 20:09
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Сами по себе они обеспечивают довольно высокий уровень вхождения. Инструментами это не забороть. Инструментами можно сделать так, что в некоторых случаях МП можно использовать "по рецепту", типа T4. В общем случае высокий порог вхождения так и остаётся.


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

Да и высокость порога тоже пойдёт на пользу. Мешьше всяких "индусов" будут лезть в это дело.

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


Это тоже не помешает.
Если нам не помогут, то мы тоже никого не пощадим.
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.03.13 20:34
Оценка:
Здравствуйте, WolfHound, Вы писали:

T>>Сами по себе они обеспечивают довольно высокий уровень вхождения. Инструментами это не забороть. Инструментами можно сделать так, что в некоторых случаях МП можно использовать "по рецепту", типа T4. В общем случае высокий порог вхождения так и остаётся. Радикально снизить этот порог можно только посредством введения МП и ДСЛ в университетскую программу во взрослом виде, а не в виде курсе на 18 часов и три с половиной лабораторных.

WH>1)Порог вхождения в ООП намного больше. Я серьёзно. Ибо сделать хороший ОО дизайн намного сложнее, чем хороший ДСЛ. Более того хороший ДСЛ возможен для любой предметной области которую вообще возможно формализовать. Для ООП, ФП, ЛП,... и любого другого программирования, которое навязывает вычислительную модель это не верно.

Чудеса то какие. Это самое ООП которое такое сложное проникло практически везде, и настолько просто что с него начинают обучение студентов, дают азы практически на первой-второй лекции. А вот ваша вся нетленка пока еще никуда не проникла, ну разве что в журнал и три проекта.

Насквозь императивное ООП есть вообще везде, где только можно представить, зато легкое МП в виде макров и ДСЛ как то никуда не торопится. Наверняка это ЗАГОВОР !!!! Против МП !!!! Против Немерле !!!!

И мне шота кажется, ты путаешь ООП и дизайн. ООП это всего лишь еще одна композиция. Процедурная, оо-ная, функциональная — этого минимума хватает чуть не на все на свете. МП здесь ничего радикально не добавляет, зато требует, что бы эти понятия были до рефлексов задрочены.

ДСЛ просто еще один инструмент который позволяет инверсию управления сделать, и соответственно требует большого опыта — примерно уровень архитекта.

P.S. Картина маслом — первый семестр, первый курс, первое занятие по программированию : "...а сейчас мы построим ДСЛ..."
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.03.13 20:39
Оценка:
Здравствуйте, IT, Вы писали:

IT>Стоимость сапотра уменьшается в разы. Это я тебе не на основании домыслов говорю, а как человек, проводивший соответсвующие эксперименты на реальных проектах. Элементарная автоматизация кодирования с помощью макросов сокращает в несколько раз код, делает его понятней за счёт декларативности, выявляются и устраняются мелкие баги, которые раньше были незаметны и т.п. Поддержка такого кода тоже элементарна, т.к. не требует детального изучения макросов, а их использование тривиально.


Как ты мерял ? Сколько лет длился суппорт-майнтенанс и сколько команд сменилось ?

Хочешь угадаю ? Ты сам и суппортал ну может силами своей тимы. Опаньки !!!

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

Где взять еще одного IT ?

Кстати, ты подумай на такую тему — если у тебя проекты в майнтенансе и суппорте, может просто никто не может этим заниматься. Прикинь, а ты мог бы вместо этого заниматься чем то более интересным, все таки майнтенас и суппорт как было сказано это "простая работа"
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 20:43
Оценка:
Здравствуйте, IT, Вы писали:

IT>Высоковат, но не недосягаемо высок. Нормальный уровень вхождения. Придётся немного изменить мышление, возможно поближе ознакомиться с работой компиляторов. Но ничего сверхестественного. Скажем, не сложнее, чем изучение SQL человеком, которые раньше никогда с этим не сталкивался.


IT>Да и высокость порога тоже пойдёт на пользу. Мешьше всяких "индусов" будут лезть в это дело.


Вроде как объем рынка определятся объемом спроса, а у тебя, похоже, наоборот. Или ты хочешь бизнес запугать настолько, что бы они посворачивали проекты ? Тут спору нет, индусов станет радикально меньше. И по моему это единственный вариант когда "Мешьше всяких "индусов" будут лезть в это дело."
The animals went in two by two, hurrah, hurrah...
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 16.03.13 20:54
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


Лучше прикинь другое. Для сапорта и мейнтененса никто не нужен, потому что сапорт и мейнтененс настолько тривиальны, что занимают от нуля до половины процента времени. У меня вообще хобби такое создавать решения не требующие саппорта. А если я уйду, то минимум год с моим кодом будет всё в порядке. В нём легко разберуться и легко начнут сапортить, пока не понавносят туда изменений, которые напрочь уничтожат всю вложенную туда простоту мейнтейнабилити и саппортобилити. И пофиг будут там МП и DSL или их там не будет.
Если нам не помогут, то мы тоже никого не пощадим.
Re[33]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 16.03.13 20:57
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Вроде как объем рынка определятся объемом спроса, а у тебя, похоже, наоборот. Или ты хочешь бизнес запугать настолько, что бы они посворачивали проекты ? Тут спору нет, индусов станет радикально меньше. И по моему это единственный вариант когда "Мешьше всяких "индусов" будут лезть в это дело."


Бизнесу вообще-то пофиг и пороги вхождения и DSL и МП все вместе взятые.
Если нам не помогут, то мы тоже никого не пощадим.
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 21:02
Оценка:
Здравствуйте, IT, Вы писали:

IT>На твою квалификацию никто не намекает. Намекать можно на твою неспособность или нежелание менять свою ментальную модель восприятия действительности в соответствии с реалиями. Другими словами строить далеко идущие выводы на домыслах и замечать лишь то, что ожидаешь увидеть.


Видишь, не зря я предложил пообсуждать мою личность. Или, по твоему, особенности восприятия к этому не относятся ? Если так, то я, пожалуй, воспользуюсь таким приёмчиком

IT>Что касается обоснований, то я могу привести простой пример с конкретными технологиями, использующимися для метапрограммирования. Речь идёт о run-time генерации кода. В .NET есть такая очень низкоуровневая штука — System.Reflection.Emit. Решения на SRE получаются сложными, малопонятными и хрупкими. Так вот за 10 лет существования библиотки BLToolkit практически никто кроме меня не трогал код, где используется SRE. С 3-м фреймворком мы получили другую технологию, которая может использоваться для тех же целей, что и SRE — System.Linq.Expressions. Это гораздо более высокоуровневая вещь. Если SRE оперирует примитивами соответствующими ассемблерному коду, то SLE использует уже что-то вроде языковых конструкций. В результате народ стал править мой код с SLE и писать свой налево и направо. SLE позволяет преодолеть некий барьер сложности, метапрограммировать становиться на порядок проще и народ потянулся.


Я немного ниже поясню, почему именно так.

IT>Другой пример — T4 шаблоны. В них используется тот же самый C#, т.е. язык, к которому мы все привыкли и хорошо знаем. Тем не менее, написание шаблонов задачка не для слабонервных. А причина в том, что для того C#, который в T4 практически нет никакой поддержки со стороны студии, нет рефакторингов, нет интелисенса, навигации, подсветки и даже отладки. Т.е. написание кода сравнимо с написанием кода в нотепаде. Язык тот же, а вот окружение отсутствует и всё, результат очень печален.


Причина не в этом. Писать код который пишет другой код на порядок сложнее. Хоть с инструментами, хоть без. Сначала нужно решить задачу А, потом написать код, который напишет код решения задачи А. То есть, решать нужно 2 задачи. Но это не все. Результат(код) ты увидишь только после генерации. При этом в обычном программировании ты этот результат(код) видишь практически все время перед глазами. Вот теперь становится ясно, почему квазицитирование достаточно легко поднимается людьми, хотя бы и в кастрированом виде, SLE, — результат(код) видет точно так же непосредтсвенно по мере написания его. Точно так же понятно, почему Т4 хорошо идет — результат не надо додумывать при правильном подходе. И это так же объясняет, почему дсл и макры идут туго — результат лежит где хрен знает где, а потому без тула вообще никуда, или же результат недоступен вовсе и нужно обладать хорошей прокачкой скилов что бы этот результат представить. Собтсвенно эти же недостатки есть и у SRE — результат очень сложно представить.

Инструмент который действительно радикально упрощает вопрос это например такой — ты пишешь обычный код, а инструмент превращает его в макрос. Вот это действительно было бы круто, поскольку новичкам очень тяжело решать большие задачи в уме, им нужно что бы код все говорил о себе. Но похоже создание такого инструмента это просто фантазия, он появится не раньше, чем будет изобретен искусственный интеллект.
The animals went in two by two, hurrah, hurrah...
Re[35]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 21:10
Оценка:
Здравствуйте, WolfHound, Вы писали:

T>>Хороший аргумент. Только стл это обобщенное программирование, метапрограммирование, а не ООП. Ну ты понял

WH>В каком месте STL мета-программирование?

Да почти в любом.

WH>Ну, раз тебе не нравится STL, можно взять любую другую большую ОО библиотеку.

WH>Покажи мне новичка, который сможет создать WPF.

В стл все алгоритмы и структуры данных тривиальные, их изучают максимум на втором-третьем курсе. Все сложность там в АПИ и композиции. А вот ВПФ это вещь действительно очень сложная, рядом с стл и не лежала.

T>>Ну это смотря как считать. ООП само по себе не дает гарантий. Зато сотни миллионов программистов используют и этот опыт можно заимствовать, что в итоге дает очень предсказуемую разработку.

WH>Нельзя. Опыт из головы в голову не переложишь. Его можно только на своих ошибках набить.

Опыт заимствуется и очень легко. Например во время совместной работы, во время обсуждения и тд и тд и тд.
The animals went in two by two, hurrah, hurrah...
Re[34]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 21:14
Оценка:
Здравствуйте, IT, Вы писали:

T>>Вроде как объем рынка определятся объемом спроса, а у тебя, похоже, наоборот. Или ты хочешь бизнес запугать настолько, что бы они посворачивали проекты ? Тут спору нет, индусов станет радикально меньше. И по моему это единственный вариант когда "Мешьше всяких "индусов" будут лезть в это дело."


IT>Бизнесу вообще-то пофиг и пороги вхождения и DSL и МП все вместе взятые.


Да вот не пофиг. Тайм ту маркет, стоимость решения, стоимость суппорта-майнтенанса никто не отменял. ДСЛ и МП в силу того, что в них порог вхождения выше, создают определенные риски. А риски, известно, очень сильно влияют и на тайм ту маркет и на стоимость решения и на стоимость суппорта-майнтенанса.
Зато бывают бизнесы, которым нужно в первую очередь отсутствие ошибок,а цена и время по барабану. Вот это бывает.
The animals went in two by two, hurrah, hurrah...
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 16.03.13 21:16
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>1)Порог вхождения в ООП намного больше. Я серьёзно. Ибо сделать хороший ОО дизайн намного сложнее, чем хороший ДСЛ. Более того хороший ДСЛ возможен для любой предметной области которую вообще возможно формализовать. Для ООП, ФП, ЛП,... и любого другого программирования, которое навязывает вычислительную модель это не верно.


Где можно ознакомиться с методикой сравнения сложности ?
The animals went in two by two, hurrah, hurrah...
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 16.03.13 22:56
Оценка:
M>>Интересно, что про это тут говорят абсолютно все, кроме, скажем, вульфхаунда, который постоянно верещит про «нада пользавацца правильными инструментами!!одинодин»

IT>Я тут уже помоему говорил о дальных далях, так это тот самый случай. Вольфхаунд полностью погружен в среду, о которой говорит, и слегка путает настоящее с пока ещё не очень внятным будущим. Давай ему это простим


Как-то неохота

IT>>>В макросах List нет доступа к информации о типах. В результате применение таких макросов сильно ограничено и ценность их примерно на уровне текстуальных подстановок макросов C.

M>>Это не ответ. Откуда возьмется информация о типах в DSL тоже никому неизвестно. Инструменты-то для разработки отсутсвуют

IT>Не понял этой реплики. Я говорю, что макросы Lisp не имеют информации о типах. А любой более менее полезный макрос для того же C# будет нуждаться в такой информации. Команда Немерле это прекрасно понимает и то решение, над которым они работают, будет это всё учитывать. Существующие макросы Немерла и сегодня предоставляют информацию о типах, но всё это сделано через такую задницу, что подобное решение нельзя назвать даже приемлемым.


С тобой не согласится Вульфхаунд
Автор: WolfHound
Дата: 16.03.13
А в целом я к тому, что не факт, что будет написан очередной Лисп на тех же макросах Немерле, без информации о типах. Да даже с информацией о типах, следующее остается верным:

все зависит от качества ДСЛ-я и качества его реализации. Но тогда мы приходим к тому, что код на ДСЛ и обычный код имеют сходные свойства и вытекающие из него проблемы....

... Там еще сам язык играет большую роль. Лисп есть лисп. Его не каждый читать может. Но это отдельная история.


Это как раз то, о чем неапологеты DSLей говорим уже который год подряд


dmitriid.comGitHubLinkedIn
Re[36]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 07:20
Оценка:
Здравствуйте, Tanker, Вы писали:

WH>>В каком месте STL мета-программирование?

T>Да почти в любом.
Похоже под МП ты понимаешь что-то своё.

T>В стл все алгоритмы и структуры данных тривиальные, их изучают максимум на втором-третьем курсе. Все сложность там в АПИ и композиции. А вот ВПФ это вещь действительно очень сложная, рядом с стл и не лежала.

Ну, так покажи мне студента который WPF сделает.
Ведь ООП это так просто...
Да ты даже не студента искать задолбаешься.

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

Хреново он заимствуется. Очень хреново.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[33]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 07:39
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Это как раз то, о чем неапологеты DSLей говорим уже который год подряд

Ох. Вот только всё это относится и к обычным языкам с обычными библиотеками.
Но ты почему-то это всегда игнорируешь?
Почему?

Почему ты напираешь на отсутствие типов в макросах (хотя они есть) при этом считаешь, что динамически типизированные языки это нормально?

Короче у тебя есть только куча двойных стандартов и передергиваний.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[33]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 07:44
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Чудеса то какие. Это самое ООП которое такое сложное проникло практически везде, и настолько просто что с него начинают обучение студентов, дают азы практически на первой-второй лекции. А вот ваша вся нетленка пока еще никуда не проникла, ну разве что в журнал и три проекта.

И при этом сделать нормальный ОО дизайн почти никто не может...
Наверное, по тому что ООП это просто.

I>ДСЛ просто еще один инструмент который позволяет инверсию управления сделать, и соответственно требует большого опыта — примерно уровень архитекта.


В каком месте управление инвертируется?
https://github.com/rampelstinskin/ParserGenerator/blob/master/N2/N2.Grammar/GrammarParser2.n2
Ты вообще понимаешь, о чем говоришь?

I>P.S. Картина маслом — первый семестр, первый курс, первое занятие по программированию : "...а сейчас мы построим ДСЛ..."

На первом нужно научится готовыми языкам пользоваться. На втором курсе уже можно и свои делать.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[33]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 07:48
Оценка:
Здравствуйте, Tanker, Вы писали:

WH>>1)Порог вхождения в ООП намного больше. Я серьёзно. Ибо сделать хороший ОО дизайн намного сложнее, чем хороший ДСЛ. Более того хороший ДСЛ возможен для любой предметной области которую вообще возможно формализовать. Для ООП, ФП, ЛП,... и любого другого программирования, которое навязывает вычислительную модель это не верно.


T>Где можно ознакомиться с методикой сравнения сложности ?


Она вся в цитате, на которую ты отвечаешь.

Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет. Из-за этого при решении задачи другими средствами тебе приходится не только решать задачу, но еще и бороться с инструментом.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[31]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 07:59
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Причина не в этом. Писать код который пишет другой код на порядок сложнее. Хоть с инструментами, хоть без. Сначала нужно решить задачу А, потом написать код, который напишет код решения задачи А. То есть, решать нужно 2 задачи. Но это не все. Результат(код) ты увидишь только после генерации. При этом в обычном программировании ты этот результат(код) видишь практически все время перед глазами. Вот теперь становится ясно, почему квазицитирование достаточно легко поднимается людьми, хотя бы и в кастрированом виде, SLE, — результат(код) видет точно так же непосредтсвенно по мере написания его. Точно так же понятно, почему Т4 хорошо идет — результат не надо додумывать при правильном подходе. И это так же объясняет, почему дсл и макры идут туго — результат лежит где хрен знает где, а потому без тула вообще никуда, или же результат недоступен вовсе и нужно обладать хорошей прокачкой скилов что бы этот результат представить. Собтсвенно эти же недостатки есть и у SRE — результат очень сложно представить.

И ты ничего не угадал. Ибо не видел, как IT с SRE работает.
Как видишь практически квазицитаты MSIL'а.
        public void Test()
        {
            EmitHelper emit = new AssemblyBuilderHelper("HelloWorld.dll")
                .DefineType  ("Hello", typeof(object), typeof(IHello))
                .DefineMethod(typeof(IHello).GetMethod("SayHello"))
                .Emitter;

            emit
                // string.Format("Hello, {0}!", toWhom)
                //
                .ldstr   ("Hello, {0}!")
                .ldarg_1
                .call    (typeof(string), "Format", typeof(string), typeof(object))

                // Console.WriteLine("Hello, World!");
                //
                .call    (typeof(Console), "WriteLine", typeof(string))
                .ret()
                ;

            Type type = emit.Method.Type.Create();

            IHello hello = (IHello)TypeAccessor.CreateInstance(type);

            hello.SayHello("World");
        }
    }

Вот только очень уж MSIL низкоуровневый. Работать с ним неудобно.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 17.03.13 08:39
Оценка:
M>>Это как раз то, о чем неапологеты DSLей говорим уже который год подряд
WH>Ох. Вот только всё это относится и к обычным языкам с обычными библиотеками.
WH>Но ты почему-то это всегда игнорируешь?
WH>Почему?

Этого я нигде и никак не игнорирую. Но я указываю, что для них гораздо лучше развиты средства разработки, которые позволяют с этим работать, и во всем этом разбираться. Ты же лепишь постоянно чушь про наличие средств разработки, про то, что «ах, подумаешь, переписать компилятор из одной версии в другую» и т.п.

WH>Почему ты напираешь на отсутствие типов в макросах (хотя они есть)при этом считаешь, что динамически типизированные языки это нормально?


Угу. Ага. Я напираю на отсутсвие типов в макросах, ога. Ты бы это, перечитал, кто на что напирает.

WH>Короче у тебя есть только куча двойных стандартов и передергиваний.


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


dmitriid.comGitHubLinkedIn
Re[34]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: C.A.B LinkedIn
Дата: 17.03.13 08:57
Оценка:
Здравствуйте, WolfHound, Вы писали:
WH>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет. Из-за этого при решении задачи другими средствами тебе приходится не только решать задачу, но еще и бороться с инструментом.
Разве само МП не является "моделью вычислений"(с которой надо будет бороться)?
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[35]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 09:20
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Этого я нигде и никак не игнорирую. Но я указываю, что для них гораздо лучше развиты средства разработки, которые позволяют с этим работать, и во всем этом разбираться. Ты же лепишь постоянно чушь про наличие средств разработки, про то, что «ах, подумаешь, переписать компилятор из одной версии в другую» и т.п.

Какие инструменты позволяют решать проблему кривого кода? Покажи хоть один.

M>Угу. Ага. Я напираю на отсутсвие типов в макросах, ога. Ты бы это, перечитал, кто на что напирает.

После того как ты научишься читать то что ты сам пишешь.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[35]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 09:29
Оценка:
Здравствуйте, C.A.B, Вы писали:

WH>>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет. Из-за этого при решении задачи другими средствами тебе приходится не только решать задачу, но еще и бороться с инструментом.

CAB>Разве само МП не является "моделью вычислений"(с которой надо будет бороться)?
Нет.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[36]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: C.A.B LinkedIn
Дата: 17.03.13 09:40
Оценка:
WH>>>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет. Из-за этого при решении задачи другими средствами тебе приходится не только решать задачу, но еще и бороться с инструментом.
CAB>>Разве само МП не является "моделью вычислений"(с которой надо будет бороться)?
WH>Нет.
Почему?
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[34]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.03.13 10:00
Оценка:
Здравствуйте, WolfHound, Вы писали:

I>>Чудеса то какие. Это самое ООП которое такое сложное проникло практически везде, и настолько просто что с него начинают обучение студентов, дают азы практически на первой-второй лекции. А вот ваша вся нетленка пока еще никуда не проникла, ну разве что в журнал и три проекта.

WH>И при этом сделать нормальный ОО дизайн почти никто не может...
WH>Наверное, по тому что ООП это просто.

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

WH>В каком месте управление инвертируется?

WH>https://github.com/rampelstinskin/ParserGenerator/blob/master/N2/N2.Grammar/GrammarParser2.n2
WH>Ты вообще понимаешь, о чем говоришь?

Инверсия управления это так — вызывающий код становится вызываемым или так — обязанности из вызывающего кода кочуют в вызываемый или так — зависимости вызывающего кода кочуют в вызываемый. Собственно именно из за этой инверсии на ДСЛ так легко писать(тем кто в теме), — все что надо, из вызывающего ушло в вызываемый.

I>>P.S. Картина маслом — первый семестр, первый курс, первое занятие по программированию : "...а сейчас мы построим ДСЛ..."

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

Ну так возьми в команду студента 2-3го курса и покажи как все круто. У меня в команде такие были, ООП им ничем не мешало.
Re[35]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 10:12
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Хороший дизайн в любой парадигме делать очень трудно. Вообще в любой. ООП здесь ничем особым не выделяется. Хоть ФП, хоть обобщенное, хоть макры — дизайнить апи модулей крайне непросто.

Осталось понять, что делать дизайн на МП проще.
Просто по тому, что нет навязанной вычислительной модели.
Ибо в любом другом случае нам не только нужно дизайн делать но еще и заботиться о том чтобы этот дизайн не конфликтовал с вычислительной моделью того языка на котором потом всё это будем писать.

I>Инверсия управления это так — вызывающий код становится вызываемым или так — обязанности из вызывающего кода кочуют в вызываемый или так — зависимости вызывающего кода кочуют в вызываемый. Собственно именно из за этой инверсии на ДСЛ так легко писать(тем кто в теме), — все что надо, из вызывающего ушло в вызываемый.

Ничего не понял. Я знаю про IoC паттерн. Но как это всё к языкам относиться?
Давай пример попроще.
Где тут инверсия управления:
// A Hello World! program in C#. 
using System;
namespace HelloWorld
{
    class Hello 
    {
        static void Main() 
        {
            Console.WriteLine("Hello World!");

            // Keep the console window open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}


I>Ну так возьми в команду студента 2-3го курса и покажи как все круто. У меня в команде такие были, ООП им ничем не мешало.

А почему ты думаешь, что МП им будет мешать?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[38]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: C.A.B LinkedIn
Дата: 17.03.13 11:06
Оценка:
WH>>>>>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет. Из-за этого при решении задачи другими средствами тебе приходится не только решать задачу, но еще и бороться с инструментом.
CAB>>>>Разве само МП не является "моделью вычислений"(с которой надо будет бороться)?
WH>По тому, что МП работает не во время работы кода, а во время компиляции кода.
WH>Те инструмент МП навязывает свою вычислительную модель компилятору, а не рабочей программе.
WH>При этом вычислительная модель инструмента заточена именно под компиляторы из-за чего их легко делать.
Cool! Какое это имеет отношение к борьбе программиста с МП?
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 17.03.13 12:49
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Потому что для ООП и ФП уже существуют и инструменты и практики и т.п. Что есть для DSL кроме битья пяткой в грудь, что DSL — это мегакруто и там сразу все доступно?


Ну так это совершенно другие проблемы. С ними как раз никто не спорит. В том то и дело, что нет пока адекватных инструментов, потому нет практик.

M>Да-да-да. Вот буквально каждый писатель DSL начнет заниматься суперкомпиляцией, ага


Понимаешь, если делать как ты, записывать DSL в отстойные технологии, то этих писателей вообще не будет. Суперкомпиляция сейчас удобна только в языках с ПМ и квазицитатами, а их нет в мейнстриме. Nemerle, при всех своих недостатках, стоит тут на передовой позиции и позволяет достаточно легко делать то, во что ты никак не веришь.

M>И из этого ты делаешь вывод, что все DSL будут такими?


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

Z>>Лично ты регулярно выносишь в ключевые недостатки DSL вещи совершенно ортогональные. Качество документации, качество кода и порог вхождения. Все это, в случае с DSL будет не хуже, а порог вхождения еще лучше аналогичного решения без MP.


M>Сказки. Аргументы, почему это сказки, уже приводились тут не раз. Пока что для DSL банально отсутсвуют какие-либо инструменты для обеспечения всего тобой перечисленного. Но да, «будет не хуже», ага-ага


Те аргументы, что приводились, опровергались не раз. Мы опять уперлись в инструменты. Видишь, ты уже почти согласился, что технология не при чем, просто нужное ПО еще не разработано. Впрочем и того, что есть вполне достаточно, чтобы уже можно было как-то использовать. Но сделать лучше можно еще много чего, большинство путей видны и открыты. Та же генерация доки по грамматикам из xml-docs далеко не рокет сайенс, ее просто кому-то надо взять и сделать. Если не хочется делать, а хочется похаять, не надо нападать на WH, попробуй разобраться в том, что он делает и обхаять конкретно, по существу. Но это требует усилий, я понимаю.
Re[40]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 12:56
Оценка:
Здравствуйте, WolfHound, Вы писали:

И чего смешного?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 17.03.13 13:07
Оценка:
WH>Если не хочется делать, а хочется похаять, не надо нападать на WH, попробуй разобраться в том, что он делает и обхаять конкретно, по существу. Но это требует усилий, я понимаю.


Было бы что обсуждать. Пока что от WH сотоварищи слышны строго и исключительно сказки. Напомнить тебе недавние попытки узнать о текущем состоянии проекта? «Идите в жопу, ничего рассказывать не будем».


dmitriid.comGitHubLinkedIn
Re[41]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: C.A.B LinkedIn
Дата: 17.03.13 13:21
Оценка:
WH>И чего смешного?

WH>1)Порог вхождения в ООП намного больше. Я серьёзно. Ибо сделать хороший ОО дизайн намного сложнее, чем хороший ДСЛ...
WH>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет...
CAB>Разве само МП не является "моделью вычислений"(с которой надо будет бороться)?
WH>По тому, что МП работает не во время работы кода, а во время компиляции кода...
CAB>Cool! Какое это имеет отношение к борьбе программиста с МП?
WH>Никакого...

Ну, то есть начали мы с порогов вхождения(ООП vs МП), а потом как-то внезапно перешли к программам и компиляторам
Али я чего не понял?
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[42]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 13:25
Оценка:
Здравствуйте, C.A.B, Вы писали:

CAB>Ну, то есть начали мы с порогов вхождения(ООП vs МП), а потом как-то внезапно перешли к программам и компиляторам

CAB>Али я чего не понял?
В каком месте шел разговор про борьбу с МП? Разговор изначально был про то, что с МП бороться не нужно в отличие от остального.

А к программам и компиляторам мы перешли по тому, что я тебе объяснял, почему так происходит.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[43]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: C.A.B LinkedIn
Дата: 17.03.13 13:42
Оценка:
CAB>>Али я чего не понял?
WH>В каком месте шел разговор про борьбу с МП? Разговор изначально был про то, что с МП бороться не нужно в отличие от остального.
Тогда, я всё таки не понял.
WH>А к программам и компиляторам мы перешли по тому, что я тебе объяснял, почему так происходит.
Ok, давай лучше на пример: допустим нам нужно написать программу, например пусть это будет какой ни будь специфический калькулятор(валютный к примеру).
ООП: спецификация -> дизайн UI -> дизайн классов(здесь борьбу с ООП) -> кодирование(и здесь, в меньшей степени) -> тестирование
МП: спецификация -> дизайн UI -> ???
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[44]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 17.03.13 15:19
Оценка:
Здравствуйте, C.A.B, Вы писали:

WH>>А к программам и компиляторам мы перешли по тому, что я тебе объяснял, почему так происходит.

CAB>Ok, давай лучше на пример: допустим нам нужно написать программу, например пусть это будет какой ни будь специфический калькулятор(валютный к примеру).
Какой еще калькулятор? Один едит и десяток кнопок?
Что тут вообще можно проектировать?
Хотя и тут ООП будет вставлять палки в колеса.
Посмотри, как можно сделать ДСЛ для ГУИ.
http://nemerlewebsamples.apphb.com/

Сравни с WPF на C#...
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[45]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: C.A.B LinkedIn
Дата: 17.03.13 16:13
Оценка:
CAB>>Ok, давай лучше на пример: допустим нам нужно написать программу, например пусть это будет какой ни будь специфический калькулятор(валютный к примеру).
WH>Какой еще калькулятор? Один едит и десяток кнопок?
WH>Что тут вообще можно проектировать?
WH>Хотя и тут ООП будет вставлять палки в колеса.
Ну хорошо, пусть это будет например система бух. учёта или система управления полётами.
ООП: спецификация -> дизайн UI -> дизайн классов(здесь борьбу с ООП) -> кодирование(и здесь, в меньшей степени) -> тестирование
МП: спецификация -> дизайн UI -> ???


WH>Посмотри, как можно сделать ДСЛ для ГУИ.

WH>http://nemerlewebsamples.apphb.com/
Определённо не хватает комментариев
  Скрытый текст
using NemerleWeb;
using System.Linq;
using System.Collections.Generic;
using Nemerle.ComputationExpressions;

namespace NemerleWeb.Samples
{
  [Unit]
  class CompListPage
  {
    Alphabet : array[string] { get; set; }              //<-- что значит "{ get; set; }"?
    OddLettersOnly : bool { get; set; }
    LetterCount : int { get; set; }
    Letters : list[string]
    {
      get
      {
        comp list
        {
          for (mutable i = 0; i < LetterCount; i++)    //<-- что здесь происходит(разве DSL для GUI не должен быть декларативным)? 
            when (!OddLettersOnly || i % 2 == 1)
              yield Alphabet[i];
        }
      }
    }
    
    public this()                                      
    {
      Alphabet = array["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];  
      LetterCount = 3;
    } 
 
    public More() : void                              //<-- зачем тащить логику в GUI-DSL?
    {
      when (LetterCount < Alphabet.Count())        
        LetterCount++;
    }

    public Less() : void
    {
      when(LetterCount > 0)
        LetterCount--;
    }
    
    [Html]
    public View() : string
    {
      <#
        <div>                                         //<-- HTML имхо, тоже стоит спрятать(на фоне остального смотрится не айс).
          <h3>Alphabet</h3>
          <button click="$More">More</button>
          <button click="$Less">Less</button>
          Odd letters only <input type="checkbox" checked="$OddLettersOnly" />
          <div class="name-list">
            <span $foreach(l in Letters)>
              $(l + " ")
            </span>
          </div>
        </div>
      #>
    }
  }
}

и графического редактора.
Но вообще прикольно, да.
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[45]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.03.13 12:25
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Хотя и тут ООП будет вставлять палки в колеса.

WH>Посмотри, как можно сделать ДСЛ для ГУИ.
WH>http://nemerlewebsamples.apphb.com/

WH>Сравни с WPF на C#...


Судя по тому что примеров в немерлевеб не добавляется, то за полгода, что ты показываешь эту ссылку, ничего не изменилось. Похоже, немерлевеб это фремворк для написания ровно таких UI как в примерах по твоей ссылке.
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.03.13 12:35
Оценка:
Здравствуйте, IT, Вы писали:

T>>Теперь, если посмотреть на возраст типичного разработчика, то оказывается что ему ~27 лет, то есть, 5 лет после университета в виде фуллтайма на продакшне, а разрабы от 10 лет и выше составляют всего единицы процентов, от силы десяток, если случится чудо.


IT>Боюсь, что твои сведения устарели минимум лет на пять и средний возраст давно уже перевалил за тридцатник. Индустрия стремительно стареет, хотелось бы, чтобы она при этом ещё и так же стремительно мудрела.


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

Откуда старение возьмется, если стартапы, молодые фирмочки, мелкие студии плодятся как кролики ?
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 12:42
Оценка:
Здравствуйте, WolfHound, Вы писали:

T>>Причина не в этом. Писать код который пишет другой код на порядок сложнее. Хоть с инструментами, хоть без. Сначала нужно решить задачу А, потом написать код, который напишет код решения задачи А. То есть, решать нужно 2 задачи. Но это не все. Результат(код) ты увидишь только после генерации. При этом в обычном программировании ты этот результат(код) видишь практически все время перед глазами. Вот теперь становится ясно, почему квазицитирование достаточно легко поднимается людьми, хотя бы и в кастрированом виде, SLE, — результат(код) видет точно так же непосредтсвенно по мере написания его. Точно так же понятно, почему Т4 хорошо идет — результат не надо додумывать при правильном подходе. И это так же объясняет, почему дсл и макры идут туго — результат лежит где хрен знает где, а потому без тула вообще никуда, или же результат недоступен вовсе и нужно обладать хорошей прокачкой скилов что бы этот результат представить. Собтсвенно эти же недостатки есть и у SRE — результат очень сложно представить.

WH>И ты ничего не угадал. Ибо не видел, как IT с SRE работает.

Не волнуйся, именно у него, собтсвенно, я и подсмотрел "Emit c человеческим лицом".

WH>Как видишь практически квазицитаты MSIL'а.

WH>Вот только очень уж MSIL низкоуровневый. Работать с ним неудобно.

Девелоперы не пишут на ИЛ, этот язык для прикладных и даже для фремворковых девелоперов чужой. Им нужно переводить все это в свой основной язык и поэтму все что я сказал про SRE абсолютно справедливо — результат ты или не увидишь вообще, или увидишь после н-приёмчиков.
The animals went in two by two, hurrah, hurrah...
Re[37]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 13:01
Оценка:
Здравствуйте, WolfHound, Вы писали:

T>>В стл все алгоритмы и структуры данных тривиальные, их изучают максимум на втором-третьем курсе. Все сложность там в АПИ и композиции. А вот ВПФ это вещь действительно очень сложная, рядом с стл и не лежала.

WH>Ну, так покажи мне студента который WPF сделает.

Я же доступно объяснил — ВПФ это очень сложная задача. Из того, что ООП это просто, никак не следует, что и ВПФ станет проще. Дизайн в люьбой парадигме на порядок сложнее самой парадигмы, с этим ничего не поделаешь.
The animals went in two by two, hurrah, hurrah...
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 13:04
Оценка:
Здравствуйте, IT, Вы писали:

IT>Боюсь, что твои сведения устарели минимум лет на пять и средний возраст давно уже перевалил за тридцатник. Индустрия стремительно стареет, хотелось бы, чтобы она при этом ещё и так же стремительно мудрела.


Скорее есть тенденция оттока молодых из некоторых областей и переход в какой нибудь мобайл, а соответсвенно некоторые фирмы и даже области превращаются в псарни из старпёров.
The animals went in two by two, hurrah, hurrah...
Re[37]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 13:11
Оценка:
Здравствуйте, C.A.B, Вы писали:

CAB>>>Разве само МП не является "моделью вычислений"(с которой надо будет бороться)?

WH>>Нет.
CAB>Почему?

Метапрограммирование использует ту модель, которую ты используешь для собтсвенно решения задачи. Генеришь скажем код в ООП стиле — будет модель ООП. Генеришь код в функциональном стиле — будет модель функциональная. И тд. А вот так, что бы писать код и не использовать никакой вычислительной модели, такого не бывает, все базовые композиции — структурная, объектная, функциональная и тд нужно знать на зубок задолго до того, как берешься за метапрограммирование.
Причина этого явления в том, что конкретный вычислитель использует вполне конкретную вычислительную модель.
The animals went in two by two, hurrah, hurrah...
Re[36]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 13:32
Оценка:
Здравствуйте, WolfHound, Вы писали:

I>>Хороший дизайн в любой парадигме делать очень трудно. Вообще в любой. ООП здесь ничем особым не выделяется. Хоть ФП, хоть обобщенное, хоть макры — дизайнить апи модулей крайне непросто.

WH>Осталось понять, что делать дизайн на МП проще.
WH>Просто по тому, что нет навязанной вычислительной модели.

Этим можно пренебречь, потому что проектирование взаимодействия само по себе крайне сложный процесс, непредсказуемый и нелинейный, и какой то вычислительной моделью можно спокойно пренебречь. Просто добавляется небольшой шажок, когда готовое взаимодействие нужно вписать по фиксированым правилам в конкретную систему. То есть, накопленого опыта уже достаточно, что бы любую систему за предсказуемое линейное время вписать в ОО-парадигму.

I>>Инверсия управления это так — вызывающий код становится вызываемым или так — обязанности из вызывающего кода кочуют в вызываемый или так — зависимости вызывающего кода кочуют в вызываемый. Собственно именно из за этой инверсии на ДСЛ так легко писать(тем кто в теме), — все что надо, из вызывающего ушло в вызываемый.

WH>Ничего не понял. Я знаю про IoC паттерн. Но как это всё к языкам относиться?
WH>Давай пример попроще.
WH>Где тут инверсия управления:

А что с чем сравнивать ? Вот если представить твой пример в виде ДСЛ, то получится например так, минимальный набор
Hello World!
Press any key to exit.
>

Теперь видно, что одна программа контролирует и время, и зависимости, и вызовы, а вторая — нет. Вот это и есть инверсия — вызывающий код стал вызываемым и тд. То есть, ДСЛ это true IOC.

I>>Ну так возьми в команду студента 2-3го курса и покажи как все круто. У меня в команде такие были, ООП им ничем не мешало.

WH>А почему ты думаешь, что МП им будет мешать?

Я знаю точно, что именно им мешает. В обычном программировании они видят код и этот код яляется собственно решением задачи. В метапрограммировании код уже не является решением задачи, он является решением задачи по генерации кода решения основной задачи. Даже с шаблонами, квазицитированием не все гладко — вместо того, что бы "посмотреть" нужно дополнять код из некоторого контекста. Соотственно продуктивность с МП у студентов много хуже чем без МП.
Вобщем любой meta-xxx требует, что бы xxx был прокачан до уровня "профи".
The animals went in two by two, hurrah, hurrah...
Re[33]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 18.03.13 13:55
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Девелоперы не пишут на ИЛ, этот язык для прикладных и даже для фремворковых девелоперов чужой. Им нужно переводить все это в свой основной язык и поэтму все что я сказал про SRE абсолютно справедливо — результат ты или не увидишь вообще, или увидишь после н-приёмчиков.

Те вся проблема в том, что ИЛ слишком низкого уровня?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[37]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 18.03.13 13:55
Оценка:
Здравствуйте, Tanker, Вы писали:

WH>>Осталось понять, что делать дизайн на МП проще.

WH>>Просто по тому, что нет навязанной вычислительной модели.
T>Этим можно пренебречь,
Ага, конечно.
Почитай флеймы на тему что от чего ножно наследовать.
Квадрат от прямоугольника или наоборот.

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

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

T>Просто добавляется небольшой шажок, когда готовое взаимодействие нужно вписать по фиксированым правилам в конкретную систему. То есть, накопленого опыта уже достаточно, что бы любую систему за предсказуемое линейное время вписать в ОО-парадигму.

Вот только в результате этого шажка появляется куча не относящегося к делу кода.

T>А что с чем сравнивать ? Вот если представить твой пример в виде ДСЛ, то получится например так, минимальный набор

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

T>Я знаю точно, что именно им мешает. В обычном программировании они видят код и этот код яляется собственно решением задачи.

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

T>В метапрограммировании код уже не является решением задачи, он является решением задачи по генерации кода решения основной задачи.

Это как это не является?
Вот это что такое?
https://github.com/rampelstinskin/ParserGenerator/blob/master/N2/N2.Grammar/GrammarParser2.n2
Это код решающий задачу разбора данного языка.

T>Даже с шаблонами, квазицитированием не все гладко — вместо того, что бы "посмотреть" нужно дополнять код из некоторого контекста. Соотственно продуктивность с МП у студентов много хуже чем без МП.

Проверял?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[38]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 18.03.13 14:12
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Метапрограммирование использует ту модель, которую ты используешь для собтсвенно решения задачи. Генеришь скажем код в ООП стиле — будет модель ООП. Генеришь код в функциональном стиле — будет модель функциональная. И тд.

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

Тот код, который получается в результате переписывания, вообще никого не волнует.
Более того один и тот же ДСЛ можно переписывать в разные языки низкого уровня. Можно в хаскель. Можно в C#. Можно и в то и другое одновременно.

Главное в ДСЛ это вычислительная модель самого ДСЛ.
Всё остальное мелочи, не заслуживающие внимания.
И для того чтобы переписать код написанный на ДСЛ в C# тебе не нужно уметь делать ОО дизайн. О дизайне результата вообще думать не надо.
Ибо ты можешь генерировать любой говнокод.
Лишь бы работал.
А всё по тому, что генерируемый код не требует поддержки.
И всегда можно немного поправить генератор, после чего перегенерировать весь код.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[35]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 18.03.13 14:16
Оценка:
Здравствуйте, Tanker, Вы писали:

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

Один из этих элементом это модель вычисления языка, на котором всё это будет реализовано. Дизайны решений для реализации на хаскеле и на C# не будет иметь между собой ничего общего. При этом будут содержать кучу мусора, которая к задаче не относится.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[38]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 18.03.13 14:22
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Я же доступно объяснил — ВПФ это очень сложная задача. Из того, что ООП это просто, никак не следует, что и ВПФ станет проще. Дизайн в люьбой парадигме на порядок сложнее самой парадигмы, с этим ничего не поделаешь.

О чем я тебе и толкую.
Круть ДСЛ в том, что когда мы его создаем, у нас нет навязанной языком реализации парадигмы.
Парадигма того языка в который происходит переписывание ни на что не влияет. Ваще. Совсем.
Нам просто не нужно думать о том, как мы будет поддерживать генерируемый код.
Поэтому мы можем генерировать любой говнокод с нарушением всех правил хорошего тона результирующего языка, за нарушение которых при ручной работе нужно отрывать руки.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[38]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: C.A.B LinkedIn
Дата: 18.03.13 14:26
Оценка:
Здравствуйте, Tanker, Вы писали:
CAB>>>>Разве само МП не является "моделью вычислений"(с которой надо будет бороться)?
WH>>>Нет.
CAB>>Почему?
T>Метапрограммирование использует ту модель, которую ты используешь для собтсвенно решения задачи.
Сначала давай определимся что же такое метапрограммирование? В моём понимании это процесс собственно создания метасредств, например макросов, DSL'ей и других программ создающих программы. А так как метасредства не являются voodoo, нужна некоторая вычислительная модель(модель вычислений), чтобы заставить это всё работать. Например в препроцессоре С этой моделью есть банальная подстановка текста.
Программирование с использованием метасредств(т.е. кода уже используется только модель задачи), ИМХО, называть МП не корректно, т.к. в это случае совершенно не обязательно знать о том как работает МП, и даже о том что оно существует.
T>Генеришь скажем код в ООП стиле — будет модель ООП. Генеришь код в функциональном стиле — будет модель функциональная. И тд.
Это ведь уже не программирование, это кодогенерация.
T>А вот так, что бы писать код и не использовать никакой вычислительной модели, такого не бывает, все базовые композиции — структурная, объектная, функциональная и тд нужно знать на зубок задолго до того, как берешься за метапрограммирование.
Зачем все? Думаю достаточно МП + то во что оно будет разворачиваться.
T>Причина этого явления в том, что конкретный вычислитель использует вполне конкретную вычислительную модель.
Не уловил связи между "конкретный вычислитель" и "все базовые композиции — структурная, объектная, функциональная и тд нужно знать на зубок"
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 18.03.13 16:18
Оценка:
WH>Поэтому мы можем генерировать любой говнокод с нарушением всех правил хорошего тона результирующего языка, за нарушение которых при ручной работе нужно отрывать руки.

Ага-ага. Потом такой вот гений уволится, а нагенерированый его поделкой говнокод будет вылезать боком в самых неожиданных местах, ага.


dmitriid.comGitHubLinkedIn
Re[40]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: _NN_ www.nemerleweb.com
Дата: 18.03.13 19:15
Оценка:
Здравствуйте, Mamut, Вы писали:


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


M>Ага-ага. Потом такой вот гений уволится, а нагенерированый его поделкой говнокод будет вылезать боком в самых неожиданных местах, ага.


Далеко кстати ходить не надо. Никаких DSL тоже не надо.
Вот МС решили сделать генерацию кода из XSD: xsd.exe.
Тот же вопрос , кто это будет поддерживать если разработчик уволиться или как изменить нагенерированный код ?

За неимением ответа на вопрос, создали отдельный проект: Xsd2Code с открытым кодом, чтобы можно было корректировать генерацию.

P.S.
Конечно есть какой-то средний уровень разработчиков, однако, это не означает, что нужно писать ручной код для новичков.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 19:21
Оценка:
Здравствуйте, WolfHound, Вы писали:

T>>Я же доступно объяснил — ВПФ это очень сложная задача. Из того, что ООП это просто, никак не следует, что и ВПФ станет проще. Дизайн в люьбой парадигме на порядок сложнее самой парадигмы, с этим ничего не поделаешь.

WH>О чем я тебе и толкую.
WH>Круть ДСЛ в том, что когда мы его создаем, у нас нет навязанной языком реализации парадигмы.

Сложность построения дизайна настолько высока, что сложностью используемой парадигмы можно пренебречь, поскольку нет необходимости использовать идеальные решения, а достаточно приемлемых, а простецкое МП позволяет устранить большую часть проблем с парадигмой. Что в итоге ? В итоге сложность построения дизайна vs сложность построения дизайна.

WH>Парадигма того языка в который происходит переписывание ни на что не влияет. Ваще. Совсем.

WH>Нам просто не нужно думать о том, как мы будет поддерживать генерируемый код.

Это заблуждение. Максимум продуктивности только на одном единственном языке, ну может двух. Отсюда следует, что тебе надо или N-тривиальных дсл, что практически ЯОН, или один-два-три на весь домен. Построй на досуге тот самй ДСЛ для инвентаризации, ну или для складского учета, или страхования и тебе все станет ясно.

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


Типичный проект любой из контор-гигантов представляет собой чудовище из самых разных кусков писаных в разные времена неизвестно кем, меняются команды, руководители, технологии, а код остаётся. И вдруг случается чудо — требования изменились, кому то надо разобраться в твоем ДСЛ что бы заимпрувить его. В большом проекте я буквально не знаю, какая часть что и как делает, то есть вообще. И дело не в количестве кода,а в количестве требований, которые надо усвоить что бы более-менее адекватно представлять происходящее. Соответсвенно если ктото до меня использовал дсл или просто другой язык, эту часть приходится при необходимости подымать с большим трудом, потому что во первых, никого нет из тех кто начинал, во вторых, требования изменились слишком сильно(иначе вопрос бы не стоял) и варианты такие — прикруть сбоку мульку, разобраться с ДСЛ и расширить его, или вообще переписать все.
Как ты понимаешь, выбирается тот вариант, который заапрувит бизнес. Мулька сбоку как правило оказывается проще, чем хотя бы разобраться в ДСЛ. Потому до того, как ДСЛ полностью выдохнется, он обрастет вагоном хаков, костылей и подпорок к этим костылям.
The animals went in two by two, hurrah, hurrah...
Re[36]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 19:24
Оценка:
Здравствуйте, WolfHound, Вы писали:

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

WH>Один из этих элементом это модель вычисления языка, на котором всё это будет реализовано. Дизайны решений для реализации на хаскеле и на C# не будет иметь между собой ничего общего. При этом будут содержать кучу мусора, которая к задаче не относится.

Это смотря какие требования. Как только доходит дело до взаимодействия, как во всех функциональных языках появляется эмуляция ООП. Если тебе придет в голову написать на хаскеле хотя бы полноценный richedit, сразу станет ясно, что к чему.
The animals went in two by two, hurrah, hurrah...
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 19:28
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Тот код, который получается в результате переписывания, вообще никого не волнует.


Он что, сам пишется и сам выполняется и сам же отлаживается ?

WH>И для того чтобы переписать код написанный на ДСЛ в C# тебе не нужно уметь делать ОО дизайн. О дизайне результата вообще думать не надо.


ДСЛ и есть дизайн. Эта задача на порядок сложнее чем та о которой ты говоришь.

WH>Ибо ты можешь генерировать любой говнокод.

WH>Лишь бы работал.
WH>А всё по тому, что генерируемый код не требует поддержки.

Это слишком сильное утверждение.
The animals went in two by two, hurrah, hurrah...
Re[38]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 18.03.13 19:45
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ага, конечно.

WH>Почитай флеймы на тему что от чего ножно наследовать.
WH>Квадрат от прямоугольника или наоборот.

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

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

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

При этом задача проектирования взаимодействия на порядок сложнее.

WH> Вот только в результате этого шажка появляется куча не относящегося к делу кода.


Это не важно. Нормальный дизайн в какой нибудь большой области хорошо если получится родить за пару-тройку лет. За такое время можно выразить в С# чуть не любое решение.

T>>А что с чем сравнивать ? Вот если представить твой пример в виде ДСЛ, то получится например так, минимальный набор

WH>Отставить изобретать другие языки.

А можно я буду лучше знать, о чем же я говорил ?

WH>Покажи мне инверсию управления в приведенном коде.


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

T>>Я знаю точно, что именно им мешает. В обычном программировании они видят код и этот код яляется собственно решением задачи.

WH>А еще они видят кучу лапши из классов, паттернов накрученных над классами и прочего бреда.
WH>Вот это всё очень сильно мешает.

Не фатально. Когда они не видят код решения основной задачи, они вообще ничего не могут сделать. А это уже фатально.

T>>В метапрограммировании код уже не является решением задачи, он является решением задачи по генерации кода решения основной задачи.

WH>Это как это не является?

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

WH>Вот это что такое?

WH>https://github.com/rampelstinskin/ParserGenerator/blob/master/N2/N2.Grammar/GrammarParser2.n2
WH>Это код решающий задачу разбора данного языка.

Это общий случай МП, я так понимаю ? Ну и предполагается, что студент, который пишет на С#, внезапно каким то чудом поймет такие вещи ?

T>>Даже с шаблонами, квазицитированием не все гладко — вместо того, что бы "посмотреть" нужно дополнять код из некоторого контекста. Соотственно продуктивность с МП у студентов много хуже чем без МП.

WH>Проверял?

А как же.
The animals went in two by two, hurrah, hurrah...
Re[35]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 18.03.13 20:06
Оценка:
T> В большинсве бизнес-приложений такой момент никогда не наступает, вот в чем проблема, бизнес зачастую сам не дает до конца формализовать задачу, никто не будет ждать пока ты формализуешь и родишь ДСЛ под такую область как инвентаризация.

Хохо-хо. Инвентаризация — это слишком просто. Можно попытаться описать такую область, как выдача микрокредитов (риски + оплата нам от магазинов + оплата нам от клиентов + оплата от нас магазинам + оплата от нас клиентам + dunning + debt collection, и все это замешано на рассрочках, кампаниях, прямых и отложенных оплатах, разных условиях для разных стран, валют и магазинов, и все еще сливается в бухгалтерию, как нашу, так и магазинов).


dmitriid.comGitHubLinkedIn
Re[40]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.13 00:45
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Ага-ага. Потом такой вот гений уволится, а нагенерированый его поделкой говнокод будет вылезать боком в самых неожиданных местах, ага.


А действительно будешь править нагенерированный говнокод, а не код на ДСЛ и кодогенератор? Тогда конечно вылезет боком. Но это как раз об этом в той пословице говорилось — "Заставь дурака богу молиться он лоб расшибет.".

В твоем мышлении есть одна ошибка. Ты почему-то не верно оцениваешь сложность поддержки рукописного кода. Если решения задачи можно сгенерировать по существенно более простой/короткой/ясной модели, то сравнимое по характеристикам рукописаное решение будет несоизмеримо сложно. И поддерживать его будет сложно просто из-за огромного объема кода и неизбежных для такого объема ошибок в проектировании и реализации.

Чем более концептуальная ошибка/изменение, тем сложнее ее устранить/сделать в рукописном коде. В решение же на базе ДСЛ и кодогенерации это не критично, так как изменив код генератора можно устранить ошибку без полного переписывания кода.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IO Украина  
Дата: 19.03.13 07:02
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Если решения задачи можно сгенерировать по существенно более простой/короткой/ясной модели, то сравнимое по характеристикам рукописаное решение будет несоизмеримо сложно. И поддерживать его будет сложно просто из-за огромного объема кода и неизбежных для такого объема ошибок в проектировании и реализации.


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

а вот в ДСЛ выбора нету — нужно переосмыслить и фиксить на корню

Ну и меньше кода — всегда лучше.
имхо
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.13 09:38
Оценка:
M>>Какой ценой? За счет чего? С использованием каких инструментов? Где и когда эти возможности будут и будут ли они вообще? Какова стоимость поддержки этих DSLей, написанный безымянными гениями? Вы же упорно избегаете этих вопросов, продолжая заливать уже опостылевшие сказки про то, что DSL — это мегакруто, мегапросто, мегадоступно, мега... мега... мега...

M>>Пока что реальность никакой мега не показывает (за исключением исчезающе малого количества DSLей, с каждым из которых есть свои дополнительные проблемы).


I>Да взять хотя бы Nemerle.PEG, попробуй попользоваться им, а потом попробуй напиши аналогичный парсер вручную.


Специально выделил выше.

I>Разговор ведь не о том, чтобы решать любую задачу написанием под неё DSL.

I>DSL помогает тогда, когда есть некоторое множество переиспользуемых алгоритмов, которые можно выразить в отдельном кратком языке, что значительно упрощает написание и поддержку кода, связанного с этими алгоритмами.

Кто занимается поиском ошибок в реализации этих DSLей? Их развитием, поддержкой, выявлением проблем с производительностью? Банальным обучением?


dmitriid.comGitHubLinkedIn
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: ionoy Эстония www.ammyui.com
Дата: 19.03.13 10:24
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Кто занимается поиском ошибок в реализации этих DSLей? Их развитием, поддержкой, выявлением проблем с производительностью? Банальным обучением?


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

Неужели использоние библиотеки настолько проще, чем использование DSL? Там и там придётся читать вводную статью и полистать примеры. Количество знаний в обоих случаях практически одинаково. Только DSL помимо функционала, предлагает сокращённый синтаксис, для того, чтобы повысить выразительность кода.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[40]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 19.03.13 10:42
Оценка:
Здравствуйте, Tanker, Вы писали:

WH>>Тот код, который получается в результате переписывания, вообще никого не волнует.

T>Он что, сам пишется и сам выполняется и сам же отлаживается ?
Ну да. Один раз написал ДСЛ, а дальше всё само.
Или хочешь сказать, тебя волнует тот машинный код, который получается в результате работы компилятора твоего любимого языка программирования? Я думаю, 99.999% программистов туда по делу ни разу не заглядывали.

WH>>А всё по тому, что генерируемый код не требует поддержки.

T>Это слишком сильное утверждение.
Это факт.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[37]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 19.03.13 10:42
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Это смотря какие требования. Как только доходит дело до взаимодействия, как во всех функциональных языках появляется эмуляция ООП. Если тебе придет в голову написать на хаскеле хотя бы полноценный richedit, сразу станет ясно, что к чему.

Вот сам и попробуй. Если делать нормальный для хаскеля дизайн, то он не будет иметь ничего общего с ООП. Совсем.
Хотя конечно есть мастера, которые на любом языке пишут как на фортране.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 19.03.13 11:19
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Реши ту же самую задачу в терминах хоть ФЯ, хоть макров, хоть мега-дсл и перед тобой встанут те же самые проблемы.

Не встанут. Уж точно не те же.

T>При этом задача проектирования взаимодействия на порядок сложнее.

Взаимодействия чего?

T>Это не важно. Нормальный дизайн в какой нибудь большой области хорошо если получится родить за пару-тройку лет. За такое время можно выразить в С# чуть не любое решение.

Нормальный дизайн для C#.

T>>>А что с чем сравнивать ? Вот если представить твой пример в виде ДСЛ, то получится например так, минимальный набор

WH>>Отставить изобретать другие языки.
T>А можно я буду лучше знать, о чем же я говорил ?
Ты уходил от ответа.

T>Инверсия предполагает два варианта, один до, другой — после. Я показал тебе второй вариант, как сделать инверсию управления с помощью дсл и это именно то о чем я говорил изначально.

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

T>Не фатально. Когда они не видят код решения основной задачи, они вообще ничего не могут сделать. А это уже фатально.

Хватит эту глупость повторять.
Re[6]: Способно ли метапрограммирование заменить отдельные я
Автор: WolfHound
Дата: 03.02.11

Там пример код на ДСЛ и то во что он разворачивается.
Возьми двух студентов и попроси одного поправить первый вариант, а другого второй.
Например, набор ключевых слов изменить.

T>Это общий случай МП, я так понимаю ?

Что значит общий? Вполне конкретный.

T>Ну и предполагается, что студент, который пишет на С#, внезапно каким то чудом поймет такие вещи ?

То во что этот код разворачивается, он совершенно точно не поймёт. Никогда. См пример выше. Там про немного другой он очень похожий ДСЛ.

T>>>Даже с шаблонами, квазицитированием не все гладко — вместо того, что бы "посмотреть" нужно дополнять код из некоторого контекста. Соотственно продуктивность с МП у студентов много хуже чем без МП.

WH>>Проверял?
T>А как же.
Расскажи.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[40]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 19.03.13 11:19
Оценка:
Здравствуйте, Tanker, Вы писали:

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

Нельзя. Пока ты не поймешь, что парадигма определяет дизайн, ты не поймешь то о чём разговор.

T>Это заблуждение. Максимум продуктивности только на одном единственном языке, ну может двух.

Это не правда.

T>Как ты понимаешь, выбирается тот вариант, который заапрувит бизнес.

Бизнес ничего не утверждает. Ибо бизнес ничего в этом не понимает. Бизнес нанимает инженеров, которые решают.
И когда бизнес нанимает плохих инженеров, которым лень понять, как работает ДСЛ, проект загибается.
Привет Яха... Они наняли плохих инженеров, которые не хотели учить лисп.
В результате вместо N усилий на поддержку они затратили 1000N усилий на переписывание и потом начали тратить 10N усилий на поддержку.
В результате проект из лидера скатился в УГ. И сейчас Яха его даже продать не может.

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

Мулька с боку проще только когда у тебя мегатонны рукописного кода.
Те если у тебя 10 метров кода. И тебе через все методы нужно протащить новый параметр.
То в случае с рукописным кодом ты будешь делать подпорки.
А если этот код получается в результате работы генератора, то тебе для этого придется поправить несколько строк в генераторе.
Место в генераторе, как правило, очень легко ищется при помощи полнотекстового поиска.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[41]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 19.03.13 12:28
Оценка:
Здравствуйте, WolfHound, Вы писали:

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

WH>Нельзя. Пока ты не поймешь, что парадигма определяет дизайн, ты не поймешь то о чём разговор.

А еще сильнее дизайн определяет задача которую надо решить, требования и ограничения.

T>>Это заблуждение. Максимум продуктивности только на одном единственном языке, ну может двух.

WH>Это не правда.

T>>Как ты понимаешь, выбирается тот вариант, который заапрувит бизнес.

WH>Бизнес ничего не утверждает. Ибо бизнес ничего в этом не понимает. Бизнес нанимает инженеров, которые решают.

Бизнес утверждает == утверждает специалист на стороне бизнеса. Я думал это очевидно.

WH>И когда бизнес нанимает плохих инженеров, которым лень понять, как работает ДСЛ, проект загибается.


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

WH>Привет Яха... Они наняли плохих инженеров, которые не хотели учить лисп.

WH>В результате вместо N усилий на поддержку они затратили 1000N усилий на переписывание и потом начали тратить 10N усилий на поддержку.
WH>В результате проект из лидера скатился в УГ. И сейчас Яха его даже продать не может.

Поделись, откуда у тебя такие цифры и данные ? Надо полагать у тебя инсайдерская информация ?

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

WH>Мулька с боку проще только когда у тебя мегатонны рукописного кода.

Надо полагать освоение ДСЛ занимает секунды, правильно я тебя понимаю ?

WH>А если этот код получается в результате работы генератора, то тебе для этого придется поправить несколько строк в генераторе.

WH>Место в генераторе, как правило, очень легко ищется при помощи полнотекстового поиска.

Ну да, секунды на освоение ДСЛ, используемой архитектуры, секунды на изучение всех ограничений и требований. В какой сказке такое ?
The animals went in two by two, hurrah, hurrah...
Re[42]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 19.03.13 12:42
Оценка:
Здравствуйте, Tanker, Вы писали:

T>А еще сильнее дизайн определяет задача которую надо решить, требования и ограничения.

Ты просто катастрофически недооцениваешь влияние парадигмы.

T>Бизнес утверждает == утверждает специалист на стороне бизнеса. Я думал это очевидно.

Что за специалист на стороне бизнеса?
Расшифруй пожалуйста.

WH>>И когда бизнес нанимает плохих инженеров, которым лень понять, как работает ДСЛ, проект загибается.

T>В первую очередь специалист на таких позициях должен понимать доменную область на отлично. И как правило скилы таких инженеров в программировании будут послабее в силу того, что они все время тратят на вполне определенные задачи.
Что за позиция такая волшебная. Проясни.

T>Поделись, откуда у тебя такие цифры и данные ? Надо полагать у тебя инсайдерская информация ?

Цифры я наблюдаю на реальных проектах.
А про то, что яха этот проект попыталась продать, и никто не позарился в интернете написано.

WH>>Мулька с боку проще только когда у тебя мегатонны рукописного кода.

T>Надо полагать освоение ДСЛ занимает секунды, правильно я тебя понимаю ?
Ну, зачем же так передергивать.
Не секунды. Но минимум на порядок меньше чем мегатонны рукопашного кода.

T>Ну да, секунды на освоение ДСЛ, используемой архитектуры, секунды на изучение всех ограничений и требований. В какой сказке такое ?

Ну, про секунды это ты придумал и теперь споришь.
Но то, что ДСЛ изучить на порядки проще это факт.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[40]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 19.03.13 12:47
Оценка:
Здравствуйте, WolfHound, Вы писали:

T>>Реши ту же самую задачу в терминах хоть ФЯ, хоть макров, хоть мега-дсл и перед тобой встанут те же самые проблемы.

WH>Не встанут. Уж точно не те же.

Именно те же и встанут. Возьми любую задачу, которую мусолят в ООП форумах и реши на чем угодно , немерле, макры, хаскель, лисп. Хочешь сравнивать дизайны одной и той же задачи в разных языках — реши задачу типичную для ООП в C# на хаскеле том же. Ну вот ричэдит полноценный напиши или хотя бы почтовый клиент.

T>>Это не важно. Нормальный дизайн в какой нибудь большой области хорошо если получится родить за пару-тройку лет. За такое время можно выразить в С# чуть не любое решение.

WH>Нормальный дизайн для C#.

Это не важно.

T>>>>А что с чем сравнивать ? Вот если представить твой пример в виде ДСЛ, то получится например так, минимальный набор

WH>>>Отставить изобретать другие языки.
T>>А можно я буду лучше знать, о чем же я говорил ?
WH>Ты уходил от ответа.

Я показал тебе именно то, о чем говорил изначально.

T>>Инверсия предполагает два варианта, один до, другой — после. Я показал тебе второй вариант, как сделать инверсию управления с помощью дсл и это именно то о чем я говорил изначально.

WH>ДСЛ это прежде всего язык.
WH>Если ты считаешь, что один язык инвертирует управление, то почему ты считаешь, что другой не инвертирует?

Давно опохмелялся ? Я тебе сказал, что пример твой невалидный, неполный, некорректный. Не надо фантазировать без повода.

T>>Не фатально. Когда они не видят код решения основной задачи, они вообще ничего не могут сделать. А это уже фатально.

WH>Хватит эту глупость повторять.
WH>Re[6]: Способно ли метапрограммирование заменить отдельные я
Автор: WolfHound
Дата: 03.02.11

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

Это некорректный пример. В этой области уже давно используется метапрограммирование, наверное лет 50. А ты попробуй таки показать перформанс в инвентаризации, страховании, кредитовании и тд и тд и тд. Сразу скажу — ты быстро сдуешься. Потому что здесь за тебя уже давно формализовали все что только можно, только оптимизации и модификации перебирай. А вот в инвентаризации все очень непросто и она никогда не будет формализована.
Кроме того, типичные задачи это не набор ключевых слов изменить, а изыскать например баг в связывании. N сценариев работает хорошо, N+1 выдает погрешность. Все, приехали, это задачка уже не для студента, потому что надо знать как работает конкретный ДСЛ изнутри.

T>>Это общий случай МП, я так понимаю ?

WH>Что значит общий? Вполне конкретный.

Значит не интересно.

T>>Ну и предполагается, что студент, который пишет на С#, внезапно каким то чудом поймет такие вещи ?

WH>То во что этот код разворачивается, он совершенно точно не поймёт. Никогда. См пример выше. Там про немного другой он очень похожий ДСЛ.

Опаньки. А как ты собираешься специалистов готовить ? Это все равно что сказать, что разработчики gcc не понимают, во что же код разворачивается.

T>>А как же.

WH>Расскажи.

Уже рассказал, читай внимательнее.
The animals went in two by two, hurrah, hurrah...
Re[38]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 19.03.13 12:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Вот сам и попробуй. Если делать нормальный для хаскеля дизайн, то он не будет иметь ничего общего с ООП. Совсем.


На хаскеле никто в своем уме не пробует решать такие задачи, за которые берутся плюсовики, джависты или дотнетчики. Покажи полноценный ричэдит на хаскеле, сразу будет ясно, что к чему.
The animals went in two by two, hurrah, hurrah...
Re[43]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 19.03.13 13:13
Оценка:
Здравствуйте, WolfHound, Вы писали:

T>>А еще сильнее дизайн определяет задача которую надо решить, требования и ограничения.

WH>Ты просто катастрофически недооцениваешь влияние парадигмы.

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

T>>Бизнес утверждает == утверждает специалист на стороне бизнеса. Я думал это очевидно.

WH>Что за специалист на стороне бизнеса?
WH>Расшифруй пожалуйста.

Очень просто. Бизнес нанимает специалиста который 1 будет понимать и достигать цели бизнеса 2 понимает специфику бизнеса 3 понимает разработку и может ею управлять
Этот специалист и будет аппрувать предложения девелоперов. С точки зрения бизнеса мелкий хак который уже завтра можно отрелизить, то есть, тупо фактически технический долг на ровном месте, очень выгоден, потому что выплатить этот долг можно будет самыми разными вариантами. А если ты захочешь пофиксать ДСЛ, то это уже не получится просто так, надо 1 разобраться 2 убедиться что нет влияний на другие модули ,т.к. дсл применяется тотально 3 провести через все фазы релиза. И вот с точки зрения бизнеса это уже очень не гибко, т.к. компенсировать это время скорее всего просто так не получится.

WH>>>И когда бизнес нанимает плохих инженеров, которым лень понять, как работает ДСЛ, проект загибается.

T>>В первую очередь специалист на таких позициях должен понимать доменную область на отлично. И как правило скилы таких инженеров в программировании будут послабее в силу того, что они все время тратят на вполне определенные задачи.
WH>Что за позиция такая волшебная. Проясни.

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

T>>Поделись, откуда у тебя такие цифры и данные ? Надо полагать у тебя инсайдерская информация ?

WH>Цифры я наблюдаю на реальных проектах.

Ты выдал некоторые соотношения касательно стоимости поддержки конкретного проекта в конкретной конторе. Мне интересно знать, откуда эти соотношения взялись.

WH>А про то, что яха этот проект попыталась продать, и никто не позарился в интернете написано.


Это ничего не значит.

WH>>>Мулька с боку проще только когда у тебя мегатонны рукописного кода.

T>>Надо полагать освоение ДСЛ занимает секунды, правильно я тебя понимаю ?
WH>Ну, зачем же так передергивать.
WH>Не секунды. Но минимум на порядок меньше чем мегатонны рукопашного кода.

А "мулька сбоку" это обычно хак в пару строчек-пару страниц кода. Например так — есть парсер, который валится на одном из выражений. "Мулька сбоку" — пропатчить выражения "в лоб" без модификации парсера.

T>>Ну да, секунды на освоение ДСЛ, используемой архитектуры, секунды на изучение всех ограничений и требований. В какой сказке такое ?

WH>Ну, про секунды это ты придумал и теперь споришь.
WH>Но то, что ДСЛ изучить на порядки проще это факт.

На порядке проче чего ? Когда на проекте меняется команда, то как правило баклог уже такой длины, что некогда заниматься дсл, надо блокеры месяцами фиксить. К тому моменту, как блокеры пофиксятся, твой ДСЛ уже гарантировано будет покрыт костялями и подпорками.
The animals went in two by two, hurrah, hurrah...
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.13 13:26
Оценка:
M>>Кто занимается поиском ошибок в реализации этих DSLей? Их развитием, поддержкой, выявлением проблем с производительностью? Банальным обучением?

I>Кто занимается поиском ошибок в реализации библиотек? Их развитием, поддержкой, выявлением проблем с производительностью? Банальным обучением?


I>Неужели использоние библиотеки настолько проще, чем использование DSL? Там и там придётся читать вводную статью и полистать примеры. Количество знаний в обоих случаях практически одинаково.


Да неужели. Тут уже несколько лет апологеты DSL наперебой рассказывают сказки, что нет, вы что, все гораздо легче, быстрее, документируемее. А уж инструменты для разработки!!! (отсутсвующие, естественно).

Любая IDE для худшего из языков С++ даст многокилометровую фору любому инструменту для самого успешного из DSL-ей — SQL'ю, например. Не хочешь пофиксить баги в оптимизаторе SQLя для MySQL, например?


I>Только DSL помимо функционала, предлагает сокращённый синтаксис, для того, чтобы повысить выразительность кода.


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


dmitriid.comGitHubLinkedIn
Re[42]: А при чем тут DSL? (в продолжении темы о языках обще
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.13 14:10
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Нет, придется править DSL или кодогенератор. Кто сказал, что это будет просто? Ах, да, Вульфхаунд это сказал, и мы ему все моментально поверили, ага-ага.


Никто этого и не говорил. Но это будет проще чем править аналогичный генерированному код написанный руками.


VD>>В твоем мышлении есть одна ошибка. Ты почему-то не верно оцениваешь сложность поддержки рукописного кода.


M>Я прекрасно оцениваю сложность поддержки рукописного кода, благо работаю сейчас но кровавый энтерпрайз ©


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

VD>>Если решения задачи можно сгенерировать по существенно более простой/короткой/ясной модели, то сравнимое по характеристикам рукописаное решение будет несоизмеримо сложно. И поддерживать его будет сложно просто из-за огромного объема кода и неизбежных для такого объема ошибок в проектировании и реализации.


M>О да, а в DSL не будет ни ошибок проектирования, ни ошибок реализации, ага-ага.


Это ты опять выдумал. Такого никто не утверждал. Не будет непреодолимой сложности в поддержке. А ошибки, конечно же, неизбежны. Вот только чтобы изменить рукопашное решение обычно нужно его переписать чуть меньше чем полностью, а при наличии МП только изменить МП-код. Объем изменений будет не сопоставим. Мы за последние пол года делали это уже раз 10. А вот для кода немерлового компилятора не можем проделать куда меньших изменений из-за того, что код написан вручную.

VD>>Чем более концептуальная ошибка/изменение, тем сложнее ее устранить/сделать в рукописном коде. В решение же на базе ДСЛ и кодогенерации это не критично, так как изменив код генератора можно устранить ошибку без полного переписывания кода.


M>Да-да-да. Ведь кодогенераторы написаные гениями без единого коммнетария так легко править!


Опять выдумываешь. Дело не в том кто написал кодогенерацию, а в том, что объем кода несопоставим. Код годогенертора в десятки или сотни раз меньше генерируемого кода. И что намного важнее между кодом генерирующим код и генерируемым кодом нет зависимостей. Мы просто имеем некоторую модель (выраженную в виде ДСЛ или еще как-то) и генерирующий код. Последний читает модель и генерирует конечный код. В любой момент можно начать генерировать координатор иной код.

В рукописном же решении неменуемо появляется сильная связанность. Одни части системы зависят от других. Код который мог бы быть сформирован автоматически по модели написан вручную и имеет множество частных решений, которые требуют ручного управления при рефакторинге. В сумме это приводит к сильному усложнению глобальных изменений в коде, в плоть до полной их невозможности за приемлемое время.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[42]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.13 14:13
Оценка:
Здравствуйте, IO, Вы писали:

IO>+ при рукописном решении намного больше соблазн пофиксить подпоркой "вот тута, где оно глючит", а не разбираться в глубинных причинах, зачастую в кривости архитектуры, симптом которой проявился в ошибке


IO>а вот в ДСЛ выбора нету — нужно переосмыслить и фиксить на корню


Подпорки можно и генерировать. Но, абсолютно согласен, желания делать подпорки возникает куда реже просто потому, что сделать полноценное решение намного проще.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.13 15:31
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Кто занимается поиском ошибок в реализации этих DSLей? Их развитием, поддержкой, выявлением проблем с производительностью? Банальным обучением?


По разному. Все в точности как с библиотеками. Когда авторы, когда комьюнити, когда фирма производитель.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 19.03.13 15:50
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Разговор ведь не о том, чтобы решать любую задачу написанием под неё DSL.


А разве не про это говорит WH ?
The animals went in two by two, hurrah, hurrah...
Re[21]: Кстати, про PEG
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.13 16:03
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Да, взять бы. https://github.com/rsdn/nemerle/tree/master/snippets/peg-parser


M>1. Ты абсолютно на 100% уверен, что это правильная реализация PEG?


Уверен в большей степени нежели в любом классе из библиотеки дотнета.

M>Количество тестов для этой реализации равно примерно нулю


Обожаю телепатов.
Не говоря уже об отдельных тестах PegGrammar используется в самом Nemerle для прсинга C# (Nemerle умеет компилировать C#-файлы). Так что он тестируется непосредственно в тестах немерла. Зайди вот сюда и поищи файлы с расширением ".cs".

M>2. В случае возникновения ошибок в парсере/генерации кода, сколько времени тебе понадобится найти и изменить ошибку,


Пока что больше часа эта задача не занимала.

M>имея на руках два-три десятка исходников без комментариев и завязанных на неизвестно количество макросов, определенных неизвестно где, и неизвестно, во что разворачивающихся?


А это все твои выдумки. И комментарии можно добавить (и они есть). На что код завязан тоже легко ищется. Он же квази-цитатами генерируется. Так что соответствие между генерируемым кодом и шаблонами находится под подвыражениям на раз.

M>Автор этого добра написал это добро, которое, цитирую «может генерировать любой говнокод с нарушением всех правил хорошего тона результирующего языка, за нарушение которых при ручной работе нужно отрывать руки», и уволился из компании. Через два дня это добро начало вылезать боком изо всех щелей. Что будешь делать? Продолжать вещать сказки про «ах-ах-ах, все так прекрасно»?


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

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

То что кучу сложного кода может поддерживать кто угодно вот это и есть реальная сказка.

M>Я и PEG пользуюсь и, скажем, SQL'ем или каким-нибудь гремлином с cypher'ом. Вот только не надо рассказывать ничем не подкрепленные сказки про мега...мега...мега... DSLей.


Ярлыки "сказки" и "мега" приклеиваешь ты сам. Лично я пользуюсь МП и ДСЛ-ями каждый день и вижу очевидное преимущество этого подхода на реальных задачах. Не скажу, что ДСЛ и МП — это мега круто, но это очень мощный инструмент применение которого с умом дает очень много.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[43]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IO Украина  
Дата: 19.03.13 16:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Подпорки можно и генерировать. Но, абсолютно согласен, желания делать подпорки возникает куда реже просто потому, что сделать полноценное решение намного проще.


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

DSL позволяет выделить чистое знание в отдельний слой. Польза самоочевидна.
Re[44]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 19.03.13 18:27
Оценка:
Здравствуйте, Tanker, Вы писали:

T>А "мулька сбоку" это обычно хак в пару строчек-пару страниц кода. Например так — есть парсер, который валится на одном из выражений. "Мулька сбоку" — пропатчить выражения "в лоб" без модификации парсера.

Чё за бред!?
Ты реально предлагаешь править текст, перед тем как давать его парсеру?
Ахринеть не встать.
Пожалуй, разговор на этом можно закончить.
Я понял, с кем разговариваю.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[46]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 19.03.13 19:21
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>например, то же ядро линукса под специфическое реальное примение патчится именно таким способом.

Ты хочешь сказать, что правки ядра лежат не в git'е и мержаться с обновлением, а вот прямо так на лету, перед тем как скормить их gcc патчаться каким то кодом?
Ты серьёзно?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[47]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 19.03.13 19:40
Оценка:
WH>Ты хочешь сказать, что правки ядра лежат не в git'е и мержаться с обновлением, а вот прямо так на лету, перед тем как скормить их gcc патчаться каким то кодом?

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

Если делать по твоему, то при каждом обновлении — попадаешь на кучу ручной работы.
Re[47]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 19.03.13 20:09
Оценка:
Здравствуйте, WolfHound, Вы писали:

DG>>например, то же ядро линукса под специфическое реальное примение патчится именно таким способом.

WH>Ты хочешь сказать, что правки ядра лежат не в git'е и мержаться с обновлением, а вот прямо так на лету, перед тем как скормить их gcc патчаться каким то кодом?
WH>Ты серьёзно?

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

Поскольку речь не про тебя, то очевидно, что вот в таких билдах и речи не может быть про качественный фикс. В коде с которым приходилось заниматься, я видел примеры реальных ДСЛ, парсеров, генераторов которые были обложены костылями, и подпорками к этим костылям. Даже такое видел — патчи которые накладывались на генереный код и это было прописано в настройках билда. Более того — настройки для мерджа, что бы частично мерджить некоторые файлы, так как правильная схема работала неправильно, потому что код использовал самые невероятные хаки.

Собтсвенно вопрос — что делать девелоперу, если у него есть один рабочий день, ошибка где то унутре ДСЛ, а он проект видит второй день, ни архитектуры, ни предметной области, ни дсл, не знает.
Хочу увидеть внятный ответ типа: "Надо посылать всех нахрен и идти разбираться с ДСЛ, потому что это важнее чем десяток блокеров в баклоге"
The animals went in two by two, hurrah, hurrah...
Re[44]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.13 23:41
Оценка:
Здравствуйте, IO, Вы писали:

IO>т.е. имеем подход, который сам по себе сопротивляется загниванию кода...


Как говорится, сами только кошки родятся. И то у меня есть большие сомнения по этому поводу.

МП и ДСЛ сами по себе от загнивания не страхуют. Они просто делают перетрахивание ((с) Лукашенко) проекта подъемной задачей.

IO>Еще аргумент. В любой программе на языке общего назначения в единую кашу замешано "что надо сделать" и "как сделать".

IO>Чистое знание о предметной области размазано, растворено в реализации. Его очень тяжело выделить, изучить, найти в нем ошибку, изменить. Крупицы кода, которые несут знание, теряются в полотнах реализации.

Именно так. Причем проблема размазывания обратно пропорционально объему кода умноженному на количество аспектов в коде.

По сути ДСЛ/модель + МП позволяет представить код в виде матрицы, где по вертикали располагается код на ДСЛ, а по горизонтали МП-код. Их перемножение и дает конечный код решающий задачу. Аналогичный рукописный код имеет сходный генерируемому объем кода. Именно это определяет синергизм данного подхода. Правим относительно мало кода, получаем решение содержащее много кода. При ручном же решении приходится разбираться в этом самом большом объеме кода. При этом ту самую модель, порой, приходится вычислять путем реинженерии/угадывания.

IO>DSL позволяет выделить чистое знание в отдельний слой. Польза самоочевидна.


+1

А МП обеспечить разнообразие путей материализации знания в код и относительно легкий способ изменения способа этой материализации (и используемых алгоритмов).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.13 00:31
Оценка:
Здравствуйте, C.A.B, Вы писали:

CAB>Сначала давай определимся что же такое метапрограммирование?


Давай

CAB>В моём понимании это процесс собственно создания метасредств, например макросов, DSL'ей и других программ создающих программы.


ДСЛ-и тут не причем. Точнее ДСЛ-и вполне могут использоваться для МП, но ДСЛ != МП. Вот МП может быть применено при разработке ДСЛ. Это — да.

CAB>А так как метасредства не являются voodoo, нужна некоторая вычислительная модель(модель вычислений), чтобы заставить это всё работать.


Тут лучше остановиться и определиться с термином вычислительная модель. Машина Тюринга или лябмбда-исчисления Черча вполне пригодная модель для МП.

Если серьезно, то тут главное понимать, что модель вычислений мета-средства никак не связан с моделью вычисления получаемой программы. Это, пожалуй, главное достоинство МП. Пы просто генерируем то решение (алгоритм), которое нам нужно. А то как мы это делает рояли не играет.

CAB>Например в препроцессоре С этой моделью есть банальная подстановка текста.


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

CAB>Программирование с использованием метасредств(т.е. кода уже используется только модель задачи), ИМХО, называть МП не корректно, т.к. в это случае совершенно не обязательно знать о том как работает МП, и даже о том что оно существует.


Это какой-то поток сознания. Видимо ты имел в виду ДСЛ (или язык программирования вообще). Ну, да программирование на языке программирования не обязано быть метапрограммированием. А вот написание компилятора или интерпретатора является разновидностью МП. Только это бесполезные знания.

CAB>Это ведь уже не программирование, это кодогенерация.


Как сказал мой брат — "Помилуйте! Какой хлопок?! Это стопроцентный coon!". Если серьезно, то кодогенерация — это разновидность метапрограммирования. МП > кодогенерации, так как МП может осуществляться за счет других средств. Например, за счет модификации кода/объектов на лету.

CAB>Зачем все? Думаю достаточно МП + то во что оно будет разворачиваться.


Затем, что ты, как автор метапрограммы, определяешь, что будет генерировать тво метапрограмма. И если ты не знаком с ООП, то не сможешь сгенерировать полноценныое ОО-решение.

Кстати, вычислительные модели ДСЛ-ей не обязаны быть парадигмамами. Это может быть куда более простая модель. Например, моделью вычислений может быть конечный автомат (как в регулярных выражениях) или сеть зависимостей (как в make/Ant/MSBuild).

Кстати, ты наверно даже не думал о том, что файл проекта в VS написан на ДСЛ. Верно?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.13 01:05
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Это не важно. Нормальный дизайн в какой нибудь большой области хорошо если получится родить за пару-тройку лет. За такое время можно выразить в С# чуть не любое решение.


Вот это и есть твое главное заблуждение. За первый год из этой тройки ты выразишь не дизайн большой области, а свое неверное представление о нем сформированное при первом приближении. И когда через год ты поймешь это, то у тебя останется только две возможности переписать свое решение с нуля или заняться глубоким его рефакторингом. Тоже самое повторится на следующий год. И так до тех пор пока станет невмоготу.

С ДСЛ + МП у нас есть возможность учитывать в системе вновь открывшиеся знания путем изменения метакода и рефакторинга кода на ДСЛ. Это не то что бы просто проще. Это просо дает возможность удерживать проект в актуальном виде и не захламлять его подпорками и костылями.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[48]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 20.03.13 06:57
Оценка:
Здравствуйте, DarkGray, Вы писали:

То о чем говорит танкер совсем другой случай. Он предлагает вместо того чтобы фиксить баг написать код который будет патчить код который поступает на вход парсеру.

DG>Если делать по твоему, то при каждом обновлении — попадаешь на кучу ручной работы.

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

Короче всё выглядит, так что кто-то накосячил и развел под это дело кучу идеологии.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[46]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 20.03.13 07:00
Оценка:
Здравствуйте, Tanker, Вы писали:

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

Ты считаешь это приемлемым решением проблемы. Для меня этого достаточно.
Ибо вторая такая мулька обязательно начнет иногда конфликтовать с первой и привет пара недель отладки.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[42]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 20.03.13 07:04
Оценка:
Здравствуйте, FR, Вы писали:

FR>То есть МП я люблю, и когда раньше интенсивно писал на питоне, широко использовал, но вашего оптимизма

FR>насчет его широкого применения не разделяю, по моему порог вхождения слишком высок.
Ну да. Порог вхождения в МП на питоне действительно большой.
Да и порог вхождения в сам питон просто огромен. Хотя и выглядит маленьким ибо простые вещи можно начать писать сразу но то что больше "привет мир"
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[43]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: FR  
Дата: 20.03.13 07:14
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ну да. Порог вхождения в МП на питоне действительно большой.


И в С++ огромный, и в D большой, и даже в схеме с фортом не маленький.
Почему-то люди боятся/(не понимают как) писать код который пишет код.

WH>Да и порог вхождения в сам питон просто огромен. Хотя и выглядит маленьким ибо простые вещи можно начать писать сразу но то что больше "привет мир"


Ты не прав, но флеймить нет желания
Re[47]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 20.03.13 07:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

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

WH>Ты считаешь это приемлемым решением проблемы. Для меня этого достаточно.

Я считаю, что в первую очередь нужно свои цели согласовывать с целями бизнеса. Очень часто люди со стороны бизнеса продавливают хаки. Раньше мне это категорически не нравилось. Сейчас я понимаю, почему они так поступают.
Хак это всего лишь технический долг. Вопрос в том, как дешевле всего этот долг вернуть и часто бывает так, что возврат таких долгов вообще ничего не стоит.
Нужно смотреть с точки зрения инвестирования времени в разработку. Каждый функционал имеет свой срок окупаемости. Каждый фикс требует бюджет и время.

WH>Ибо вторая такая мулька обязательно начнет иногда конфликтовать с первой и привет пара недель отладки.


Про то и речь. Только пары недель отладки может и не быть, например потому, что бизнес решит использовать другую платформу или наоборот, начнет глобальную переделку всего проекта, или спихнет суппорт со всеми багами в другое подразделение, или сделает откат изменений после того как продакшн заработает и тд и тд и тд.
The animals went in two by two, hurrah, hurrah...
Re[40]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 20.03.13 08:11
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вот это и есть твое главное заблуждение. За первый год из этой тройки ты выразишь не дизайн большой области, а свое неверное представление о нем сформированное при первом приближении. И когда через год ты поймешь это, то у тебя останется только две возможности переписать свое решение с нуля или заняться глубоким его рефакторингом. Тоже самое повторится на следующий год. И так до тех пор пока станет невмоготу.


Рефакторинг, если применяется правильно, то это не раз в год а постоянный процесс. Через год у тебя и ДСЛ будет совсем не тот, что нужен. И дальше точно так же или переписывать, или рефакторить или забить.

> Это не то что бы просто проще. Это просо дает возможность удерживать проект в актуальном виде и не захламлять его подпорками и костылями.


Подпорки и костыли растут вовсе не от недостатка ДСЛ и метапрограммирования. И мне совсем не ясно, как ты вычислил эту простоту, вроде инструментов рефакторинга ДСЛ и метакода пока что нет
The animals went in two by two, hurrah, hurrah...
Re[40]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: C.A.B LinkedIn
Дата: 20.03.13 08:29
Оценка:
Здравствуйте, VladD2, Вы писали:
CAB>>В моём понимании это процесс собственно создания метасредств, например макросов, DSL'ей и других программ создающих программы.
VD>ДСЛ-и тут не причем. Точнее ДСЛ-и вполне могут использоваться для МП, но ДСЛ != МП. Вот МП может быть применено при разработке ДСЛ. Это — да.
DSL'и тут для примера, того что можно сделать с помощью МП.

CAB>>А так как метасредства не являются voodoo, нужна некоторая вычислительная модель(модель вычислений), чтобы заставить это всё работать.

VD>Тут лучше остановиться и определиться с термином вычислительная модель. Машина Тюринга или лябмбда-исчисления Черча вполне пригодная модель для МП.
Вероятно WolfHound вкладывал
Автор: WolfHound
Дата: 17.03.13
несколько иной смысл в этот термин.

VD>Если серьезно, то тут главное понимать, что модель вычислений мета-средства никак не связан с моделью вычисления получаемой программы.

Тем не менее эта модель существует, и создаёт свои проблемы и ограничения, точно так-же как и в ООП.

Думаю ты согласишься что в вашем подходе есть два этапа: создание метасредств(МП) и их использование.

VD>Это, пожалуй, главное достоинство МП. Пы просто генерируем то решение (алгоритм), которое нам нужно.

Кода мы "просто генерируем" это уже не МП, это использование готовых метасредств.

VD>А то как мы это делает рояли не играет.

А "то как мы это делает" это как раз МП.

И по моему скромному мнению, вы недооцениваете сложность этапа "то как мы это делает".

CAB>>Программирование с использованием метасредств(т.е. кода уже используется только модель задачи), ИМХО, называть МП не корректно, т.к. в это случае совершенно не обязательно знать о том как работает МП, и даже о том что оно существует.

VD>Это какой-то поток сознания. Видимо ты имел в виду ДСЛ (или язык программирования вообще). Ну, да программирование на языке программирования не обязано быть метапрограммированием.
Почему только DSL? Это могу быть и макросы. Например я, когда писал на FASM'е, довольно долго использовал его макры особе не вникая как оно там работает внутри.

VD>А вот написание компилятора или интерпретатора является разновидностью МП.

Не совсем с этим согласен, всё таки, ИМХО, чаще под эти термином подразумевают макросы, шаблоны и т.п.

VD>Только это бесполезные знания.

Таких не бывает.

CAB>>Это ведь уже не программирование, это кодогенерация.

VD>Как сказал мой брат — "Помилуйте! Какой хлопок?! Это стопроцентный coon!". Если серьезно, то кодогенерация — это разновидность метапрограммирования.
Кодогенерация это процесс. Это часть МП, но не как не разновидность.

VD>МП > кодогенерации, так как МП может осуществляться за счет других средств. Например, за счет модификации кода/объектов на лету.

Возможно и может существовать, не знаю, но модификация кода/объектов также включают этап кодогенерации.

CAB>>Зачем все? Думаю достаточно МП + то во что оно будет разворачиваться.

VD>Затем, что ты, как автор метапрограммы, определяешь, что будет генерировать тво метапрограмма. И если ты не знаком с ООП, то не сможешь сгенерировать полноценныое ОО-решение.
Ok, в этом случае достаточно МП + ООП(напомню Tanker писал
Автор: Tanker
Дата: 18.03.13
"все базовые композиции — структурная, объектная, функциональная и тд нужно знать на зубок задолго до того, как берешься за метапрограммирование").

VD>Кстати, вычислительные модели ДСЛ-ей не обязаны быть парадигмамами. Это может быть куда более простая модель. Например, моделью вычислений может быть конечный автомат (как в регулярных выражениях) или сеть зависимостей (как в make/Ant/MSBuild).

Это уже реализация, не парадигма.

VD>Кстати, ты наверно даже не думал о том, что файл проекта в VS написан на ДСЛ. Верно?

Честно говоря я даже никогда не пользовался VS, так получилось
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: ionoy Эстония www.ammyui.com
Дата: 20.03.13 11:20
Оценка:
Здравствуйте, Mamut, Вы писали:

M>>>Кто занимается поиском ошибок в реализации этих DSLей? Их развитием, поддержкой, выявлением проблем с производительностью? Банальным обучением?


I>>Кто занимается поиском ошибок в реализации библиотек? Их развитием, поддержкой, выявлением проблем с производительностью? Банальным обучением?


I>>Неужели использоние библиотеки настолько проще, чем использование DSL? Там и там придётся читать вводную статью и полистать примеры. Количество знаний в обоих случаях практически одинаково.


M>Да неужели. Тут уже несколько лет апологеты DSL наперебой рассказывают сказки, что нет, вы что, все гораздо легче, быстрее, документируемее. А уж инструменты для разработки!!! (отсутсвующие, естественно).


Не для всех DSL нужны отдельные инструменты. Тот-же PEG работает в студии без дополнительных извращений.

M>Любая IDE для худшего из языков С++ даст многокилометровую фору любому инструменту для самого успешного из DSL-ей — SQL'ю, например. Не хочешь пофиксить баги в оптимизаторе SQLя для MySQL, например?


То есть, будь твоя воля, ты бы запросы вручную писал, минуя SQL, я правильно понимаю?

I>>Только DSL помимо функционала, предлагает сокращённый синтаксис, для того, чтобы повысить выразительность кода.

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

А кто говорит, что все DSL'и хороши? Каждому инструменту своя область применения, и если он в неё вписывается, то выразительность кода, действительно, значительно повышается.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: ionoy Эстония www.ammyui.com
Дата: 20.03.13 11:27
Оценка:
Здравствуйте, Tanker, Вы писали:

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


I>>Разговор ведь не о том, чтобы решать любую задачу написанием под неё DSL.


T>А разве не про это говорит WH ?


По моему нет, но я всю тему не читал.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[50]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 20.03.13 11:37
Оценка:
Здравствуйте, DarkGray, Вы писали:

WH>> Он предлагает вместо того чтобы фиксить баг написать код который будет патчить код который поступает на вход парсеру.

DG>Такое тоже часто встречал в проектах, в которых используется кодогенерация.
Чего? Причем тут вообще кодогенерация?
Или ты еще и на генерированный код патчи накладываешь?

DG>во-первых, теряется явное знание о том, что, как и зачем патчится.

А история комитов на что?

DG>во-вторых, проект прибивается гвоздями к конкретному экземпляру и ветке git-а.

А иначе он типа не прибивается?
Как ты собрался патчи накатывать на другой код?

DG>И это не из-за того, что разработчики были плохие, а из-за того, что это лучшее решение с точки зрения минимизации затрат и рисков.

Ты на самом деле в это веришь?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[20]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.13 13:14
Оценка:
VD>ДСЛ и МП — это ни разу не панацеи. Есть задачи которые вообще бессмысленно решать с их помощью (калькулятор, приведенный тут как-то, например). Но есть проблемы которые просто глупо решать без ДСЛ-ей и/или МП.

VD>Умные люди применяют ДСЛ-и и сейчас. Вот только возможности поддержки этих ДСЛ-ей крайне ограничены, а затраты времени на их создание велико.


VD>Мы же пытаемся изменить это. Снижение сложности создания и поддержки ДСЛ с уровня "хардкор" до уровня "средний пользователь, не дурак" вполне возможно.



Вот против такого объяснения, такого подхода к обсуждению и такого описания проблем тут никто на форуме вообще возражать не будет.


dmitriid.comGitHubLinkedIn
Re[43]: А при чем тут DSL? (в продолжении темы о языках обще
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.13 13:23
Оценка:
M>>Я прекрасно оцениваю сложность поддержки рукописного кода, благо работаю сейчас но кровавый энтерпрайз ©
VD>Ага. Вот и остальные странно оценивающие сложность люди и постоянно кивающие на дураков работают в этом самом энтерпрайзе. В нем явно что-то не так .

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

Наличие не десятка мелких а хотя бы двух DSL-ей, в синтаксисе и компиляторах/кодогенераторах которых разбирается даже не 10% человек, а два-пять человек приводит к серьезным и плохо прогнозируемым проблемам.

VD>>>Чем более концептуальная ошибка/изменение, тем сложнее ее устранить/сделать в рукописном коде. В решение же на базе ДСЛ и кодогенерации это не критично, так как изменив код генератора можно устранить ошибку без полного переписывания кода.


M>>Да-да-да. Ведь кодогенераторы написаные гениями без единого коммнетария так легко править!


VD>Опять выдумываешь. Дело не в том кто написал кодогенерацию, а в том, что объем кода несопоставим. Код годогенертора в десятки или сотни раз меньше генерируемого кода. И что намного важнее между кодом генерирующим код и генерируемым кодом нет зависимостей. Мы просто имеем некоторую модель (выраженную в виде ДСЛ или еще как-то) и генерирующий код. Последний читает модель и генерирует конечный код. В любой момент можно начать генерировать координатор иной код.


Легко предание, да верится... Нет, не верится.

VD>В рукописном же решении неменуемо появляется сильная связанность. Одни части системы зависят от других. Код который мог бы быть сформирован автоматически по модели написан вручную и имеет множество частных решений, которые требуют ручного управления при рефакторинге. В сумме это приводит к сильному усложнению глобальных изменений в коде, в плоть до полной их невозможности за приемлемое время.


О, а в вашем PEG-парсере, который раскидан по двум десяткам файлов без комментариев и без тестов (кроме как какого-то количества тестов в самом Немерле), который завязан на неизвестно количество вещей в самом Немерле, есть таки модель? Сколько времени понадобится человеку, который в глаза этот парсер не видел, исправить в нем ошибки и/или припилить к нему новый кодогенератор? Ну, например, чтобы можно было писать грамматику не inline в N-коде.


dmitriid.comGitHubLinkedIn
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.13 16:17
Оценка:
Здравствуйте, Mamut, Вы писали:

VD>>Мы же пытаемся изменить это. Снижение сложности создания и поддержки ДСЛ с уровня "хардкор" до уровня "средний пользователь, не дурак" вполне возможно.


M>Вот против такого объяснения, такого подхода к обсуждению и такого описания проблем тут никто на форуме вообще возражать не будет.


Да ладно. Еще как будут. И возражают.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[44]: А при чем тут DSL? (в продолжении темы о языках обще
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.13 16:22
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Наличие не десятка мелких а хотя бы двух DSL-ей, в синтаксисе и компиляторах/кодогенераторах которых разбирается даже не 10% человек, а два-пять человек приводит к серьезным и плохо прогнозируемым проблемам.


Реальность она несколько иная. При переходе на ДСЛ-и и кодогенерацию 100 человек заменяются десятью. Объем кода и его противоречивость так же ужимается в 10 раз. Выявляются и устраняются противоречивые ситуации. И проект из кучи навоза превращается в конфетку.

Нужно только найти толковых людей.

Хотя понимаю, найти толковых людей в энтерпрай, на разгребание говна не просто. Плюс еще платят там не всегда достойно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Кстати, про PEG
От: Tanker  
Дата: 20.03.13 19:15
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не говоря уже об отдельных тестах PegGrammar используется в самом Nemerle для прсинга C# (Nemerle умеет компилировать C#-файлы). Так что он тестируется непосредственно в тестах немерла.


Это не тот Nemerle-C# который не может скомпилировать BLT ? Аргумент не в пользу Peg, скажем так.
The animals went in two by two, hurrah, hurrah...
Re[45]: А при чем тут DSL? (в продолжении темы о языках обще
От: Tanker  
Дата: 20.03.13 19:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Реальность она несколько иная. При переходе на ДСЛ-и и кодогенерацию 100 человек заменяются десятью. Объем кода и его противоречивость так же ужимается в 10 раз. Выявляются и устраняются противоречивые ситуации. И проект из кучи навоза превращается в конфетку.


100 человек не потому, что надо кода много писать, а потому, что количество требований и ограничений велико.
The animals went in two by two, hurrah, hurrah...
Re[23]: Кстати, про PEG
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.03.13 17:54
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Это не тот Nemerle-C# который не может скомпилировать BLT ? Аргумент не в пользу Peg, скажем так.


Есть огромная разница между распарсить, и скомпилировать. Любой C# 4-код парсится без проблем.

К тому же компиляция BLT проходит. Но в немерле есть некоторые косяки которые приводят к падению скомпилированного кода в рантайме.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Кстати, про PEG
От: Tanker  
Дата: 22.03.13 07:24
Оценка:
Здравствуйте, VladD2, Вы писали:

T>>Это не тот Nemerle-C# который не может скомпилировать BLT ? Аргумент не в пользу Peg, скажем так.


VD>Есть огромная разница между распарсить, и скомпилировать. Любой C# 4-код парсится без проблем.

VD>К тому же компиляция BLT проходит. Но в немерле есть некоторые косяки которые приводят к падению скомпилированного кода в рантайме.

Компиляция и парсинг никому, кроме гиков, не нужны, если код падает в рантайме.
P.S. Приходишь ты в лабаз и говоришь — дайте мне BMV X5 последний. Они тебе дают и говорят — есть огромная разница между выпуском авто и кручением руля. У нас авто выпускаются без проблем. Да и руль крутить можно. Но есть некоторые косяки, из за которых X5 ехать не может.
The animals went in two by two, hurrah, hurrah...
Re[43]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.03.13 04:41
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Берем наследование прямоугольника от квадрата на примере иммутабельного списка. Новый класс внезапно добавляет методом Add не один, а два элемента. Ну то есть исправно возвращает новый список, но у него уже не на один элемент больше, а на два. Всё, приехали — модификации состояния нет, а проблема "прямоугольник от квадрата" как была, так и осталась.

Не вижу никакой проблемы. Сформулируйте её, пожалуйста, в этом примере.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[44]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 23.03.13 22:41
Оценка:
Здравствуйте, Sinclair, Вы писали:

T>>Берем наследование прямоугольника от квадрата на примере иммутабельного списка. Новый класс внезапно добавляет методом Add не один, а два элемента. Ну то есть исправно возвращает новый список, но у него уже не на один элемент больше, а на два. Всё, приехали — модификации состояния нет, а проблема "прямоугольник от квадрата" как была, так и осталась.

S>Не вижу никакой проблемы. Сформулируйте её, пожалуйста, в этом примере.

Представь себе метод, который дополняет список новыми операциями, скажем, новые проводки. Нечто вроде кеша, операции добавляются в список. Поработал пользователь с программой, сделал пару проводок, скажем 5 по 100 долларов, а в саммари видит счет на 1000 и если он не заметит подвоха, то оплатит счет на вдвое большую сумму. Вот это и есть наследование прямоугольника от квадрата.
The animals went in two by two, hurrah, hurrah...
Re[45]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.03.13 06:52
Оценка:
Здравствуйте, Tanker, Вы писали:

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

По-прежнему не понимаю проблемы. То, о чём вы говорите, можно сделать вообще без наследования.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[46]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.03.13 16:43
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>По-прежнему не понимаю проблемы. То, о чём вы говорите, можно сделать вообще без наследования.


Что именно не понятно, как код заточеный под контракт, может свалиться если контракт нарушается ? Можно вообще все писать без ооп, фп а обходиться одним процедурным программированием на ассемблере. Это ни о чем не говорит.
Re[46]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 24.03.13 17:01
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

S>По-прежнему не понимаю проблемы. То, о чём вы говорите, можно сделать вообще без наследования.

Контракт можно нарушить не используя никакого наследования. Мне вот непонятно, почему вдруг нарушение контракта возможно только в ООП или наследовании
The animals went in two by two, hurrah, hurrah...
Re[47]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.03.13 07:24
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Контракт можно нарушить не используя никакого наследования. Мне вот непонятно, почему вдруг нарушение контракта возможно только в ООП или наследовании

Потому, что проблема с наследованием квадрата от прямоугольника — это проблема с наследованием. Получить проблему с наследованием можно только в случае наличия наследования. Ваш К.О.
Более подробно: проблема квадрат/прямоугольник сводится к тому, что задавшись требованиями к мутабельности, невозможно построить их контракты таким образом, чтобы один был частным случаем другого. Понимаете? Не в том проблема, что можно написать плохую реализацию, а в том, что невозможно написать хорошую.

Как только мы отказываемся от мутабельности, сразу всё становится хорошо — исчезают противоречивые требования.

А если мы откажемся от наследования, а сведём всё к АлгТД и паттерн-матчингу, то исчезнет и обратная проблема — возможность получить прямоугольник, который на самом деле квадрат.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[47]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.03.13 07:30
Оценка:
Здравствуйте, Ikemefula, Вы писали:
I>Что именно не понятно, как код заточеный под контракт, может свалиться если контракт нарушается ?
Непонятно, почему вы подменяете одну проблему другой.
I>Можно вообще все писать без ооп, фп а обходиться одним процедурным программированием на ассемблере. Это ни о чем не говорит.
Можно. Это породит другие проблемы. Чтобы их конструктивно обсуждать, желательно в них хоть немного разобраться.
Вы, судя по вашим комментариям, вообще не в курсе, в чём состоит "проблема наследования прямоугольников и квадратов".
И вообще, в некотором смысле вообще все проблемы в программировании происходят от нарушения контрактов.
То есть, такая классификация проблем нам совершенно бесполезна — она относит все проблемы в один класс, и не позволит сравнить удобство или выразительную мощь разных языковых решений.
Именно поэтому нужно понимать, чем одни проблемы отличаются от других, и какие меры предотвращают определённые типы проблем.

В частности, проблемы с наследованием возникают только там, где есть наследование. Проблемы с некорректными указателями возникают там, где есть указатели. Проблемы с NullReference возникают только там, где есть null references.
Ваш К.О.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[18]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Erop Россия  
Дата: 25.03.13 12:02
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Только вот у некоторых пропонентов DSLей зашорены глаза: мол, DSLи и понятны сразу, и документированы сразу, и инструментарий есть и вообще, это панацея от всего (можно почитать предыдущие топики на эти же темы). Что, естественно, далеко не так.


Да просто "пропаненты" идёт вообещ не тем путём. Вместо того, что бы максимально открыть разработку и обсуждать, доказывать и искать то, что может иметь шанс пойти в массы, они закуклились и говорят, что ща всё будет

Хотя, возможно, я не прав и просто не знаю куда посмотреть.

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

Пример успешного языка разработанного в такой идеологии -- форт.
Только там нет хорошей мат. модели кода. То есть нет никакой теории как сложную задачу декомпозировать на уровни DSLей разного уровня. Может стоило бы думать в эту сторону, а не в сторону свободы синтаксиса? Синтаксис-то, как раз, обычно не особо важен...
Важен доступ к участию в компиляции/интерпретации.

Вот, например, в С++ есть шаблонные выражения. Когда мы по выражению сначала строим объект какого-то хитрого прокси-типа, который включает в себя информацию о всех нужных вычислениях, а потом уже у этого объекта просим значение, и он считает его по оптимизированной схеме. В С++ это делается крайне ракообразным способом, в каком-то более DSL-ориентированном языке это можно было бы сделать прямее. В форте, кстати, можно.

Вообще можно смотреть на форт, как на модель такого супер-макро-языка и сразу же думать о сильных и слабых сторонах подхода...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[48]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.03.13 14:52
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>То есть, такая классификация проблем нам совершенно бесполезна — она относит все проблемы в один класс, и не позволит сравнить удобство или выразительную мощь разных языковых решений.


Что бы сравнить удобство и выразительную мощь, необходимо в том числе решить типичные задачи в одной области с помощью средтств совершенно из другой области.

Почему то "открыть дверь" предлагают решить только в ООП, и никто не захотел показать решение той же задачи в функциональном.

Как уже предлагалось — напиши грамотный мега-uber-рич-эдит на хаскеле или F# и что бы без ооп, да так, что бы его можно было кинуть на форму одной кнопкой и юзать так же, как и любой другой рич эдит.

Вот тогда можно будет поговорить, те ли проблемы возникают или не те.

Если не нравится рич-эдит, посмотри в те задачи, которые типично решаются с помощью С++, например видео или звук.

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

Если получится — вот тогда можно говорить что "будут совсем другие проблемы ". А не получится — пеняй на себя

Пока что очевиден такой тренд — ООП кочует в функциональные языки, хотя казалось бы, "там будут совсем другие проблемы". Ан нет, наверное функционалистам нравится решать задачу, от чего наследовать прямоугольник.
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 25.03.13 15:39
Оценка:
V> Но пользоваться каким-то новым синтаксисом другого языка еще ни одна IDE не помогала. Синтаксис языка надо знать самому, увы.

по синтаксису помогает даже хороший компилятор, если он не просто сообщает об ошибке, но еще и говорит какой терм ожидается дальше.

Хорошая же IDE сообщает тоже самое на лету.
Re[49]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: FR  
Дата: 25.03.13 16:54
Оценка:
Здравствуйте, Ikemefula, Вы писали:


I>Пока что очевиден такой тренд — ООП кочует в функциональные языки, хотя казалось бы, "там будут совсем другие проблемы". Ан нет, наверное функционалистам нравится решать задачу, от чего наследовать прямоугольник.


"ООП кочует в функциональные языки" это старая тенденция, так например появился OCaml. При этом ООП там так "немножко" мутировал что наследование там только сахар и по сути не нужно при структурной типизации то. Кстати задача "от чего наследовать прямоугольник" там довольно бессмысленна

А сейчас другая тенденция функциональные языки пытаются натянуть на ООП платформы, это и F# и Scala, получается по моему достаточно коряво и угловато, но тоже лучше чем ничего.
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 25.03.13 18:52
Оценка:
Здравствуйте, DarkGray, Вы писали:

V>> Но пользоваться каким-то новым синтаксисом другого языка еще ни одна IDE не помогала. Синтаксис языка надо знать самому, увы.

DG>по синтаксису помогает даже хороший компилятор, если он не просто сообщает об ошибке, но еще и говорит какой терм ожидается дальше.

Хы, дальше...
Знать бы с какого начать...
Re[49]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.03.13 05:03
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Почему то "открыть дверь" предлагают решить только в ООП, и никто не захотел показать решение той же задачи в функциональном.


I>Как уже предлагалось — напиши грамотный мега-uber-рич-эдит на хаскеле или F# и что бы без ооп, да так, что бы его можно было кинуть на форму одной кнопкой и юзать так же, как и любой другой рич эдит.


I>Если не нравится рич-эдит, посмотри в те задачи, которые типично решаются с помощью С++, например видео или звук.

Или, например, роутинг пакетов. Название "эрланг" вам что-нибудь говорит?

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

Отож.
I>Пока что очевиден такой тренд — ООП кочует в функциональные языки, хотя казалось бы, "там будут совсем другие проблемы". Ан нет, наверное функционалистам нравится решать задачу, от чего наследовать прямоугольник.
Пока что очевиден такой тренд — ООП как таковое остановилось в развитии примерно тридцать лет назад. С тех пор все успехи связаны с мультипарадигменностью и развитием системы типов; в частности — в функциональном направлении.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[50]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 26.03.13 07:57
Оценка:
Здравствуйте, Sinclair, Вы писали:

I>>Если не нравится рич-эдит, посмотри в те задачи, которые типично решаются с помощью С++, например видео или звук.

S>Или, например, роутинг пакетов. Название "эрланг" вам что-нибудь говорит?

Если ты хочешь сказать, что задача(требования+ограничения) определяет инструмет, то это именно то о чем я и говорю.
The animals went in two by two, hurrah, hurrah...
Re[50]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.03.13 08:04
Оценка:
Здравствуйте, Sinclair, Вы писали:

I>>Если не нравится рич-эдит, посмотри в те задачи, которые типично решаются с помощью С++, например видео или звук.

S>Или, например, роутинг пакетов. Название "эрланг" вам что-нибудь говорит?

В алгоритмах роутинга я кое что понимаю, все таки >10 лет в телекоммуникациях. В задаче про которую ты намекаешь (роутингов вообще много и самых разных), кстати говоря, требуется распределенный процессинг. А если вдруг надо считать роутинг на одном проце и в ограниченом объеме памяти, что вобщем частый случай, то эрланг сливает нещадно и ему не помогут никакие плюшки.
Re[51]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.03.13 09:53
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>В алгоритмах роутинга я кое что понимаю, все таки >10 лет в телекоммуникациях. В задаче про которую ты намекаешь (роутингов вообще много и самых разных), кстати говоря, требуется распределенный процессинг. А если вдруг надо считать роутинг на одном проце и в ограниченом объеме памяти, что вобщем частый случай, то эрланг сливает нещадно и ему не помогут никакие плюшки.

Вообще-то первые двадцать лет эрланг вообще не умел работать более чем на одном процессоре. И, конечно же, плюсы он порвал именно в ограниченном объеме памяти — откуда ж у него неограниченный.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[51]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.03.13 10:06
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Если ты хочешь сказать, что задача(требования+ограничения) определяет инструмет, то это именно то о чем я и говорю.

Задача может определять инструмент.
Вопрос зачастую сводится к формулировке задачи.
И то, что задача в принципе решается некоторым методом, не означает, что именно этим методом её и надо решать.
Именно об этом фанаты DSL пишут в этом топике. А вовсе не о том, что ООП вообще плохое, хотя именно это вы с Ikemfula пытаетесь меня заставить доказать.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[51]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.03.13 10:19
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Кстати говоря, я вот видел и кое где даже поучавствовал в написании алгоритмов роутинга (С++, джава и C#). А ты можешь похвастаться тем, что написал скажем хотя бы ричэдит на хаскеле ну или какую нибудь насквозь императивную задачу на том же хаскеле или другом функциональном языке ?

Я правильно понимаю, что аргументы у вас кончились, и вы решили перейти на обсуждение моей личности и прочую пенисометрию?
Если да, то я лучше перейду на обсуждение вашей орфографии
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.03.13 10:28
Оценка:
Здравствуйте, vdimas, Вы писали:

DG>>по синтаксису помогает даже хороший компилятор, если он не просто сообщает об ошибке, но еще и говорит какой терм ожидается дальше.

V>Хы, дальше...
V>Знать бы с какого начать...

Дык библиотеками та же фигня. Для старта надо просто глянуть примеры.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[52]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.03.13 10:35
Оценка:
Здравствуйте, Sinclair, Вы писали:

I>>Кстати говоря, я вот видел и кое где даже поучавствовал в написании алгоритмов роутинга (С++, джава и C#). А ты можешь похвастаться тем, что написал скажем хотя бы ричэдит на хаскеле ну или какую нибудь насквозь императивную задачу на том же хаскеле или другом функциональном языке ?

S>Я правильно понимаю, что аргументы у вас кончились, и вы решили перейти на обсуждение моей личности и прочую пенисометрию?
S>Если да, то я лучше перейду на обсуждение вашей орфографии

Ну вот снова "гранаты не той системы".
Re[52]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.03.13 10:41
Оценка:
Здравствуйте, Sinclair, Вы писали:

I>>В алгоритмах роутинга я кое что понимаю, все таки >10 лет в телекоммуникациях. В задаче про которую ты намекаешь (роутингов вообще много и самых разных), кстати говоря, требуется распределенный процессинг. А если вдруг надо считать роутинг на одном проце и в ограниченом объеме памяти, что вобщем частый случай, то эрланг сливает нещадно и ему не помогут никакие плюшки.

S>Вообще-то первые двадцать лет эрланг вообще не умел работать более чем на одном процессоре. И, конечно же, плюсы он порвал именно в ограниченном объеме памяти — откуда ж у него неограниченный.

Если так, то Эрланг должны были изобрести в 1973 году вместо 1987, потому что в 93 в нем появились распределенные вычисления и с тех пор он именно для того и используется. Собственно ни для чего другого он толком и не пригоден и потому болтается на грани стат-погрешности.
Re[52]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Tanker  
Дата: 26.03.13 11:09
Оценка:
Здравствуйте, Sinclair, Вы писали:

T>>Если ты хочешь сказать, что задача(требования+ограничения) определяет инструмет, то это именно то о чем я и говорю.

S>Задача может определять инструмент.
S>Вопрос зачастую сводится к формулировке задачи.
S>И то, что задача в принципе решается некоторым методом, не означает, что именно этим методом её и надо решать.
S>Именно об этом фанаты DSL пишут в этом топике. А вовсе не о том, что ООП вообще плохое, хотя именно это вы с Ikemfula пытаетесь меня заставить доказать.

У тебя должно быть хорошее объяснение, почему насквозь императивное ООП отлично влезает в те области, которые, казалось бы, на раз покрываются возможностями функциональщины, МП и ДСЛ. И наоборот — функциональщина, МП и ДСЛ почему то болтаются где то на той грани, дальше которой ими можно пренебречь и хорошо живет только в очень, очень специализиваных нишах, можно даже сказать вырожденых случаях, где нужно решать одну единственную задачу, вдобавок ко всему жестко прижестко изолированую.
The animals went in two by two, hurrah, hurrah...
Re[53]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 26.03.13 14:00
Оценка:
Здравствуйте, Tanker, Вы писали:

T>У тебя должно быть хорошее объяснение, почему насквозь императивное ООП отлично влезает в те области, которые, казалось бы, на раз покрываются возможностями функциональщины, МП и ДСЛ. И наоборот — функциональщина, МП и ДСЛ почему то болтаются где то на той грани, дальше которой ими можно пренебречь и хорошо живет только в очень, очень специализиваных нишах, можно даже сказать вырожденых случаях, где нужно решать одну единственную задачу, вдобавок ко всему жестко прижестко изолированую.


Кстати, недавно как-то обратил внимание на один забавный нюанс в этой области. Особенно забавный в контексте местных мыслей о продвижение МП. Обычно при этом подразумевают всякие маргинальные языки... Но ведь настоящее МП есть в самом мейнстримовом языке! Макросы в C/C++ — это же прямое МП. Ну т.е. конечно их частенько и для ерунды (типа объявления констант и т.п.) используют, но можно и именно для генерации кода. Я например только так и использую — очень удобно для всяких там тестов и т.п.

А теперь внимание! Смотрим большинство учебников или советов по языку и видим что там выдвигается жёсткий лозунг: "Макросы — зло! Стараться не использовать!".

Более того, этому лозунгу следуют везде. Помнится в прошлом для организации вещей типа обработки сообщений была популярна техника составления таблиц обработчиков с помощью макросов. Сейчас же в большинстве библиотек это переписано (!) на техники типа сигнал/слот (причём через средства самого языка, а не через извращения как в устаревшей Qt).

И таких примеров не мало. Т.е. получается что на самом деле в мейнстриме всё это время происходил плавный отказ от средств МП в пользу встраивания необходимых инструментов в сам язык.
Re[54]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 26.03.13 15:25
Оценка:
Здравствуйте, alex_public, Вы писали:

_>А теперь внимание! Смотрим большинство учебников или советов по языку и видим что там выдвигается жёсткий лозунг: "Макросы — зло! Стараться не использовать!".

Макросы С/С++ зло. Согласен на 100%.

_>И таких примеров не мало. Т.е. получается что на самом деле в мейнстриме всё это время происходил плавный отказ от средств МП в пользу встраивания необходимых инструментов в сам язык.

Ну, так мы такое МП и делаем. Чтобы в язык можно было всё, что нужно встроить.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[55]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 26.03.13 15:50
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Макросы С/С++ зло. Согласен на 100%.


А я с удовольствием использую. Например для тестов удобно и ещё для некоторых особых случаев. В общем для генерации одинакового кода для разных сущностей.

WH>Ну, так мы такое МП и делаем. Чтобы в язык можно было всё, что нужно встроить.


1. В какой язык?
2. Вообще то на макросах C/C++ как раз микро DSL и получались (те же самые таблицы обработчиков)... Но от них предпочли отказаться в пользу самых классических конструкций (типа button->Connect(..., OnClick)).
Re[56]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 26.03.13 16:32
Оценка:
Здравствуйте, alex_public, Вы писали:

WH>>Макросы С/С++ зло. Согласен на 100%.

_>А я с удовольствием использую. Например для тестов удобно и ещё для некоторых особых случаев. В общем для генерации одинакового кода для разных сущностей.
Конечно, если ничего другого нет, то я и сам использую.
Но макросы в С/С++ очень плохие.

WH>>Ну, так мы такое МП и делаем. Чтобы в язык можно было всё, что нужно встроить.

_>1. В какой язык?
В любой.

_>2. Вообще то на макросах C/C++ как раз микро DSL и получались (те же самые таблицы обработчиков)... Но от них предпочли отказаться в пользу самых классических конструкций (типа button->Connect(..., OnClick)).

Далеко не всегда так можно сделать.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[57]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 26.03.13 17:10
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Конечно, если ничего другого нет, то я и сам использую.

WH>Но макросы в С/С++ очень плохие.

Ну да, очень ограниченные они. И временами опасные.

_>>1. В какой язык?

WH>В любой.

Т.е. например C++ сможем так расширить? Т.е. речь о неком препроцессоре?

_>>2. Вообще то на макросах C/C++ как раз микро DSL и получались (те же самые таблицы обработчиков)... Но от них предпочли отказаться в пользу самых классических конструкций (типа button->Connect(..., OnClick)).

WH>Далеко не всегда так можно сделать.

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

И в итоге предпочтение отдали инструменту на основе конструкций самого языка, хотя они возможно и не такие ясные и частенько более многословные.
Re[58]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 26.03.13 18:37
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Т.е. например C++ сможем так расширить?

В теории можно. Но он собака очень сложный.
Так что поначалу будут всякие C# и Java.

_>Т.е. речь о неком препроцессоре?

Нет. О полноценном компиляторе. Но препроцессор тоже возможен. Хотя кому он нужен?

_>Конечно. Но я говорю о самой тенденции.

Нет такой тенденции.

_>- не поддерживался IDE (автодополнение и т.п.)

_>- был не типобезопасным
_>- при ошибках компилятор выдавал нечто совершенно невразумительное.
Это проблемы макросов С/С++.

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

Исключительно из-за проблем макросов С/С++.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[59]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 26.03.13 19:18
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>В теории можно. Но он собака очень сложный.

WH>Так что поначалу будут всякие C# и Java.

А например чистый C? Он по идее проще и C# и Java...

WH>Нет. О полноценном компиляторе. Но препроцессор тоже возможен. Хотя кому он нужен?


Т.е. имеется в виду альтернативный компилятор допустим Java, в котором есть подобная надстройка для МП? Довольно интересно.

Вариант с препроцессором может быть интересен для таких языков как C/C++, т.к. их классические компиляторы делают очень мощную оптимизацию. Хотя если например подключиться к gcc, то тогда можно и свой написать почти такого же уровня (вариант от Intel всё же обходит всех, а его исходников нет).

_>>- не поддерживался IDE (автодополнение и т.п.)

_>>- был не типобезопасным
_>>- при ошибках компилятор выдавал нечто совершенно невразумительное.
WH>Это проблемы макросов С/С++.

Т.е. все три перечисленные проблемы большинства препроцессоров как-то устранены?
Re[60]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 26.03.13 19:37
Оценка:
Здравствуйте, alex_public, Вы писали:

_>А например чистый C? Он по идее проще и C# и Java...

Можно попробовать. Но С не приоритет.

_>Т.е. имеется в виду альтернативный компилятор допустим Java, в котором есть подобная надстройка для МП? Довольно интересно.

Да.
Грамматика C# уже есть. Исходники решарпера парсит.

_>Вариант с препроцессором может быть интересен для таких языков как C/C++, т.к. их классические компиляторы делают очень мощную оптимизацию. Хотя если например подключиться к gcc, то тогда можно и свой написать почти такого же уровня (вариант от Intel всё же обходит всех, а его исходников нет).

В нашем случае препроцессор это просто еще один бекенд.
Так что не проблема.

_>Т.е. все три перечисленные проблемы большинства препроцессоров как-то устранены?

Проект еще находится в разработке.

Но как все эти проблемы решать в целом ясно.
Например, смотри: http://stdray.livejournal.com/79277.html
Новый проект разрабатывается с учётом проблем немерле. Так что всё будет еще проще и не привязано к .НЕТ.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 27.03.13 02:34
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Очевидный контр-пример в том, что кол-во DSL, с которым ты работаешь, крайне низко, а сообщество, размер док и вообще информационного шума вокруг них — велико. Счет DSL из твоего примера идет на единицы и ты абсолютно прав, что они покрыты опупительной докой. А теперь представь дополнительные пару десятков самописных DSL к ним в твоем десятке поддерживаемых+разрабатываемых проектов, намажь сюда сверху отсутствие вменяемой доки или её невалидность/устаревшесть и получишь реальную впариваемую тебе картинку, когда любой окружающий тебя только что вылупившийся из ВУЗа программист будет ваять под каждый свой неожиданный чих новый язык.


С разморозкой. Я устал уже отвечать на одно и то же. Кратко — не единцы, а десятки. Доки не опупительные, а обычные. Вылупвишиеся из ВУЗа программисты прямо сейчас пишут код который идет в продакшен. Говнокод, без документакции, создавая иерархии классов под каждый свой неожиданный чих. Индустрия с этим справляется, DSL в этом плане ничем особым выделяться не будет.
Re[53]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.03.13 06:48
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Если так, то Эрланг должны были изобрести в 1973 году вместо 1987, потому что в 93 в нем появились распределенные вычисления и с тех пор он именно для того и используется. Собственно ни для чего другого он толком и не пригоден и потому болтается на грани стат-погрешности.

Вы что-то путаете. Я не знаю, что вы называете "распределёнными вычислениями" и почему вы противопоставляете их однопроцессорным машинам, но поддержка многопроцессорности в эрланге появилась только в 2006 году — значительно позже выхода знаменитого AXD-301, в котором эрланг и порвал всех на тряпки.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[54]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 27.03.13 08:12
Оценка:
Здравствуйте, Sinclair, Вы писали:

I>>Если так, то Эрланг должны были изобрести в 1973 году вместо 1987, потому что в 93 в нем появились распределенные вычисления и с тех пор он именно для того и используется. Собственно ни для чего другого он толком и не пригоден и потому болтается на грани стат-погрешности.

S>Вы что-то путаете. Я не знаю, что вы называете "распределёнными вычислениями" и почему вы противопоставляете их однопроцессорным машинам, но поддержка многопроцессорности в эрланге появилась только в 2006 году — значительно позже выхода знаменитого AXD-301, в котором эрланг и порвал всех на тряпки.

Краткая история эрланга

1982-1986. Programming experiments: how to program
a telephone exchange
1986. Erlang emerges as a dialect of Prolog.
Implementation is a Prolog interpreter
– 1 developer (Joe Armstrong)
1986. Own abstract machine, JAM
– 3 developers, 10 users
1993. Turbo Erlang (BEAM compiler)
1993. Distributed Erlang
...


Ну и мягкий реалтайм на эрланге никто не отменял.
Re[55]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 27.03.13 09:04
Оценка:
S>>Вы что-то путаете. Я не знаю, что вы называете "распределёнными вычислениями" и почему вы противопоставляете их однопроцессорным машинам, но поддержка многопроцессорности в эрланге появилась только в 2006 году — значительно позже выхода знаменитого AXD-301, в котором эрланг и порвал всех на тряпки.

I>Краткая история эрланга

I>

I>1993. Distributed Erlang
I>...


Это никак не противоречит тому, что написал Sinclair. AXD-301 — это вполне себе система с ограниченными ресурсами, на которой крутился распределенный однопроцессорный Erlang. Более того, Эрикссон до сих пор делает системы, в которых ограничены ресурсы, а между железом и Эрланогм — лишь тонкий драйвер на С к сетевому интерфейсу (и то, там есть варианты ).


dmitriid.comGitHubLinkedIn
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 27.03.13 09:14
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>С разморозкой. Я устал уже отвечать на одно и то же. Кратко — не единцы, а десятки.


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

Z>Доки не опупительные, а обычные.


В сравнении с самописной приблудой — мегаопупительные. Да ещё полно учебников с примерами по Сети.

Z>Вылупвишиеся из ВУЗа программисты прямо сейчас пишут код который идет в продакшен. Говнокод, без документакции, создавая иерархии классов под каждый свой неожиданный чих. Индустрия с этим справляется, DSL в этом плане ничем особым выделяться не будет.


Вот оно, непонимание принципов групповой разработки и почему говнокод запросто может идти в продакшн. В обычном коде вполне достичь той самой низкой связанности в проекте, т.е. сколь угодно сузить долю ответственности каждого прыткого студента. В DSL, напротив, степень связанности любого действия разработчика этого DSL с конечным результатом — максимальная.
Re[56]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 27.03.13 09:47
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Это никак не противоречит тому, что написал Sinclair. AXD-301 — это вполне себе система с ограниченными ресурсами, на которой крутился распределенный однопроцессорный Erlang. Более того, Эрикссон до сих пор делает системы, в которых ограничены ресурсы, а между железом и Эрланогм — лишь тонкий драйвер на С к сетевому интерфейсу (и то, там есть варианты ).


А что значит "распределенный однопроцессорный" ?
Re[57]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 27.03.13 11:48
Оценка:
M>>Это никак не противоречит тому, что написал Sinclair. AXD-301 — это вполне себе система с ограниченными ресурсами, на которой крутился распределенный однопроцессорный Erlang. Более того, Эрикссон до сих пор делает системы, в которых ограничены ресурсы, а между железом и Эрланогм — лишь тонкий драйвер на С к сетевому интерфейсу (и то, там есть варианты ).

I>А что значит "распределенный однопроцессорный" ?


В нем не было поддержки SMP, например. Что не мешало ему быть распределенным. В общем, Sinclair уже все
Автор: Sinclair
Дата: 26.03.13
сказал
Автор: Sinclair
Дата: 27.03.13


dmitriid.comGitHubLinkedIn
Re[58]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 27.03.13 11:55
Оценка:
Здравствуйте, Mamut, Вы писали:

I>>А что значит "распределенный однопроцессорный" ?


M>В нем не было поддержки SMP, например. Что не мешало ему быть распределенным. В общем, Sinclair уже все
Автор: Sinclair
Дата: 26.03.13
сказал
Автор: Sinclair
Дата: 27.03.13


Вообще то он перепрыгнул с распределенного процессинга на многопроцессорный.
Re[59]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 27.03.13 12:13
Оценка:
I>Вообще то он перепрыгнул с распределенного процессинга на многопроцессорный.

Началось вообще с ограничения ресурсов. Это ты начал заливать про распределенность и т.п.


dmitriid.comGitHubLinkedIn
Re[60]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 27.03.13 12:16
Оценка:
Здравствуйте, Mamut, Вы писали:

I>>Вообще то он перепрыгнул с распределенного процессинга на многопроцессорный.


M>Началось вообще с ограничения ресурсов. Это ты начал заливать про распределенность и т.п.


Ну то есть, ты хочешь сказать, что распределенного процессина в Эрланге до недавних пор не было ?

А что тогда появилось в 93м году ?
Re[61]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 27.03.13 16:58
Оценка:
I>>>Вообще то он перепрыгнул с распределенного процессинга на многопроцессорный.
M>>Началось вообще с ограничения ресурсов. Это ты начал заливать про распределенность и т.п.
I>Ну то есть, ты хочешь сказать, что распределенного процессина в Эрланге до недавних пор не было ?

Нет, я не собираюсь это говорить

I>А что тогда появилось в 93м году ?


Распределенный процессинг. В общем, читай еще раз, что писал ты, и что писал Синклер.


dmitriid.comGitHubLinkedIn
Re[62]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 27.03.13 18:07
Оценка:
Здравствуйте, Mamut, Вы писали:

I>>А что тогда появилось в 93м году ?

M>Распределенный процессинг. В общем, читай еще раз, что писал ты, и что писал Синклер.

Вообще то Синклер именно против этого и возражал — http://rsdn.ru/forum/philosophy/5113486.1
Автор: Sinclair
Дата: 26.03.13


Надо полагать он попутал распределенный процессинг с многопроцессорным.
Re[61]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 27.03.13 18:09
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Проект еще находится в разработке.


WH>Но как все эти проблемы решать в целом ясно.

WH>Например, смотри: http://stdray.livejournal.com/79277.html
WH>Новый проект разрабатывается с учётом проблем немерле. Так что всё будет еще проще и не привязано к .НЕТ.

Сам макрос выглядит мягко говоря сложно для того, чтобы писать такие в каких-то повседневных целях. Т.е. это похоже инструмент именно для создания DSL, а не для каждодневного MП. Но при этом результат очень впечатляет. Особенно интеграция с IDE (кстати, а что за IDE там на скриншотах?) и сообщения об ошибках.
Re[62]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 28.03.13 01:54
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Сам макрос выглядит мягко говоря сложно для того, чтобы писать такие в каких-то повседневных целях.


Это грамматика нового языка. Для такой задачи совершенно не сложно. Сложно, в первую очередь, читать непривычный код. Даже мне, знакомому с немерлом, но не пишущему в indent style.

_>Т.е. это похоже инструмент именно для создания DSL, а не для каждодневного MП.


Ну да, новый язык встраивают далеко не каждый день. Относительно сложный там только парсинг, назвать реализацию генератора кодв в 20 строк сложной, у меня рука не поднимается. Ну и N2, который пилят ребята, будет поудобнее, подекларативнее.

_>Но при этом результат очень впечатляет. Особенно интеграция с IDE (кстати, а что за IDE там на скриншотах?) и сообщения об ошибках.


Студия это. Сейчас еще сравнительно слабая интеграция с IDE, ждем вот N2 от JetBrains. Надеюсь они дадут хоть что-то в открытый доступ.
Re[63]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 28.03.13 05:58
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Ну да, новый язык встраивают далеко не каждый день. Относительно сложный там только парсинг, назвать реализацию генератора кодв в 20 строк сложной, у меня рука не поднимается. Ну и N2, который пилят ребята, будет поудобнее, подекларативнее.


Я к тому что иногда требуется именно простенькое МП, а не DSL. Т.е. что-то типа макрсов C++, но скажем типизированных и т.п. Интересно насколько возможно подобное в рамках этого проекта.

Z>Студия это. Сейчас еще сравнительно слабая интеграция с IDE, ждем вот N2 от JetBrains. Надеюсь они дадут хоть что-то в открытый доступ.


Хы, что-то я её не узнал. У меня правда только 2010-ая стоит...
Re[64]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 28.03.13 06:12
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Я к тому что иногда требуется именно простенькое МП, а не DSL. Т.е. что-то типа макрсов C++, но скажем типизированных и т.п. Интересно насколько возможно подобное в рамках этого проекта.


Для этого N2 просто не нужен, Nemerle достаточно умеет. С приходом N2 можно будет, наконец, развивать Nemerle дальше. Например мне бы хотелось иметь макрометоды с интелисенсом и прочими прелестями.

_>Хы, что-то я её не узнал. У меня правда только 2010-ая стоит...


Цветовая схема другая и хинты от немерловой интеграции.
Re[65]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 28.03.13 07:43
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Для этого N2 просто не нужен, Nemerle достаточно умеет. С приходом N2 можно будет, наконец, развивать Nemerle дальше. Например мне бы хотелось иметь макрометоды с интелисенсом и прочими прелестями.


Ха, так хочется этого не в Nemerle, а в других языках! WolfHound же писал об альтернативных компиляторах Java, C# (и может когда-нибудь C, C++, D, Go?), которые добавляют подобные макросы, оставляя мощь языка. Вот это был бы очень полезный и реально инновационный продукт. А просто языки с развитым МП уже давно никого не удивляют.
Re[10]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 28.03.13 11:56
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Работаю уже превратилось в постоянно работаю? Даже таких я наберу более десятка.


Z>less

Z>scss
Z>haml
Z>xaml
Z>sql
Z>regular expressions
Z>format strings
Z>css selectors
Z>xpath
Z>xsl
Z>cucumber
Z>mongodb query language
Z>knockout bindings syntax

Гы-гы.
Итого, если из твоего списка выкинуть XML-based, или вариации на тему CSS-based, то не наберется даже десятка.
Т.е., как я и говорил, ни о каких нескольких десятков речи быть не может. ЧТД.

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


Z>Это только языки, которые не являются embedded, тех я еще больше наберу.

V>>В сравнении с самописной приблудой — мегаопупительные. Да ещё полно учебников с примерами по Сети.
Z>Что сказать-то хотел? Чем это отличается от самописного фреймворка? Ты ведь сейчас как-то решаешь проблему множества недокументированных самописных фреймворков в проекте от студентов?

Уже говорили тебе — отличается самодокументируемостью любых библиотек на типизированном ЯВУ. Для понимания библиотеки через АПИ достаточно знания ЯЗЫКА, на котором и для которого эта библиотека. Язык — это фундамент. Знание языка — трамплин для понимания любых вещей внутри экосистемы языка.

Z>Это не мое недопонимание. Это твое воображение рисует картину, как вчерашние студенты пишут недокументированный говно-DSL, который потом вся команда использует во всем проекте. Все вопросы к нему.


Оно так и есть. И я такое уже наблюдал. А твоего воображения просто не хватает осмыслить происходящий при этом fail из-за недооценки общего времени, необходимого для самого языка (причем, далеко не только времени на его разработку).

Язык — это не либа, и не embedded DSL, бо embedded DSL — та же либа, вид в профиль. Язык — это ср-во выражения некоего смысла, это ср-во комбинирования понятий. Чаще всего — это весьма уникальное вр-во комбинирования понятий. И у тебя нет абсолютно никакого фундамента-трамплина для понимания некоего конкретного языка. Все эти умения по комбинированию понятий именно ср-вами конкретного языка и составляют то "нечто", что необходимо в нем понять. Проблема лишь в том, что нифига не "понять", вообще-то, а тупо "вызубрить", се ля ви. Вплоть до зубрежки пунктов из стандартов. И на это уходит настолько неприлично много времени, в сравнении с либами, что тут коллега правильно назвал затраты этого времени "инвестициями".
Re[63]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Mamut Швеция http://dmitriid.com
Дата: 28.03.13 13:09
Оценка:
I>>>А что тогда появилось в 93м году ?
M>>Распределенный процессинг. В общем, читай еще раз, что писал ты, и что писал Синклер.

I>Вообще то Синклер именно против этого и возражал — http://rsdn.ru/forum/philosophy/5113486.1
Автор: Sinclair
Дата: 26.03.13


1. Он не возражал против этого
2. Хватит уводить разговор в сторону


dmitriid.comGitHubLinkedIn
Re[64]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.03.13 14:18
Оценка:
Здравствуйте, Mamut, Вы писали:

M>1. Он не возражал против этого

M>2. Хватит уводить разговор в сторону

Раз ты так хорошо понимаешь Синклера,

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

I>В алгоритмах роутинга я кое что понимаю, все таки >10 лет в телекоммуникациях. В задаче про которую ты намекаешь (роутингов вообще много и самых разных), кстати говоря, требуется распределенный процессинг. А если вдруг надо считать роутинг на одном проце и в ограниченом объеме памяти, что вобщем частый случай, то эрланг сливает нещадно и ему не помогут никакие плюшки.

Вообще-то первые двадцать лет эрланг вообще не умел работать более чем на одном процессоре. И, конечно же, плюсы он порвал именно в ограниченном объеме памяти — откуда ж у него неограниченный.

Re[66]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 28.03.13 15:39
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ха, так хочется этого не в Nemerle, а в других языках! WolfHound же писал об альтернативных компиляторах Java, C# (и может когда-нибудь C, C++, D, Go?), которые добавляют подобные макросы, оставляя мощь языка. Вот это был бы очень полезный и реально инновационный продукт. А просто языки с развитым МП уже давно никого не удивляют.


Если цель не макросы, а "не в Nemerle", тут я ничем помочь не могу. Если именно макросы — то альтернативный компилятор C# работает. В нем доступны все макросы кроме расширяющих синтаксис, если хочется МП, то нет проблем, берите, пишите. Только сами макросы придется писать все таки на Nemerle.
Re[67]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 28.03.13 19:06
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Если цель не макросы, а "не в Nemerle", тут я ничем помочь не могу. Если именно макросы — то альтернативный компилятор C# работает. В нем доступны все макросы кроме расширяющих синтаксис, если хочется МП, то нет проблем, берите, пишите. Только сами макросы придется писать все таки на Nemerle.


На самом деле хочется следующего:

1. Добавления удобного МП в мощные мейнстримовые языки. В идеале в C++ и Java, как обладающие самой развитой сейчас инфраструктурой.
2. Способ добавление (препроцессор, фронтенд к существующему компилятору, альтернативный компилятор) значения не имеет. Хотя в случае C++ третий вариант вряд ли возможно сделать сравнимым по эффективности с существующими монстрами.
3. Макросы обязательно должны работать с исходниками не как с текстом, а разбирая конструкции языка. Это естественно ключевой пункт, т.к. текстовых вариантов уже давным давно полно.
4. Чтобы ключевые IDE не тошнило от этих макросов (плагины к ним или что-то подобное). В принципе это пункт опциональный, но очень очень желаемый...
5. Язык самих макросов не принципиален. Но хочется что-то позволяющее одновременно и ненапряжно делать простейшие вещи (типа макросов C++) и создавать целые DSL при надобности.

Вот такие скромные хотелки. За их реализацию в принципе и не жалко денег заплатить. В смысле за готовый продукт, а не за разработку. )))
Re[68]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 29.03.13 02:45
Оценка:
Здравствуйте, alex_public, Вы писали:

_>На самом деле хочется следующего:


_>1. Добавления удобного МП в мощные мейнстримовые языки. В идеале в C++ и Java, как обладающие самой развитой сейчас инфраструктурой.

_>2. Способ добавление (препроцессор, фронтенд к существующему компилятору, альтернативный компилятор) значения не имеет. Хотя в случае C++ третий вариант вряд ли возможно сделать сравнимым по эффективности с существующими монстрами.
_>3. Макросы обязательно должны работать с исходниками не как с текстом, а разбирая конструкции языка. Это естественно ключевой пункт, т.к. текстовых вариантов уже давным давно полно.
_>4. Чтобы ключевые IDE не тошнило от этих макросов (плагины к ним или что-то подобное). В принципе это пункт опциональный, но очень очень желаемый...
_>5. Язык самих макросов не принципиален. Но хочется что-то позволяющее одновременно и ненапряжно делать простейшие вещи (типа макросов C++) и создавать целые DSL при надобности.

_>Вот такие скромные хотелки. За их реализацию в принципе и не жалко денег заплатить. В смысле за готовый продукт, а не за разработку. )))


Для C# почти все это уже есть. Правда IDE легко свести с ума макросами. В отличии от Nemerl'овой, интеграция C# ничего не знает про возможность МП. Но и третий пункт вроде опциональный.

Интегрировать DSL в C# все равно не получится, не расширяемый синтаксис у языка. Только в строковых константах писать. Но зато к компилятору легко подключается парсер для любого файлового расширения, делать DSL в отдельных файлах очень легко. В немерловом проекте даже может какая-то интеграция заработать.
Re[59]: Erlang (was: А при чем тут DSL?)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 29.03.13 05:04
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>А что значит "распределенный однопроцессорный" ?


M>>В нем не было поддержки SMP, например. Что не мешало ему быть распределенным. В общем, Sinclair уже все
Автор: Sinclair
Дата: 26.03.13
сказал
Автор: Sinclair
Дата: 27.03.13


I>Вообще то он перепрыгнул с распределенного процессинга на многопроцессорный.


Не "перепрыгнул", а добавил, если уж придираться. Многонодовые фишки и объединение в кластера никто не отменял.
The God is real, unless declared integer.
Re[48]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 29.03.13 06:59
Оценка:
Здравствуйте, DarkGray, Вы писали:

WH>>Ты хочешь сказать, что правки ядра лежат не в git'е и мержаться с обновлением, а вот прямо так на лету, перед тем как скормить их gcc патчаться каким то кодом?


DG>на vcs лежат отдельно исходные исходники, и отдельно патчи. С vcs-а выдергивает и то, и другое, а дальше make накладывает одно на другое.

DG>Обновлении версии ядра линукса сводится к закидыванию новой версии, и проверке, что patch-и продолжают накладываться в нужные места.

DG>Если делать по твоему, то при каждом обновлении — попадаешь на кучу ручной работы.


Ну вообще-то как раз по твоей схеме, если эти патчи делаются руками, а не вытягиваются опять же из git'а с аналогами, попадаешь на кучу ручной работы, когда перестаёт накладываться и патчи надо править.
И вытягивать из git'а по тегу тоже тривиально.
The God is real, unless declared integer.
Re[11]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 29.03.13 07:12
Оценка:
Здравствуйте, vdimas, Вы писали:

Z>>Что сказать-то хотел? Чем это отличается от самописного фреймворка? Ты ведь сейчас как-то решаешь проблему множества недокументированных самописных фреймворков в проекте от студентов?

V>Уже говорили тебе — отличается самодокументируемостью любых библиотек на типизированном ЯВУ. Для понимания библиотеки через АПИ достаточно знания ЯЗЫКА, на котором и для которого эта библиотека.

Уже смешно. Например, как понимание того, что зовётся createFoo(x), поможет знанию того, что этот вызов одновременно инициализирует подсистему bar? Или что до createFoo() должно быть setFooRange()?

Нет, я понимаю, что ты хотел сказать, но тут две как бы принципиальных проблемы:
1. Нифига не "достаточно".
2. Сам по себе язык программирования является чудовищно избыточным для таких целей. Даже самый простой язык.

V> Язык — это фундамент. Знание языка — трамплин для понимания любых вещей внутри экосистемы языка.


Осталось показать, как бизнес-логика является компонентом экосистемы языка.
The God is real, unless declared integer.
Re[60]: Erlang (was: А при чем тут DSL?)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.03.13 07:59
Оценка:
Здравствуйте, netch80, Вы писали:

I>>Вообще то он перепрыгнул с распределенного процессинга на многопроцессорный.


N>Не "перепрыгнул", а добавил, если уж придираться. Многонодовые фишки и объединение в кластера никто не отменял.


Годная отмазка
Re[65]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.03.13 08:40
Оценка:
Здравствуйте, Ikemefula, Вы писали:
I>2 покажи, куда я, по твоему, перевожу разговор
А чего тут показывать. Ты ж не то выделяешь. Вот что надо выделять:
I>

I>>В алгоритмах роутинга я кое что понимаю, все таки >10 лет в телекоммуникациях. В задаче про которую ты намекаешь (роутингов вообще много и самых разных), кстати говоря, требуется распределенный процессинг. А если вдруг надо считать роутинг на одном проце и в ограниченом объеме памяти, что вобщем частый случай, то эрланг сливает нещадно и ему не помогут никакие плюшки.

I>Вообще-то первые двадцать лет эрланг вообще не умел работать более чем на одном процессоре. И, конечно же, плюсы он порвал именно в ограниченном объеме памяти — откуда ж у него неограниченный.

Теперь понятно?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[66]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.03.13 09:23
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А чего тут показывать. Ты ж не то выделяешь. Вот что надо выделять:

I>>

I>>>В алгоритмах роутинга я кое что понимаю, все таки >10 лет в телекоммуникациях. В задаче про которую ты намекаешь (роутингов вообще много и самых разных), кстати говоря, требуется распределенный процессинг. А если вдруг надо считать роутинг на одном проце и в ограниченом объеме памяти, что вобщем частый случай, то эрланг сливает нещадно и ему не помогут никакие плюшки.

I>>Вообще-то первые двадцать лет эрланг вообще не умел работать более чем на одном процессоре. И, конечно же, плюсы он порвал именно в ограниченном объеме памяти — откуда ж у него неограниченный.

S>Теперь понятно?

Тогда расскажи, про какой из всех возможных видов роутинга ты конкретно имел ввиду ?
Re[67]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.03.13 09:33
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Тогда расскажи, про какой из всех возможных видов роутинга ты конкретно имел ввиду ?

про тот, который в AXD-301
Кстати, веб-сервер на эрланге гнёт в дугу сервера на православных императивных ОО-языках только в путь — и в первую очередь на одном процессоре и ограниченной памяти.
Это к вопросу о распределённости и "на одном проце".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[69]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 29.03.13 11:08
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>Тогда расскажи, про какой из всех возможных видов роутинга ты конкретно имел ввиду ?

S>>про тот, который в AXD-301

I>По моему там особой производительности не требуется, потому что это целый шкаф оборудования, который управляется эрлангом, перформанс обеспечивает железо а не эрланг. От эрланга требуется возможность работы на нескольких нодах и худо-бедно реалтайм.


Даже ни то ни то (это полезные фишки, но не основное).
Основное — принципиальная устойчивость и обновление софта без рестарта (ибо ATM permament virtual channels, ради которых строился свитч, живут годами). Его спокойно можно было построить и на одной ноде. Но тут уже не стали переупрощать ради упрощения.

S>>Кстати, веб-сервер на эрланге гнёт в дугу сервера на православных императивных ОО-языках только в путь — и в первую очередь на одном процессоре и ограниченной памяти.

S>>Это к вопросу о распределённости и "на одном проце".
I>Ждём, когда этот сервер вытеснит "сервера на православных императивных ОО-языках ".

Не вытеснит, но потеснить может.
The God is real, unless declared integer.
Re[69]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 29.03.13 19:27
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Для C# почти все это уже есть. Правда IDE легко свести с ума макросами. В отличии от Nemerl'овой, интеграция C# ничего не знает про возможность МП. Но и третий пункт вроде опциональный.


Очень радует. Ну точнее на самом деле платформа .Net — это конечно вообще ни о чём. Но если для C# (который вполне себе серьёзный язык) получилось, то значит что в принципе в далёком будущем есть шанс и у более интересных платформ (нейтив, java). Там же надеюсь нет ничего привязывающего непосредственно к .Net?

Z>Интегрировать DSL в C# все равно не получится, не расширяемый синтаксис у языка. Только в строковых константах писать. Но зато к компилятору легко подключается парсер для любого файлового расширения, делать DSL в отдельных файлах очень легко. В немерловом проекте даже может какая-то интеграция заработать.


Почему не получится то, если в режиме препроцессора?
Re[70]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 29.03.13 20:21
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Очень радует. Ну точнее на самом деле платформа .Net — это конечно вообще ни о чём. Но если для C# (который вполне себе серьёзный язык) получилось, то значит что в принципе в далёком будущем есть шанс и у более интересных платформ (нейтив, java). Там же надеюсь нет ничего привязывающего непосредственно к .Net?


Там Nemerle. Компилирует в .net.

Z>>Интегрировать DSL в C# все равно не получится, не расширяемый синтаксис у языка. Только в строковых константах писать. Но зато к компилятору легко подключается парсер для любого файлового расширения, делать DSL в отдельных файлах очень легко. В немерловом проекте даже может какая-то интеграция заработать.


_>Почему не получится то, если в режиме препроцессора?


Такого режима нет. Nemerle просто компилирует C#, точнее парсит и транслирует его АСТ в немерловый.
Re[71]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 29.03.13 22:10
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Там Nemerle. Компилирует в .net.


Ммм я всё же пока не понял. У на привязка к .net завязана на то, что обрабатываемый исходник написан для .net или же с тем что инструмент (компилятор или препроцессор) работает под .net? Если второе, то это вообще не проблема, т.к. .net платформа не интересна именно в качестве целевой, а в качестве платформы для инструментов разработчика совершенно не напрягает. Если же первый вариант, то тогда это крайне серьёзное ограничение этого инструмента и он резко перестаёт быть интересным очень многим...

Z>Такого режима нет. Nemerle просто компилирует C#, точнее парсит и транслирует его АСТ в немерловый.


Так WolfHound же писал что препроцессор без проблем возможен в теории, более того, он говорил об альтернативном java компиляторе (что явно не .net)...
Re[72]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 29.03.13 22:20
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ммм я всё же пока не понял. У на привязка к .net завязана на то, что обрабатываемый исходник написан для .net или же с тем что инструмент (компилятор или препроцессор) работает под .net? Если второе, то это вообще не проблема, т.к. .net платформа не интересна именно в качестве целевой, а в качестве платформы для инструментов разработчика совершенно не напрягает. Если же первый вариант, то тогда это крайне серьёзное ограничение этого инструмента и он резко перестаёт быть интересным очень многим...


Нет никакой обработки исходников. Вся обработка идет на уровне AST, с которым идет работа через квазицитаты.

_>Так WolfHound же писал что препроцессор без проблем возможен в теории, более того, он говорил об альтернативном java компиляторе (что явно не .net)...


Он говорил о будущем, я о настоящем, которое можно использовать прямо сейчас. Они сейчас делают фреймворк, который можно допиливать как угодно. Например сделать генерацию трансформированного AST обратно в текст.
Re[72]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 30.03.13 13:36
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ммм я всё же пока не понял. У на привязка к .net завязана на то, что обрабатываемый исходник написан для .net или же с тем что инструмент (компилятор или препроцессор) работает под .net?

В данный момент разработка прибита гвоздями к немерле. А немерле к .НЕТ.
Те и инструмент и компилируемый им код привязаны к .НЕТ.
Но это временно.
Благодаря bootstrapping'у и кросскомпиляции мы полностью отвяжемся от .НЕТ.
Честно говоря, он меня сильно напрягает. Из-за навязанной им модели исполнения приходится кучу лишних движений делать.

Сейчас основной приоритет это сделать ДСЛ для создания языков. Дальше всё будет намного проще.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[73]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 31.03.13 20:13
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Сейчас основной приоритет это сделать ДСЛ для создания языков. Дальше всё будет намного проще.


Ты как то рассказывал что можешь формализовать любую проблему и что создание ДСЛ дело плевое

Странно однако, что времени уже угрохали вагон, при чем именно в той области где все уже формализовано лет 50 назад, при чем угрохали не индусы, а люди которые лет 10 занимаются именно языками и компиляторами.

Ты точно думаешь, что правильно оцениваешь сложность создания ДСЛ ?

Шота сильно думаю следущей осенью мы увидим "пару месяцев и можно будет думать про показ"

P.S. Согласно аксиоме Архимеда, для любого сколь угодно большого числа N найдется такое действительное число, которое будет больше N
Re[74]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 01.04.13 11:42
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Ты как то рассказывал что можешь формализовать любую проблему и что создание ДСЛ дело плевое

Могу любую. "Плёвость" зависит от задачи.

I>Странно однако, что времени уже угрохали вагон, при чем именно в той области где все уже формализовано лет 50 назад, при чем угрохали не индусы, а люди которые лет 10 занимаются именно языками и компиляторами.

Это ты от полного непонимания проблемы. По данному направлению почти ничего нет.
Всё приходится изобретать.

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

I>Ты точно думаешь, что правильно оцениваешь сложность создания ДСЛ ?

Да.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[47]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 02.04.13 01:15
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Графические редакторы для HTML не работают, провальная затея.


Если под затеей понимается эмуляция WinForms, то да, провальная. А если бы не страдали фигнёй и сделали редактор именно html, то может и что-то получилось бы.
Если нам не помогут, то мы тоже никого не пощадим.
Re[31]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 02.04.13 01:16
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Это у тебя так или вообще по индустрии ?

I>Где взять людей вроде тебя на каждый из проектов ?

Воспитывать. Вон уже даже индусы отказываются от пэтэушников. Даже они понимают, что это не эффективно.
Если нам не помогут, то мы тоже никого не пощадим.
Re[48]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 02.04.13 02:17
Оценка:
Здравствуйте, IT, Вы писали:

IT>Если под затеей понимается эмуляция WinForms, то да, провальная. А если бы не страдали фигнёй и сделали редактор именно html, то может и что-то получилось бы.


Провальная, как любая другая идея графического программирования. Лучше текста для редактирования кода ничего не придумано. А html это именно код. Его визуальное представление задается в основном стилями. Да и то, чаще всего мы редактируем не html, а код его порождающий. Который просто не имеет графического представления до рантайма.

Я слабо себе представляю графический редактор того, что не имеет графического представления на момент редактирования.
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.13 09:22
Оценка:
Здравствуйте, IT, Вы писали:

IT>Элементарно, Ватсон! Чтобы старение было незаметным, нужно каждый год производить в десять раз больше молодых программистов, чем уже есть на рынке. И так было лет 15-ть назад. А сегодня приток молодёжи составляет несколько процентов в год и эта цифра с каждым годом уменьшается, а годы увеличиваются.


Чтобы средний возраст увеличился, надо что бы люди постарше _задерживались_, а этого как раз и не происходит, потому что фирмы плодятся как кролики, а те что побольше, расширяются не в себя. А это значит, что толпы людей уходят в менеджмент. В Штатах возможно ситуация немного иначе, туда уезжают люди постарше, рынок более устоявшийся. Но Штаты вобщем небольшая часть рынка разработки.
Re[33]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 02.04.13 14:36
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Чтобы средний возраст увеличился, надо что бы люди постарше _задерживались_, а этого как раз и не происходит,


Т.е. ты хочешь сказать, что на 10 приходящих молодых в менеджеры уходят 10 старичков? Если так, то у нас должно быть менеджеров гораздо больше, чем программистов.
Если нам не помогут, то мы тоже никого не пощадим.
Re[34]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.04.13 15:52
Оценка:
Здравствуйте, IT, Вы писали:

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


I>>Чтобы средний возраст увеличился, надо что бы люди постарше _задерживались_, а этого как раз и не происходит,


IT>Т.е. ты хочешь сказать, что на 10 приходящих молодых в менеджеры уходят 10 старичков? Если так, то у нас должно быть менеджеров гораздо больше, чем программистов.


Люди уходят
1 в бизнес
2 на повышение
3 в другую область
4 на тот свет

Например, с теми, с кем я когда то работал, в девелоперах осталось хорошо если четверть. Собтсвенно идейка не моя, я её просто проверил на людях из своих контактов которые когда либо были.
Конкретные примеры, не считая обычных ПМ, директоров и тд:

HR, тестировщики, админы, безопасники, бизнесаналитики, продуктовнеры, билдинженеры, траблшутинг, дизайн, сейлс!

Предпринимательство, строительство, автобизнес, логистику, ресторанный бизнес, такси.

Часть перестали работать, в основном девушки и особо яростные дауншифтеры.

Преподавание, занялись наукой.

Еще несколько человек умерло.

Причины в большинстве случаев вобщем достаточно простые — в ИТ очень жосткий потолок ЗП и достаточно высокий темп, нужно постоянно учить чтото новое, а слишком многие проекты это просто "пилить бревно".

Что характерно, активно уходят примерно после 30 лет.
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.04.13 22:15
Оценка:
Здравствуйте, IT, Вы писали:

IT>Элементарно, Ватсон! Чтобы старение было незаметным, нужно каждый год производить в десять раз больше молодых программистов, чем уже есть на рынке. И так было лет 15-ть назад. А сегодня приток молодёжи составляет несколько процентов в год и эта цифра с каждым годом уменьшается, а годы увеличиваются.


Но есть и плюсы. Зарплаты растут.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[49]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 03.04.13 18:02
Оценка:
Здравствуйте, Ziaw, Вы писали:

IT>>Если под затеей понимается эмуляция WinForms, то да, провальная. А если бы не страдали фигнёй и сделали редактор именно html, то может и что-то получилось бы.


Z>Провальная, как любая другая идея графического программирования. Лучше текста для редактирования кода ничего не придумано.


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

На самом деле редактору html вредит не графические возможности, а эмуляция WinForms. В частности очень сильно задалбывают автоматические марджины при перетаскивании элементов. Достаточно убрать этот режим и сделать редактирование, базирующееся на лэйауте, и всё может оказаться не так уж плохо.
Если нам не помогут, то мы тоже никого не пощадим.
Re[35]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 03.04.13 18:12
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Например, с теми, с кем я когда то работал, в девелоперах осталось хорошо если четверть.


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

Повторюсь. Индустрия стремительно стареет. Когда я был студентом и проходил практики во всевозможных лабораториях в разных НИИ, то средний возраст ведущих инженеров там был за соракет. Моложе 30-ти вообще считались зелёными сопляками. Это касается тогдашней радиоэлектроники.

А потом попёрли компы, я переквалифицировался в программеры и в свои 25-ть уже был начальником сектора и консультировал зубров, которые с трудом слезали с ЕС ЭВМ и пересаживались на PC. Сегодня ситуация если ещё не совсем, то уже очень близка к тому, что было в радиоэлектронике когда я был студентом. Со временем мы к этому придём — ведущим разработчикам будет за соракет, а все моложе 30-ти будут считаться зелёными щенками.
Если нам не помогут, то мы тоже никого не пощадим.
Re[50]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ziaw Россия  
Дата: 04.04.13 05:16
Оценка:
Здравствуйте, IT, Вы писали:

IT>Не совсем так. Например, написание вручную кода WinForms сводится к бесконечным компиляциям для пристрелки контролов. Вместо этого достаточно в редакторе немного поелозить мышкой.


WinForms очень ограниченны, как раз для графического редактора. Тот же WPF уже не легко вылазит за возможности редактора и править его в редакторе совсем не интересно.

IT>На самом деле редактору html вредит не графические возможности, а эмуляция WinForms. В частности очень сильно задалбывают автоматические марджины при перетаскивании элементов. Достаточно убрать этот режим и сделать редактирование, базирующееся на лэйауте, и всё может оказаться не так уж плохо.


Ну вот есть WPF, как раз как пример более менее умеющий лейауты. И редактор у него соотвествующий. Не сильно лучше html редакторов получается, вроде что-то отображает и редактировать позволяет, но код все равно удобнее.
Re[36]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.04.13 08:28
Оценка:
Здравствуйте, IT, Вы писали:

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


I>>Например, с теми, с кем я когда то работал, в девелоперах осталось хорошо если четверть.


IT>Из тех с кем я когда-то начинал остался практически я один. Из тех с кем начинал ты — четверть. Из тех кто начинал после тебя — половина. И т.п.


А разницу в возрасте куда деть ? Есть знакомые, которые девелоперы чуть помоложе меня, но уже думают уходить или в руковдство или в свой бизнес. Соотсвенно если они доживут до твоих лет, то в их поколении тоже останется один динозавр на сотню контактов.

IT>Повторюсь. Индустрия стремительно стареет. Когда я был студентом и проходил практики во всевозможных лабораториях в разных НИИ, то средний возраст ведущих инженеров там был за соракет. Моложе 30-ти вообще считались зелёными сопляками. Это касается тогдашней радиоэлектроники.


Ты сам подумай что пишешь, если остался ты один, значит что бы тебя заменить, нужно взять всего одного студента, а их приходит в индустрию гораздо больше. Скажем через 5 лет те люди, которые тебя на 5 лет моложе, точно так же будут один девелопер на сотню. Причины здесь простые — в ИТ надо постоянно чтото долбить, изучать и тд и тд и тд. А потолок в ЗП фиксированый.

Радиоэлектроника это консервативная область, туда изначально идут те, кто вряд ли уйдет. А ИТ очень сильно развивается. Если не считать мобайл бум, который тебе почему то не нравится, то оказывается, что нужны вагоны автоматизаторов-тестироващиков. Опаньки, они все оказывается программисты, но при это не девелоперы.
А еще есть админы-безопасники-билдинженеры-траблшутеры, и они тоже программисты, но не девелоперы. При этом собтсвенно потребность только в девелоперах как минимум не уменьшились, а учитывая мобайл бум, веб и тд то и вовсе увеличилась. По факту спрос на программистов вообще только вырос.

Спрос есть, соответсвенно, ЗП растет, а раз так, то очевидно надо чем то компенсирвоать рост ЗП. Эта компенсация простая — привлекать больше контингента. А кого привлекать ? ИТ достаточно трудная область, потому кроме молодых просто некого привлечь. И сейчас именно это наблюдается, люди начинают работать чуть не со школы, при чем конторы начинают брать чуть не полных гуманитариев что бы вакансии закрыть.
Re[37]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 04.04.13 13:33
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Ты сам подумай что пишешь, если остался ты один, значит что бы тебя заменить, нужно взять всего одного студента, а их приходит в индустрию гораздо больше. Скажем через 5 лет те люди, которые тебя на 5 лет моложе, точно так же будут один девелопер на сотню. Причины здесь простые — в ИТ надо постоянно чтото долбить, изучать и тд и тд и тд. А потолок в ЗП фиксированый.


Это всё домыслы. 5 лет назад я уже тоже был один, да и 10 лет назад практически тоже.

I>Радиоэлектроника это консервативная область, туда изначально идут те, кто вряд ли уйдет. А ИТ очень сильно развивается. Если не считать мобайл бум, который тебе почему то не нравится, то оказывается, что нужны вагоны автоматизаторов-тестироващиков. Опаньки, они все оказывается программисты, но при это не девелоперы.


Откуда ты знаешь что мне нравится, а что не нравится?

Программирование тоже консервируется. В 90-х мы пережили две технологические революции, в начале 2000-х ещё одну. И, кстати, эти революции были основной причиной ухода большинства разработчиков из программирования. Ничего подобного в ближайшем будущем не намечается, что свидетельствует о стабилизировании технологий, а следовательно и резкого оттока старичков тоже не будет. А тот естественный незначительный отток, который всё равно не избежен копменсируется старение молодёжи, так что совсем молодые уже не имеют такого подавляющего большинства, которое было 10-15 лет назад.

I>Спрос есть, соответсвенно, ЗП растет, а раз так, то очевидно надо чем то компенсирвоать рост ЗП. Эта компенсация простая — привлекать больше контингента. А кого привлекать ? ИТ достаточно трудная область, потому кроме молодых просто некого привлечь. И сейчас именно это наблюдается, люди начинают работать чуть не со школы, при чем конторы начинают брать чуть не полных гуманитариев что бы вакансии закрыть.


Ну и что? Это может привести лишь к расслоению профессионального уровня разработчиков. Появятся что-то типа техников, которым достаточно будет пэтэушного образования.
Если нам не помогут, то мы тоже никого не пощадим.
Re[38]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.04.13 16:10
Оценка:
Здравствуйте, IT, Вы писали:

IT>Ну и что? Это может привести лишь к расслоению профессионального уровня разработчиков. Появятся что-то типа техников, которым достаточно будет пэтэушного образования.


Это расслоение уже давно идет полным ходом.
Re[38]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.04.13 16:11
Оценка:
Здравствуйте, IT, Вы писали:

IT>Программирование тоже консервируется. В 90-х мы пережили две технологические революции, в начале 2000-х ещё одну. И, кстати, эти революции были основной причиной ухода большинства разработчиков из программирования. Ничего подобного в ближайшем будущем не намечается, что свидетельствует о стабилизировании технологий, а следовательно и резкого оттока старичков тоже не будет. А тот естественный незначительный отток, который всё равно не избежен копменсируется старение молодёжи, так что совсем молодые уже не имеют такого подавляющего большинства, которое было 10-15 лет назад.


А мобайл бум надо полагать это так себе ?
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 04.04.13 17:22
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>А мобайл бум надо полагать это так себе ?


Как минимум это не революция.
Если нам не помогут, то мы тоже никого не пощадим.
Re[38]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.04.13 12:10
Оценка:
Здравствуйте, IT, Вы писали:

IT>Откуда ты знаешь что мне нравится, а что не нравится?

IT>Программирование тоже консервируется. В 90-х мы пережили две технологические революции, в начале 2000-х ещё одну. И, кстати, эти революции были основной причиной ухода большинства разработчиков из программирования. Ничего подобного в ближайшем будущем не намечается, что свидетельствует о стабилизировании технологий, а следовательно и резкого оттока старичков тоже не будет.

Самая тяжёлая из этих технологических революций была только в exUSSR, из-за снятия барьеров.
Вот тогда да, была практически полная смена кадров.
А других фатальных революций не было, до сих пор есть программисты на Коболе

IT>Ну и что? Это может привести лишь к расслоению профессионального уровня разработчиков. Появятся что-то типа техников, которым достаточно будет пэтэушного образования.


Так они и сейчас есть. Кодеры в больших конторах и ваятели сайтов из Oppa Govnosite, Inc.
The God is real, unless declared integer.
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 05.04.13 13:57
Оценка:
Здравствуйте, netch80, Вы писали:

N>Самая тяжёлая из этих технологических революций была только в exUSSR, из-за снятия барьеров.


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

N>Вот тогда да, была практически полная смена кадров.


Была. В конце 80-х, начале 90-х. Не знаю как на это отразилось снятие барьеров, но произошло всё из-за тотальной смены технологий. ЕС ЭВМ были проданы на золото, PC пришли в массы.

N>А других фатальных революций не было, до сих пор есть программисты на Коболе


Было ещё как минимум две. Переход на Windows в 96-97, когда пользователи поставили раком всех разработчиков, пишущих на MS-DOS. И в 2002-2003-м уже по воле Майкрософт. Это касалось не всех и было проделано не так жёстко, но тем не менее многие не смогли это пережить.

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

IT>>Ну и что? Это может привести лишь к расслоению профессионального уровня разработчиков. Появятся что-то типа техников, которым достаточно будет пэтэушного образования.

N>Так они и сейчас есть. Кодеры в больших конторах и ваятели сайтов из Oppa Govnosite, Inc.

Это не техники. Это всё недоучки инженеры.
Если нам не помогут, то мы тоже никого не пощадим.
Re[40]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.04.13 11:23
Оценка:
Здравствуйте, IT, Вы писали:

IT>Но главное не это. Главное, что на сегодняшний день ничего подобного не намечается и из чего можно сделать вывод, что внешних факторов, подталкивающих старичков к уходу из разработки больше нет.


Во первых, минимально необходимо только внутренних факторов, например как в гимнастике. Много ты видел спортсменов которые старше 25 лет ? А у девок так старше 16 сложно найти. В ИТ есть вполне осязаемый потолок выше которого "старикам" крайне тяжело. Очень многие "сдуваются" уже к 30. И здесь не надо никаких внешних факторов, внутренние факторы такие — надо постоянно решать новые задачи, т.к. старые уже решены и только это заставляет людей постоянно долбить, долбить, долбить.
Какой кризит или бум, навроде мобайла, вынуждает долбить надо вдвое больше и быстрее, а революция так и вовсе хоронит всех динозавров.

Мобайл вместе с модным JS, есть кризис десктопа и соответственно околовиндовозных софтин на которых и сидит большая часть "стариков". Кроме того, "успехи" микрософта в веб и мобайл выталкивают виндузятников в Java, LAMP, С++ и куда угодно вплоть до автоматизации тестирования.

IT>>>Ну и что? Это может привести лишь к расслоению профессионального уровня разработчиков. Появятся что-то типа техников, которым достаточно будет пэтэушного образования.

N>>Так они и сейчас есть. Кодеры в больших конторах и ваятели сайтов из Oppa Govnosite, Inc.

IT>Это не техники. Это всё недоучки инженеры.


Нет такой специальности, как техник в программировании, недоучки выполняют роль техников. Потому если найти "чиста девелоперов", то вполне возможно окажется так, что они все суровые бородатые динозавры, но пока что нет способа однозначно отделить тех от других.
Re[41]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: IT Россия linq2db.com
Дата: 12.04.13 14:12
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Во первых, минимально необходимо только внутренних факторов, например как в гимнастике. Много ты видел спортсменов которые старше 25 лет ? А у девок так старше 16 сложно найти. В ИТ есть вполне осязаемый потолок выше которого "старикам" крайне тяжело. Очень многие "сдуваются" уже к 30.


Какие ещё гимнасты? В моей конторе подавляющее большинство девелоперов за 30, потому что молодняк пусть пока подучится где-нибудь в другом месте. И как бы никого это не напрягает.
Если нам не помогут, то мы тоже никого не пощадим.
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 11.05.13 18:44
Оценка:
Здравствуйте, netch80, Вы писали:

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


Z>>>Что сказать-то хотел? Чем это отличается от самописного фреймворка? Ты ведь сейчас как-то решаешь проблему множества недокументированных самописных фреймворков в проекте от студентов?

V>>Уже говорили тебе — отличается самодокументируемостью любых библиотек на типизированном ЯВУ. Для понимания библиотеки через АПИ достаточно знания ЯЗЫКА, на котором и для которого эта библиотека.

N>Уже смешно. Например, как понимание того, что зовётся createFoo(x), поможет знанию того, что этот вызов одновременно инициализирует подсистему bar?


Хороший пример. В некотором известном языке я буду точно знать, видя в тексте createFoo(x), что это вызов ф-ии или метода.
А в некотором незнакомом языке это могут быть:
— инстанциирование параметрического типа;
— создание массива;
— вызов ф-ии;
— переключение режима компилятора/интерпретатора;
— добавить по своему вкусу.


N>Или что до createFoo() должно быть setFooRange()?


Уже смешно. (C)
Прикладные аспекты АБСОЛЮТНО равнозначны для DSL и для обычного языка. Точно такие же вопросы у тебя возникнут при исолпьзовании доморощенной DSL, но эот будут вопросы не по самому DSL, а по коду/библиотеке/фреймворку на нём.

Кароч, если ты, видя код, начинаешь задавать вопросы ПРИКЛАДНОГО плана, то ты УЖЕ ПОНИМАЕШЬ этот код.


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

N>1. Нифига не "достаточно".

Достаточно. Остальную инфу можно получить прочтением интересующего кода и/или доки, в т.ч. инлайновой.


N>2. Сам по себе язык программирования является чудовищно избыточным для таких целей. Даже самый простой язык.


Ес-но, для любой ограниченной задачи язык общего назначения избыточен. Но почему это должно являться аргументом? Ведь твоя цель (грубо — ТЗ) могут корректироваться прямо в процессе разработки. Глядишь, вчера очередная фича языка еще была избыточна, а сегодня уже нужна. В случае DSL тебе придется постоянно его разрабатывать... рано или поздно осознавая необходимость делать breaking changes и переписывать старый код на этом DSL.


V>> Язык — это фундамент. Знание языка — трамплин для понимания любых вещей внутри экосистемы языка.

N>Осталось показать, как бизнес-логика является компонентом экосистемы языка.

Разве бизнес-логика составляет экосистему языка? Я так думал, что экосистема языка — это библиотеки, фреймворки, тулзы, популярные шаблоны/наработки/трюки и т.д.
Для известного языка ты всем этим можешь пользоваться после непродолжительного знакомства. Для несизвестного — не можешь никак, пока язык не станет тебе достаточно известным.
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 11.05.13 18:46
Оценка:
Здравствуйте, Sinclair, Вы писали:

V>>Итого, если из твоего списка выкинуть XML-based, или вариации на тему CSS-based, то не наберется даже десятка.

S>А чего только XML-based?

Потому что обсуждался в т.ч. синтаксис.


S>Давай уж тогда все, которые основаны на Unicode.


Давай ты попробуешь еще раз.
Re[12]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 11.05.13 18:51
Оценка:
Здравствуйте, Ziaw, Вы писали:

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


Дык, мне пофиг твои обиды. Если я вижу пост, в котором информации 0, я так и говорю — ты дал ноль информации. Если ты привел пример, который примером не является, то я так и говорю — твой пример нерелевантен и популярно объяснил — почему. Ес-но я при этом обращался лично к тебе. Но твою личность никак не обсуждал, в отличие от. Но могу начать. Конкретно от тебя я не припомню вообще ни одного ответа мне, где бы с аргументами или фактами наперевес ты что-то объяснил, на что-то открыл глаза и т.д. Единственный твой аргумент во всех спорах "это всё чушь"... Что как бэ намекает на определенный уровень владения искусством логического спора.
Re[69]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 12.05.13 01:11
Оценка:
Здравствуйте, nullxdth, Вы писали:

N>Я вас обрадую. Всё это уже давным давно есть -- LISP и Emacs называется.


О дааа... Один из самых мейнстримовых языков...
Re[13]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.05.13 06:10
Оценка:
Здравствуйте, vdimas, Вы писали:
Некрофилия замучила?

V>Давай ты попробуешь еще раз.

Что попробую?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[70]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: nullxdth Россия  
Дата: 12.05.13 08:43
Оценка:
Здравствуйте, alex_public, Вы писали:

>О дааа... Один из самых мейнстримовых языков...

А какое дело программисту до "мейнстримовости"? И какие вообще задачи решает факт принадлежности технологии к "мейнстриму"?
LISP --- квинтэссенция метапрограммирования.
Кстати, что вы подразумеваете под "развитой инфраструктурой"?
Re[14]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: vdimas Россия  
Дата: 12.05.13 09:42
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Некрофилия замучила?


Скорее, отсутствие достаточного времени на регулярный мониторинг.
Сия тема болтается среди первых в Философии, а я много чего еще не читал в ней со времени своего ответа.

V>>Давай ты попробуешь еще раз.

S>Что попробую?

Гы, то, чем ты тут так активно занимаешься. Написать пост.
Re[71]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: alex_public  
Дата: 12.05.13 23:58
Оценка:
Здравствуйте, nullxdth, Вы писали:

N>А какое дело программисту до "мейнстримовости"? И какие вообще задачи решает факт принадлежности технологии к "мейнстриму"?


В том что просто языка достаточно только для очень узкого круга задач. А для большинства реальных задач требуется ещё куча узкоспециализированных библиотек. Так вот для мейнстримовых языков (типа C/C++, Java) можно рассчитывать что если нужное решение вообще существует в природе, то для этих языков оно есть с гарантией. А для всяких редких языков (пусть даже и красивых) с большой вероятность придётся городить свой велосипед.

Кстати, у Лиспа ещё более менее ничего ситуация тут. Т.е. конечно далеко до мейнстрима, но и не какой-то редкий академический язык. Во всяком случае биндинги ко многим известным (обычно они C/C++ кстати) библиотекам имеются.

N>LISP --- квинтэссенция метапрограммирования.

N>Кстати, что вы подразумеваете под "развитой инфраструктурой"?

Выше уже написал)

Да, и кстати... Я не говорил что мне нужен язык заточенный под метапрограммирование. Оно всё же занимает явно не большую часть разработки, а скорее просто иногда облегчает работу. Так что мне нужны именно фичи метапрограммирования в современном мощном мультипарадигменном языке.
Re[72]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: nullxdth Россия  
Дата: 14.05.13 13:10
Оценка:
Здравствуйте, alex_public, Вы писали:

>А для всяких редких языков (пусть даже и красивых) с большой вероятность придётся городить свой велосипед.

Да. Вероятно, вы правы. Но тут всё же надо смотреть конкретно по ситуации. А также оценить качество решения в "мейнстримном" языке. И всё взвесить.
Не редко бывает так, что написать решение выгоднее. Благо что lisp способствует скорости разработки — почти интуитивное метапрограммирование.

>Кстати, у Лиспа ещё более менее ничего ситуация тут. Т.е. конечно далеко до мейнстрима, но и не какой-то редкий академический язык. Во всяком случае биндинги ко многим известным (обычно они C/C++ кстати) библиотекам имеются.

Обычно прям на lisp и пишут. Благо, что, например, sbcl — компилятор и проблемы с производительностью возникают редко. Но да, биндингов тоже достаточно.

>Да, и кстати... Я не говорил что мне нужен язык заточенный под метапрограммирование. Оно всё же занимает явно не большую часть разработки, Так что мне нужны именно фичи метапрограммирования в современном мощном мультипарадигменном языке.

Тяжко это, ибо "мейнстримные" языки обладают сложным синтаксисом, как правило. Т.е. МП совершенно точно не будет таким простым занятием, как в lisp.

>[...] а скорее просто иногда облегчает работу.

Иногда облегчает, а иногда без МП совсем тяжело, а ещё иногда даже невозможно за разумные сроки.
Re[73]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 14.05.13 13:39
Оценка:
Здравствуйте, nullxdth, Вы писали:

N>Тяжко это, ибо "мейнстримные" языки обладают сложным синтаксисом, как правило. Т.е. МП совершенно точно не будет таким простым занятием, как в lisp.

Это сказки.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[74]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: nullxdth Россия  
Дата: 14.05.13 13:44
Оценка:
Здравствуйте, WolfHound, Вы писали:

>Это сказки.

Подробнее, пожалуйста, про сказки.
В lisp же код — списки. А работать со списками просто; особенно в lisp — полный набор для всяческой обработки и нарезки + квазицитаты. Что может быть проще?
Уж не думаете ли вы, что МП в Nemerle проще чем в lisp?
Re[75]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: WolfHound  
Дата: 14.05.13 13:53
Оценка:
Здравствуйте, nullxdth, Вы писали:

N>Подробнее, пожалуйста, про сказки.

N>В lisp же код — списки. А работать со списками просто; особенно в lisp — полный набор для всяческой обработки и нарезки + квазицитаты. Что может быть проще?
N>Уж не думаете ли вы, что МП в Nemerle проще чем в lisp?
Уж точно не сложнее. Особенно если не требовать чтобы было точно как в лиспе. Ибо оно другое.
А в том проекте, который мы сейчас делаем, будет еще проще.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[76]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
От: nullxdth Россия  
Дата: 14.05.13 14:05
Оценка:
Здравствуйте, WolfHound, Вы писали:

>Ибо оно другое.

Ну в lisp'е всем известное МП — кодогенерация макросами.
Расскажите в кратце, чем принципально отличается МП в Nemerle?

Вот, например, МП Ruby — модификация в runtime. Другое МП, да. Этот подход сложнее Lisp'овского.

>А в том проекте, который мы сейчас делаем, будет еще проще.

Nemerle очень интересный проект. Я обязательно посмотрю на Nemerle детальнее. Очень рад дальнейшему развитию языка. Надеюсь у вас всё получится.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.