Re[14]: Способно ли метапрограммирование заменить отдельные
От: Ziaw Россия  
Дата: 05.02.11 21:41
Оценка: +1
Здравствуйте, Eye of Hell, Вы писали:

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


Да не будет миллиона строк на DSL, нет проектов такой сложности, чтобы предметная область на специальном языке описывалась в миллион строк. Хотя 20 формоклепов способны с помощью копипаста и такой-то матери выдавать по нескольку десятков тысяч строк в день, вне зависимости от используемого языка. Так что твои беспокойства я вполне понимаю.

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


EOH>При этом они полностью зависят от тех, кто поддерживает сам DSL. Стоит такому человеку / людям уволиться или заболеть — у нас двадцать формоклеперов с проблемами ^_^.


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

Проблема еще в том, что ты представляешь DSL как совершенно новый язык для которого пишется свой компилятор (ну или что-то подобное по сложности). На самом деле в язык вводятся просто небольшие конструкции, которые пишутся, тестируются и работают. Чтобы поддерживать макры немерла не надо быть семи пядей во лбу. Да и не надо сидеть и поддерживать какой-то там новый язык, надо поддерживать несколько кирпичиков, которые делают код более декларативным. Обезьянки всегда смогут писать код по старому, если вдруг перестали что-то понимать в одном из кирпичиков и объяснить им некому.

На этом месте, те, кто не работал с nemerle начинают сомневаться в совместимости кирпичиков. Поэтому сразу скажу, что проблем с этим обычно нет, по крайней мере я их не видел, не слышал о них и не представляю себе как они могут вылезти.
Re[12]: Способно ли метапрограммирование заменить отдельные
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.02.11 01:25
Оценка: +1
Здравствуйте, Eye of Hell, Вы писали:

EOH>Я же не против DSL вообще. Понятное дело, что для частного случая можно и нужно использовать то, что для этого частного случая будет лучше. Но если у меня команда 20+ человек и старший программист Вася приползает ко мне со словами "а вот давай я тут DSL вверну, оно понятнее будет" — я не разрешу. Потому что сейчас Вася тут, а завтра в Яндексе. И что он там напишет — непонятно. Пусть лучше кода будет немного больше, зато у проекта через год головной боли будет меньше.


Это потому, что ты знаешь, что Вася ДСЛ будет делать каменным молотком и взлетит этот ДСЛ только если Вася прыгнет выше головы. А теперь представь, что у Васи есть тул который позволяет делать ДСЛ за пол дня, и результат получается таким очевидным, что его смогут поддерживать дети после недели обучения. И все это не волшебство, а технология описанная в учебнике. Что тогда?

EOH>ИМХО не очень удачный пример потому что эксплоитит ту область, в которой DSL must have — создание парсеров. Но ведь парсеры не так часто создаются?


ДСЛ он много где "должен быть", но вот нет культуры, инструментов и привычки его создания и поддержки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Способно ли метапрограммирование заменить отдельные
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.02.11 01:36
Оценка:
Здравствуйте, Eye of Hell, Вы писали:

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


Правда в том, что при правильном использовании ДСЛ-я (по делу) вместо миллиона строк будет 10 тысяч, или хотя бы 100 тысяч. И их поддержка будет не сравнима по сложности.

EOH>При этом они полностью зависят от тех, кто поддерживает сам DSL. Стоит такому человеку / людям уволиться или заболеть — у нас двадцать формоклеперов с проблемами ^_^.


Ну, так требуй чтобы те кто писли ДСЛ-и делали это а) качественно (ты им деньги не малые платишь), б) документируя свой код, и в) смотри чтобы ДСЛ не появлялся ради ЧСВ программиста.

Короче, все просто как не учить уроки. Использование ДСЛ должен давать приемущество овре 9000 по сравнению с лобовыми подходами (рукопашниной или библиотеками). И тогда даже сомнений не возникнет. Или ДСЛ должен быть прост как пробка. Тогда и разговоров о поддержке не возникнет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Способно ли метапрограммирование заменить отдельные я
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.02.11 01:57
Оценка:
Здравствуйте, Eye of Hell, Вы писали:

EOH>Да нет, читается он замечательно. Только вот если в самом DSL баги, нужно его поддерживать и расширять — то при отсутствии автора это превращается в небольшой филиал ада. Не всегда, конечно, но часто


На С/С++?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Способно ли метапрограммирование заменить отдельные я
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.02.11 02:10
Оценка:
Здравствуйте, WolfHound, Вы писали:

EOH>>А теперь попробуйте модифицировать сам LINQ

WH>В немерле 2 такие модификации будут делаться на раз.

Это и в Немерел 1 делается на раз. Код не так уж и сложен:
http://code.google.com/p/nemerle/source/browse/nemerle/trunk/Linq/Macro/LinqImpl.n
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Способно ли метапрограммирование заменить отдельные
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.02.11 02:20
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>что не хватает в C# синтаксисе для того, чтобы работать с монадами так же, как из linq comp?


Макросов?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Способно ли метапрограммирование заменить отдельные
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.02.11 02:32
Оценка:
Здравствуйте, 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]: Способно ли метапрограммирование заменить отдельные
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.02.11 02:36
Оценка:
Здравствуйте, WolfHound, Вы писали:

IT>>На это смотрел?

WH>Влад мне этой байдой все уши прожужал пока я ему с рефлектором на перевес не показал что там происходит на самом деле...

Ага. Они тупо используют стандартный пул.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Способно ли метапрограммирование заменить отдельные
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.02.11 02:42
Оценка: -1
Здравствуйте, Eye of Hell, Вы писали:

EOH>А теперь представьте на секунду, что вместо документированного, с книгами/блогами/евангелистами asp.net у вас написанный пять лет назад Васей Пупкиным фреймворк с собственным DSL.


Ага представил. Вот как-то ради разнообразия написал свой велосипедик:
http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/Nemerle.Xml/Test/Main.n
В МС аналог (Рэзор) писали 10 лет. Мне потребовалось неделя. Причем мое решение гибче. Только привязано к немерлу.

Ну, так что там на счет невероятных затрат на ДСЛ-и?

EOH> Без хорошей документации,


Лучше хороший ДСЛ без документации, нежели лобовое решение без нее же (да и с ней не всегда лучше).

EOH>с кучей написанного слабыми программистами кода


Слушай, уволь ты их, а.

EOH> (потому что бюджет нерезиновый, а высококлассных программистов мало и хотят они много)


Ну, на фиг платить двадцати мудакам по 20 тасяч, когда можно заплатить 100 т.р., но одному-двум программистам?

EOH> и, что самое обидное — без Васи Пупкина, потому что в Яндекс ушел . Представили? И вам в такой проект нужно нанять двоих человек, потому что бизнес и надо решать задачи.


Я смотрю у тебя прямо этот яндекс больной вопрос.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Способно ли метапрограммирование заменить отдельные
От: Ziaw Россия  
Дата: 06.02.11 05:22
Оценка:
Здравствуйте, Eye of Hell, Вы писали:

WH>>Так у меня еще есть...

WH>>http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/Nemerle.Xml/Test/Main.n
WH>>http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/ComputationExpressions/Test/AsyncTest.n
WH>>http://nemerle.org/wiki/index.php?title=Late_Binding_Macro
WH>>И список можно продолжать долго.

EOH>Парсер XML, парсер языка юнит-тестов, и расширение языка. Про первые два я писал. Про расширение языка... Ну пока оно одно — оно безвредно. Когда из будет полторы сотни как в ядре FreeBSD — у нас будут проблемы.


Первое это не парасер xml, а его билдер. Второе не парсер тестов, а пример тестов на асинхронные продолжения, которые в виде method chain будут выглядеть настолько страшно, что применять их гораздо опаснее для поддержки, чем ввести в проект десяток DSL. Третье это dynamic из 4го фреймворка реализованный за несколько лет до него и сильно дешевле (впрочем Late чуть проще, но свою задачу делает).

Да, это все примеры расширения языка.
Re[14]: Способно ли метапрограммирование заменить отдельные
От: Ziaw Россия  
Дата: 06.02.11 06:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, на фиг платить двадцати мудакам по 20 тасяч, когда можно заплатить 100 т.р., но одному-двум программистам?


