Re[22]: Языки общего назначения не имеют смысла!
От: Jack128  
Дата: 14.04.12 19:59
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, WolfHound, Вы писали:


AVK>>>Ну давай проведем эксперимент. Вот типовой серверный бизнес-код на универсальном языке — C#. Давай ты продемонстрируешь, как все будет круто на DSL?

WH>>Это не серьезно.

AVK>Как раз это — серьезно, коль уж вы претендуете на практическую ценность концепции. А общие слова не стоят ничего. Show me your code, как IT любит говорить.


Ну ты тогда ты без сомнения на примере _этого_ кода покажешь преимущества ООП над процедурным программированием, не так ли??
Re[26]: Языки общего назначения не имеют смысла!
От: vdimas Россия  
Дата: 14.04.12 20:27
Оценка:
Здравствуйте, Sinclair, Вы писали:

V>>А я не про DSL, а про то, что при наличии такой возможности многие DSL вполне могут служить языками общего назначения. Даже случайно.

S>Вы так говорите, как будто это плохо.

Если я доверяю кусок кода непрофессионалу-бухгалтеру, то плохо, ес-но, т.к. он может банально всё уронить.


V>>С тобой не согласен синтаксис объявления функций без определения в С и ключевое слово extern для переменных.

S>И тем не менее, никакого способа сообщить в языке "мне нужна эта библиотека" нету.

Вообще-то есть. Как прямо, так и косвенно.


V>>В общем, никогда в плюсах линкер не был отдельно, это часть языка. Хотя бы потому, что без знания ABI конкретного компилятора линковка невозможна.

S>Простите, это чушь. Линкер всего лишь разрешает символьные имена. Никакой информации об ABI в нём нету.

ABI — это еще форматы объектных файлов и способов кодирования информации в них. Чтобы связать имена, надо знать как их искать.


S>И линкер не является частью языка C.


Сорри, за ликбез, но является обширной частью спецификации. В стандарте прямо упоминается внешнее и внутреннее связывание. Упоминается термин "единица компиляции".

Вот примеры конструкций из стандарта, которые управляют линковкой:
namespace /* anonimous */ {
 int someInternalSymbol = 42;  // можно включить по include, и у каждой единицы компиляции будет свой экземпляр
}

extern const int x = 42; // заметь, ключевое слово extern и инициализация одновременно, почему?

static void foo() {}     // что значит static для свободной ф-ии?
static int y = 42;       // что значит static для глобальной переменной?

Про платформенно зависимые pragma даже говорить неохота. Но справедливости ради pragma упоминается именно в исходном коде программы, а не аргументах командной строки линкера.


S>Вы правильно помните. Итак, стал ли Лого GPPL после добавления возможности импорта библиотек на том же Лого?


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

V>>Тем, что в С можно подключать любые нейтивные библиотеки. Похоже, ты путаешь синтаксис языка и его полную спецификацию. Для того, о чем ты говоришь, есть скриптовые языки с практически полной иммитацией синтаксиса С за исключением вот этого extern и предварительного объявления ф-ий. Их как раз для своих DSL в "любимом синтаксисе" и разработали.

S>Я как раз ничего не путаю. В JS я тоже могу подключать любые "нейтивные" библиотеки. Если хост будет столь добр, что разрешит CreateObject(), то я могу делать всё, что угодно.

Ну так хост не дается кем-то сверху, это именно ты хостишь JS, и ты можешь дать только то, что считаешь нужным. Я потому и использую для JS для своих инструментов в кач-ве DSL, что в нем изкаробки нет ничего, кроме голого синтаксиса, т.е. весь нужный функционал подается извне. Именно поэтому он БЕЗОПАСЕН для браузеров. Вернее, ровно наоборот — он был разработан таким, чтобы быть безопасным, поэтому такие ограничения.


S>В С роль хоста играет линкер.


Опять сорри за ликбез, но нет. CRT является частью языка и стандарта, позволяя писать практически что угодно без линкера. Т.е. реализация CRT не обязана поступать из неких внешних либ, компилятор может ее эммитить как угодно в конечный бинарник на своё усмотрение. Поэтому компиляторы автоматически линкуют программы к CRT, бо это требуется для обеспечения работы ф-ий из стандарта. Да, есть возможность управлять этой линковкой (напр. запретить линковать CRT, идущую по-умолчанию, или можно выбрать вид CRT), но вот это как раз эти моменты и есть подробности/частности реализаций, лишь подтверждающие правило.

