Здравствуйте, IB, Вы писали:
IB>Здравствуйте, VladD2, Вы писали:
VD>>Он просто возмущен тем, что кто-то может сомневаться в том что автор может не знать что-то. IB>Влад, ты задрал. На долго тебя действительно не хватило.
Кого я задрал? Он что девочка обижаться на примитивные вопросы?
Тупо отбрасывает неугодные ему факты и строит "логику" на тех, что ему нужны.
Это чистой воды обман или незнание предмета обсуждения.
IB>Я далеко не во всем согласен с АВК, да и задачи у меня другие, но наблюдать со стороны твою демагогию крайне не приятно.
С начало не плох было бы продемонстрировать демагогию в моих словах.
Демагогия, а точнее софистика как раз сплошь и рядом в словах АВК.
VD>>Ну, что же остается только задать вопрос: А почему же автор не упомянул о такой возможности? И почему он старательно пытается избежать ее обсуждения. Ведь, казалось бы, она снимает проблему изменения синтаксиса с которой боролся. IB>Не снимает. Проблема не в том, что можно так не делать, проблема в том, что так делать в принципе можно, об этом говорилось уже ни раз.
Это не аргумент. Синтаксические расширения — это не грипп. Их нельзя подхватить случайно. Запрети в своей конторе их использовать или дай разрешение на их введение только определенным лицам (т.е. себе любимому) и проблема исчезнет как класс.
К тому же вам сто раз говрили люди которые все это используют на практике — нет проблем от синтаксических макросов. Вообще нет. Над тем же Немерлом работали в разное время десятки человек и в вакханалию ничего не превратилось.
С точки зрения использования нет особой разницы вводится ли новый макрос, или новый класс. Последствия совершенно одинаковые.
Вот где действительно есть проблемы, так это в качестве написанных макросов. Оно должно быть на высоте, так как макра — это фактически плагин к компилятору и IDE, а значит она может повлиять на их работу. Но это опять же имеет прямую корреляцию с библиотеками. Не давайте кому попало писать критический код.
VD>>Хм. Весьма странные рассуждения. Они скорее запутают неопытного читателя нежели что-то ему объяснят. IB>Позволю себе напомнить, что тут не стояла цель что-то объяснить неопытному читателю. Андрей объяснял, опытным читателям, что именно его не устраивает в Nemerle, на именно его задачах. И именно этого вы от него и требовали.
Андрей просто неверно трактует термины встроенный DSL и мета-программирование. Об этом я и говорил.
VD>>Из определения ясно видно, что это не усеченные или расширенные языки программирования общего назначения, а совершенно другие языки описывающие предметную область и оперирующие терминами из этой области. IB>То есть, ты утверждаешь, что переходя в термины предметной области ты не сужаешь набор возможностей?
Да, и это нужно четко понимать если уж ты взял на вооружение ДСЛ-подход.
Ты не сужаешь и не расширяшь базовый язык. Ты вводишь в язык некий подъязык с совершенно другой семантикой, а возможно и синтаксисом. Это может быть сделано разными средствами (не только через МП), но после того как это сделано, рассматривать ДСЛ как сужение или расширение основного языка ошибочно и пагубно.
IB>И не составит никаких проблем описать бухгалтерию точки общественного питания в терминах системы управления АЭС?
Ты сейчас намеренно сказал глупость. Зачем?
Конечно описывать бухгалтерию в терминах АСУТП АЭС глупо. Скажу даже больше невозможно.
Но встроить в один язык два подъязыка-ДСЛ-я один из которых позволит описать предметную область бухгалтерии, а другой АСУТП АЭС можно. Вряд ли это потребуется в одном проекте, но это ведь не проблема?
VD>>Так вот поддержка ДСЛ-ей заключается не в наложении ограничений или расширений к основному языку, а в том, что язык позволяет описать совершенно новую семантику, а иногда и синтаксис. IB>С набором ограниченных возможностей.
Не. С совершенно иной семантикой! Ты просто не пишешь на базовом языке, а пишешь на ДСЛ-е. Давай перейдем от абстракций к конкретике. Вот у нас есть конкретный ДСЛ — регулярные выражения. Как они сужают базовый язык? Да они к нему просто не имеют никакого отношения! Они романтически совсем другие. Разбор регулярных выражений можно реализовать на языке общего назначения (ЯОН), но нельзя выразить с его помощью.
Улавливаешь разницу? Ну, так вот используя скажем Шарп ты можешь реализовать класс который будет принимать ДСЛ регулярных выражений в качестве строки и производить сопоставление. И то, и другое будет производиться в рантайме. Скажем реализация регекспов в дотнете может скомпилировать их на лету чтобы ускорить их работу. Вот эта компиляци, а точнее генерация для нее кода — это и есть МП. Немерле же позволят:
1. Производить разбор и анализ ДСЛ-я в процессе компиляции.
2. Легко сгенерировать эффектинвый код, опять же во время компиляции.
Неужели это плохо?
VD>>Но ты почему-то проигнорировал наши просьбы дать расскзать о проблемах МП в Немерле. Вместо этого ты почему-то рассказал нам о своих предубеждениях (ни на чем не основанных). IB>Во-первых, никто не обещал рассказывать про проблемы МП в немерле, обещали рассказать чем не устраивает немерле именно AVK, и именно это и рассказали.
Вообще-то обещал. Но в другой теме.
IB>А во-вторых, рассказали на чем именно основаны "предубеждения".
Да не очень то. А вот, то что это предубеждения ясно любому кто знаком с Немерле не по наслышке. Заметь не нашлось никого, кто хоть немного знал бы этот язык и при этом согласился бы с АВК.
VD>>Почему-то уверен, что ответов по существу не будет. Вместо этого снова будет вцеплена одна из фраз, я буду обвинен в хамстве, а автор темы снова провозгласит себя правым и обиженным. А жаль. IB>А ты не хами и жалеть не придется.
А в чем хамство то? Для него хамство — это когда я называю вещи своими именами. Я говорю, что он намерено или нечаянно опускает из рассмотрения вещи с которыми он (по всей видимости) не может конструктивно спорить. Это хамство? тогда, рабята с вами вообще нельзя что-то обсуждать, так как хамством для вас является любое сомнение в вашей правоте. А не то что бы сомневался. Я отчетливо вижу отсутствие этой самой правоты.
VD>>Ведь только в честных спорах рождается истина. IB>Возможно. Но только честно спорить ты не умеешь.
Да, конечно. Ты меня Вань извини, но слова АВК — это большей частью демагогия не имеющая никакого отношения к техническим аспектам. И все это проистекает из-за того, что человек пытается найти технические обоснования для сугубо субъективных предпочтений.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
M>>Генератор запускается когда студия решила
AVK>Для VS 2003. Для VS 2005 + — не только.
Какая разница? Генератор должен выдавать один и тот же результат сколько бы его не запускали при одинаковых параметрах.
Если генератор детерменированый, пусть запускается когда хочет. Если недетерминированый, сам виноват -- пусть свою недетерминированость кеширует где-то в скрытом файле.
Здравствуйте, IB, Вы писали:
A>>В чем демагогия то? IB>В том, что он передергивает практически каждое предложение и отвечает не на то что было написано, а на то что ему удобно.
Не надо грязи. Иронизирую — да, но нельзя не иронизировать над набором заблуждений и неверных трактовок терминов.
А демагогии в моих словах нет вообще. Ух где она есть, так это в словах АВК.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, alvas, Вы писали:
A>но все равно неплохо выбрать в команде самого смышленого и дать ему задачу следить за технологическими тенденциями в свободное от работы время.
Злостный оффтопик, ну да ладно. Неплохо конечно. Но мало. Во-первых, все, я повторяю, все программисты обязаны быть в курсе ситуации в их области, о тенденциях. Во-вторых, в определенном количестве контор в штатах (и даже в России) есть более интересный подход. При этом в рамках конторы (не из 5 программистов, конечно) создается команда высококвалифицированных спецов, которая постоянно держит руку на пульсе. В особо продвинутых случаях такая команда превращается в отдельный департамент.
... << RSDN@Home 1.2.0 alpha 4 rev. 1132 on Windows Vista 6.0.6001.65536>>
Здравствуйте, mihailik, Вы писали:
M>Какая разница?
Есть разница.
M>Если генератор детерменированый, пусть запускается когда хочет.
Главное, чтобы он запускался тогда, когда хочу я. А сейчас у меня ни возможностей по управлению, ни даже какой то ясности. Товарищи подстраивают это все под свои сценарии, а мне остается только уповать на то, что мои сценарии не слишком отличаются.
... << RSDN@Home 1.2.0 alpha 4 rev. 1132 on Windows Vista 6.0.6001.65536>>
Здравствуйте, mihailik, Вы писали:
AVK>>увязан крайне нетривиально(слабо найти, к примеру, документацию, в каких случаях генератор запускается). Одна только необходимость коммитить генерируемый код — уже маразм еще тот.
M>Генератор запускается когда студия решила, что файл изменился, или когда программист нажал правую кнопочку и попросил.
Не только. Например, когда в свойствах проекта меняешь default namespace, происходит запуск. Проверялось на t4.
Здравствуйте, AndrewVK, Вы писали:
AVK>Названия методов и ключи реестра — это все незначительная шелуха. Гавенность Custom Tool глубже — он увязан со конкретной студией и увязан крайне нетривиально(слабо найти, к примеру, документацию, в каких случаях генератор запускается). Одна только необходимость коммитить генерируемый код — уже маразм еще тот.
Ну, и почему бы вместо этого уродства не иметь возможность встроить код генерации в процесс компиляции на общих основаниях (как плагин)?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Ну, и почему бы вместо этого уродства не иметь возможность встроить код генерации в процесс компиляции на общих основаниях (как плагин)?
Ничего не имею против.
... << RSDN@Home 1.2.0 alpha 4 rev. 1132 on Windows Vista 6.0.6001.65536>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Я тоже так думал. А на практике оказалось, что этот DSL приходится поддерживать постоянно. Если DSL этот — ключевое момент системы, это еще ничего. А вот если вспомогательный — сложно все таки мыслить концепциями генераторов, сложнее, чем просто писать целевой код.
Вот это, наверно, корень всего твоего не понимания.
Не надо мыслить концепциями генератора чтобы использовать макрос! Не-на-до!
Ты же не мыслишь концепциями генератора когда используешь, например, foreach? Не мылишь.
А меж тем foreach пример эдакого микро-ДСЛ-я прекрасно реализуемого в виде макроса.
Пойми, макрос должен вводить некую сущность более низкоуровневую чем сущности языка. Тогда макра будет восприниматься программистами как средство упростить свой код, выразить внятно что-то, что ранее им пришлось бы описывать нагромождением кода.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>Это все я написал к тому, что была у меня задача создания довольно сложной модели и ее реализации в условиях цейтнота. Тогда я справился при помощи кодогенерации, и очень быстро получил результат. Но теперь, по проществии нескольких лет, приходится признать, что на поддержку генератора я затратил больше усилий, чем если бы я ничего не генерировал с самого начала и просто рефакторил бы готовый код.
Это потому, что генератор создавался средствами для этого не заточенными. Макросы поддерживать наного проще.
В прочем, всегда есть задачи которые можно решить с помощью МП, но не нужно.
ЗЫ
Не вижу почему из-за того, что иногда что-то проще сделать руками проще, надо всегда все делать руками.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
IT>>Не знаю зачем ты добавил сюда этот пункт, но МП тут вообще ни при чём.
AVK>Влад в соседней ветке утверждал, что любая кодогенерация это МП. По мне так называй как хочешь, непринципиально.
Это утверждал даже не Влад, а само определение МП.
Другое дело, что не все МП имеет смысла (да и вообще возможно) создавать с использованием макросов. Вот визарды — это пример где макросы бесполезны, но это тем не менее МП в чистом виде. Сам визард — мета-программа.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>А меж тем foreach пример эдакого микро-ДСЛ-я прекрасно реализуемого в виде макроса.
VD>Пойми, макрос должен вводить некую сущность более низкоуровневую чем сущности языка. Тогда макра будет восприниматься программистами как средство упростить свой код, выразить внятно что-то, что ранее им пришлось бы описывать нагромождением кода.
Можешь пояснить что ты имел в виду? Ведь DSL — это буквально "язык предметной области", он по определению не может быть более "низкоуровневым чем сущности языка".
Здравствуйте, VladD2, Вы писали:
VD>Ну, и почему бы вместо этого уродства не иметь возможность встроить код генерации в процесс компиляции на общих основаниях (как плагин)?
Ну, так и начни рассматривать макры, как такие плагины позволяющие решать проблемы которые другими средствами красиво не решишь. Тогда все сразу встанет на свои места.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
VD>>Вот это, наверно, корень всего твоего не понимания.
AVK>Я просил мою персону не обсуждать здесь. Это так сложно?
Я обсуждаю твои словам которые считаю полнейшим заблуждением. Научисть воспринимать критику своих слов конструктивно. Иначе с тобой нельзя будет ни о чем говорить.
VD>>Ты же не мыслишь концепциями генератора когда используешь, например, foreach? Не мылишь.
AVK>Я не про использование, я про его написание.
А причем тут написание? Ты же говорил об использовании.
В прочем, то что делается макрой можно сделать только копи-пэстом. А поддержка копи-пэста — это самое плохое что можно придумать.
В общем, если ты имеешь негативный опыт написания мета-программ, то возможно нужно задуматься о проблемах которые к этому привели, а не искать фатальный недостаток в МП. Для эффетивновго использования МП нужно иметь скилы в МП и качественные инструменты. Плюс мета-программа — это такая же программа как и другие. И если ты накосячил в ее проектировании, то проблемы гарантированы. Вот что правда, так это то, что проблемы с мета-кодом выливаются в большую головную боль, так как они воздействуют на множество мест в программе.
VD>>А меж тем foreach пример эдакого микро-ДСЛ-я прекрасно реализуемого в виде макроса.
AVK>Ничего не имею против реализации foreach средствами макросов, если удается обеспечить приемлемую производительность компилятора.
Удается. И еще удается исправлять баги допущенные создателями этого макроса. Так как од макроса намного более читабельный чем аналогичный код в "обычном" компиляторе.
Ну, что мы можем признать, что идеи макросов таки могут быть полезных хотя бы в каких-то областях?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Lloyd, Вы писали:
VD>>А меж тем foreach пример эдакого микро-ДСЛ-я прекрасно реализуемого в виде макроса.
VD>>Пойми, макрос должен вводить некую сущность более низкоуровневую чем сущности языка. Тогда макра будет восприниматься программистами как средство упростить свой код, выразить внятно что-то, что ранее им пришлось бы описывать нагромождением кода.
L>Можешь пояснить что ты имел в виду? Ведь DSL — это буквально "язык предметной области", он по определению не может быть более "низкоуровневым чем сущности языка".
Это опечатка. Я хотел написать "высокоуровневую".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
VD>>Это потому, что генератор создавался средствами для этого не заточенными.
AVK>Нет. Проблема именно в концепции.
Несогласен. Но спорить не о чем, так как с заявлениями (без объяснений) спорить невозможно.
VD>> Макросы поддерживать наного проще.
AVK>Проще, но не намного. Я пробовал.
Уверен, что у тебя просто не было достаточного опыта в написании макросов. Не знаю к щастью ли, или к горю, но для написания не тривиальных макросов требуется немалый опыт. Он легко получается при работе в паре с более опытным (в этом аспеке) коллегой, но самому его прийдется нарабатывать годами. Это как ОО-дизайн. Все думаю, что все в нем понимаю, но реально в нем понимают еденицы.
VD>>Не вижу почему из-за того, что иногда что-то проще сделать руками проще, надо всегда все делать руками.
AVK>Потому что на моих задачах, уж так получается, первое встречается намного чаще.
А ты не допускаешь, что ты просто в чем-то ошибался?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, VladD2, Вы писали:
VD>>Это утверждал даже не Влад, а само определение МП.
AVK>Это к IT, я спорить о терминах не буду.
Метапрограммирование — создание программ, которые создают другие программы как результат своей работы (либо — частный случай — изменяющие или дополняющие себя во время выполнения).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.