Конечно потому, что эффект кирпича пугает.
Re[9]: Способно ли метапрограммирование заменить отдельные я
От: FR  
Дата: 06.02.11 09:44
Оценка: :)
Здравствуйте, VladD2, Вы писали:

EOH>>Да нет, читается он замечательно. Только вот если в самом DSL баги, нужно его поддерживать и расширять — то при отсутствии автора это превращается в небольшой филиал ада. Не всегда, конечно, но часто


VD>На С/С++?


На C++ уже есть вещи сильно упрощающие написание EDSL http://boost-sandbox.sourceforge.net/libs/proto/doc/html/boost_proto/preface.html
Re[13]: Способно ли метапрограммирование заменить отдельные
От: Eye of Hell Россия eyeofhell.habr.ru
Дата: 06.02.11 12:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Eye of Hell, Вы писали:


EOH>>Я же не против DSL вообще. Понятное дело, что для частного случая можно и нужно использовать то, что для этого частного случая будет лучше. Но если у меня команда 20+ человек и старший программист Вася приползает ко мне со словами "а вот давай я тут DSL вверну, оно понятнее будет" — я не разрешу. Потому что сейчас Вася тут, а завтра в Яндексе. И что он там напишет — непонятно. Пусть лучше кода будет немного больше, зато у проекта через год головной боли будет меньше.

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

Тогда я всячески за . Но такого пока нету .
Re[14]: Способно ли метапрограммирование заменить отдельные
От: Eye of Hell Россия eyeofhell.habr.ru
Дата: 06.02.11 12:07
Оценка:
VD>Ага представил. Вот как-то ради разнообразия написал свой велосипедик:
VD>http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/Nemerle.Xml/Test/Main.n
VD>В МС аналог (Рэзор) писали 10 лет. Мне потребовалось неделя. Причем мое решение гибче. Только привязано к немерлу.

Ну так таких как ты много не наймешь

EOH>> Без хорошей документации,

VD>Лучше хороший ДСЛ без документации, нежели лобовое решение без нее же (да и с ней не всегда лучше).

Так хороший еще сделать надо .

EOH>>с кучей написанного слабыми программистами кода

VD>Слушай, уволь ты их, а.

И делать все одному?

EOH>> (потому что бюджет нерезиновый, а высококлассных программистов мало и хотят они много)

VD>Ну, на фиг платить двадцати мудакам по 20 тасяч, когда можно заплатить 100 т.р., но одному-двум программистам?

Проблема высококлассных спецов не только в том, что они берут больше за свои услуги. Им потом замену гораздо труднее искать . Тоесть когда уходит человек на 50-60, можно достаточно легко найти замену. Когда уходит человек на 100 — найти замену гораздо труднее.

EOH>> и, что самое обидное — без Васи Пупкина, потому что в Яндекс ушел . Представили? И вам в такой проект нужно нанять двоих человек, потому что бизнес и надо решать задачи.

VD>Я смотрю у тебя прямо этот яндекс больной вопрос.

У меня туда уходили
Re[16]: Способно ли метапрограммирование заменить отдельные
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 06.02.11 15:57
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Потому что вхождение в проект требует вкуривание всего его кода. И если код использует только "более-менне распространённые вещи", то ежу понятно, что вся сложность будет сосредоточена в коде проекта. То что не надо будет учить синтаксис на 5 ключевых слов отнюдь не означает, что не придется копаться в мало-понятных исходниках долгие годы.


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

R3>>Не проходит. Наверное потому, что специфика разработки бизнес-приложений такова: много из того, что предоставляет "предыдущий уровень" языка для разработки бизнес-приложений не нужно.

VD>Причем тут нужно не нужно? Ты плевался от непривычки, так?

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

R3>>Например:

R3>>
R3>>~
R3>>*
R3>>&
->>>
R3>>::
>>>>
R3>><<
R3>>

R3>>.NET показал, что это не нужно.

VD>Кто показал? Может шарп?


Может шарп.

VD> Только все перечисленые операторы в C# есть. Ну, кроме ->> и >>> которых нет и в С/С++. Потом это 7 операторов. Не уж того оно так напрягало?


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

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

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