Насчет твоих inp/outp. Если интересовался, то в защищенном режиме x86 порты отображены на карту виртуальной памяти. Во многих embedded-архитектрах, например PIC — точно так же без всякого защищенного режима — порты ввода-вывода лежат по специальным адресам. Но это фигня, дело-то не в порта, так? А в выполнении произвольной инструкции процессора, правильно? С/С++ чуть ли не единственные языки, где можно записать данные в некоторую область памяти (в сегмент данных, например) и передать туда управление. Так работают всякие нейтивные вирусы, писанные на С. Именно поэтому на DSL никак не тянут, т.к. подобное бывает случайно происходит даже у профессиональных программистов. И опция защиты исполнения данных тоже не глобальная ни разу, какими-нить настройками совместимости отключается аж бегом.


V>>А для какого-нить скриптового, со встроенным типом SomeType — вовсе не факт. Потому что помимо синтаксиса важна еще семантика происходящего. И эта семантика таки входит в спецификацию языка.

S>Ок, тогда давайте вернёмся к вопросу определений. Как мы убедились, возможность подключать библиотеки сама по себе никак не влияет на DSLность языка.

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

В общем, своё видение DSL я уже описывал, могу повториться. В плане императивного DSL — для меня это любой язык, который "ничего не умеет сам", т.е. "замкнут сам в себе" в своих там арифметических выражениях, типах данных, пользовательских ф-ий и т.д. Я думал, что приведенные примеры JS и LUA должны уже были полностью пояснить точку зрения. Далее. Чтобы такой ограниченный язык сделать DSL, мы подаем в процессе хостинга некую внешнюю функциональность, которая позволяет решать задачи лишь из некоей узкой области. Зачем именно так? В этом случае вероятность "всё завалить" непрофессиональным программистом прикладной логики многократно меньше, чем если дать ему куда разбежаться. Даже если речь о самом себе, когда я хочу сосредоточиться на конкретной задаче, я сам себя считаю потенциальной "обезъяной с гранатой" и хочу себя ограничить, чтобы не забивать лишний раз голову. ИМХО, вполне нормальный подход.

Да и взять сами термины: на мой взгляд specific area отличается от general area границами и более ничем. Поэтому для меня императивный DSL — это в первую очередь ограничение области приложения, а затем уже хелперы и прочие плюшки. Например, с точностью до тонкостей синтаксиса можно этот HTML-DOM обрабатывать из какого-нить C# или С++ при подключенной соответствующей библиотеке.

Если же DSL декларативный, то есть ничего сам не делает by-design, а только описывает данные для интерпретатора этих данных, то тут ровно наоборот: степень его безопасности никак не изменится, даже если реализовать его в виде eDSL даже внутри исходников С++ программы. Поэтому подход декларатиного DSL я спокойно использую прямо в коде С++. В этом случае DSL — это лишь подход к решению задачи, через описание условий и применения некоего "решателя" для конкретной области. Соответствующее замечание на счет ссылки, приведенной в начале ветки, уже делал:

... по твоей исходной ссылке непонятно, зачем там была DSL? Замени :- на какой-нить << и будет тебе щастье прямо из твоего языка программирования, будь то C# или C++. Там же просто декларация правил для решателя,

Re[23]: Языки общего назначения не имеют смысла!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.04.12 20:43
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Грамматика SQL проста до безобразия


Я бы так не сказал. Там местами даже в LL(k) не укладывается, LL(*) нужен.

V> и в сети лежит множество готовых парсеров, которые расширить на свои потребности можно с пол-пинка.


Парсер это примерно 5% потребной работы, если не меньше.
... << RSDN@Home 1.2.0 alpha 5 rev. 31 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[26]: Языки общего назначения не имеют смысла!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.04.12 20:43
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Во-первых, тривиальна


Я бы так не сказал. Там много интересных моментов возникает.

S>, во-вторых, не очень много чего экономит


Очень много экономит, как показала практика.
... << RSDN@Home 1.2.0 alpha 5 rev. 31 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[23]: Языки общего назначения не имеют смысла!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.04.12 20:44
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Ну ты тогда ты без сомнения на примере _этого_ кода покажешь преимущества ООП над процедурным программированием, не так ли??


Зачем?
... << RSDN@Home 1.2.0 alpha 5 rev. 31 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[22]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 14.04.12 20:48
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Как раз это — серьезно, коль уж вы претендуете на практическую ценность концепции. А общие слова не стоят ничего. Show me your code, как IT любит говорить.

Покажи, как создать архитектуру вот по этому коду. Тот, что под cat.
Re[12]: Языки общего назначения не имеют смысла!
Автор: WolfHound
Дата: 09.04.12

