Здравствуйте, Eye of Hell, Вы писали:
EOH>Это, на мой взгляд, не очень хороший пример — он маленький. Да, ЭТО легко прочесть и, я думаю, нетрудно будет поддерживать. Но в сложном коммерческом проекте хотя бы от миллиона строк исходников DSL будет несколько слоажнее — и тут то проблемы и начнутся.
Да не будет миллиона строк на DSL, нет проектов такой сложности, чтобы предметная область на специальном языке описывалась в миллион строк. Хотя 20 формоклепов способны с помощью копипаста и такой-то матери выдавать по нескольку десятков тысяч строк в день, вне зависимости от используемого языка. Так что твои беспокойства я вполне понимаю.
Z>>А для низкоквалифицированных разработчиков метапрограммирование просто незаменимо. Они могут начать его использовать совершенно не понимая, что происходит под капотом. Не имея квалификации написать тот код, который будет сгенерен у них обычно не выходит.
EOH>При этом они полностью зависят от тех, кто поддерживает сам DSL. Стоит такому человеку / людям уволиться или заболеть — у нас двадцать формоклеперов с проблемами ^_^.
Если эти люди не будут поддерживать DSL, они будут поддерживать в проекте что-то другое, с чем придется взаимодействовать формоклепам. От чего почти наверняка будут примерно те же проблемы у 20 неспособных работать без нянек ребят.
Проблема еще в том, что ты представляешь DSL как совершенно новый язык для которого пишется свой компилятор (ну или что-то подобное по сложности). На самом деле в язык вводятся просто небольшие конструкции, которые пишутся, тестируются и работают. Чтобы поддерживать макры немерла не надо быть семи пядей во лбу. Да и не надо сидеть и поддерживать какой-то там новый язык, надо поддерживать несколько кирпичиков, которые делают код более декларативным. Обезьянки всегда смогут писать код по старому, если вдруг перестали что-то понимать в одном из кирпичиков и объяснить им некому.
На этом месте, те, кто не работал с nemerle начинают сомневаться в совместимости кирпичиков. Поэтому сразу скажу, что проблем с этим обычно нет, по крайней мере я их не видел, не слышал о них и не представляю себе как они могут вылезти.
Re[12]: Способно ли метапрограммирование заменить отдельные
Здравствуйте, Eye of Hell, Вы писали:
EOH>Я же не против DSL вообще. Понятное дело, что для частного случая можно и нужно использовать то, что для этого частного случая будет лучше. Но если у меня команда 20+ человек и старший программист Вася приползает ко мне со словами "а вот давай я тут DSL вверну, оно понятнее будет" — я не разрешу. Потому что сейчас Вася тут, а завтра в Яндексе. И что он там напишет — непонятно. Пусть лучше кода будет немного больше, зато у проекта через год головной боли будет меньше.
Это потому, что ты знаешь, что Вася ДСЛ будет делать каменным молотком и взлетит этот ДСЛ только если Вася прыгнет выше головы. А теперь представь, что у Васи есть тул который позволяет делать ДСЛ за пол дня, и результат получается таким очевидным, что его смогут поддерживать дети после недели обучения. И все это не волшебство, а технология описанная в учебнике. Что тогда?
EOH>ИМХО не очень удачный пример потому что эксплоитит ту область, в которой DSL must have — создание парсеров. Но ведь парсеры не так часто создаются?
ДСЛ он много где "должен быть", но вот нет культуры, инструментов и привычки его создания и поддержки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Способно ли метапрограммирование заменить отдельные
Здравствуйте, Eye of Hell, Вы писали:
EOH>Это, на мой взгляд, не очень хороший пример — он маленький. Да, ЭТО легко прочесть и, я думаю, нетрудно будет поддерживать. Но в сложном коммерческом проекте хотя бы от миллиона строк исходников DSL будет несколько слоажнее — и тут то проблемы и начнутся.
Правда в том, что при правильном использовании ДСЛ-я (по делу) вместо миллиона строк будет 10 тысяч, или хотя бы 100 тысяч. И их поддержка будет не сравнима по сложности.
EOH>При этом они полностью зависят от тех, кто поддерживает сам DSL. Стоит такому человеку / людям уволиться или заболеть — у нас двадцать формоклеперов с проблемами ^_^.
Ну, так требуй чтобы те кто писли ДСЛ-и делали это а) качественно (ты им деньги не малые платишь), б) документируя свой код, и в) смотри чтобы ДСЛ не появлялся ради ЧСВ программиста.
Короче, все просто как не учить уроки. Использование ДСЛ должен давать приемущество овре 9000 по сравнению с лобовыми подходами (рукопашниной или библиотеками). И тогда даже сомнений не возникнет. Или ДСЛ должен быть прост как пробка. Тогда и разговоров о поддержке не возникнет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Способно ли метапрограммирование заменить отдельные я
Здравствуйте, Eye of Hell, Вы писали:
EOH>Да нет, читается он замечательно. Только вот если в самом DSL баги, нужно его поддерживать и расширять — то при отсутствии автора это превращается в небольшой филиал ада. Не всегда, конечно, но часто
На С/С++?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Способно ли метапрограммирование заменить отдельные я
Здравствуйте, Real 3L0, Вы писали:
R3>>>Моя мысль в том, что вхождение в проект, использующий более-менне распространённые вещи, может требовать обучения, а может — нет. VD>>Это не правда.
R3>Почему "не правда",
Потому что вхождение в проект требует вкуривание всего его кода. И если код использует только "более-менне распространённые вещи", то ежу понятно, что вся сложность будет сосредоточена в коде проекта. То что не надо будет учить синтаксис на 5 ключевых слов отнюдь не означает, что не придется копаться в мало-понятных исходниках долгие годы.
VD>>Та же фигня. Только языков было чуть больше. Но ведь это проходит?
R3>Не проходит. Наверное потому, что специфика разработки бизнес-приложений такова: много из того, что предоставляет "предыдущий уровень" языка для разработки бизнес-приложений не нужно.
Причем тут нужно не нужно? Ты плевался от непривычки, так?
R3>>>Я уже раза 3 читал все эти захватывающие отзывы о Немерле и начинал читать о нём, но... меня хватало только до того момента, как начинался идти синтаксис, напоминающий сишную "точко-запятуюшную" пунктуацию (только с ещё большим разнообразием ). Вот этот язык мне не нужен (а также ещё очень большой куче народа). VD>>Что-то я не понял. "точко-запятуюшная" пунктуация вроде бы есть и в С++ и в шарпе. Так о чем ты?
R3>Например: R3>
R3>~
R3>*
R3>&
->>
R3>::
>>>
R3><<
R3>
R3>.NET показал, что это не нужно.
Кто показал? Может шарп? Только все перечисленые операторы в C# есть. Ну, кроме ->> и >>> которых нет и в С/С++. Потом это 7 операторов. Не уж того оно так напрягало?
Просто надо понять, что разница между С++ и шарпом не в наборе операторов, а в том что Шарпа — это тпобезопасный (без ансэйфа) язык с автоматическим управлением памятью и причесанной библиотекой. Вот опыт управлению памятью и указателями и становится невостребованным.
Та же фигня и с немерлом. То на что ты тратишь годы для него (при мышлении на нем) просто не проблема. Все паттерны проектирования остаются вдруг в прошлой жизни. Оказывается, что софт можно писать просто по рдугому.
R3>У Немерле — свои "точки в голове". Получается, что лично мне он не нужен. Не те потребности.
Получается, что ты спешишь записаться в стадо трепачей. Вот и все. Очень жаль, что люди вместо осмысления чужого опыта просто ищут банальный отбрех (чтобы не тратить время на изучение нового).
R3>Но вот если с помощью Немерле будет создан супер-пупер язык для разработки бизнес-приложений ...
За тебя никто не создаст супер-язык. Немерл всего лишь "инструмент" снимающий ограничения и оковы. Необходимости работать он не отменят.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Способно ли метапрограммирование заменить отдельные
Здравствуйте, WolfHound, Вы писали:
IT>>На это смотрел? WH>Влад мне этой байдой все уши прожужал пока я ему с рефлектором на перевес не показал что там происходит на самом деле...
Ага. Они тупо используют стандартный пул.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Способно ли метапрограммирование заменить отдельные
Здравствуйте, Eye of Hell, Вы писали:
EOH>А теперь представьте на секунду, что вместо документированного, с книгами/блогами/евангелистами asp.net у вас написанный пять лет назад Васей Пупкиным фреймворк с собственным DSL.
Ну, так что там на счет невероятных затрат на ДСЛ-и?
EOH> Без хорошей документации,
Лучше хороший ДСЛ без документации, нежели лобовое решение без нее же (да и с ней не всегда лучше).
EOH>с кучей написанного слабыми программистами кода
Слушай, уволь ты их, а.
EOH> (потому что бюджет нерезиновый, а высококлассных программистов мало и хотят они много)
Ну, на фиг платить двадцати мудакам по 20 тасяч, когда можно заплатить 100 т.р., но одному-двум программистам?
EOH> и, что самое обидное — без Васи Пупкина, потому что в Яндекс ушел . Представили? И вам в такой проект нужно нанять двоих человек, потому что бизнес и надо решать задачи.
Я смотрю у тебя прямо этот яндекс больной вопрос.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Способно ли метапрограммирование заменить отдельные
Первое это не парасер xml, а его билдер. Второе не парсер тестов, а пример тестов на асинхронные продолжения, которые в виде method chain будут выглядеть настолько страшно, что применять их гораздо опаснее для поддержки, чем ввести в проект десяток DSL. Третье это dynamic из 4го фреймворка реализованный за несколько лет до него и сильно дешевле (впрочем Late чуть проще, но свою задачу делает).
Да, это все примеры расширения языка.
Re[14]: Способно ли метапрограммирование заменить отдельные
Здравствуйте, VladD2, Вы писали:
EOH>>Да нет, читается он замечательно. Только вот если в самом DSL баги, нужно его поддерживать и расширять — то при отсутствии автора это превращается в небольшой филиал ада. Не всегда, конечно, но часто
VD>На С/С++?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Eye of Hell, Вы писали:
EOH>>Я же не против DSL вообще. Понятное дело, что для частного случая можно и нужно использовать то, что для этого частного случая будет лучше. Но если у меня команда 20+ человек и старший программист Вася приползает ко мне со словами "а вот давай я тут DSL вверну, оно понятнее будет" — я не разрешу. Потому что сейчас Вася тут, а завтра в Яндексе. И что он там напишет — непонятно. Пусть лучше кода будет немного больше, зато у проекта через год головной боли будет меньше. VD>Это потому, что ты знаешь, что Вася ДСЛ будет делать каменным молотком и взлетит этот ДСЛ только если Вася прыгнет выше головы. А теперь представь, что у Васи есть тул который позволяет делать ДСЛ за пол дня, и результат получается таким очевидным, что его смогут поддерживать дети после недели обучения. И все это не волшебство, а технология описанная в учебнике. Что тогда?
Тогда я всячески за . Но такого пока нету .
Re[14]: Способно ли метапрограммирование заменить отдельные
Ну так таких как ты много не наймешь
EOH>> Без хорошей документации, VD>Лучше хороший ДСЛ без документации, нежели лобовое решение без нее же (да и с ней не всегда лучше).
Так хороший еще сделать надо .
EOH>>с кучей написанного слабыми программистами кода VD>Слушай, уволь ты их, а.
И делать все одному?
EOH>> (потому что бюджет нерезиновый, а высококлассных программистов мало и хотят они много) VD>Ну, на фиг платить двадцати мудакам по 20 тасяч, когда можно заплатить 100 т.р., но одному-двум программистам?
Проблема высококлассных спецов не только в том, что они берут больше за свои услуги. Им потом замену гораздо труднее искать . Тоесть когда уходит человек на 50-60, можно достаточно легко найти замену. Когда уходит человек на 100 — найти замену гораздо труднее.
EOH>> и, что самое обидное — без Васи Пупкина, потому что в Яндекс ушел . Представили? И вам в такой проект нужно нанять двоих человек, потому что бизнес и надо решать задачи. VD>Я смотрю у тебя прямо этот яндекс больной вопрос.
У меня туда уходили
Re[16]: Способно ли метапрограммирование заменить отдельные
Здравствуйте, VladD2, Вы писали:
VD>Потому что вхождение в проект требует вкуривание всего его кода. И если код использует только "более-менне распространённые вещи", то ежу понятно, что вся сложность будет сосредоточена в коде проекта. То что не надо будет учить синтаксис на 5 ключевых слов отнюдь не означает, что не придется копаться в мало-понятных исходниках долгие годы.
Про архитектуру я уже говорил, что согласен.
Но ведь не редки ситуации, когда человека сажают просто починить один бажик, а это не всегда выливается в изучение всей архитектуры. А починить один бажик в коде, состоящим из знакомых слов всяко проще, чем из незнакомых.
R3>>Не проходит. Наверное потому, что специфика разработки бизнес-приложений такова: много из того, что предоставляет "предыдущий уровень" языка для разработки бизнес-приложений не нужно. VD>Причем тут нужно не нужно? Ты плевался от непривычки, так?
Не понял, о какой привычке ты говоришь.
Например, сейчас я плююсь на С++ потому, что весь нужный мне код я пишу без использования указателей. В С++ такое не проходило.
R3>>Например: R3>>
R3>>~
R3>>*
R3>>&
->>>
R3>>::
>>>>
R3>><<
R3>>
R3>>.NET показал, что это не нужно.
VD>Кто показал? Может шарп?
Может шарп.
VD> Только все перечисленые операторы в C# есть. Ну, кроме ->> и >>> которых нет и в С/С++. Потом это 7 операторов. Не уж того оно так напрягало?
Прикольно. Я о них и не знал, потому что всё, что мне надо, можно написать без этих операторов.
Получается, что мне мало надо.
VD>Та же фигня и с немерлом. То на что ты тратишь годы для него (при мышлении на нем) просто не проблема. Все паттерны проектирования остаются вдруг в прошлой жизни. Оказывается, что софт можно писать просто по рдугому. VD>Получается, что ты спешишь записаться в стадо трепачей. Вот и все. Очень жаль, что люди вместо осмысления чужого опыта просто ищут банальный отбрех (чтобы не тратить время на изучение нового). VD>За тебя никто не создаст супер-язык. Немерл всего лишь "инструмент" снимающий ограничения и оковы. Необходимости работать он не отменят.
Ок, попробую в четвёртый раз сесть за изучение.
Но пока получается, что немерле мне нужен только для одной цели — чтобы создать более простой язык.
Вселенная бесконечна как вширь, так и вглубь.
Re[14]: Способно ли метапрограммирование заменить отдельные
Здравствуйте, Chrome, Вы писали:
C>Подключаемая грамматика – наподобие подключаемой библиотеки – выглядит очень привлекательной альтернативой полностью определенному языку. C>Позволяет самим реализовать фичи, которые нужны вам сейчас. C>Позволяет отказаться от ненужного наследства. C>Эти два фактора, как мне кажется, являются двужущей силой для изобретения новых языков программирования и смерти существующих. C>Наличие платформы метапрограммирования резко снижает расходы на создание собственного языка или диалекта существующего.
Неужели пример сопоставления Linux-а и Mac OS вас не навел ни на какие мысли. Конструктор "собери сам" (Linux) никогда не будет лучше, чем тщательно спроектированная система (Mac OS). Так же и с языками.
Re[4]: Способно ли метапрограммирование заменить отдельные я
Здравствуйте, VladD2, Вы писали:
NB>>ты все таки найди время на tex посмотреть. NB>>думаю, не малую роль в его популярности сыграло наличие в свободном доступе Texbook'a, на пальцах описывающего весь язык.
еще думаю, необходимо наличие централизованного хранилища библиотек (ctan, cpan, чего там у Руби)
VD>Где брать?
исходник
если вдруг надумаешь читать, вышлю перевод русский (djvu).
NB>>Сможете подобное для немерла сделать?
VD>А что там такого не обычного? Вот это не похоже на то о чем ты говоришь?
на книгу конечно не тянет, но да, что-то похожее на это.
Re[13]: Способно ли метапрограммирование заменить отдельные
Здравствуйте, Ziaw, Вы писали:
Z>Знаком код? Z>Его писал наверное каждый C# программист хоть раз в жизни. В нем есть проблема, про которую не подозревают многие формоклепы, он не является thread safe.
И чем код с Memoize лучше? Если программист не подозревает о проблемах с многопоточностью, то откуда он узнает, что здесь надо написать memoize? А если знает, то чем Memoize лучше, тем что буковок меньше?
Memoize на самом деле намного хуже, т.к. lock это универсальный принцип, поняв который один раз, можно решить любую задачу синхронизации. А достоинство Memoize только в большей лаконичности на простейших случаях, зато как только задача становится чуть сложнее (например, надо лочить не весь метод, а его половину или по условию задачи надо одновременно лочиться на несколько объектов синхронизации), человек применявший memoize, но не использовавший lock впадет в ступор.
Re[14]: Способно ли метапрограммирование заменить отдельные
Здравствуйте, Undying, Вы писали:
U>И чем код с Memoize лучше? Если программист не подозревает о проблемах с многопоточностью, то откуда он узнает, что здесь надо написать memoize? А если знает, то чем Memoize лучше, тем что буковок меньше?
Тем, что он декларативно описывает желаемое поведение. Запомнить первый вызов и всегда возвращать его значение.
U>Memoize на самом деле намного хуже, т.к. lock это универсальный принцип, поняв который один раз, можно решить любую задачу синхронизации. А достоинство Memoize только в большей лаконичности на простейших случаях, зато как только задача становится чуть сложнее (например, надо лочить не весь метод, а его половину или по условию задачи надо одновременно лочиться на несколько объектов синхронизации), человек применявший memoize, но не использовавший lock впадет в ступор.
Такой универсальный принцип хорошо реализован в Си. Код без lock становится еще более гибким, при этом все что делает lock реализовать совершенно несложно. Однако там через define творят черт знает что, чтобы от этой универсальности избавиться.