Здравствуйте, hardcase, Вы писали:
H>Ваша боязнь компиляторостроения весьма забавна. Уже сегодняшних инструментах совершенно обычному программисту по силам наколбасить компилятор простого паскалеобразного языка с автоматическим управлением памятью под пачку платформ и архитектур за крайне разумное время (для первого прототипа недельки будет достаточно). А тут речь шла про транслятор с одного языка в другой не слишком отличающийся, гипотетический пример уровня сложности задачи: транслятор из C# 2.0 в C# 3.0 делающиий подстановки var где возможно и заменяющий delegate на лямбды, и все это при наличии типизатора для обоих ревизий C#. Да такие задачи можно решать, что называется, не отрываясь от RSDN-а!
Запиши подробно видео или презентацию, что бы были видны все изменения от начала и до конца. Желательно что бы в этом было побольше фреймов/cтраниц чем начало и конец.
Re[22]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
M>>И DSL и библиотека являются интерфейсом к какому-то большому коду. WH>С ДСЛ это не совсем верно. Обычно компилятор получается сложнее чем рантайм.
Если компилятор сложнее, то откуда появился миф, что DSL изменить легче, чем библиотеку? И да, DSL все равно является интерфейсом к какому-то большому коду.
M>>Если на DSL уже написаны сотни/тысячи строк кода, то любое его изменение приведет к поломке всего этого кода или изменению его поведения. Точно так же, если библиотека используется в сотнях/тысячах мест, то эти места сломаются/поменяют поведение, если мы изменим библиотеку. WH>1)Ты отвечаешь на то, что кода на библиотеке будет намного больше. WH>2)Я именно это и говорю. Но мне тут пытаются втирать, что с библиотекой проблем не будет.
У тебя удивительная способность читать тексты как-то по-другому, нежели их читают другие люди. Имхо, никто не говорит, что с библиотекой проблем не будет. Говорят, что проблем будет ровно столько же, сколько при изменении DSLя.
WH>>>2)Как правило, старый ДСЛ очень легко можно трансформировать в новый. С библиотеками такое не всегда проходит. M>>Откуда внезапно взялось это правило? WH>Из практики.
А, сказки, как обычно.
M>>КО напоминает, что если библиотека реализована, как черный ящик, то меняй эту реализацию хоть сто раз. Неубедительно. WH>Плохой у тебя КО. WH>В моей практике был случай, когда мне для дальнейшего развития библиотеки пришлось нахрен разломать весь интерфейс. Ибо в начале разработки было не ясно, что к чему. WH>При этом ДСЛ, которым пользовались люди, не изменился.
В моей практике был противоположный случай. Ничья?
WH>Всё по тому, что через интерфейс библиотеки всегда просачивается реализация. А через ДСЛ нет.
Здравствуйте, 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? (в продолжении темы о языках общего назначения)
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Ziaw, Вы писали:
Z>>Regexp, SQL, format strings — это примеры DSL которыми мы все пользуемся постоянно.
AVK>Форматная строка на DSL, извини, не тянет. Что же касается остального — SQL обычно специально указывают в требованиях вакансии, что как бы намекает (при этом по настоящему хорошо его знает 1% от считающих так).
Пусть это не тянет на DSL, но тянет на примеры того, где макросы могут сильно помочь, вводя проверки формата на этапе компиляции.
AVK> А регексы это вообще что то с чем то — одно только количество вопросов форуме типа "подскажите регекс для ..." уже о многом говорит. Лично мне до сих пор иногда приходится вдумчиво вчитываться в доку по регекпам, и я уверен, что библиотека без этой птичей псевдографики была бы проще и удобнее.
Глянул сейчас форум Regular Expressions на MSDN — ни одного неотвеченного вопроса. Получается, что регулярки всё-таки понятны очень многим, и ответ/совет по ним всегда дадут.
Читать и понимать регулярки было бы намного легче, если бы их писали не сплошной строкой, а с форматированием. Такая возможность есть, жаль что ей почти никогда не пользуются. Также сложность их чтения вызвана отсутствием подсветки (полагаю, макросы N могут это сделать).
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
M>>Расковыривать EBNF/Peg/Yacc/хз-что? WH>А в чем проблема? WH>Это не сложнее чем читать код на ерланге.
Но и не легче.
M>>Реверс-инжинирить работу компилятора/интерпретатора этого DSL? WH>А что просто в исходники заглянуть не судьба?
Это и есть реверс-инжиниринг
M>>И если в Yaws при желании можно пройтись по кишкам дебаггером, то что ты предлагаешь для DSL? WH>Пройтись по кишкам отладчиком. WH>Можно ходить и по самому компилятору. WH>И по ДСЛ. И по сгенерированному коду. Н2 находится в зачаточном состоянии но уже можно ходить отладчиком как по сходному коду на ДСЛ. Так и по сгенерированному. В будущем можно будет во время отладки переключатся.
Да-да-да. Сказки про панацею мы слушаем уже который код. Не интересно.
Здравствуйте, Ikemefula, Вы писали:
I>Ты путаешь результа и его достижение. Что бы выяснить, почему люди боятся макросов, надо выкатить код самого макроса printf а уже потом делать выводы.
Ну так большинству и нужен результат.
А какой код внутри, и так понятно: там почти то же самое, что будет при ручной проверке строки формата.
Re[7]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, Ikemefula, Вы писали:
I>Когда вышел C#, от микрософта сразу вышел целый вагон примеров и разных приложений чуть не на все случаи жизни. Я например по ним и учился. Собтсвенно у них всегда так, из последнего это например TypeScript. Вышел язык, еще альфа, но уже есть целая куча примеров, которые полезны для потребителя.
И всё-таки, полагаю, эти примеры писали не разработчики компилятора, а другие люди из команды Микрософта.
Вопрос в количестве людей, постоянно работающих над Немерлом. Пока что фанаты Н пишут макросы лично для своих нужд. Платили бы им деньги — наваяли бы тонны примеров.
Наверняка для N2 такие примеры будут. Ибо это уже коммерческая разработка.
I>Собтсвенно в нормальных языках и хороших либах ровно так же — примеров и готовых решений на порядок больше, чем кода относящегося к проекту.
Можно взять любой пример на C# — он годится для N
Re[21]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, dimgel, Вы писали:
D>А какое отношение ACID имеет к ds*L*?
Наипрямейшие. SQL это обеспечивает. При этом тому, кто пишет запросы не нужно о нем думать.
А если напрямую ковыряться ручками в файле, то придется об этом думать.
Так что это просто ещё один пример того как ДСЛ скрывает подробности реализации.
Причем делает это настолько хорошо, что простые вещи можно делать даже не зная об этом.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Давай теперь наоборот.
ARK>На вашей практике может и так. А когда (и если) будет такая практика у крутого архитектора из новозадрищенска — вот тогда и посмотрим, что лучше скрывает. Правда, это при нашей жизни вряд ли будет.
Те все претензии сводятся к тому, что найдется неосилятор и наломает дров? Так он и на C# дров наломает не меньше.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, AlexRK, Вы писали:
ARK>>Сперва покажите пример, когда библиотеку надо менять, а DSL нет. WH>http://www.rsdn.ru/forum/philosophy/5018641.1
Там нет примера, там есть фраза "в моей практике такое было".
Я из этого не могу сделать никаких выводов.
Прошу все же привести конкретный пример, желательно небольшой.
ARK>>На вашей практике может и так. А когда (и если) будет такая практика у крутого архитектора из новозадрищенска — вот тогда и посмотрим, что лучше скрывает. Правда, это при нашей жизни вряд ли будет. WH>Те все претензии сводятся к тому, что найдется неосилятор и наломает дров? Так он и на C# дров наломает не меньше.
Меньше.
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, Mamut, Вы писали:
M>Если у тебя есть возможность менять компилятор DSL, значит у тебя есть возможность менять библиотеку Почему внезапно ты пишешь, что библиотеку менять сложнее или нельзя ее поменять без изменения интерфейса?
1) Кода на ДСЛ будет на порядок другой меньше.
а. Нужно будет переделать меньше клиентского кода.
б. Компилятор ДСЛ может давать внятные сообщения с подсказками.
в. Можно просто сделать рефакторинг который будет переделывать старый код в новый. Если конечно кода очень много.
2) ДСЛ намного лучше скрывает реализацию. Просто по тому что вычислительная модель языка на котором написана библиотека не путается под ногами.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[23]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, Mamut, Вы писали:
WH>>С ДСЛ это не совсем верно. Обычно компилятор получается сложнее чем рантайм. M>Если компилятор сложнее, то откуда появился миф, что DSL изменить легче, чем библиотеку? И да, DSL все равно является интерфейсом к какому-то большому коду.
Ты всё понял не правильно.
В случае с ДСЛ обычно получается маленький рантайм, куда складываются рукописные классы. То, что ты называешь "каким-то большим кодом".
И значительно более большая куча генерированного кода.
Именно поэтому компилятор и получается больше рантайма. Там просто вся работа делается.
M>У тебя удивительная способность читать тексты как-то по-другому, нежели их читают другие люди. Имхо, никто не говорит, что с библиотекой проблем не будет. Говорят, что проблем будет ровно столько же, сколько при изменении DSLя.
Z>Ты не встречал проблем, когда создана кривая библиотека, используемая повсеместно, а создатель уволился? И единственный выход, переписать все?
Масштаб проблем несколько разный. Библиотеку я в полуавтоматическом режиме почистить могу, где то вставляя временные подпорки (не заморачиваясь никакими языкостроительными тулами). А что делать, когда кастомный DSL надо сильно переделать или вообще выкинуть?
При этом AVK теоретик.
А моя практика говорит о прямо противоположном.
M>В моей практике был противоположный случай. Ничья?
У тебя была практика? Извини не верю.
WH>>Всё по тому, что через интерфейс библиотеки всегда просачивается реализация. А через ДСЛ нет. M>Да неужели?
А вот и доказательство того что практики у тебя не было.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[25]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, Ikemefula, Вы писали:
WH>>Открываешь, исходники ДСЛ и читаешь. I>Как книгу что ли ?
Как исходники библиотеки.
Разницы нет.
I>На 80% потребностей это не тянет. В библиотеке в пару кликов мышом можно добраться до нужного места.
Так я же говорю, навигация будет просто автоматом. Вообще ничего делать не нужно.
WH>>И часто тебе нужно сделать так чтобы метод Insert всю базу грохал? I>Я про рефакторинг а не про базу грохнуть.
Так рефакторинг не меняет семантику.
I>Про парсер и типизацию рослина не ты писал ?
Так там нет библиотеки для создания языков. Там ДВА захардкоженных языка. В реализацию которых вложили просто не реальное количество ресурсов.
Да и если бы я делал генератор монолитных языков, то я бы их обогнал.
Но у меня другая задача.
Так что сравнение просто не корректно.
I>Если весь выхлоп это удешевление, то популярность будет как у Немерле
Подумаешь, можно будет сделать компилятор C#10 в несколько платформ вместе с IDE за пару недель. Фигня какая.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, Mamut, Вы писали:
M>Но и не легче.
M>Это и есть реверс-инжиниринг
Те никаких проблем по сравнению с библиотекой как мне тут пытаются втирать.
M>Да-да-да. Сказки про панацею мы слушаем уже который код. Не интересно.
Это не сказки. Это УЖЕ работает.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[27]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, AlexRK, Вы писали:
ARK>Там нет примера, там есть фраза "в моей практике такое было". ARK>Я из этого не могу сделать никаких выводов. ARK>Прошу все же привести конкретный пример, желательно небольшой.
У меня сейчас просто нет тех исходников.
При этом твое "наоборот" просто высосано из пальца.
WH>>Те все претензии сводятся к тому, что найдется неосилятор и наломает дров? Так он и на C# дров наломает не меньше. ARK>Меньше.
Ой, да ладно сказки то рассказывать.
Вас послушать то вы тут всё сами понимаете, но вот про других людей всегда говорите плохо. Что, дескать, они точно не справятся.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
M>>У тебя удивительная способность читать тексты как-то по-другому, нежели их читают другие люди. Имхо, никто не говорит, что с библиотекой проблем не будет. Говорят, что проблем будет ровно столько же, сколько при изменении DSLя. WH>
Z>>Ты не встречал проблем, когда создана кривая библиотека, используемая повсеместно, а создатель уволился? И единственный выход, переписать все?
WH>Масштаб проблем несколько разный. Библиотеку я в полуавтоматическом режиме почистить могу, где то вставляя временные подпорки (не заморачиваясь никакими языкостроительными тулами). А что делать, когда кастомный DSL надо сильно переделать или вообще выкинуть?
WH>При этом AVK теоретик. WH>А моя практика говорит о прямо противоположном.
M>>В моей практике был противоположный случай. Ничья? WH>У тебя была практика? Извини не верю.
У нас на работе используется три DSLя. Причем не в академическом проекте, который существует только в бурных подростковых фантазиях его авторов, а в реальной коммерческой системе, приносящей неиллюзорные деньги. О двух из них я немного говорил: http://rsdn.ru/forum/philosophy/5017200.1
Здравствуйте, WolfHound, Вы писали:
WH>>>И часто тебе нужно сделать так чтобы метод Insert всю базу грохал? I>>Я про рефакторинг а не про базу грохнуть. WH>Так рефакторинг не меняет семантику.
А с языком именно это и надо, потому что мало людей которые скажем теорию категорий на раз понимают.
I>>Если весь выхлоп это удешевление, то популярность будет как у Немерле WH>Подумаешь, можно будет сделать компилятор C#10 в несколько платформ вместе с IDE за пару недель. Фигня какая.
ИДЕ с нынешними возможностями или ИДЕ того времени когда будет актуальным этот C#10 ?
Re[28]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, WolfHound, Вы писали:
WH>У меня сейчас просто нет тех исходников.
Я не прошу исходники, я прошу демонстрационный пример.
WH>При этом твое "наоборот" просто высосано из пальца.
То, что у вас что-то было на практике, не означает, что это было правильно или обязательно.
Кстати, я вполне могу представить ситуацию, когда язык изменится, а аналогичная библиотека — нет.
К примеру, сейчас в линке в query comprehension нет Distinct(), а в библиотеке есть.
WH>Ой, да ладно сказки то рассказывать. WH>Вас послушать то вы тут всё сами понимаете, но вот про других людей всегда говорите плохо. Что, дескать, они точно не справятся.
Вот когда построение DSL станет _общепринятой_ практикой, тогда и можно будет делать выводы наподобие "ДСЛ скрывает реализацию неизмеримо лучше, чем библиотека". А пока что это просто слова.
Здравствуйте, koodeer, Вы писали:
K>Ну так большинству и нужен результат. K>А какой код внутри, и так понятно: там почти то же самое, что будет при ручной проверке строки формата.