Ты не сможешь.
ДСЛ тоже не сможешь. Ибо там уже потерялось куча информации о том, что же там происходит.
Да ты и сам по своему куску кода никогда в жизни ничего не спроектируешь.

Повторю еще раз: Для того чтобы сделать ДСЛ нужно проанализировать задачу. Проанализировать задачу на основе нескольких десятков строк кода невозможно.
И ты сам это знаешь.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[20]: Языки общего назначения не имеют смысла!
От: mrTwister Россия  
Дата: 14.04.12 20:58
Оценка:
Здравствуйте, AndrewVK, Вы писали:

С этим кодом и без DSL есть куда развиваться
лэт ми спик фром май харт
Re[22]: Языки общего назначения не имеют смысла!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.04.12 21:13
Оценка:
Здравствуйте, Tanker, Вы писали:

T>даже в менеджед приходится спускаться на il.


IL приходится писать, потому что до 4 версии в фреймворке не было других способов динамической кодогенерации. В 3.5 появился ExpressionTree.Compile(), а в 4 ET дополнили стейтментами.
... << RSDN@Home 1.2.0 alpha 5 rev. 31 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[21]: Языки общего назначения не имеют смысла!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.04.12 21:17
Оценка:
Здравствуйте, mrTwister, Вы писали:

T>С этим кодом и без DSL есть куда развиваться


Топик не об этом. Но расскажи.
... << RSDN@Home 1.2.0 alpha 5 rev. 31 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[23]: Языки общего назначения не имеют смысла!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.04.12 21:17
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Покажи, как создать архитектуру вот по этому коду. Тот, что под cat.


Ты что то перепутал. Я как раз таки не утверждаю, что спроектировать DSL легко.

WH>ДСЛ тоже не сможешь. Ибо там уже потерялось куча информации о том, что же там происходит.


Мне кажется, приведенный кусок значительно понятнее и очевиднее. Ну и я всегда готов ответить на дополнительные вопросы.

WH>Повторю еще раз: Для того чтобы сделать ДСЛ нужно проанализировать задачу.


Я с этим и не спорил. Я просто продемонстрировал, цитирую:

1) Для сочинения DSL требуется специфичная и очень высокая квалификация. Подчеркиваю, для сочинения, а не для реализации.
2) Современные ЯОН совсем не так уж и ужасны при умелом использовании.

... << RSDN@Home 1.2.0 alpha 5 rev. 31 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[24]: Языки общего назначения не имеют смысла!
От: Jack128  
Дата: 14.04.12 21:24
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Jack128, Вы писали:


J>>Ну ты тогда ты без сомнения на примере _этого_ кода покажешь преимущества ООП над процедурным программированием, не так ли??


AVK>Зачем?

ну как. Ты взял произвольный кусок кода и предложил на этом примере доказать преимущество одной парадигмы программирования(не уверен, что правильно выбрал термин, не силен в теории) над другой. Я предложил сделать тоже самое.
Re[9]: Языки общего назначения не имеют смысла!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.04.12 21:25
Оценка:
Здравствуйте, oldjackal, Вы писали:

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


Ты про ресолвинг имен и вывод типов не забыл? Даже такая простая вещь, как свертывание константных выражений "подстановками коэффициентов в простую формулу" никак не решается.
Ты, случаем, семантический анализ с кодогенерацией не спутал?
... << RSDN@Home 1.2.0 alpha 5 rev. 31 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[25]: Языки общего назначения не имеют смысла!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.04.12 21:27
Оценка:
Здравствуйте, Jack128, Вы писали:

AVK>>Зачем?

J>ну как. Ты взял произвольный кусок кода и предложил на этом примере доказать преимущество одной парадигмы программирования

Тебе показалось. Я всего лишь предложил показать, как мог бы выглядеть DSL.

J>Я предложил сделать тоже самое.


В контексте топика твое предложение абсолютно бессмысленно.
... << RSDN@Home 1.2.0 alpha 5 rev. 31 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[24]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 14.04.12 21:29
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

WH>>Покажи, как создать архитектуру вот по этому коду. Тот, что под cat.

AVK>Ты что то перепутал. Я как раз таки не утверждаю, что спроектировать DSL легко.
Ты утверждаешь, что это сложнее чем делать архитектуру на обычных языках.
Но это не так.
Обрати внимание я тебе не ДСЛ предложил делать.

WH>>ДСЛ тоже не сможешь. Ибо там уже потерялось куча информации о том, что же там происходит.