Ок, попробую в четвёртый раз сесть за изучение.
Но пока получается, что немерле мне нужен только для одной цели — чтобы создать более простой язык.
Вселенная бесконечна как вширь, так и вглубь.
Re[14]: Способно ли метапрограммирование заменить отдельные
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 06.02.11 21:48
Оценка: -1
Здравствуйте, VladD2, Вы писали:

VD>Ага представил. Вот как-то ради разнообразия написал свой велосипедик:

VD>http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/Nemerle.Xml/Test/Main.n
VD>В МС аналог (Рэзор) писали 10 лет.
Пруфлинк?
Ты обманываешь.

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


Оно даже на 10% не razor.

Вместо того чтобы по форумам писать (причем откровенное вранье) написали бы лучше этот самый Razor для ASP.NET MVC3.
Re: Способно ли метапрограммирование заменить отдельные язык
От: Lloyd Россия  
Дата: 06.02.11 21:54
Оценка: :)
Здравствуйте, Chrome, Вы писали:

C>Подключаемая грамматика – наподобие подключаемой библиотеки – выглядит очень привлекательной альтернативой полностью определенному языку.

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

Неужели пример сопоставления Linux-а и Mac OS вас не навел ни на какие мысли. Конструктор "собери сам" (Linux) никогда не будет лучше, чем тщательно спроектированная система (Mac OS). Так же и с языками.
Re[4]: Способно ли метапрограммирование заменить отдельные я
От: night beast СССР  
Дата: 07.02.11 05:17
Оценка:
Здравствуйте, VladD2, Вы писали:

NB>>ты все таки найди время на tex посмотреть.

NB>>думаю, не малую роль в его популярности сыграло наличие в свободном доступе Texbook'a, на пальцах описывающего весь язык.

еще думаю, необходимо наличие централизованного хранилища библиотек (ctan, cpan, чего там у Руби)

VD>Где брать?


исходник
если вдруг надумаешь читать, вышлю перевод русский (djvu).

NB>>Сможете подобное для немерла сделать?


VD>А что там такого не обычного? Вот это не похоже на то о чем ты говоришь?


на книгу конечно не тянет, но да, что-то похожее на это.
Re[13]: Способно ли метапрограммирование заменить отдельные
От: Undying Россия  
Дата: 08.02.11 05:45
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Знаком код?

Z>Его писал наверное каждый C# программист хоть раз в жизни. В нем есть проблема, про которую не подозревают многие формоклепы, он не является thread safe.

И чем код с Memoize лучше? Если программист не подозревает о проблемах с многопоточностью, то откуда он узнает, что здесь надо написать memoize? А если знает, то чем Memoize лучше, тем что буковок меньше?

Memoize на самом деле намного хуже, т.к. lock это универсальный принцип, поняв который один раз, можно решить любую задачу синхронизации. А достоинство Memoize только в большей лаконичности на простейших случаях, зато как только задача становится чуть сложнее (например, надо лочить не весь метод, а его половину или по условию задачи надо одновременно лочиться на несколько объектов синхронизации), человек применявший memoize, но не использовавший lock впадет в ступор.
Re[14]: Способно ли метапрограммирование заменить отдельные
От: Ziaw Россия  
Дата: 08.02.11 09:16
Оценка:
Здравствуйте, Undying, Вы писали:

U>И чем код с Memoize лучше? Если программист не подозревает о проблемах с многопоточностью, то откуда он узнает, что здесь надо написать memoize? А если знает, то чем Memoize лучше, тем что буковок меньше?


Тем, что он декларативно описывает желаемое поведение. Запомнить первый вызов и всегда возвращать его значение.

U>Memoize на самом деле намного хуже, т.к. lock это универсальный принцип, поняв который один раз, можно решить любую задачу синхронизации. А достоинство Memoize только в большей лаконичности на простейших случаях, зато как только задача становится чуть сложнее (например, надо лочить не весь метод, а его половину или по условию задачи надо одновременно лочиться на несколько объектов синхронизации), человек применявший memoize, но не использовавший lock впадет в ступор.


Такой универсальный принцип хорошо реализован в Си. Код без lock становится еще более гибким, при этом все что делает lock реализовать совершенно несложно. Однако там через define творят черт знает что, чтобы от этой универсальности избавиться.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.