VD>>Вот еще ДСЛ-чик.
M>Ничего, что это — вызов библиотечной функции?
Ничего. Для встроенных ДСЛ-ей это характерно. Раз есть спец.синтаксис, то — это ДСЛ. Или вот это '^articles/(\d{4})/$' код на Питоне?
M>Не помню, кто тут говорил (может и не ты), что библиотеками ДСЛ не заменить :))
VD>>Короче, ты явно однобоко смотришь на код.
M>Однобоко смотришь ты, но тебе можно простить, ты Джанго не знаешь.
Ну, спасибо за прощение. :))
M>В Джанго, по сути, есть ровно один DSL — это Django Template Language для вьюх. Но ведь вьюхами дело не заканчивается, так ведь ;)
Нет. Как и ДСЛ не один. Это мы уже видели выше. Ну, а то что ты явно видишь его в шаблонизаторе — это от того, что там встроенный ДСЛ не канает. Точнее канает, но выглядеть будет не комильфо.
M>Есть модели: M>
M>Вролне себе декларативно-ДСЛеподобное описание модели/ORM'а, которое легко и просто разворачивается в M>
Ага. Я бы даже был более смел и сказал бы - встроенный ДСЛ. Да еще и с метапрограммированием. На Яве так не прокатит.
>>>> from datetime import datetime
>>>> a = Article(pub_date=datetime.now(), headline='Django is cool',
M>... content='Yeah.', reporter=r)
>>>> a.save()
M># Now the article is in the database.
>>>> Article.objects.all()
M>[<Article: Django is cool>]
M>
M>и прочую толпу методов При этом это как бы совсем не DSL, а просто ООП,
Ах это простое ООП? Ну, тогда тебя не затруднит объяснить мне как простой ООП превращает классы в записи БД? Или есть еще некий ДСЛ мапинга который осуществляет эту магию?
M>но для использования мозгов не требуется вообще: M>
О, как? А о суффиксах этих (_year, _startswith, _gte) нужно телепатией догадываться? Их кто делает?
Они случаем не есть расширение языка за счет обработки отсутствующих методов?
M>и т.п. Так оно еще и ленивое (то есть выполняется общий конечный запрос, а не по запросу на каждый вызов метода).
Ну, дык видно же что пытались линк сэмулировать имеющимися средствами. А линк — это не встроенный ДСЛ часом? :))
Короче, молодец. Лучше меня опроверг свою позицию.
M>К чему я это? А, к этому:
Мне кажется ты просто хотел сказать, что не знаешь что ДСЛ может быть внутренним, сделанным средствами языка. Именно это и сделано в Джанго.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>>>Вот еще ДСЛ-чик.
M>>Ничего, что это — вызов библиотечной функции?
VD>Ничего. Для встроенных ДСЛ-ей это характерно. Раз есть спец.синтаксис, то — это ДСЛ. Или вот это '^articles/(\d{4})/$' код на Питоне?
Это код на Питоне По сути, мы просто передаем RegExp, по которому матчим путь.
M>>Вролне себе декларативно-ДСЛеподобное описание модели/ORM'а, которое легко и просто разворачивается в VD>Ага. Я бы даже был более смел и сказал бы — встроенный ДСЛ. Да еще и с метапрограммированием. На Яве так не прокатит.
Ну да. Раз в Яве не прокатит, то это — смело DSL
M>>и прочую толпу методов При этом это как бы совсем не DSL, а просто ООП,
VD>Ах это простое ООП? Ну, тогда тебя не затруднит объяснить мне как простой ООП превращает классы в записи БД? Или есть еще некий ДСЛ мапинга который осуществляет эту магию?
elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte'):
return self.get_prep_value(value)
VD>Их кто делает? VD>Они случаем не есть расширение языка за счет обработки отсутствующих методов?
Вот оно как. Наличие в языке method_missing (как в Руби) ВНЕЗАПНО делает из него DSL? Что-то мне кажется, что ты сторонники DSL'изации всего и вся трактуют DSL так, как им выгодно. Не гворя о том, что никакой тут обработкой несуществующих методов и не пахнет. Вызывается функция с какими-то параметрами, количество которых в Питоне может быть неограниченно, и парсится название ключей (сорри, сейчас не найду точную строчку кода).
M>>и т.п. Так оно еще и ленивое (то есть выполняется общий конечный запрос, а не по запросу на каждый вызов метода). VD>Ну, дык видно же что пытались линк сэмулировать имеющимися средствами. А линк — это не встроенный ДСЛ часом?
LINQ — DSL. Где ты тут видишь DSL? Или ты считаешь, что из утверждения «Linq — DSL, Django типа эмулирует Linq» моментально следует «то, как Django эмулирует значит, что это — DSL»? Не говоря о том, что Django нифига не эмулирует Linq, как бы тебе этого ни хотелось бы.
VD>Короче, молодец. Лучше меня опроверг свою позицию.
M>>К чему я это? А, к этому:
VD>Мне кажется ты просто хотел сказать, что не знаешь что ДСЛ может быть внутренним, сделанным средствами языка. Именно это и сделано в Джанго.
Мне кажется, что твоя фраза про «фреймворки так не смогут» неверна — это все, что я хочу сказать. И Джанго это прекрасно показывает. Или тогда возвращаемся к тому, что «DSL — это любой ЯП (язык программирования) использованный в некотором приложении которое специализируется на какой-то предметной области» (http://rsdn.ru/forum/philosophy/4703108.1.aspx
Здравствуйте, alex_public, Вы писали:
_>Для обработки последовательностей данных эту задачу когда-то решили авторы sql.
SQL не работает с последовательностями, он работает с кортежами и отношениями (TOP/LIMIT оставим за бортом).
VD>>Мил человек. В линке одна из самых важных составляющих — это возможность автоматически преобразовать код в его AST. Так вот это на С++ делать запаришся, так как язык убог неимоверно.
_>Эта особенность как раз всю кривизну и привносит, причём при отсутствие реальной необходимости.
Поподробнее раскроешь мысль, как expression tree привносят в linq кривизну?
... << RSDN@Home 1.2.0 alpha 5 rev. 52 on Windows 7 6.1.7601.65536>>
Здравствуйте, Mamut, Вы писали:
VD>>Они случаем не есть расширение языка за счет обработки отсутствующих методов?
M>Вот оно как. Наличие в языке method_missing (как в Руби) ВНЕЗАПНО делает из него DSL?
Наличие в языке method_missing (как в Руби) ВНЕЗАПНО делает возможным изменение смысла конструкций хост-языка, что ВНЕЗАПНО упрощает создание внутренних DSL-й.
Советую тебе почитать книжку Фаулера про ДСЛ-и. Он в ней как раз этот метод описывает.
M>Что-то мне кажется, что ты сторонники DSL'изации всего и вся трактуют DSL так, как им выгодно.
Я просто потратил нное количество времени на то, чтобы разобраться в вопросе. Только и всего!
ДСЛ-и используются намного чаще чем может показаться на первый взгляд. В динамических языках ДСЛ-ли делать проще (удобнее), так как есть множество средств для этого. method_missing одно из таких средств.
В статических языках до недавнего времени делать ДСЛ-и было очень сложно. Но и в них можно извернуться. Проблема только в том, что результат не всегда получается приемлемым.
M>Не гворя о том, что никакой тут обработкой несуществующих методов и не пахнет. Вызывается функция с какими-то параметрами, количество которых в Питоне может быть неограниченно, и парсится название ключей (сорри, сейчас не найду точную строчку кода).
Ключевое слово тут "парсится".
M>LINQ — DSL. Где ты тут видишь DSL?
M>Или ты считаешь, что из утверждения «Linq — DSL, Django типа эмулирует Linq» моментально следует «то, как Django эмулирует значит, что это — DSL»?
Сори. Я не смог этого понять.
M>Не говоря о том, что Django нифига не эмулирует Linq, как бы тебе этого ни хотелось бы.
Можешь назвать это как хочешь, но язык запросов на лицо. Это явно не доступ к БД через АПИ.
M>Мне кажется, что твоя фраза про «фреймворки так не смогут» неверна — это все, что я хочу сказать.
В какой-то мере могу согласиться, так как большая часть фрэймворков как раз и привлекает ДСЛ-подход. Просто фрэймворки в понимании дотнета и явы частенько делают это крайне уродливо. Скажем за неимением гибких средств в языке или качественных средство вроде N2/Nemerle они скатываются к программированию в ХМЛ или жутким встроенным ДСЛ-ям.
У динамики с этим все намного лучше. Но все равно результат получается не идеальным. К тому же есть куча проблем связанных с самой динамикой. Тут тебе и недостаточная производительность, и некачественная поддержка IDE. Об автоматических рефакторингах вообще можно забыть.
M>И Джанго это прекрасно показывает.
Джанго показывает только то, что в динамических языках проще клепать ДСЛ-и.
M>Или тогда возвращаемся к тому, что «DSL — это любой ЯП (язык программирования) использованный в некотором приложении которое специализируется на какой-то предметной области» (http://rsdn.ru/forum/philosophy/4703108.1.aspx
Здравствуйте, AndrewVK, Вы писали:
N>>А жаль. Это значит, что слишком много флеймов, где спорят, совершенно не согласовав, о чём вообще говорят. AVK>Моя практика показывает, что как только разговор заходит о трактовке терминов, ветку сразу можно бросать читать, потому что ничего интересного в ней уже не будет, один пустой срач.
А моя — что с этого и начинается конструктив.
Хотя, конечно, если у тебя собеседники, как некоторые здешние апологеты уездных языков, то они в принципе не способны что-то сказать не на своём языке, который больше мало кто понимает. Из таких — да, надо вытаскивать на их языке. Но я лично не хочу работать психоаналитиком на форуме.
Здравствуйте, WolfHound, Вы писали:
WH>Графическое представление не работает чуть менее чем всегда. WH>Вон тот же AndrewVK пытался делать графические ДСЛ.
Почему пытался? Делал.
WH>На маленьких задачах все было отлично.
На реальных задачах тоже все неплохо получается. Просто надо было заменить уродский Netron на полноценный движок.
... << RSDN@Home 1.2.0 alpha 5 rev. 52 on Windows 7 6.1.7601.65536>>
Здравствуйте, oldjackal, Вы писали:
O>>> Рефакторинг — зло. Чем скорее человечество забудет это гнусное слово, тем лучше. WH>>И что вместо него?
O> Ручками, аккуратно, вдумчиво, страдая и мучаясь. Потому как если это будет слишком легко делать, этим будут злоупотреблять.
Рефакторинг, сделанный руками, перестает быть рефакторингом?
... << RSDN@Home 1.2.0 alpha 5 rev. 52 on Windows 7 6.1.7601.65536>>
Здравствуйте, AndrewVK, Вы писали:
WH>>Графическое представление не работает чуть менее чем всегда. WH>>Вон тот же AndrewVK пытался делать графические ДСЛ. AVK>Почему пытался? Делал.
По тому что, то, что я видел, было ужасно.
WH>>На маленьких задачах все было отлично. AVK>На реальных задачах тоже все неплохо получается. Просто надо было заменить уродский Netron на полноценный движок.
И чем же другой движок помогает от паутины стрелок?
Покажи скриншот.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
AVK>>Почему пытался? Делал. WH>По тому что, то, что я видел, было ужасно.
Ты видел не финальный вариант.
WH>>>На маленьких задачах все было отлично. AVK>>На реальных задачах тоже все неплохо получается. Просто надо было заменить уродский Netron на полноценный движок. WH>И чем же другой движок помогает от паутины стрелок?
Нормальными алгоритмами роутинга этих стрелок. Ну и добавление новых элементов позволило кардинально сократить количество стрелочек.
WH>Покажи скриншот.
Лень, если честно.
... << RSDN@Home 1.2.0 alpha 5 rev. 52 on Windows 7 6.1.7601.65536>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Нормальными алгоритмами роутинга этих стрелок.
От лапши никакой алгоритм роутинга не поможет.
AVK>Ну и добавление новых элементов позволило кардинально сократить количество стрелочек.
Это только немного оттягивает конец.
Графические ДСЛ не масштабируются.
WH>>Покажи скриншот. AVK>Лень, если честно.
Понятно. Показывать нечего.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
VD>>>Они случаем не есть расширение языка за счет обработки отсутствующих методов? M>>Вот оно как. Наличие в языке method_missing (как в Руби) ВНЕЗАПНО делает из него DSL? VD>Наличие в языке method_missing (как в Руби) ВНЕЗАПНО делает возможным изменение смысла конструкций хост-языка, что ВНЕЗАПНО упрощает создание внутренних DSL-й. VD>Советую тебе почитать книжку Фаулера про ДСЛ-и. Он в ней как раз этот метод описывает.
Останусь при своем мнении:
M>>Что-то мне кажется, что ты сторонники DSL'изации всего и вся трактуют DSL так, как им выгодно.
M>>Не гворя о том, что никакой тут обработкой несуществующих методов и не пахнет. Вызывается функция с какими-то параметрами, количество которых в Питоне может быть неограниченно, и парсится название ключей (сорри, сейчас не найду точную строчку кода).
VD>Ключевое слово тут "парсится".
Да не там этого ключевого слова. От того, что ты передал в метод ассоциативный массив, ручками пробежался по ключам и написал диспатчер, состоящий из if'ов это стало DSL'ем? В общем, отцитированное выше.
M>>Или ты считаешь, что из утверждения «Linq — DSL, Django типа эмулирует Linq» моментально следует «то, как Django эмулирует значит, что это — DSL»? VD>Сори. Я не смог этого понять.
Твоя фраза выглядела так: Django эмулирует Linq. Linq — DSL, следовательно в Джанго DSL. Я ставлю под сомнение это «следовательно»
M>>Не говоря о том, что Django нифига не эмулирует Linq, как бы тебе этого ни хотелось бы. VD>Можешь назвать это как хочешь, но язык запросов на лицо. Это явно не доступ к БД через АПИ.
И? Открою СТРАШНУЮ тайну — любой ORM — это не доступ к БД через АПИ. Клепим ярлык «это DSL, а не фреймворк» на все ORM'ы?
M>>Мне кажется, что твоя фраза про «фреймворки так не смогут» неверна — это все, что я хочу сказать.
VD>В какой-то мере могу согласиться, так как большая часть фрэймворков как раз и привлекает ДСЛ-подход. Просто фрэймворки в понимании дотнета и явы частенько делают это крайне уродливо. Скажем за неимением гибких средств в языке или качественных средство вроде N2/Nemerle они скатываются к программированию в ХМЛ или жутким встроенным ДСЛ-ям.
VD>У динамики с этим все намного лучше. Но все равно результат получается не идеальным. К тому же есть куча проблем связанных с самой динамикой. Тут тебе и недостаточная производительность, и некачественная поддержка IDE. Об автоматических рефакторингах вообще можно забыть.
Какое отношение это к обсуждаемой теме известно только тебе
M>>И Джанго это прекрасно показывает.
VD>Джанго показывает только то, что в динамических языках проще клепать ДСЛ-и.
Грамотно ограниченный ДСЛ позволит использовать людей со слабой квалификацией и ограниченными возможностями. Фрэймворки и библиотеки такого же эффекта не дадут.
Джанго показывает, что с использованием фреймворка Джанго можно использовать людей со слабой квалификацией и ограниченными возможностями.
M>>Или тогда возвращаемся к тому, что «DSL — это любой ЯП (язык программирования) использованный в некотором приложении которое специализируется на какой-то предметной области» (http://rsdn.ru/forum/philosophy/4703108.1.aspx
Здравствуйте, AndrewVK, Вы писали:
AVK>Ты действительно в это веришь?
Я еще не видел ни одного графического ДСЛ, который бы не скатывался в говно, но больших задачах.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
AVK>>Ты действительно в это веришь? WH>Я еще не видел ни одного графического ДСЛ, который бы не скатывался в говно, но больших задачах.
Будем обсуждать твой кругозор? И что насчет ситуации, когда большие задачи не нужны?
... << RSDN@Home 1.2.0 alpha 5 rev. 52 on Windows 7 6.1.7601.65536>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Будем обсуждать твой кругозор?
Ну, так покажи класс.
AVK>И что насчет ситуации, когда большие задачи не нужны?
Один хрен текст лучше.
Тем более что ненужность больших задач весьма сомнительна.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, AndrewVK, Вы писали:
K>>Скорее так: годами и десятками лет пытаются выразить специфику неудобными конструкциями языков общего назначения. Колются, плачут, но продолжают мучиться.
AVK>Ну давай проведем эксперимент. Вот типовой серверный бизнес-код на универсальном языке — C#. Давай ты продемонстрируешь, как все будет круто на DSL?
Да без проблем.
rollback for each doc in XO
Одного не пойму — почему они все стушевались. Смешной вопрос для труъ-ценителей DSL, право .
Здравствуйте, WolfHound, Вы писали:
WH>Графические ДСЛ не масштабируются.
Почему?
Схемы электрические принципиальные, например, спокойно масштабируются. Вводи себе блоки с интерфейсами, вводи сущность "шина", объединяющая несколько связей и т.д.
Масштабирование зависит от поддержки языка и инструмента. В нормальных графических редакторах схем кликнул по блоку — и входишь в редактирование блока. Или выделил несколько элементов — и в контекстном меню сказал им "сделать из них блок" и т.д.
Иначе бы схемы из миллионов вентилей просто не взлетели бы...
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, AndrewVK, Вы писали:
AVK>>Ты действительно в это веришь? WH>Я еще не видел ни одного графического ДСЛ, который бы не скатывался в говно, но больших задачах.
Не смотрел, потому и не видел. А как же железки разрабатывают? Ты утонешь уже в сотнях элементов на одном уровне, а их сейчас на многие тысячи и даже миллионы в процах.