AVK>Мне кажется, приведенный кусок значительно понятнее и очевиднее. Ну и я всегда готов ответить на дополнительные вопросы.
Это он тебе кажется понятным и очевидным. Ибо ты его написал. А до этого проанализировал предметную область и сочинил архитектуру.
А для меня очевидна та гора кода. Ибо я сделал генератор, который ее генерирует.

WH>>Повторю еще раз: Для того чтобы сделать ДСЛ нужно проанализировать задачу.

AVK>Я с этим и не спорил. Я просто продемонстрировал, цитирую:
AVK>

AVK>1) Для сочинения DSL требуется специфичная и очень высокая квалификация. Подчеркиваю, для сочинения, а не для реализации.
AVK>2) Современные ЯОН совсем не так уж и ужасны при умелом использовании.

Да ты что издеваешься что ли?
Я тебе про то, что задачу нужно проанализировать ты мне про квалификацию.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: Языки общего назначения не имеют смысла!
От: Jack128  
Дата: 14.04.12 21:33
Оценка: +2
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Jack128, Вы писали:


AVK>>>Зачем?

J>>ну как. Ты взял произвольный кусок кода и предложил на этом примере доказать преимущество одной парадигмы программирования

AVK>Тебе показалось. Я всего лишь предложил показать, как мог бы выглядеть DSL.


на примере кода в 50 строк?? смеёшься?? Это тоже самое что предложить спроектировать иерархию классов на этих 50ти строках.
Re[6]: Языки общего назначения не имеют смысла!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.04.12 21:47
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ну так я про то и говорю, что кругом просто "размётка". И в этом случае я невижу никакого смысла для отдельного языка под это — проще сразу генерировать в редакторе готовый код на системном языке.


Генерировать то может и проще, а вот десериализовать его потом ...

_>А вот если бы у нас в gui dsl можно было бы задавать хотя бы минимальные действия...


Есть и такое. Например, WPF/XAML. Отработка на самого себя и другие контролы, а так же несложная анимация задаются декларативно прямо внутри XAML.
... << RSDN@Home 1.2.0 alpha 5 rev. 31 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[25]: Языки общего назначения не имеют смысла!
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.04.12 21:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>>>Покажи, как создать архитектуру вот по этому коду. Тот, что под cat.

AVK>>Ты что то перепутал. Я как раз таки не утверждаю, что спроектировать DSL легко.
WH>Ты утверждаешь, что это сложнее чем делать архитектуру на обычных языках.

Из этого никак не следует, что архитектуру сделать просто.

AVK>>Мне кажется, приведенный кусок значительно понятнее и очевиднее. Ну и я всегда готов ответить на дополнительные вопросы.

WH>Это он тебе кажется понятным и очевидным. Ибо ты его написал.

Не угадал. Я его не писал. Я его даже не видел до того как в форум воткнуть.

WH>Я тебе про то, что задачу нужно проанализировать ты мне про квалификацию.


А вроде бы не тебе отвечал. И нигде не утверждал, что задачу анализировать не нужно.
... << RSDN@Home 1.2.0 alpha 5 rev. 31 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[26]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 14.04.12 22:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А вроде бы не тебе отвечал. И нигде не утверждал, что задачу анализировать не нужно.

Ох. Ты сам-то веришь, что задачу по этому куску можно проанализировать?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[22]: Языки общего назначения не имеют смысла!
От: mrTwister Россия  
Дата: 14.04.12 22:13
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Топик не об этом. Но расскажи.


Типичный пример лапша-кода.

лэт ми спик фром май харт
Re[35]: Языки общего назначения не имеют смысла!
От: Vain Россия google.ru
Дата: 15.04.12 04:27
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>>И чем сложнее эти операции, тем сильнее рулит SQL.

V>>Ну так в этом и дело, вы пытаетесь рассматривать только запросы в отрыве от всего остального куда входят сами базы данных, управление правами, пользователями, связи и отношения в таблицах, триггеры, процедуры и т.д. Сами запросы это вершина айсберга.
S>Нет. Запросы — это всё-таки ядро. Управление правами и пользователями — это администрирование серверов баз данных.
S>Но вы по-прежнему не понимаете одну главную вещь: скрипты SQL гораздо проще для управления БД, чем любые библиотеки на С++.
Как я сказал уже это от базы данных зависит. Как вы к примеру собираетесь через SQL управлять реестром винды? Или файловой системой? А это ведь тоже база данных.
S>Совершенно неважно то, что сами базы данных — это большая и сложная область. Мы сейчас не сравниваем объём предметных областей. Мы сравниваем удобство и простоту различных языков для работы в этих областях.
Попу с пальцем сранивать бесполезно.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.