Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.12.10 11:50
Оценка: 68 (2) +4
Здравствуйте, Воронков Василий, Вы писали:

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


Z>>Нужные нам для работы структуры можем, иначе как мы с ними работаем? Пример про хештаблицы вообще не понял, ты их используешь их для хранения данных? Часто?


ВВ>Напрямую — нет. Но в "загримированном под статическую типизацию" виде — да, бывает. Вот, к примеру, работаешь с объектом через транспарент прокси — выглядит "типизрованно", но по сути — та же хэш-таблица.

Всё строго наоборот. Это не гримирование, а одно из двух:
1. Способ провести границу между статикой и динамикой. При проносе через эту границу динамика исчезает, позволяя нам в "чистой зоне" пользоваться всеми преимуществами статики. Пример: обратно Linq. В нём у нас есть риск расхождения таблиц с классами. Но как только мы пронесли Data row внутрь приложения, всё остальное становится статическим. Нам гарантирована типобезопасность всех производных запросов. Что гораздо, гораздо, гораздо лучше чем держать в "динамике" (то есть с неизвестными типами) вообще все запросы, а не только определения таблиц. Почему лучше — понятно? Поясняю: при, скажем, переименовании поля в таблице я могу нарваться на проблемы синхронности в Linq, точно так же, как и в динамике. Но в Linq я иду в исходник, переименовываю поле там, и автоматический рефакторинг гарантированно меняет мне это поле согласованно везде, где бы я к нему ни обращался. И неважно, использую ли я таблицу или некий запрос, построенный на её основе — всё автоматически останется согласованным. Даже если у меня нет теста на каждый из from Person where Age > _age select Name.

2. Способ "разгримировать" статику, которая была обёрнута в динамику. Ну, как пример — обратно, DLL. Информации о типах в DLL нету. Но это не означает, что я могу вызывать CreateFile с произвольными аргументами. Более стандартный пример: сериализация/десериализация. В теории, XML — чистая динамика. На практике, на обоих концах XML-based транспорта часто сидят статически типизированные инфраструктуры, которые обмениваются статически типизированными данными.
Или вот, те же куки. Кто мне их пишет? Да я сам же и пишу. Они были исходно статически типизированы, и мне естественно удобнее потреблять их обратно в статически же типизированном виде. У меня не стоит задачи прочитать произвольную куку, запиханную в веб сервер.

Во многих задачах "динамика" — это способ уйти от ответственности. Как, к примеру, проконтролировать в веб приложении корректность внутренних ссылок? Ответ динамики — "тестируйте, лемминги". Ответ статики — "давайте сделаем генератор внутренних ссылок, построенный на метаданных. Тогда статическая проверка позволит нам гарантировать отсутствие ссылок, которые не удастся потом обработать".
Двадцать лет задача считалась неразрешимой — и вдруг оп-ля! Как только мы начали искать способ ввести статическую типизацию в и так хорошо типизированные URL-и, как всё решилось в мгновение ока.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 23.12.10 19:00
Оценка: -1 :))) :))
Vlad2, Wolfhound, ну давайте я вам сэкономлю время.

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

Единственная полезная мысль, которая есть в последнем сообщении — это про ограничение синтаксиса. Это выглядит интересно. Все остальное вообще не в канву о том, о чем мы разговарием с Антоном. Если модератор и местный буйный будут продолжать себя вести как капризные дети — я найду другие места, где можно поговорить на технические темы с умными людьми. Dixi.
Re[4]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 20.12.10 18:55
Оценка: 92 (5)
Здравствуйте, Курилка, Вы писали:

К>Из других вариантов — pyjamas и Lift (правда в последнем скорее обёртки к JS+AJAX+Comet)


Даже для OCaml'а уже пара штук есть http://ocsigen.org/js_of_ocaml/ и http://code.google.com/p/ocamljs/
плюс интерпретатор OCaml байткода на js http://www.pps.jussieu.fr/~canou/obrowser/tutorial/
Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 17.12.10 18:25
Оценка: 65 (3) +1
Пост навеян чтением холивара про динамику и статику.

Давайте рассмотрим, основные плюсы которые дает динамика в вебе тем же рельсам в по сравнению с asp.net mvc:

  1. Возможность не описывать поля модели хранящейся в БД
  2. Возможность сформировать пачку данных и передать их во вьюху не заморачиваясь описанием их структуры
  3. Возможность нагенерировать удобных хелперных методов для каждого чиха пользуясь соглашениями об именовании.
  4. Делать красивые DSL заточенные для мелких задач.

Вероятно я что-то пропустил, думаю меня дополнят.

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

Некоторое время назад, я сделал экспериментальную библиотеку для немерле для проверки этих концепций, они работают.

Какие еще плюсы дает динамика в вебе, недостижимые для сочетания статики и метапрограммирования? Что если вместо альтернативы — (быстро пишем|быстро и более надежно работает) выбрать быстро пишем — быстро и более надежно работает.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 20.12.10 15:48
Оценка: -4
Здравствуйте, Воронков Василий, Вы писали:

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

У динамики НЕТ плюсов.

ВВ>Но сейчас все-таки не 90-е. Клиенты "хочут" аякса и веб-два-ноль. А это значит, что у нас будет куча ДжаваСкрипта. И что толку от того, что в одном маленьком месте мы добавили статики, а во всех остальных у нас как была, так и осталась динамика — причем динамика отборнейшейго, так сказать, "качества".

http://www.impredicative.com/ur/
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 21:06
Оценка: +2 -2
Здравствуйте, VladD2, Вы писали:

ВВ>>Динамика ничем не поможет. Сам сценарий изначально — это динамика. Чтение ХМЛ через XmlReader — это динамика. Работа с базой — это динамика. Динамика — это просто данность. Тут другой вопрос — чем в данном случае поможет статика?

VD>Это не динамика. Это обработка данных.

Это динамика. Программа и пишется для обработки данных. И эти данные ну просто никак не могу не влиять на работу кода. Просто ХМЛ в данном случае — тип, структура которого известна только в рантайме. Т.е. динамически типизированный.

VD>Читать ХМЛ или работать с БД можно из С.


Да, поэтому в любом языке есть динамика.
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.12.10 08:19
Оценка: +4
Здравствуйте, Ziaw, Вы писали:

Z>Извини, но это ерунда. Реляционки это в большинстве задач никакая не динамика, как и xml приходящий от известного сервиса. Нету там динамики, там все должно быть в том состоянии на которое рассчитан код, либо корректная работа программы не может быть гарантирована. Все это спокойно контролирует система типов. Просто не надо ей мешать.

Совершенно верно. Вся могучесть реляционной алгебры как раз и состоит в довольно-таки жёсткой системе типов.
Просто традиционно эта система типов плохо ложилась на существующие ЯП. В RA большинство операций порождают новый "тип" прямо по месту, а в традиционной статике ты должен нудно описывать типы заранее.
Отсюда и миф про динамику в SQL. Linq фактически демонстрирует статичность RA.
RDBMS не более динамична, чем любая программа — точно так же я могу пойти в исходники на C#, и поменять определение некоторого типа. И вот тут как раз статика внезапно заруливает со страшной силой: в самом скучном случае за считанные секунды компилятор оббегает весь мой код, и проверяет выражения с использованием изменившегося типа. Если он находит где-то расхождения, он говорит мне об этом сразу же, а не через месяц эксплуатации. В более интересном случае у меня есть рефакторинг, который автоматически исправляет выражения, построенные с участием типа.

Точно так же я могу поменять схему типов в DLL, загружаемой динамически. Это полный аналог подсовывания базы данных, в которой схема отличается от той, для которой я писал код. Почему-то при этом никому в голову не приходит утверждать, что DLL — это динамика, и статическая типизация для них подходит плохо.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 23.12.10 12:32
Оценка: 66 (1) :))
DG>>в текстовых терминах проще формулировать утверждения.
DG>>если рассматривать МП не в текстовых терминов — то там слишком много незнакомых терминов надо вводить.

МП большая область
если заходить со стороны ЯП: то это будет теория множеств, категорий, алгебры, логика первого/второго порядка, индукция, изоморфизм, грамматика, лексика, лямбда-исчисление и т.д.
если заходить со стороны исследования операций: то это будет детерминированные модели, линейное программирование, симплекс-метод, транспортные модели, сетевые модели и т.д.
можно зайти со стороны оптимального управления, теории игр и т.д.
что именно интересует?

Z>Это каких же? Что-то я не заметил, что ты скромен в количестве термиинов.

Z> Той же семантики навалил целую кучу и в тему и не в тему.

это лишь показать, что термин "семантика" — это вообще о другом.
vlad, wh и sinclair говорят о той или иной эквивалентности программ, но не о семантике.

Z>А от тебя я все еще жду реальные примеры применения МП. Ведь у тебя множество исследовательских проектов применяющих МП. Не обязательно код, у тебя же наверняка NDA Просто проблема, способ решения.


проблема:
в стандартной трехзвенке — для описания бизнес-логики приходится использовать три с половиной языка: c#, sql, js и xpath
решение:
введение единого языка для описания бизнес-логики — который транслируется во все эти три с половиной языка


проблема:
последовательная-синхронная запись — подвешивает программу на операциях коммуникации с внешними источниками и длительных вычислениях.
запись в виде cps — сложна в понимании, изменении и поддержке.

решение:
код записывается как последовательный-синхронный, но автоматически преобразуется в cps


проблема:
удобная объектно-ориентированная запись бизнес-логики приводит к большому кол-ву запросов к базе

решение:
поддержка двухфазной модели выполнения бизнес-логики:
на первой фазе пробегом по дереву БЛ определяется какие данные она требует и склеивание в единый запрос, данные запрашиваются и складываются в кэш
на второй фазе — БЛ исполняется поверх кэша

Re[14]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 05:21
Оценка: 59 (3)
Здравствуйте, Кэр, Вы писали:

Кэр>Когда у вас пройдет шоколадно-конфетный период с макрами — вы увидите, что это всего лишь тул. Ничего более. И я с удовольствием заюзаю готовый проверенный тул, чем буду возиться с поделками второклассников в виде макров. Тем более, когда для работы с ними нормальной среды нет (сравнимой по качеству со студия+решарпер).


Адекватные слова про тул почему-то перемешаны с насмешками над людьми сделавшими тул и людьми его использующими. А что, правда есть готовый проверенный тул решающий те же задачи? Да еще со средой сравнимой по качеству со студией + решарпер?

Кэр>А ну ну. Слышал я эти кухонные оценки "за пару недель". И не раз.


Кэр>Ну а вас спросили, где так нужны ваши макры, если вы почти на них жениться готовы. И я этот вопрос поддерживаю.


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


Язык проектировать так же просто, как проектировать иерархию объектов, даже проще, ошибки нагляднее. Ваши аргументы напомнили мне фанатов процедурного программирования с жаром доказывающих ненужность С++ тем, что классы не нужны, когда есть структуры. Кричащими о сложности автокомплишена в современнных IDE и о том, что С++ никем нормально не поддерживается. О том, что наследование и виртуальные вызовы на С используются от силы в 1% проектов и требуют огромных усилий по поддержке. О том, что код с этими вызовами на С ни черта не понимают люди только что пришедшие в проект и потому такой код бяка.

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

Вобщем если по делу сказать нечего, лучше промолчать, а не демонстрировать свои не лучшие качества. Не нужен — не юзайте. Считать себя любимого эталоном всех, не слишком умно, уверяю вас.
Re[14]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.12.10 13:04
Оценка: 14 (1) +2
Здравствуйте, Кэр, Вы писали:
Z>>Я бы переформулировал вопрос. Зачем жалкое подобие макросов type providers тому у кого есть полноценные макросы.

Кэр>Ну когда появятся type providers — мы и посмотрим, кому они нужны и кому нужны макры, не так ли?


Хм. Простой тест: а type providers покрывают await/async?

Я, на всякий случай, напомню историю: изначально R#, а затем Nemerle, появились как ответ на вопрос "можно ли получить язык для дотнета, в котороом для реализации фич C# версии X+1 не надо переписывать компилятор"?
Как то: можно ли обойтись без встраивания foreach, using, lock? Без встраивания yield return? Без встраивания from, select, where, orderby? Без встраивания dynamic?

Основной бенефит даже не в том, чтобы не трогать компилятор — с точки зрения пользователя нет разницы, откуда взялся async.
Бенефит в том, чтобы одна команда могла заниматься dynamic, а другая команда параллельно и независимо могла заниматься async. Это позволяет масштабировать скорость разработки языка.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 03:24
Оценка: 9 (1) +1 :)
Здравствуйте, DarkGray, Вы писали:

DG>динамик позволяет запустить код, который не полностью валидный (с точки зрения типизации)

DG>это полезно при внесении изменений (рефакторинге и т.д.)

Это особенно полезно для внесения и размножения багов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 19.12.10 23:55
Оценка: 8 (1) :))
Z>Меня интересуют плюсы динамики которые недостижимы в статике с поддержкой метапрограммирования.

динамик позволяет запустить код, который не полностью валидный (с точки зрения типизации)
это полезно при внесении изменений (рефакторинге и т.д.)
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 10:46
Оценка: +1 -1 :)
Здравствуйте, Ziaw, Вы писали:

ВВ>>Сама тема, видимо, интересная, но обсуждение все же идет в контексте веб-фреймворка, и контекст на мой взгляд странный. Хотя бы потому что с точки зрения любого фреймворка важно не то, как это фреймворк *пишется*, а то, как он используется. И я не вижу кардинальной разницы в использовании фреймворка, построенного на кодогенерации, фреймворка на макросах и фреймворка на динамике.

Z>Контекст навеян темой про руление динамики в вебе. Потому и выбран веб.

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

ВВ>>Но знаешь что интересно? Динамически-типизированный ДАЛ тоже *как правило* работает корректно.

Z>Т.е. если динамика лишается своих плюсов, от нее можно избавиться, так?

Нет, скорее наоборот. Плюсов лишается статика Плюсы у динамики как были, так и остаются. Ты просто касаешься той области, которая динамична by design. И ее никак не исправить. Ну тебе, я понимаю, интересно, можно ли на статически-типизированном языке сделать все так же удобно, как на том же Руби. Ну я думаю можно REPL, кстати, тоже не проблема. Для REPL-a, кстати, нужна скорее не динамика, нужен интерпретатор — да и то многие языки даже без него обходятся.

Просто хочется понять — в чем цель. Моя мысль простая — решение на статике может быть примерно таким же по удобству как и решение на динамике, но преимуществ статики для веба я тоже как-то не вижу. Потом ладно. Предположим, что есть преимущества. Куча преимуществ, которые я не понимаю. Да и код работает быстрее (хотя зачем мне эта скорость, когда все в БД упирается — ну ладно). Хорошо, статика рулит.

Но сейчас все-таки не 90-е. Клиенты "хочут" аякса и веб-два-ноль. А это значит, что у нас будет куча ДжаваСкрипта. И что толку от того, что в одном маленьком месте мы добавили статики, а во всех остальных у нас как была, так и осталась динамика — причем динамика отборнейшейго, так сказать, "качества".

ВВ>>Причем тесты для ДАЛа я буду писать в обоих случаях — и тесты довольно банальные, вплоть до того, что их генерить можно. И эти тесты вообще нивелируют какую бы то ни было разницу в типизациях. Т.е., повторюсь, в этой области по фиг вообще — статика или динамика. Результат один.

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

Алгоритмические ошибки — это другое. А низкоуровневые тесты писать несложно. И таки моя практика показывает, что тесты для ДАЛа нужны, с помощью какой бы технологии он не создавался. Статика тестирует только соответствие клиентского кода сгенерированной модели. Но модель все равно разъезжается с данными. Вот разъезжается и все тут. Все равно на этапе разработки изменения делаются и там, и там. Тут в общем срабатывает старый добрый принцип — если что-то может поломаться, то это обязательно поломается.

Поэтому если сравнивать статический ДАЛ — к примеру, на Linq2Sql — и динамический (ну собственно, рукописный код со всяческими reader.GetValue) — то я бы совсем не сказал, что первый вариант надежнее. К обоим надо прибивать юнит-тесты и гонять их чуть ли не на каждом комите.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 20.12.10 16:12
Оценка: +2 -1
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну во-первых, особого рефакторинга я в том же Немерле не вижу Вот у C# есть, Решарпер называется.

Плохо смотришь.
Переименование переменных и методов уже работает.

ВВ>Нормальная поддержка ИДЕ — на самом деле для языка с навороченным выводом типов это *сложнейшая* задача.

Не сложнее чем для C#

ВВ>В вашем случае она несколько упрощается, т.к. вы имеете прямой доступ к самому компилятору и даже контролируете развитие языка.

Делать паралельно компилятор языка и интелесенс тупость полнейшая. Ибо там почти весь код совпадает.
Все что нужно это во время интелисенса выключить кодогенерацию.

ВВ>Вплоть до того — тут Влад где-то говорил в стиле — такой-то фичи делать не будем, ибо она замедлит интеграцию. Это уже смещает акценты.

Угу... мелкософт тоже рубит фичи в C# по причине "трудно поддержать в IDE".

ВВ>Если брать с чистого листа, то создание ИДЕ для динамически-типизированного языка и "языка вроде Немерле" — по сложности где-то близкие задачи.

Ой насмешил. В недавнем флейме я "IDE" питона десятком строк запутал.
IDE немерла же проблем не имеет и с весьма большими проектами.

ВВ>И там, и там будет хардкорный вывод типов

Вывод типов для динамики в общем случае не работает.

ВВ>- Ограничения на типы

ВВ>В динамике они тоже могут быть, не вижу противоречия. Только проверяться будут тестами, а не компилятором.
Ну и нахрена нам тогда динамика?

ВВ>Вот какой стимул у РОР-иста переходить на nrails? Разве что ради скорости. Ну так РОР медленный потому что он тупо медленный, а не потому что динамика.

Он медленный ибо динамика.

ВВ>V8 вон быстрее раз в сорок.

И он по сравнению со статикой тоже тормоз и памяти жрет немеряно.

ВВ>А священная война в стиле "статика + вывод типов + макросы" во всем круче динамики ни к чему не приведет. Потому что на самом деле не круче. Они разные и для разного.

Вот только ни кто ни разу так и не озвучил ни одного преимущества динамики.

ВВ>Как бы ни были круты макросы так или иначе вы упретесь в ограничения системы типов, которые в динамике отсутствуют как класс.

Ага... тормоза придумали трусы, а перила дебилы...

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

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

ВВ>А для конкретной случае веба — ну реально по фиг динамика там или статика. Слишком много переменных, известных только в рантайме, чтобы это что-то решало.

Назови хоть одну.
И вообще http://www.impredicative.com/ur/
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.12.10 21:08
Оценка: +2 -1
Здравствуйте, Воронков Василий, Вы писали:

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


ВВ>Угу. Получаешь данные из внешнего источника и осуществляешь их разбор. Все, это динамика. Вылетать будешь в рантайме. Читаешь в своем приложении конфиг? Ага, динамика. Работаешь с хэш-таблицами? Динамика. Читаешь параметры УРЛ? Динамика. Работаешь с куками? Динамика. И так далее, и тому подобное.


Ну бред же. Парсинг внешних данных никогда к динамике не относился, да и парсеров на динамических языках я как-то не видел. В рантайме вылетать тоже не надо, на некорректный запрос от клиента есть вполне корректный ответ протокола HTTP.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 00:14
Оценка: +1 -2
Z>Меньшую чем что? Повторяю, я говорил, о том, что иерархию классов проектировать по науке тоже очень не просто, однако нет ни одного программиста на ООП не спроектировавшего хотя бы парочку. На МП тоже мало программистов попробоваших свой синтаксис, проблемы абсолютно похожие.

ошибки в иерархии классов ни к чему страшному не приводят.
в худшем случае уменьшается время разработки.

ошибки в навороченном МП — приводят к полной неработоспособности программы и невозможности разработчика в этой проблеме разобраться.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 01:48
Оценка: :)))
WH>Простите не поверю.
WH>Ибо моя практика говорит что ничего подобного нет.

тебе просто повезло и ты очень умный. остальные, к сожалению, не такие...
Re[15]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 21.12.10 15:06
Оценка: +2 :)
Здравствуйте, Sinclair, Вы писали:

S>Хм. Простой тест: а type providers покрывают await/async?


Await/async покрываются пятой версией шарпа...

S>Я, на всякий случай, напомню историю: изначально R#, а затем Nemerle, появились как ответ на вопрос "можно ли получить язык для дотнета, в котороом для реализации фич C# версии X+1 не надо переписывать компилятор"?


Это как бы не нуждается в напоминании. Я только утверждаю, что идей действительно достойных нового языка не так уж много. И людей способных достойно эти идеи воплотить тоже. Иначе мы бы уже имели популярный язык для .Net, который решает твой вопрос, innit? Любую фичу можно использовать как во благо, так и во вред. Мне вот такое свободное изменение синтаксиса дает такую картину перекрестного опыления различными библиотеками результирующего кода, что жить не хочется. Представь, что ты хочешь заюзать либу для XML разработанной третьей стороной. А она заодно тебе привозит переопределение $, % и неровно дышит к наличию < > в коде. Что наступает на уши либе по обработке HTML, которая разработана yet another third party. И вдобавок это все конфликтует с кодом, который местный сениор отчаянно колбасил еще в самом начале проекта, изголяясь во все стороны и под разными углами. И сидишь ты и чешешь репу, как бы разодрать все эти либы в разные стороны, чтобы синтаксис наконец-то стал однозначным. И при чтении разных файлов тебе приходится вспоминать, а что означает вот этот keyword и вот этот символ в этом контексте.

Я скажу сразу — нах такое не нужно. Пока не показано, как эта проблема будет решена — я категорически против подобных завихрений в моих проектах.

S>Как то: можно ли обойтись без встраивания foreach, using, lock? Без встраивания yield return? Без встраивания from, select, where, orderby? Без встраивания dynamic?


Прототипировать — сколько угодно. Nemerle на самом деле дальше прототипа и не ускакал.

С другой стороны консерватизм в разработке языка — очень необходим. Посмотри на количество странностей, которые Nikov выкладывает в .Net форуме. А в МС хватает грамотных консерваторов вроде Липерта, которые людей вроде Влада успевают хватать за шкирку вовремя. Иначе язык пойдет в разнос очень быстро. С++ будет казаться оплотом стабильности и однозначности языка.

S>Основной бенефит даже не в том, чтобы не трогать компилятор — с точки зрения пользователя нет разницы, откуда взялся async.

S>Бенефит в том, чтобы одна команда могла заниматься dynamic, а другая команда параллельно и независимо могла заниматься async. Это позволяет масштабировать скорость разработки языка.

С точки зрения прототипирования — бенефит вполне ощутим и очень крут. С точки зрения разработки — цена за эти бенефиты несоозмерима.
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 16:40
Оценка: :)))
VD>Ну, я смотрю, ты в одном шаге от примыкания к нашему лагерю.
VD>Я тоже с R#-а начинал.

едва ли.
nemerle слишком низкоуровневый и примитивный: та же подветка с ziaw — это подтверждает.

если уж говорить о МП — то стоит говорить о суперкомпозиции кода и о суперкомпиляции, а не о макросах
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 11:23
Оценка: -2 :)
VD>Ты не в состоянии отличить метода оптимизации от средства программирования. Вот в этом и вопрос.

средство программирования — это инструмент.

и как у всякого инструмента — у средства программирования есть цель и решаемая задача.

цель средства программирования — предоставить способ записи алгоритма оптимальным способом (оптимальность в широком смысле: в том числе рассматривается оптимальность по критериям: компактность, четкость, гарантии работоспособности, понятность, читабельность, скорость выполнения, разработки и т.д.)

решаемая задача: переписывание кода из одного вида в другой.
в частности — переписывание общего кода (например, C) в последовательность операций понятной данному процессору,
или переписывание из кода понятного макросу в код понятный платформе (.net, c#)

зы
и еще раз повторю, что данная решаемая задача: переписывание кода из одного вида в другой — это и есть суперкомпиляция чисто исходя из определения суперкомпиляции.
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 12:51
Оценка: :)))
Z>Для решения этих проблем тебе придется засунуть весь код опять же в макрос который перепишет выражения. Только сама задача подобного генератора менее бредовой не становится.

вот только эта бредовая задача является стандартной и базовой: из куска кода делается шаблон, который тиражируется.
на этом построена почти вся генерация html-я в веб-решениях, по этой схеме часто строятся трансляторы и т.д.

Z> это ты пытаешься забивать гвозди микроскопом и генерировать код в стиле текстовых шаблонов. задача абсолютно не нужная в nemerle.


проблем в том, что людей с таким подходом миллионы, как только им дать такой инструмент. они тут же захотят использовать тем способом, который я привел.
и проблема в том, что nemerle — ни технически, ни организационно — не предлагает способа для устранения этого.
Re[10]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.12.10 09:00
Оценка: +3
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну т.е. у тебя идет все та же трансляция в JS, только в более ограниченном объеме. Я, честно говоря, с трудом вижу тут альтернативу компилятору некоего "нашего" языка в JS — скорее это другой подход к реализации, более проблемно-ориентированный что ли.

да.

ВВ>Не знаю, не уверен. По идее все, что нам может на Си помешать реализовать АСП.НЕТ MVC — будет мешать и в Си++.

Какая-то вывернутая логика. Мешать нам ничто не мешает. Вопрос в том, что нам помогает.
Если в языке нет понятия "типизированный указатель на функцию", то нам ничто уже не поможет его эмулировать — только рукопашный код, без какой-либо поддержки компилятором.

ВВ>Но Си это все же язык, который создавался задолго до эпохи веб. А на любом более или менее современном языке, включая динамические скрипты, фреймворк соответствующий возможностям MVC реализуем. Даже наоборот — это на C# затруднительно сделать что-либо вроде РубиОнРаилс.

Возможно. Я весьма поверхностно знаком с рельсой.


ВВ>Да не оптимизируют они. Разве что по сравнению с очень плохим SQL. Любой программист, имеющий хотя бы базовые знания конкретного диалекта SQL, напишет запросы, которые по крайней мере не медленнее.

Это иллюзия. На практике запросов гораздо больше, чем программистов. Корректно реализовать динамическое построение запроса может не всякий — это я тебе на личном опыте говорю. Я приводил примитивные примеры. Даже их народ реализовывать не хочет — пишут сплошь и рядом ((Age >= @MinAge) OR (@MinAge is null)). Что, естественно, убивает производительность.

А если мы попробуем состряпать что-то мало-мальски динамичное с использованием star join, то будет полный туши свет.
Я этого кода, написанного "любым программистом", наотлаживался в начале 2000х по самые помидоры. Все эти чудесные sqlstring1, sqlstring2, взаимонеисключающие if-ы... И всё это в части corner cases падает, а в другой части — почти работает, только данные выдаёт не те.

А если мы попробуем внести любой рефакторинг — ну там, колонку добавить, или переименовать, или убрать — всё, копец. Ты остаёшься один на один с тоннами кода, по которому даже контекстный поиск не сделаешь, потому что умники там понаписали всякого типа "where date" & dateType &" = @dateParam1".
Вот тут линк должен очень-очень сильно помочь.

ВВ>Я, видимо, все же не понимаю проблему. Какого рода ссылки предполагается проверять? Банальный способ проверки ссылки — ну сделать HEAD запрос, скажем. Или имеется в виду механизм, который сможет проверить, что GET /products/5 — это валидно, а вот GET /products/7 — уже невалидно, ибо продукта с ид 7 у нас нет?

Имеется в виду механизм, который поймёт, что у нас вообще бывают ссылки на /products/xx. Который отловит, что нигде нет опечатки типа /product/xx. И что никто не использует старый формат products?id=xx.

В статически типизированном фреймворке мы ссылки генерируем по той функции, которая должна ссылку обрабатывать.
Благодаря этому правила роутинга используются дважды: один раз при генерации ссылки, другой раз при её разборе.
Это то, о чём я говорил — в реальности тут полная статика. Просто в середине жизненного цикла она выглядит как динамика. В результате мы имеем гарантированную согласованность.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.12.10 19:13
Оценка: +2 -1
Здравствуйте, Кэр, Вы писали:

Кэр>Если модератор и местный буйный будут продолжать себя вести как капризные дети — я найду другие места, где можно поговорить на технические темы с умными людьми. Dixi.


Какая утрата для нашего комьюнитии!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.12.10 20:30
Оценка: -2
Здравствуйте, Ziaw, Вы писали:

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


H>>>Но есть задачи принципиально не решаемые просто функцией в рамках статической типизации.


G>>Например?


Z>Типизированный вызов хранимки из БД, решается генераторами кода либо макросами.

Он в принципе не решается в compile-time, потому что хранимка может поменяться независимо от кода.
Хотя действительно для внешних систем обычно генерируется код.


Z>Выше приводил пример джейсона. Функцией оно решается, но создание объекта выглядит малочитабельно.

Тем не менее читается. Те принципиально решаема задача.

Z>На этом примере, можно обломать всех кто плачет о том, что в DSL надо вникать всем новым участникам проекта. Только они забывают, что при его отсутствии всем придется вникать в API конструирования джейсона используемой библиотеки.

Вообще говоря гораздо эффективнее была бы сериализация в JSON, а не ручное конструирование его в любом виде.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 20.12.10 11:06
Оценка: +1 :)
Здравствуйте, DarkGray, Вы писали:

DG>зы

DG>макросы плохи тем, что они могут сделать с кодом все что угодно, и соответственно макросы могут очень легко испортить код.
DG>стыковка одного макроса с другим макросом — та еще по легкости задача.

А сколько макросов Вы написали и отладили?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 13:09
Оценка: +2
Здравствуйте, Ziaw, Вы писали:

Z>Эти системы либо хардкодятся в компилятор, либо навешиваются сверху его расширением. Т.е. метапрограммирование дает хороший инструмент для создания этих механизмов. Хотя можно конечно и без него, только сложнее будет.


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

Z>>>Пресловутый DSL в прекомпайл тайме такой геморой, что его никто не использует. Максимум — делают что-то типа fluent api и наслаждаются.

L>>Ну, неправда же. Или не понимаю о чём речь.
Z>Речь о вставках своего синтаксиса в код который его не поддерживает и обработка препроцессором в прекомпайл. Например у оракла были механизмы позволяющие писать на SQL прямо в сишном коде. Иногда используют сторонние инструменты, но простенький DSL для своего проекта делают исчезающе редко.

А! Речь про eDSL? Если взять другие языки, то окажется, что с этим там всё в порядке — ruby, например. Или, чтобы было схоже с Nemerle — Scala. Язык не имеет макросов, но писать на нём DSL-и приятно.

Если всё таки важен синтаксис, то во-первых — почему? Наверное, захочу примеров — мы как-то с VladD2 обсуждали разницу описания грамматики в Parsec и EBNF. Вместо p* пишем many p, вместо a | b, пишем a <|> b. Конечно, можно переопределить *, | для того, чтобы синтаксис был схож, но даже если нет — отличия только в синтаксисе — насколько это важно? Гораздо важнее в eDSL ведь семантика, как мне кажется.

Во-вторых — препроцессоры тоже разные бывают. С удобными разборщиками типа haskell-src-exts или с помощью camlp4 можно очень удобно работать.

Z>Это утверждение говорит только об убогости AOP как внешних средств. Как только оно станет на расстоянии вытянутого пальца, ему найдутся вполне повседневные применения не нарушающие дизайн.


А вот примеры очень хочется. Для меня писать pointcut, который матчит по имени (!) то ещё убожество. Абстракция тут явно протекает.

Z>Я оговорился, не IoC в общем смысле, а DI как механизм для него. Достигается например применением AOP ко всем конструкторам в коде.


Т.е.? Зачем такие сложности? Что мы от этого выигрываем?

Z>Любой универсальный язык недостаточно выразителен в каждой специфической области.


Не так. "Любой универсальный язык недостаточно выразителен в какой-то специфической области" и применение макросов показывает в какой именно.
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 13:56
Оценка: +1 :)
Здравствуйте, Ziaw, Вы писали:

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


Ну смотри, что упрощает жизнь в статике, как ты пишешь:
— Навигация по коду, рефакториг и проч.
Ну во-первых, особого рефакторинга я в том же Немерле не вижу Вот у C# есть, Решарпер называется.
Нормальная поддержка ИДЕ — на самом деле для языка с навороченным выводом типов это *сложнейшая* задача. В вашем случае она несколько упрощается, т.к. вы имеете прямой доступ к самому компилятору и даже контролируете развитие языка. Вплоть до того — тут Влад где-то говорил в стиле — такой-то фичи делать не будем, ибо она замедлит интеграцию. Это уже смещает акценты.
Если брать с чистого листа, то создание ИДЕ для динамически-типизированного языка и "языка вроде Немерле" — по сложности где-то близкие задачи. И там, и там будет хардкорный вывод типов Насколько сложна будет ИДЕ с рефакторингом зависит опять же от того, что за динамический язык у нас. Вот для языка вроде Pure задача вполне посильная и сравнивая по сложности с Немерлевской ИДЕ.

— Ограничения на типы
В динамике они тоже могут быть, не вижу противоречия. Только проверяться будут тестами, а не компилятором.

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

Вот какой стимул у РОР-иста переходить на nrails? Разве что ради скорости. Ну так РОР медленный потому что он тупо медленный, а не потому что динамика. V8 вон быстрее раз в сорок.

А для ASP.NET MVC программиста преимущества очевидны. Ну так им и не надо доказывать, что динамика лучше статики.

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

А для конкретной случае веба — ну реально по фиг динамика там или статика. Слишком много переменных, известных только в рантайме, чтобы это что-то решало. Я для себя буду выбирать более удобное и последовательное решение, более близкое к моим задачам, а какая там типизация — буду смотреть в последнюю очередь.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 18:54
Оценка: +1 -1
Здравствуйте, Воронков Василий, Вы писали:

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

VD>>Из сказанного никак не вытекает последнего утверждения.

ВВ>Тебе неудобно пользоваться кодом, которые сгенерирован через студийные билд-провайдеры? С т.з. юзабилити это чем от макросов отличается?


Я не понял как логическая ошибка вообще может быть связана с какими-то утверждениями. Отсюда никакой ответ на твой вопрос не будет иметь смысл.

Еще раз повторюсь. Нельзя делать выводы из несвязанных утверждений. Нельзя по законам логики. Или мы очень далеко уйдем!

ВВ>>>А визуальные DSL-и для многих даже удобнее макросов. А если мне *как пользователю* не видно разницы...

VD>>Визуальные DSL может и хороши но у них есть два недостатка.
VD>>1. Они далеко не для всего применимы. Точнее будет сказать применимы они весьма редко.
VD>>2. Их очень не просто создавать. Фактически DSLTools предоставляет средство только для рисования диаграм. А весь код по анализу кода и генерации оного придется написать самому. Отсюда и такое малое количество тех самых DSL-ей произведенных с его помощью.

ВВ>И одно важное достоинство — они широко используются и, так сказать, насаждаются вендором платформы.


Достоинство до весьма надуманное. Я знаком с двумя DSLTools-DSL-ями. Оба разработаны МС. Оно — это дизайнер классов. Согласен, штука очень удобная и полезная для ОО-проектов. Второй — это дизайнер для WWF (который теперь вроде как просто WF). Вот он на мой взгляд используется не так часто и не так нужен. Но это скорее следствие применимости (странности) самого WF.

Потом я еще раз повторяюсь DSLTools — это библиотеке облегчающая создание визуальных рисовалок. Создание самого DSL она не упрощает! Разработку с использованием DSLTools можно было бы намного упростить, если в качестве бэкэнда использовать макрос-систему аналогичную немерловой (или собственно ее).

ВВ>Люди к ним привыкли. И таки-да, многим удобнее модель набросать в дизайнере, чем делать это макросом.


Покажи мне хотя бы одного человека коорый создал бы свой DSL на базе DSLTools? Так к чему привыкли люди?

VD>>Короче, ты опять теоретизируешь есть только один путь понять почему макросы лучше — попробовать.


ВВ>Еще раз — речь не идет о том, лучше или хуже макросы. Речь об удобстве итогового продукта. Енд-юзеру по фиг — макросы там или внешний ДСЛ. Важен результат.


Еще раз — это демагогия и уход от темы. Лучше средства — лучше и фрэймворк. Лучше фрэймворк — лучше и конечный продукт. Не уже ли это не очевидно?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 20.12.10 20:38
Оценка: +2
Здравствуйте, lomeo, Вы писали:

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


L>>>Грубо говоря: есть язык, недостаточно выразительный, скажем, C#. И вот мы добавляем к нему систему, позволяющую удобно писать к нему кучу компайлер-плагинов или там препроцессоров. Язык можно сделать жутко красивым и выразительным, расширяя его в нужную сторону таким способом. Это нормально?

H>>Да.

L>А ты видишь недостатки такого подхода? Если да — какие?


Стейтменты. Они мешают генерировать код — язык должен состоять из выражений. А еще язык должен быть полным метаязыком для самого себя — т.е. обладать механизмами цитирования (с контролем идентификаторов, "гигеной" имен) а также инструментами анализа и синтеза этих цитат. Без этого получается очень уныло, как CodeDOM и совершенно неудобно пользоваться.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 22:22
Оценка: -1 :)
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Я имел в виду полноценный рефакторинг. А так — да, переименование есть. Хорошо, конечно. Дело осталось за "малым" — реализовать полноценный рефакторинг а ля Решарпер. Вот только это проект на тысячи человекочасов. А пока, извините, но я не могу принять рефакторинг за плюс Немерла, ибо он в зачаточной стадии.


Ну, так сам ответь. Это принципиальная проблема (рефакторинг сделать нельзя или очень сложно) или все же чисто техническая (нужно время/ресурсы)?

А вот для динамики рефакторин сделать нельзя принципиально.

ВВ>"Доступ к компилятору" — это не только АПИ, но еще и возможность влиять на развитие языка. Были бы вы просто группой поддержки, отвечающей за интеграцию, когда поляки бы занимались развитием языка без всяких оглядок на студию, сдается мне, накушались бы вы по полной.


Ты просто не представляешь каков в компиляторе объем кода отвечающего за нужды интеграции. Это где-то 2-3 события и один вызов функции.

ВВ> Это ты вот не видишь будущее языка без ИДЕ, поэтому и фичи рассматриваются в контексте интеграции — без этого жизнь бы медом не казалось.


Да не вижу. Так же как не вижу жизнь в городе без транспорта. Но фичи я не затачиваю, а согласую.

ВВ>А представь вот как весело энтузиастам какого-нибудь OCaml ИДЕ для него делать.


Ну, потому многие и плюются с F#-а когда узнают, что файлы нужно распологать в определенном порядке, да еще и каталогов в проекте делать нельзя.

ВВ>Вывод типов как раз серьезно усложняет задачу создания полноценной ИДЕ.


Поверь тому кто этим занимается. Это не так.

ВВ>Фактически приходится выводить типы на уровне интеграции.


Не говори ерунды.

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


Что же им мешает?

ВВ>Кстати, у Немерле эти сервисы были или ты их сам сделал?


В немерле испльзуется сам компилятор. Точнее его наследник в котором переопределено несколько методов. А ты думал мы так круты, что выводим типы лучше компилятора?

ВВ>К тому же ты вырезал самый важный фрагмент из моего сообщения. Нет просто "динамики". Есть конкретные языки. Задача создания ИДЕ для них обладает неодинаковым, скажем так, уровнем сложности.


Да, согласен. Вот для Эрланга, говорят, IDE вообще ненужно, а рефакторинг сводится к замене по контексту (так как все идентификаторы уникальны).

ВВ> Создание ИДЕ для Питона — это задача сложнейшая.


И для Руби тоже. А это те самые ДСЛ-ные языки.

ВВ> А я привел в пример другой язык — Pure. Функциональный, без мутабельных переменных. Для него во многих случаях реально возможен вывод типов.


Если вывод возможен, то в этих местах он уже не динамический, а статический. И конечно же все что относится к статике для него не чуждно. А там где невозможен, то для него справедливо все что говорится о динамике (в том числе и жопа с IDE).

ВВ> *Естественно* вывод типов возможен не всегда.


Не очень естественно. Давай тогда назовем языки с выводом типов динамическими? Самому то не смешно?

ВВ>Ну так в этом и смысл динамики.


В чем? Чтобы периодически иметь проблемы?

ВВ>Так где в динамике невозможен вывод типов, в статике будет просто неработающий код.


Да, ладно. Может просто будут другие подходы? Ну, там компонентный, или полиморфизм какой-нить?

ВВ>Даже если этот код в принципе корректен — тайп-чекер его не пропустит.


Во как?

ВВ>Банальный пример того, что свернет мозги немерлевскому тайп-чекеру:


ВВ>
ВВ>using system;
ВВ>out x = puts x $$ out;
ВВ>out "One" "Two" "Three" "Four" "Five";
ВВ>


Еще бы понять бы что все это значит.

VD>>Ну, реализуй. У тебя вот есть Ела. Сделй для нее IDE. Погляди что выйдет. А то пока что это все не очень ответственный треп.


ВВ>Для начала надо бы язык закончить. И таки да, у меня не ДжаваСкрипт и не Питон, мне типы выводить гораздо проще.


Ну, дерзай. Года тебе хватит?

ВВ>>>Вот какой стимул у РОР-иста переходить на nrails? Разве что ради скорости. Ну так РОР медленный потому что он тупо медленный, а не потому что динамика. V8 вон быстрее раз в сорок.

VD>>Не он тупо медленный потому что тупо на медленном Руби написан и с применением тупо медленных подходов которые на Руби проще реализовать нежели быстрые.

ВВ>И с чем ты не согласен?


С твои утверждением. Он тупо медленный именно потому что реализован ну тупо медленном Руби, а не по каким-то другим причинам. Тоже самое решение но на Груви уже в несколько раз быстрее. А это тоже скрипт.

ВВ>Руби — медленный интерпретатор. Динамически-типизированный язык может быть и компилируемым. И разница в скорости будет весьма заметной.


Не весьма. Вся динамика (ради которой все и зативалось) будет такой же тупо медленной.

Более того медленность не единственный недостатко. Тупо интелисесна или тупо проверки ошибок ты тоже тупо не получишь.

ВВ>Я имел в виду, что асп-нет-чикам не надо доказывать, что статика лучше динамики.


Зато многим из них надо доказывать (казалось бы) прописные истины.

ВВ>Это другая аудитория совсем. Никто тут по динамике не сохнет по большей части. А nrails — это именно для них. В миграцию рубистов я что-то слабо верю.


Я тоже. Но вот объяснить им все куда проще будет. Это парадокс который занимает меня по хлеще чем языковые проблемы и споры статика вс. динамика. Тут я хоть понимаю предпосылки. А там...

ВВ>>>По-моему все просто.

ВВ>>>А священная война в стиле "статика + вывод типов + макросы" во всем круче динамики ни к чему не приведет.
VD>>А это утверждение ты только что сам придумал.

ВВ>Да нет, кто-то из ваших говорил нечто подобное. Возможно, что не ты.


Не надо на кого-то ссылаться. Есть автор темы. Есть тема.


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

VD>>Очередную чушь морозишь. Системы типов есть везде. Даже в ассемлере. А уж в динамически-типизированных языках и подавно.

ВВ>Я где-то сказал, что в динамике нет типов? Ты опять по диагонали читаешь?


Блин, супер! Кончай эти приемы. Ты утверждал, что у динамики нет "ограничения системы типов". Что чушь. Есть система типов, есть и ограничения.

VD>>Если ты утверждаешь, что система типов скажем дотнета или немерла утупает Рубийной, то потрудись это обосновать.


ВВ>Про Руби не знаю. Но вот намедни попробовал перевести такой вот код на вполне себе статически-типизированном OCaml на Немерле, и не смог:...

ВВ>Впрочем, может, знаний не хватило

Не исключено.

А зачем вообще такой фигней заниматься?

ВВ>Ага. Только вот тесты все равно нужны.


Только разные и в разном объеме.

ВВ>>>Слишком много переменных, известных только в рантайме, чтобы это что-то решало.

VD>>Что же тебя так тянет на откровенно высосанные из пальца утверждения?
VD>>Ну, что может быть известно только в рантайме при разработке того же веб-сервера?

ВВ>Какого еще веб-сервера?


Здрасте!

VD>>Ведь ответ очевиден — только данные! А это то как раз не являются проблемой.


ВВ>Угу, а программа отвечает за преобразование данных. А так как данные относятся к числу неизвестных, то и статика идет лесом.


Да ладно! Кончай гнать то! Данные конечно неизвестны, но для их обработки нужно знать во время компиляции только их типы. А вот это то как мы знаем. Иначе вообще никакой статически-типизированный код не был бы возможен.

ВВ>Специфика веба в том, что данные эти приходят черт знает откуда.


Не имеет значения.

ВВ>И часто вообще никакого контроля над ними нет.


Это проблемы тех кто не умеет их готовить.

ВВ>К тому же половина приложения — клиент — так или иначе голимая динамика.


Не имеет значения.

ВВ> Именно голимая, на голимом ДжаваСкрипте. Поэтому ценность того, что вы там где-то в каком-то месте повысите статический контроль в целом падает, ага.


Чушь. Мы во время компиляции знаем что хотим получить от клинета. Значит можем автоматически сгенерировать код проверки корректности данных и копирования их в статически-определенные структуры. Далее работаем как всегда.

ВВ>Угу. Получаешь данные из внешнего источника и осуществляешь их разбор. Все, это динамика.


Во как? А как же наш парсер статически скомпилирвоанный все это делает?

Кончай выдумывать новую терминологию. Динамика — это кода типы определятся в рантайме. Для веб-сервера — это почти никогда не нужно. А будет нужно, на то есть компонентный и полиморфизм.

ВВ>Вылетать будешь в рантайме.


Сообщения об ошибках выдавать, если данные не соответствую спекам.

ВВ>Читаешь в своем приложении конфиг? Ага, динамика.


Чтение данных не есть динамика. Структура конфига известна заранее.

Кстати, конфиги — это одно из того, что сделано у нас на макросах. В каждом новом проекте в файлик AssemblyInfo.n у нас добавляется мета-атрибут:
[assembly: Nemerle.Macro.Resource("Resources.resx")]

Если ты во время разработки создашь такой файл (через ГУИ студии, например), то макрос увидит, что файл появился или изменился и создаст статически типизированную обертку для него.

Вот тебе и динамика! И тема как раз об этом. То что в динамике делается за счет рантайм-оверхэда, в ООП за счет неприятных приседаний, в немерле делается за счет макросов. И мы работаем всегда со статически-типизированным окружением и без приседаний.
Добавляем в ГУИ строковый ресурс, идем в код и вуаля имеем там Resources.String1. Весь из себя статически-типизированный с комплит-вордом и шлюхами.

ВВ>Работаешь с хэш-таблицами? Динамика.


Тоже чушь. Тип ключа известен. Значения тоже. То что у списков элементы можно добавлять — это тоже динамика?

ВВ>Читаешь параметры УРЛ? Динамика. Работаешь с куками? Динамика. И так далее, и тому подобное.


Короче, ты выдумал себе новое значение терминов и теперь на этом основании делаешь какие-то доказательства. Но мне это ни разу не интересно.

VD>>Вот с этим можно согласиться. Лично если я буду иметь на руках два решения одинаковых по возможностям, то я предпочту статически-типизированное просто потому, что оно будет более быстрым, комфортным и надежным. А раз мы сошлись на том, что можно достичь возможностей динамике используя связку "статика + вывод типов + макросы", то остается только создать действительно хорошую реализацию.


ВВ>Два решения? А губа не треснет? Тут одно бы найти


Нет. Я люблю выбор.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 21.12.10 00:25
Оценка: +2
Здравствуйте, DarkGray, Вы писали:

DG>ошибки в иерархии классов ни к чему страшному не приводят.

DG>в худшем случае уменьшается время разработки.
Нет. Они приводят к полному переписыванию программы.

DG>ошибки в навороченном МП — приводят к полной неработоспособности программы и невозможности разработчика в этой проблеме разобраться.

Простите не поверю.
Ибо моя практика говорит что ничего подобного нет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.12.10 18:52
Оценка: :))
Здравствуйте, VladD2, Вы писали:

ВВ>>Но я чужие деньги не считаю, а они не разорятся. А сам я все же чаще пользуюсь ДСЛ-ями, чем пишу их.


VD>Так вот я тебе точно скажу, что в МС за это платят минимум сотни тысяч. А вот при наличии макросов аналогичное решение можно сделать за неделю силами одного программиста, т.е. это уже в худшем случае тысячи долларов.


VD>Итого мы имеем минимум на порядок более дешевое решение. Не кисло, да?


Нет, просто потому что для этого надо:
1)Обучить программиста Nemerle на уровне свободного владения макросами, учитывая что ни литературы, ни видео, ни labs нету, то на это навскидку уйдет 2 месяца, а возможно и больше
2)Потом придется долго поддерживать проект, ибо язык меняется и никто не гарантирует отсутствия breaking changes.
3)Еще придется написать интеграцию с 2010 студией или допилить то что выйдет на тот момент
4)Повторить часть затрат при подключении еще одного программиста
Продолжать?

в итоге "минимум на порядок более дешевое решение" получается если не аналогичным по стоимости, то дороже причем с инвестментом в непонятно что.

Если бы MS видел профит в nemerle, то уже давно подхватил его разработку. А так только взяли разработчиков этого Nemerle, ибо видимо от них профита больше.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 21:42
Оценка: -2
Здравствуйте, DarkGray, Вы писали:


VD>>Кстати, объясни общественности какое отношение суперкомпиляция имеет к метапрограммированию?


DG>если исходить из определений, то самое непосредственное.

DG>суперкомпиляция — это подвид метапрограммирования.

DG>

DG>Метапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы


DG>

DG>Суперкомпиляция — специальная техника оптимизации алгоритмов, основанная на знании конкретных входных данных алгоритма.


Больше вопросов нет. Еще один слив успешно засчитан! Так держать!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 22:16
Оценка: -1 :)
кстати, макросы (раскрытие и свертку), исходя из теории программирования можно рассматривать, как подвид суперкомпиляции программы.

при этом фиксированным доп. параметром суперкомпиляции — является исполнитель: с одной стороны — компилятор конкретного языка, с другой стороны — разработчик.
улучшаемые показатели — компактность, понятность.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.12.10 04:57
Оценка: +2
Здравствуйте, Кэр, Вы писали:

Кэр>Await/async покрываются пятой версией шарпа...

Это понятно. В теории (я не силён в немерле) макросы позволяют сделать await/async. В отличие от собственно тайп провайдеров.

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

Ну, пока что их хватило на выпуск ажно пяти версий шарпа, и, если верить блогу Липперта, у них ещё втрое больше лежит в бэклоге потому что не хватает ресурсов на реализацию.
>Иначе мы бы уже имели популярный язык для .Net, который решает твой вопрос, innit?
Хм. Чем-то эта фраза похожа на "если бы это было нужно, то это бы уже сделал microsoft"
Мы же всё-таки тренируем критическое мышление

Кэр>Любую фичу можно использовать как во благо, так и во вред. Мне вот такое свободное изменение синтаксиса дает такую картину перекрестного опыления различными библиотеками результирующего кода, что жить не хочется.

Ну, это старый аргумент. Я наблюдаю этот спор тут чуть ли не со времён R#. Ответы на него мне тоже известны.
Как оно окажется на практике — пока что непонятно. Пока что мы имеем не очень много макросных библиотек для немерле, так что трудно сказать, насколько твой страх оправдан.

Кэр>Я скажу сразу — нах такое не нужно. Пока не показано, как эта проблема будет решена — я категорически против подобных завихрений в моих проектах.

Пока нужно доказать наличие проблемы

Кэр>Прототипировать — сколько угодно. Nemerle на самом деле дальше прототипа и не ускакал.



S>>Основной бенефит даже не в том, чтобы не трогать компилятор — с точки зрения пользователя нет разницы, откуда взялся async.

S>>Бенефит в том, чтобы одна команда могла заниматься dynamic, а другая команда параллельно и независимо могла заниматься async. Это позволяет масштабировать скорость разработки языка.

Кэр>С точки зрения прототипирования — бенефит вполне ощутим и очень крут. С точки зрения разработки — цена за эти бенефиты несоозмерима.

Ну, пока что у нас нет никакой статистики для определения этой цены.

Впрочем, мы отклонились от темы. Вопрос же был не в том, лучше ли Nemerle чем C#. Вопрос был "зачем нужны макросы, когда есть type providers". Я своё мнение на эту тему высказал. Стоят ли эти бенефиты недостатков или нет — вопрос отдельный.

Всегда будут люди, которым важнее наличие у языка поддержки стабильной компании важнее, чем какие бы то ни было конкретные фичи.
Await/async, реализованный в Nemerle, для таких людей всегда будет хуже, чем await/async, реализованный в C#.
Аудитория Nemerle — всё же люди, которым наличие таких фич в языке важнее, чем одобрение авторитетов компайлеростроения.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 22.12.10 15:21
Оценка: +1 :)
Здравствуйте, DarkGray, Вы писали:

Z>>// вот тут проблема, макрос должен возвращать одно выражение,


DG>по опыту скажу, что вот это очень неприятное ограничение. очень ограничивает встраиваемость макросов.


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

Давай я напишу правдоподобно выглядящие аргументы, почему делегаты в сишарпе лишние, а ты попробуй опровергнуть:


Попробуй докажи мне, что делегаты, а тем более лямбды вообще нужны, если я никогда не использовал их вообще.
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 22.12.10 15:57
Оценка: +2
Здравствуйте, DarkGray, Вы писали:

DG>и еще раз повторю, что данная решаемая задача: переписывание кода из одного вида в другой — это и есть суперкомпиляция чисто исходя из определения суперкомпиляции.

Это компиляция.
Суперкомпиляция это выкидывание лишних вычислений без изменения семантики кода. Те просто очень крутая оптимизация.
Метпрограммирование это изменение семантики кода.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 16:12
Оценка: -1 :)
WH>Суперкомпиляция это выкидывание лишних вычислений без изменения семантики кода. Те просто очень крутая оптимизация.
WH>Метпрограммирование это изменение семантики кода.

вторая строчка из вики

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


и там же правильное определение

Суперкомпилятор принимает исходный код алгоритма плюс некоторые данные о входных параметрах и возвращает новый исходный код, который является лучше исходного алгоритма по каким-то показателям


если не нравится слово "суперкомпиляция", то пусть будут "смешанные вычисления" по Ершову.

WH>Метпрограммирование это изменение семантики кода.


изменение какой именно семантики: аксиоматической, операционной или может денотационной семантики?

в виде определения, пожалуйста.

какую из этих семантик меняет введение foreach, using, peg-грамматики в язык?
какую семантику меняет linq2sql?

почему ту же самую семантику не меняет суперкомпиляция?

доказательство, пожалуйста.
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 18:06
Оценка: :))
Z>Приводи инструменты и сценарии, где МП слажало.

не передергивай. я утверждаю лишь, что бесконтрольное применение МП — лажает. (как впрочем и всякое бесконтрольное применение мощного инструмента)

само по себе МП — конечно благо и необходимая в хозяйстве вещь.

Z>В твоем опыте хорошо виден очень низкий уровень "МП", ты уж извини за прямоту. У тебя даже гипотетическая кодогенерация выходит насквозь текстовая, тот кто работал с АСТ, пусть с теми же экспрешенами линкушными, так не мыслит.


в текстовых терминах проще формулировать утверждения.
если рассматривать МП не в текстовых терминов — то там слишком много незнакомых терминов надо вводить.

вон влад, например, до сих пор не выучил термин семантика, и чем одна семантика отличается от другой семантики.
что такое редукция, что такой язык и т.д.

Z>Кстати, про экспрешены, это уже метапрограммирование. Им бы еще квазицитирование и получилось бы жалкое подобие макросов немерла. А экспрешены я вижу уже в куче библиотек, с очень разнообразными сценариями использования, в том числе и для создания удобного синтаксиса. Так что МП применяют многие передовые проекты, только самые упертые твердят, МП не нужно, МП опасно.


но это понятное контролируемое применение МП, которое не вызывает таких побочных эффектов — как те же макросы.
Re[35]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 18:45
Оценка: -1 :)
H>А что доказать-то пытаешься?

что Влад не знает что такое МП

а если серьезно:
1) то, что макросы с МП и рядом не стояли
2) что интересное (и действительно мощное) МП начинается в районе суперкомпиляции и суперкомпозиции (суперпозиции одного алгоритма(программы, системы) над другим алгоритмом(программой, системой))
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 23.12.10 05:32
Оценка: +1 :)
Здравствуйте, Sinclair, Вы писали:

Кэр>>С учетом того, что type provider решают задачу типизации нетипизированных данных, то это прямо удивительно, что они не решают проблему await/async. Хм...

S>Я не пытаюсь кого-то удивить.
S>Напомню ещё раз — вот вопрос:
S>

S>Вполне возможно, что это решается через type providers о которых говорил Don Syme на PDC.
S>Это решение потенциально покрывает такой пласт проблем, что возникает большой вопрос — а зачем тогда нужны будут макросы.

S>Я отвечаю на этот вопрос. А не пытаюсь указать на какие-то недостатки в тайп провайдерах.

А ты давишь на то, что с помощью макросов надо дизайнить await/async.

В общем, я не знаю, сколько реально тратиться ресурсов на реализацию подобных концептов в компиляторе команды C#. Но я подозреваю, что на полировку концептов, анализ и дизайн синтаксиса с учетом обратной совместимости — уходит ресурсов поболе. Причем от самых крутых перцев до которых можно дотянуться. Тот же Эрик Мейер вполне себе ревьювит эти концепты и постоянно говорит с большими дядьками из команды C#, как все должно работать. Время тех людей, которые будут все это реализовывать в компиляторе — оно стоит резко поменьше.

Так что ожидать, что рядовой программист вдруг начнет дизайнить новые мега-языки и шарп останется далеко позади в клубах пыли — ну несколько наивно. Как-то по-другому идею продавать надо. Я этих новых языков задизайнеными рядовым Васей не вижу в других средах, где они могли бы появится. Точнее вижу. Тот же OCaml, тот же Хаскелл — но их присутствие массовым не назовешь никак.

Тот же Немерле несмотря на заверения, что ну теперь-то создать новый язык ну ваааааще просто — не принес новых концептов. Пока подбираются концепты из других языков и реализуются. Не видно пока, как Немерле бежит впереди шарпа. Где же power unleashed? Все эти фыркания, что мол type providers можно реализовать в Nemerle очень просто — они дорого не стоят. Для начала надо показать, кому Немерле нужен in the first place.

String format который делает захват локальных переменных — это прикольно. Но не более. Такими фишками новый язык не продать.

Кэр>>А языки теперь разрабатывает только Микрософт? Макросы и кастомный синтаксис далеко не Немерле придумал. Концепт давний и имеют большую историю быть непопулярным. Предлагаю в качестве упражнения по критическому мышлению подумать почему.

S>Ну, как сказать. Некоторые макросы (к примеру те, которые в препроцессоре C/C++) популярнее, скажем, чем linq и dynamic вместе взятые.

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

S>Обсуждение проблемы совместимости синтаксисов я поскипал.


Ну собственно все остальное мне обсуждать особо неинтересно. Я не верю в какую-либо массовую аудиторию для Немерле, которая будет создать языки для решения прикладных задач. И я считаю, что даже если вдруг здесь попрет массовость, то сразу же попрут названные мной проблемы. И тут хоть вы хором, хоть по очереди можете меня уверять, что мол никаких проблем никогда с этим не будет — для меня ваши заверения вообще не аргумент. Надо посмотреть на практику. И нет я не буду тем, кто эту практику вдруг начнет реализовывать. Тренируйтесь вон на кошках на романтиках.
Re[11]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 23.12.10 11:55
Оценка: -2
S>Вот тут линк должен очень-очень сильно помочь.

.net-ный linq очень плохо помогает при условных запросах.
когда конечный запрос собирается из кусочков на основе ввода пользователя (например, по каким полям фильтровать и сортировать)

зы
еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 23.12.10 19:20
Оценка: -1 :)
Здравствуйте, VladD2, Вы писали:

VD>Какая утрата для нашего комьюнитии!


Ну если вы отвалите подальше от меня — уже будет полегче
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 07:58
Оценка: -1 :)
Здравствуйте, gandjustas, Вы писали:

G>Напиши один раз десериализатор этого json в ET и пользуй.


G>За 1000 баксов я тебе такой напишу, нужен?


Кто же тебе даст 1000 за работу которую тот же Ziaw уже проделал
Автор: Ziaw
Дата: 10.12.10
?
Впрочем, спасибо! Это прикольная оценка того насколько ты дорого обходишься своей компании.
Вот смотри. Написать парсер JSON-а у Ziaw заняло около 3 часов (это без опыта использования парсера).
Чтобы написать преобразователь из кортежей в ЛИНК у меня ушло 20 минут.
Умножим это дело на 2 чтобы получить время с разными заморочками которые обычно встречаются на практике.
Итого мы получаем 8 рабочих часов. Твоя оценка этой работы 1000 долларов. Стало быть, если бы ты работал с нашей производительностью турда, то получал бы 20 000 долларов в месяц.
Уверен, что тебе столько не платят. Значит ты работаешь значительно медленнее. Если предположить, что ты получаешь около 80 000 рублей в месяц, то не трудно рассчитать, что на эту работу по твоим (скорее всего очень скромным) прикидкам ты оценил эту работу в неделю.

Вот тебе и ответ на вопрос зачем нужен немерле! Затем что люди его использующие в разы продуктивнее. И дело даже не в самом языке, а в том, что эти люди получают значительный опыт.

Вот такие пироги с котятами .

G>Еще за 1000 напишу сериализатор подмножества ET в такой json.


Ужас!

G>ЗЫ. Вообще удивляюсь как люди не любят трогать пространство имен System.Linq.Expression можно очень простыми средствами динамическую генерацию кода делать.


Удивительно другое... Вы не знаете толком даже те средства которые используете на практике (C#), но умудряетесь с пеной у рта очернять те технологии которые вы изучили намного более посредственно. Это не только удивляет, но и удручает .

ЗЫ

Ребята, заканчивайте нести тут околесицу. Лучше потратьте время на изучение того с чем боретесь. Я вам гарантирую, что ваш скил программиста от этого не только не пострадает, но и резко повысится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 25.12.10 05:41
Оценка: +1 -1
Здравствуйте, DarkGray, Вы писали:

DG>

DG>00:00:00.0507296
DG>00:00:00.0030784
DG>00:00:00.0234894
DG>00:00:00.0029796
DG>00:00:00.0293127
DG>00:00:00.0026732


Вот это совсем другое дело.

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


Четко видно, что linq (а может быть и RDBMS тоже) тратит время на компиляцию запроса. В первом вызове, вероятно, дополнительное время отжирается на загрузку метаданных.

Никаких проблем с 20 запросами в секунду нет, хотя ты писал
Автор: DarkGray
Дата: 23.12.10
:

.net-ный linq очень плохо помогает при условных запросах.
когда конечный запрос собирается из кусочков на основе ввода пользователя (например, по каким полям фильтровать и сортировать)

зы
еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.


Пора признать, что ляп имел место быть. Оба утверждения на проверку оказались дезой.
Re[7]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 21.12.10 06:12
Оценка: 50 (1)
Здравствуйте, VladD2, Вы писали:

FR>>Традиционно для окамла


VD>А можно не уходить от ответа? Мне правда интересно.


Для всего языка есть грубо полтора IDE из них одно полноценное OcaIDE в нем внутри используются Camlp4 и даже
вроде есть возможность подкрутить анализатор под свое расширение, но я не ковырял.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 22.12.10 05:40
Оценка: 49 (1)
Здравствуйте, Кэр, Вы писали:

Кэр>Это как бы не нуждается в напоминании. Я только утверждаю, что идей действительно достойных нового языка не так уж много. И людей способных достойно эти идеи воплотить тоже. Иначе мы бы уже имели популярный язык для .Net, который решает твой вопрос, innit? Любую фичу можно использовать как во благо, так и во вред. Мне вот такое свободное изменение синтаксиса дает такую картину перекрестного опыления различными библиотеками результирующего кода, что жить не хочется. Представь, что ты хочешь заюзать либу для XML разработанной третьей стороной. А она заодно тебе привозит переопределение $, % и неровно дышит к наличию < > в коде. Что наступает на уши либе по обработке HTML, которая разработана yet another third party. И вдобавок это все конфликтует с кодом, который местный сениор отчаянно колбасил еще в самом начале проекта, изголяясь во все стороны и под разными углами. И сидишь ты и чешешь репу, как бы разодрать все эти либы в разные стороны, чтобы синтаксис наконец-то стал однозначным. И при чтении разных файлов тебе приходится вспоминать, а что означает вот этот keyword и вот этот символ в этом контексте.


Вменяемый разработчик не станет делать "переопределение $, % и неровно дышит к наличию < > в коде", как сейчас не делают екстеншены с сигнатурой IEnumerable<T> First<T>(Func<T,bool> predicate). В первом случае это будет вести к конфликтам с семантикой кода, во втором со стандартной библиотекой.

ДСЛ обычно прячется в какой-то блок кода, если внутри этого блока используются выражения на базовом языке, то они чаще всего интерпретируются as is.

Давай на примере джейсона:
    def test = json({ 
      a : arr; 
      b : obj; 
      c : null;
      d : true;
      e : { a : 1; "la la": null};
      "f" : [true];
      j : (43 + 55);
    });


В теории он переопределяет значение оператора уточнения типа ":", на практике это никаких проблем в понимании кода не вызывает (по крайней мере у тех, кто знает что такое джейсон). Он не переопределяет ":" глобально, просто при разборе кода внутри себя интерпретирует его по своему.

При этом уточнение типа в выражениях будет работать как обычно, ничего для этого в макросе специально делать не надо.
    def strObj = "test";
    def test = json({ 
      j : (strObj : string);
    });


Надеюсь я хоть немного развеял опасения, если это конечно были опасения, а поиск причин не любить немерле.
Re[14]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 17:13
Оценка: 24 (1)
Здравствуйте, Кэр, Вы писали:

Кэр>Ну когда появятся type providers — мы и посмотрим, кому они нужны и кому нужны макры, не так ли?


Не так, Ли.

Кэр>Когда у вас пройдет шоколадно-конфетный период с макрами — вы увидите, что это всего лишь тул. Ничего более. И я с удовольствием заюзаю готовый проверенный тул, чем буду возиться с поделками второклассников в виде макров. Тем более, когда для работы с ними нормальной среды нет (сравнимой по качеству со студия+решарпер).


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

Не находишь, что получается глупейшее сравнение студии со студией?

Кэр>Ну а вас спросили, где так нужны ваши макры, если вы почти на них жениться готовы. И я этот вопрос поддерживаю.


Нигде если Вы программируете на Блабе (с) Пол Грехем.

Ты лучше другое спроси. Кто такоей Ziaw и почему он вдруг стал говорить о макросах. Это очень интересный вопрос. Дело в том, что совсем недавно он был в твоем же лагере и в споре со мной выдвигал примерно такие же доводы, что и ты. Только в отличии от тебя он не поленился и попробовал то что обсуждал. И — о чудо — вопросы снялись сами собой.

Кэр>Никто тут не проектирует язык, ибо это почти всегда очень и очень непросто по сравнению с оригинальной задачей.


Заведомо неверное утверждение. Такие есть люди которые проектируют язык (а то и множество языков). Всегда можно спроектировать простой предметно-ориентированный язык и уже на нем выразить свою задачу. Это конечно не просто, так как требует написания компилятора или интерпретатора этого языка. Но в результате решение задачи становится настолько проще, что затраты на ДСЛ могут оказаться незначительными на фоне тех трудозатрат которые пришлось бы потратить на решение задачи в лоб.

Кэр>Это сложно задизайнить, это сложно отладить, это сложно поддерживать.


Все зависит от размера языка, мощности применяемых для этого "инструментов" и опыта разработчика. Скажем XML-литералы я написал за несколько дней. Ziaw недавно за несколько часов написал парсер для JSON. Так что твои рассуждения расходятся с реалиями окружающего тебя мира.

Кэр>Поэтому аргументы небольшой толпы немерлистов, которые тут так отчаянно голосят "зачем встраивать это в язык, когда это можно сделать на макрах" — это крики в пустоту.


Совсем не давно не было даже небольшой толпы. Сейчас уже есть небольшая толпа (по твоим же оценкам). Она же не из воздуха взялась? Это все люди которые услышали эти крики и подумали — "Хм может они все же не врут? Надо попробовать...". А те кто в серьезе попробовали эту траву (и при этом действительно доросли до столь мощного инструмента) из скептика очень быстро превращаются в сторонников. Стоит только написать один полезный макрос (по сложнее), как скепсис выветривается.
Так что "кричим" мы не в пустоту. Просто у тех с кем мы часто спорим есть железный аргумент — "сам я Пастернака не читал, но как и весь Советский народ осуждаю его...". Но среди серых масс все же есть ряд людей способных думать и оценивать самостоятельно. Из них и прирастает эта "толпа".

Кэр>Никто не будет в здравом уме дизайнить язык для своего текущего проекта и текущих задач.


Уже "дизайнят". Ты отстал от жизи. Просто есть огромные толпы посредственных программистов не способных вообще ни на что кроме тупого говнокодерства. Но есть и другие люди. Есть те кто использует Немерл, Лисп, Хасель, Эрланг, Руби, Питон... В этих коммюнике создание языков для решения задачи явление вполне обойденные. Так же есть люди которые используют внешние генераторы кода и другие не очень продуктивные подход, но все же более позволяющие решать задачи путем ДСЛ-естроения.

Кэр>Поэтому мега-фичи по возможностям дизайна языка интересны только тем, кто пишет компилятор Немерле. Почему этого до сих пор не может понять три-четыре человека, которые не выглядят дураками в остальных аспектах — мне неясно.


На самом деле тем кто пишет компилятор немерла как раз возможности дизайна языка не так интересны. Ядро немерла уже давно стабилизировалось и развитие идет в основном макросами. А это уже не в ходит в задачи тех кто пишет ядро компилятора. Так что и тут ты неправ.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Веб и динамика? Веб и статика+метапрограммирование.
От: Курилка Россия http://kirya.narod.ru/
Дата: 20.12.10 16:22
Оценка: 17 (1)
Здравствуйте, Mamut, Вы писали:


ВВ>>Поэтому прикручивать макросы, который типизировано вызывают хранимку или как там у вас, это наверное очень интересно, но не шибко-то и нужно. Ибо их есть у нас. Пусть и без макросов, а несколько иначе. Но с т.з. использования — ничем не хуже. А вот тонны ДжаваСкрипта как были, так и остаются. Причем проблема даже не в ДжаваСкрипте как таковом, а в том, что код приходится писать на двух языках, на ДжаваСкрипте и серверном и, главное, то, что зачастую задачи одного и того же плана, приходится реализовывать как на сервере, так и на клиенте.


ВВ>>И выстрелит на мой взгляд тот фреймворк, который полностью решит эту проблему — независимо от того, какая там типизация.


M>Ну, есть гугловский GWT, но не сказать, что он прямо-таки выстрелил


Из других вариантов — pyjamas и Lift (правда в последнем скорее обёртки к JS+AJAX+Comet)
Re[5]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 20.12.10 20:42
Оценка: 8 (1)
Здравствуйте, VladD2, Вы писали:


VD>А как, кстати, с поддержкой IDE при этом?


Традиционно для окамла

VD>Так же забавно сравнить размер кода.

VD>Моя реализация макры находится здесь.

Тут не понял это же вроде ссылка на корень немерлевского SVN.

Исходники https://github.com/samoht/htcaml тут, прямая ссылка на архив
http://download.github.com/samoht-htcaml-htcaml-0.1.0-10-geaa7ddb.zip

Размер небольшой, zip'ка всего 20 кб.

VD>Так же интересно, что нужно сделать чтобы задействовать окамловское расширение?


Очень просто, компилятор OCaml'а прямо поддерживает (опция -pp) подключение препроцессора.
Кроме того распространенная система сборки OCamlMakefile поддерживает подключение препроцессора
в виде комментария в исходниках:
(*pp camlp4o pa_comprehension.cmo pa_estring.cmo pa_strings.cmo *)
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 09:13
Оценка: 8 (1)
Здравствуйте, WolfHound, Вы писали:

WH>Покажи мне рефакторинг уровня немерла для динамически типизированного языка.

WH>JetBrains PyCharm "IDE" для питона в плане рефакторинга сливает немерлу.

"Уровня Немерла" — это какой? Чтобы переименование работало? Если в динамически-типизированном языке нет понятия "мутабельных переменных", то переименования в том объеме, в котором оно работает, скажем, в студии, сделать в принципе не так сложно.

ВВ>>"Доступ к компилятору" — это не только АПИ, но еще и возможность влиять на развитие языка. Были бы вы просто группой поддержки, отвечающей за интеграцию, когда поляки бы занимались развитием языка без всяких оглядок на студию, сдается мне, накушались бы вы по полной. Это ты вот не видишь будущее языка без ИДЕ, поэтому и фичи рассматриваются в контексте интеграции — без этого жизнь бы медом не казалось.

WH>Повторю еще раз: Мелкософт режет фичи для C# на основании "трудно поддержить в IDE".

И что? А причем тут "Мелкософт"? Или они у вас пример для подражания? Можешь мне объяснить следственную цепочку, по которой от обсуждения "Немерла и интеграции в студию" мы перешли к C# и его интеграции?

ВВ>>Вывод типов как раз серьезно усложняет задачу создания полноценной ИДЕ. Фактически приходится выводить типы на уровне интеграции. Возможность при этом задействовать сервисы компилятора есть далеко не у всех языков.

WH>Их нет только у тех то об этом не задумывался.

Большинство об этом и задумывались. Я вот не знаю — может, ты знаешь — для каких разработчиков более или менее известного языка интеграция со средой разработки была бы настолько приоритетной? Интеграцией обычно занимаются другие люди.

WH>Немерле не поддерживает рекурсивные типы. И что?

WH>Думаешь большая проблема их поддержать?

Я думаю, да. Если проблема не большая, то что ж они не поддерживаются? Я без них не смог сделать на Немерле банальный итератор в CPS-стиле.

ВВ>>Я повторю — да, в динамике интеллисенс будет работать не всегда. Но там, где он не будет работать, в статике код вообще не будет работать.

WH>И правильно. Нефиг код с ошибками пытаться выполнять.

Код на Pure (см. выше) — это не ошибочный код. Но он в Немерле не работает.

ВВ>>Для начала надо бы язык закончить. И таки да, у меня не ДжаваСкрипт и не Питон, мне типы выводить гораздо проще.

WH>А из-за чего тебе типы выводить проще?
WH>Может из-за того что у тебя метапрограммирования нет?

МП есть, как в любой динамике. Макросов нет.
Выводить проще потому что динамическая только типизация, люкап имен статический, скоп лексический, переменные иммутабельные, большинство структур данных иммутабельны.
На фоне ДжаваСкрипта, в котором есть даже поддержка динамического скопа и динамично просто все, что вообще может быть динамично, задача как бы сильно проще. А в ДжаваСкрипте еще prototype OOP через делегацию, возможность менять прототипы в рантайме — да это просто ад для тайп-чекера.
У меня система типов упрощает вывод. Скажем, если у меня есть функция вида:

let sum x y = x + y


То я могу вывести ее тип без deferral-a. Хотя оператор "+", конечно же, полиморфен. Просто тип — это по сути набор поддерживаемых операций. Соответственно, данная функция имеет тип Num->Num.
Такой вот код с т.з. семантики тоже полностью валиден и выведется:

let sum x y = (x + y) :: (y + x)


Типом функции будет Num->(Num,Cons). Конечно, в языке нет типов, который поддерживают (Num,Cons) — будем выдавать ошибку тайп чекера при вызове, все просто.

ВВ>>И с чем ты не согласен? Руби — медленный интерпретатор. Динамически-типизированный язык может быть и компилируемым. И разница в скорости будет весьма заметной.

WH>Компиляция динамике нихрена не помогает.
WH>Не смотря на всю свою круть V8 тормоз и жрет память тоннами на ровном месте.
WH>Ибо ему приходится на лету классы объектов менять и на каждый чих новый тип создавать.

Тормоз по сравнению с чем? Жрет память по сравнению с чем? По сравнению с Руби он просто летает. По сравнению с ПХП память не жрет вообще.
Я думаю, для меня в 80% случаев, если не больше, производительность V8 полностью устроила бы.

Причем — это ДжаваСкрипт. Очень сложный язык. Практически не поддающийся статическому анализу. *Слишком* динамический даже на мой вкус.
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 15:58
Оценка: 3 (1)
DG>>по опыту скажу, что вот это очень неприятное ограничение. очень ограничивает встраиваемость макросов.

Z> У тебя просто нет опыта использования нормального метапрограммирования.

Z> Ты наверняка встречал людей незнакомых с функциональным программированием. Им довольно сложно объяснить профит от первоклассных функций. Тут все то же самое.

имхо, ты что-то не понимаешь..

я использую МП, активно использую.
настолько активно — что у меня есть две больших работающие системы построенные с помощью того или иного применения МП.
есть множество иследовательских проектов по МП — по тому или иному его аспекту применения и работы.

я на совсем опыте видел, на сколько плохо заканчивается проект, если разработка макросов отдается в массы.
и опять же на совсем опыте видел, что все призывы — а давайте не будем писать плохих макросов, заканчивается ничем.

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

например:
1. смена синтаксиса внутри одного проекта, внутри одной команды людей — это очень плохо. (и соответственно я считаю злом введение sql-синтаксиса в c#)
2. макросы в общем виде без всяких ограничений (и введении единой метафоры) — что текстовые, что поверх аст-а — это тоже очень плохо.

основными индикаторами этого было:
1. готовность разработчика поддерживать не свой код,
2. кол-во вносимых ошибок
3. пропуск ошибок при просматривании кода.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 20.12.10 13:49
Оценка: 1 (1)
Здравствуйте, DarkGray, Вы писали:


DG>как минимум сейчас есть следующие ограничения:

DG>во-первых, возможности шаблонов останавливаются на уровне классов.
DG> на уровне полей/свойств/методов шаблоны уже не работают, не говоря уже про тела методов

Ну D'шные не останавливаются, шаблон там не привязан к классу или функции и может описывать
произвольный кусок кода http://www.digitalmars.com/d/2.0/template.html ну и плюс миксины
http://www.digitalmars.com/d/2.0/template-mixin.html

DG>во-вторых, шаблоны не предоставляют нормального способа для описания условий (операции над множествами, логические операции, операции над целыми числами и т.д.)


В том же D доступен полноценный compile-time на довольно широком подмножестве языка http://www.digitalmars.com/d/2.0/function.html#interpretation
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.12.10 09:06
Оценка: 1 (1)
Здравствуйте, Кэр, Вы писали:
Кэр>А ты давишь на то, что с помощью макросов надо дизайнить await/async.
Ага.

Кэр>Тот же Немерле несмотря на заверения, что ну теперь-то создать новый язык ну ваааааще просто — не принес новых концептов. Пока подбираются концепты из других языков и реализуются. Не видно пока, как Немерле бежит впереди шарпа. Где же power unleashed? Все эти фыркания, что мол type providers можно реализовать в Nemerle очень просто — они дорого не стоят. Для начала надо показать, кому Немерле нужен in the first place.


Кэр>String format который делает захват локальных переменных — это прикольно. Но не более. Такими фишками новый язык не продать.

Это верно. "От него кровопролитие ждали, а он чижика съел".

Кэр>Спорно, но допустим. Как отсюда возьмется аудитория для Немерле? Ты пытаешься сказать, что препроцессорными директивами в плюсах какая-то видимая часть аудитории пытается создать новый язык?

Конечно! Наивно этого не видеть. Посмотри на тот же ATL или MFC — там макрос на макросе и макросом погоняет. Там, где в Delphi наш общий знакомый просто встроил message maps в язык, расширив синтаксис, MFC реализовал "мини-расширение" синтаксиса плюсов при помощи макросов.

И так устроены практически все известные мне плюсовые фреймворки. Как только появляется нужда в DSL — хреначатся макросы BEGIN_SOMETHING_MAP(), END_SOMETHNG_MAP(), DEFINE_SOMETHING_HANDLER() — и поехали, вперёд и с пестней.

Кэр>Ну собственно все остальное мне обсуждать особо неинтересно. Я не верю в какую-либо массовую аудиторию для Немерле, которая будет создать языки для решения прикладных задач. И я считаю, что даже если вдруг здесь попрет массовость, то сразу же попрут названные мной проблемы. И тут хоть вы хором, хоть по очереди можете меня уверять, что мол никаких проблем никогда с этим не будет — для меня ваши заверения вообще не аргумент. Надо посмотреть на практику. И нет я не буду тем, кто эту практику вдруг начнет реализовывать. Тренируйтесь вон на кошках на романтиках.

Да не переживай ты так. Вроде бы никто не заставляет тебя романтикой-то заниматься %)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 28.12.10 13:42
Оценка: 1 (1)
Здравствуйте, DarkGray, Вы писали:

G>>Что значит "рубануть"? DbConnection.Close не пойдет?


DG>afaik, это закрывает виртуальное соединение.

DG>реальное соединение после этого уходит в пул-соединений, и ждет следующего DbConnection.Open

Это верно для SqlConnection, для него можно звать SqlConnection.ClearPool
Re[3]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 17.12.10 20:34
Оценка: -1
Здравствуйте, Ziaw, Вы писали:

Z>Странно, чем же они разбирают это?

Z>
Z> ....
Z>

Z>Неужели в рантайме? Или препроцессор? Если так — то это каменный век.

В Scala был API для расширения компилятора. Возможно какой-то плагин прикрутили...
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 17.12.10 21:37
Оценка: +1
Здравствуйте, Курилка, Вы писали:

К>>>Ты смотрел Lift? (сам его недавно изучать начал)

Z>>Гляну, интересно, с первого взгляда напоминает ur.
К>а мне не так чтоб, тут реальный рабочий фреймворк, проверенный не единожды с реальными практическими подходами

Я про принципы. Мы же не выбираем тут фреймворк для продакшена.

К>XML — это часть языка, по словам авторов довольно-таки оптимизированная, плюс валидность (если не делать "обходных манёвров") проверяется компилятором (насколько я понимаю) и, к тому же, это решает проблему ескейпа "опасных" строк.


Ясно. Не имея поддержки в языке такая задача решается макросами.

К>По идее (ещё толком не пощупал) в лифте очень тесная интеграция всего js в код, речь не только за JSON, к примеру, вроде как для формы элементарно поменять обработку её через POST на AJAX, плюс для интегрированного в решение JS включаются стат. проверки.


Идеально было бы трансформировать код на основном языке в javascript, задача решаемая. Жаль только, что js имеет слишком специфичный дизайн, паттерны которого повторить на других языках проблематично.

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


К сожалению я не увидел главного, чем эта штука заменяет динамику? Насквозь статичный фреймворк.

Например вот этот запрос в couch
val viewReturn = Person.queryView("design_name", "people_by_age", _.key(JString(JInt(30))))

в динамике выглядел бы примерно так:
viewReturn = Person.design_name.people_by_age(30)


Согласись, разный по читабельности код? Такого кода можно добиться и в статике макросами, если зафиксировать вьюхи на момент компиляции. Ну и конструирование джейсона
val design: JObject = 
  ("language" -> "javascript") ~
  ("views" -> (("people_by_age" ->  ("map" -> "function(doc) { if (doc.type == 'Person') { emit(doc.age, doc); } }")) ~
               ("oldest"        -> (("map" -> "function(doc) { if (doc.type == 'Person') { emit(doc.name, doc.age); } }") ~
                                    ("reduce" -> "function(keys, values) { return Math.max.apply(null, values); }")))))

там выглядит убого по сравнению аналогичным DSL (это наброски для прослойки к coachdb).
def design = json({
  language: "javascript";
  views: {
     people_by_age: {
         map: "function(doc) { if (doc.type == 'Person') { emit(doc.age, doc); } }"
     };
     oldest: {
         map: "function(doc) { if (doc.type == 'Person') { emit(doc.name, doc.age); } }";
         reduce: "function(keys, values) { return Math.max.apply(null, values); }"
     }
  }
})


В том же руби можно достичь подобного синтаксиса, но валидность его будет проверена только в рантайме.
Re[4]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 18.12.10 06:53
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Боюсь, что большая часть народа тебя просто не поймет, так как мыслит другими категориями (в которых нет МП).


Жаль, если так.

VD>То что ты называешь динамикой на самом деле называется иначе. Это скорее автоматизация кодирования (что ли). Более точного термина пока что подобрать не могу. Речь идет о возможности создания и интеграции в язык ДСЛ-ей упрощающих решение задач и "склеивающие" отдельные решения в единое (общее) решение.


Ты прав, когда я говорю про динамику, я имею ввиду ее особенности, позволяющие быстро делать прототипы. Основной принцип тут — декларативное описание намерений. Для этого как раз нужны DSLи, которые в том же руби генерят на method_missing либо подсовывают миксинами.
Re[5]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 19.12.10 18:00
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

Z>Например вот этот запрос в couch

Z>
Z>val viewReturn = Person.queryView("design_name", "people_by_age", _.key(JString(JInt(30))))
Z>

Z>в динамике выглядел бы примерно так:
Z>
Z>viewReturn = Person.design_name.people_by_age(30)
Z>


Z>Согласись, разный по читабельности код?


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

А вот этот кошмар не надо расписывать каждый раз "_.key(JString(JInt(30)))". И спрятать это за макросом или за вызовом функции — не так уж важно. Хотя нет. Нахождение всех вхождения макроса и его автоматический рефакторинг Решарпер не предоставит. А вот с функцией — без проблем.

Z>Такого кода можно добиться и в статике макросами, если зафиксировать вьюхи на момент компиляции.


Можно. Только чем больше я смотрю на эту возню с мета-программированием тем больше мне кажется, что оно хорошо только для прототипирования новых решений. А реализацию самих решений лучше отдать матерым профи, но даже близко не давать в руки обычным программистам. Иначе опять получится, что исходная задача проще решается в лоб на С, чем в обход через создание специальных DSL на чем-то другом. Ключевые библиотеки в проекте не дают писать кому угодно. С DSL ситуация еще хуже — хотя бы потому что технология новая и не обложена поддержкой мега-тулов вроде Решарпера.
Re[7]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.12.10 19:24
Оценка: -1
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Кэр, Вы писали:


Кэр>>А вот этот кошмар не надо расписывать каждый раз "_.key(JString(JInt(30)))". И спрятать это за макросом или за вызовом функции — не так уж важно. Хотя нет. Нахождение всех вхождения макроса и его автоматический рефакторинг Решарпер не предоставит. А вот с функцией — без проблем.


H>Естественно, зачем писать макрос, если можно использовать функцией. Макрос нужно писать там, где функцией не обойтись.


Где можно и нельзя обойтись функцией всецело зависит от системы типов.
Re[9]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.12.10 19:53
Оценка: +1
Здравствуйте, hardcase, Вы писали:

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


G>>Где можно и нельзя обойтись функцией всецело зависит от системы типов.


H>Но есть задачи принципиально не решаемые просто функцией в рамках статической типизации.


Например?
Re[11]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 19.12.10 21:08
Оценка: :)
Z>Типизированный вызов хранимки из БД, решается генераторами кода либо макросами.

чем кстати макросы отличаются от функций?

и почему макрос не может быть заменен на статически типизированную функцию?
Re[11]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 19.12.10 21:47
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

G>>Например?


Z>Типизированный вызов хранимки из БД, решается генераторами кода либо макросами.


Вполне возможно, что это решается через type providers о которых говорил Don Syme на PDC.

Это решение потенциально покрывает такой пласт проблем, что возникает большой вопрос — а зачем тогда нужны будут макросы.
Re[12]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 19.12.10 22:45
Оценка: +1
Здравствуйте, Кэр, Вы писали:

Кэр>Вполне возможно, что это решается через type providers о которых говорил Don Syme на PDC.

Кэр>Это решение потенциально покрывает такой пласт проблем, что возникает большой вопрос — а зачем тогда нужны будут макросы.
Ну например для того чтобы сделать type providers, LINQ, PEG parser и очень многое другое.
А вот зачем хардкодить в язык то что может быть сделано библиотектой действительно не ясно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 19.12.10 23:30
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>А вообще я уже устал офтопить, тема не является рекламой макросов. Мне не интересно обращать кого-то в немерле. Меня интересуют плюсы динамики которые недостижимы в статике с поддержкой метапрограммирования.

А их нет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 20.12.10 04:01
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

Z>>>Типизированный вызов хранимки из БД, решается генераторами кода либо макросами.


Кэр>>Вполне возможно, что это решается через type providers о которых говорил Don Syme на PDC.


Кэр>>Это решение потенциально покрывает такой пласт проблем, что возникает большой вопрос — а зачем тогда нужны будут макросы.


Z>Я бы переформулировал вопрос. Зачем жалкое подобие макросов type providers тому у кого есть полноценные макросы.


Ну когда появятся type providers — мы и посмотрим, кому они нужны и кому нужны макры, не так ли?

Когда у вас пройдет шоколадно-конфетный период с макрами — вы увидите, что это всего лишь тул. Ничего более. И я с удовольствием заюзаю готовый проверенный тул, чем буду возиться с поделками второклассников в виде макров. Тем более, когда для работы с ними нормальной среды нет (сравнимой по качеству со студия+решарпер).

Z>Эти провайдеры для конкретной задачи реализуются одним человеком максимум за пару недель без привлечения Don Syme и хайпа на PDC.


А ну ну. Слышал я эти кухонные оценки "за пару недель". И не раз.

Z>А вообще я уже устал офтопить, тема не является рекламой макросов. Мне не интересно обращать кого-то в немерле. Меня интересуют плюсы динамики которые недостижимы в статике с поддержкой метапрограммирования.


Ну а вас спросили, где так нужны ваши макры, если вы почти на них жениться готовы. И я этот вопрос поддерживаю.

Никто тут не проектирует язык, ибо это почти всегда очень и очень непросто по сравнению с оригинальной задачей. Это сложно задизайнить, это сложно отладить, это сложно поддерживать. Поэтому аргументы небольшой толпы немерлистов, которые тут так отчаянно голосят "зачем встраивать это в язык, когда это можно сделать на макрах" — это крики в пустоту. Никто не будет в здравом уме дизайнить язык для своего текущего проекта и текущих задач. Поэтому мега-фичи по возможностям дизайна языка интересны только тем, кто пишет компилятор Немерле. Почему этого до сих пор не может понять три-четыре человека, которые не выглядят дураками в остальных аспектах — мне неясно.
Re[15]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 20.12.10 05:39
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

Кэр>>Когда у вас пройдет шоколадно-конфетный период с макрами — вы увидите, что это всего лишь тул. Ничего более. И я с удовольствием заюзаю готовый проверенный тул, чем буду возиться с поделками второклассников в виде макров. Тем более, когда для работы с ними нормальной среды нет (сравнимой по качеству со студия+решарпер).


Z>Адекватные слова про тул почему-то перемешаны с насмешками над людьми сделавшими тул и людьми его использующими. А что, правда есть готовый проверенный тул решающий те же задачи? Да еще со средой сравнимой по качеству со студией + решарпер?


Вы сами задали вопрос противопоставив type providers макросам. Я вам высказал свою точку зрения на тот момент, когда type providers появятся, и если они будут справлятся с этими задачами.

Кэр>>А ну ну. Слышал я эти кухонные оценки "за пару недель". И не раз.


Кэр>>Ну а вас спросили, где так нужны ваши макры, если вы почти на них жениться готовы. И я этот вопрос поддерживаю.


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


Z>Язык проектировать так же просто, как проектировать иерархию объектов, даже проще, ошибки нагляднее.


Ну конечно проще. Если не думать о конфликтах синтаксиса и ключевых слов/символов. Особенно о неявных, когда все компилируется, а понять что не работает можно только взвалив тонну генеренного кода на плечи. И если не думать о обратной совместимости со старым синтаксисом, который вообще не подразумевал особого расширения, а тут ВНЕЗАПНО пришлось расширить. И вместо того, чтобы напрямую решать прикладную задачу нужно тратить время на выдумывания синтаксических завихрений, чтобы и от нового синтаксиса глаз не вываливался и старый компилировался.

В общем, есть много объективных причин (еще со времен Лиспа), почему кастомный синтаксис в прикладных задачах используется очень редко. Его удел — библиотеки, которые вещь в себе. И никакой другой задачи, кроме предоставления своего функционала не решают. Это вполне может быть веб-фреймворк. Но это очень вряд ли прикладная задача.

Z>Ваши аргументы напомнили мне фанатов процедурного программирования с жаром доказывающих ненужность С++ тем, что классы не нужны, когда есть структуры. Кричащими о сложности автокомплишена в современнных IDE и о том, что С++ никем нормально не поддерживается. О том, что наследование и виртуальные вызовы на С используются от силы в 1% проектов и требуют огромных усилий по поддержке. О том, что код с этими вызовами на С ни черта не понимают люди только что пришедшие в проект и потому такой код бяка.


Правильно. Доказательства по аналогии — это наш метод. Всегда создает такое приятное душевное равновесие. Окружающих убедить удается не всегда — но себя всегда пожалуйста.

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


Выдыхайте, то что я лапшу на ушах стараюсь не держать, не означает, что я считаю себя эталоном.

Но извините, доказательства по аналогии у меня своего не нашлось. Так что все умное досталось вам, куда уж мне бежать за вами.
Re[14]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 05:46
Оценка: +1
Здравствуйте, DarkGray, Вы писали:

DG>динамик позволяет запустить код, который не полностью валидный (с точки зрения типизации)

DG>это полезно при внесении изменений (рефакторинге и т.д.)

Хм. Интересно. Вобщем да, вероятно это один тех из случаев где динамика рулит. Там можно править одну страничку, не парясь некоторое время тем, что изменения ломают другие. Впрочем если будет реализован нормальный REPL, в девелоп режиме запросе будет комилироваться не больше кода чем нужно для его выполнения, а тут уже валидный код обязателен везде.
Re[15]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 10:22
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

Можно потроллить?

Z>Теперь о задачах, например, во время компиляции можно найти все чистые методы и параллелить их вычисления или прозрачно кешировать результаты.


Нахождение чистых методов — pure type systems
Параллелить — автоматическое распараллеливание
Кэширование — ленивость, referential transparency, common subexpression elimination etc.

Z>Code contracts.


Например, зависимые типы. Хотя обычно хватает и GADT или type families.

Z>Пресловутый DSL в прекомпайл тайме такой геморой, что его никто не использует. Максимум — делают что-то типа fluent api и наслаждаются.


Ну, неправда же. Или не понимаю о чём речь.

Z>AOP без макросов делается либо с огромным оверхедом либо через bytecode instrumentation, что собственно является очень неудобным аналогом макросов.


Ой, тут как раз много чего можно сказать. Например, монад трансформеры. И вообще AOP не от хорошей жизни — либо язык недостаточно выразителен для описания advise-ов, либо программа так построена, что только AOP позволит впихнуть нвпихуемое. Всё таки separation of concerns должен по возможности достигаться с помощью правильного дизайна и удобного языка, а не с помощью внешних средств типа AOP.

Z>IoC на макрах тоже будет сильно юзабельнее.


Чем? Нужен пример, чтобы сравнить с тем, что можно делать без макросов.

Z>А вообще мы ушли от темы Мне вообще не интересно доказывать незаменимость макросов для статики. Незаменимых инструментов мало, есть те которые заменить дорого.


Недорого. Для чего я вижу полезно использование макросов — так это всяческая кодогенерация. Это явно говорит о том, что язык недостаточно выразителен в этой области. Т.к. из меньшего (несколько строк макроса) получаем большее (кучу кода на этом языке). Однако для этой цели можно пользоваться и другими средствами — внешние кодогенераторы, препроцессоры и т.д.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.10 11:32
Оценка: :)
H>А сколько макросов Вы написали и отладили?

для начала ответьте где вам логику преподавали?

> Как вы думаете, сколько усилий было потрачено на стыковку linq и ToExpression с ним? — Нисколько. Все заработало само.


и где вас научили что результаты одиночного факта можно использовать для доказательства правильности всего класса утверждений?

ps
ты приводишь пример по стыковке не пересекающихся макросов.
а серьезные проблемы начинаются с макросами, которые проводят изменения в одних и тех же точках.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 11:47
Оценка: -1
Здравствуйте, hardcase, Вы писали:

H>Типы тоже кодогенераторами и препроцессорами выводить? А ведь многие макросы занимаются именно этим — выводят типы выражений, которые трансформируются.


Для кодогенерилки достаточно динамики, нафиг тут типы выводить?

По остальным пунктам, как я понимаю, замечаний нет?
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 13:14
Оценка: +1
Здравствуйте, Воронков Василий, Вы писали:

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


В вебе проявляются ее достоинства, краткость кода и минимальное количество движений для внесения изменений. А недостатки скрадываются, мы можем править любые баги очень быстро. Это не коробочная версия, в которой нашли багу после того, как она ушла к клиенту. И скорость в вебе не всегда критична, на десктопе лаги интерфейса дают негатив куда сильнее.

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

ВВ>Но сейчас все-таки не 90-е. Клиенты "хочут" аякса и веб-два-ноль. А это значит, что у нас будет куча ДжаваСкрипта. И что толку от того, что в одном маленьком месте мы добавили статики, а во всех остальных у нас как была, так и осталась динамика — причем динамика отборнейшейго, так сказать, "качества".


Это что за задача с маленьким сервером и огромным клиентом?

ВВ>Алгоритмические ошибки — это другое. А низкоуровневые тесты писать несложно. И таки моя практика показывает, что тесты для ДАЛа нужны, с помощью какой бы технологии он не создавался. Статика тестирует только соответствие клиентского кода сгенерированной модели. Но модель все равно разъезжается с данными. Вот разъезжается и все тут. Все равно на этапе разработки изменения делаются и там, и там. Тут в общем срабатывает старый добрый принцип — если что-то может поломаться, то это обязательно поломается.


Это потому, что у тебя есть код и там и там, естественно ты его можешь и там и там править. У меня код только там, разъезжаться в таком случае просто нечему.

ВВ>Поэтому если сравнивать статический ДАЛ — к примеру, на Linq2Sql — и динамический (ну собственно, рукописный код со всяческими reader.GetValue) — то я бы совсем не сказал, что первый вариант надежнее. К обоим надо прибивать юнит-тесты и гонять их чуть ли не на каждом комите.


Давай пример юнит теста и сценария в котором этот юнит тест нам будет полезен. Я не представляю о чем ты говоришь.
Re[15]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 20.12.10 13:16
Оценка: :)
Здравствуйте, VladD2, Вы писали:

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


VD>Да, черт побери, есть подвид задач которые решаются и тем и тем, но вот макросы не тождественны шаблонам и тем более дженерикам. С помощью макросов можно сделать все что можно сделать с помощью шаблонов и джененриков. Более того, то что хорошо делается шаблонами и дженериками не стоит делать марами. Но многое что можно сделать макрами сделать шаблонами и дженериками невозможно. В частности выделенное в цитате Ziaw сделать дженериками или шаблонами невозможно. Кроме того в них нельзя анализировать внешние источники данных.


Ну хорошие шаблоны очень близки по возможностям к макросам. Например D'шные вполне позволяют "анализировать компилируемый код" http://www.digitalmars.com/d/2.0/traits.html http://www.digitalmars.com/d/2.0/phobos/std_traits.html
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 13:34
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

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


Про меньшее количество движений — это совсем неочевидно. Как компилятор может контролировать то, что известно только в рантайме? Если, скажем, у меня задача читать ХМЛ, который приходит из внешнего источника — то это динамика. И если ты макросом сгенеришь красивый и как бы статически типизированный код для чтения этого ХМЛ-я — то это все равно будет динамика. Просто выглядящая как статика. И если вместо ХМЛ-я придет фигня, то все свалится в рантайме.

Речь, наверное, не про "движения", а про меньшее количество тестов. Но тут мне тоже непонятно, насколько конкретно этих тестов будет меньше и как это вообще повлияет на разработку. Зато, например, мне понятно, что с тем же РОРом у меня уже есть готовый и работающий РЕПЛ. А вас пока только в планах. И я понимаю, что РЕПЛ-то как раз весьма заметно повлияет на мою эффективность.

ВВ>>Но сейчас все-таки не 90-е. Клиенты "хочут" аякса и веб-два-ноль. А это значит, что у нас будет куча ДжаваСкрипта. И что толку от того, что в одном маленьком месте мы добавили статики, а во всех остальных у нас как была, так и осталась динамика — причем динамика отборнейшейго, так сказать, "качества".

Z>Это что за задача с маленьким сервером и огромным клиентом?

Это не задача, это один из вариантов решения.

Z>Это потому, что у тебя есть код и там и там, естественно ты его можешь и там и там править. У меня код только там, разъезжаться в таком случае просто нечему.


Только "там" — это где? На сервере? Как у тебя так получается? Как можно писать приложения с богатым клиентским слоем, вроде того Гмейла, и не формировать HTML на джаваскрипте?
Да дело даже не в этом, пусть ДжаваСкрипт HTML вообще никак не генерит. Он что, с ним и не работает? Контрол задизеблить надо — сабмит форму или ее часть на сервер?

ВВ>>Поэтому если сравнивать статический ДАЛ — к примеру, на Linq2Sql — и динамический (ну собственно, рукописный код со всяческими reader.GetValue) — то я бы совсем не сказал, что первый вариант надежнее. К обоим надо прибивать юнит-тесты и гонять их чуть ли не на каждом комите.

Z>Давай пример юнит теста и сценария в котором этот юнит тест нам будет полезен. Я не представляю о чем ты говоришь.

А что непонятно-то Простые изолированные тесты, которые в первую очередь проверяют консистентность модели. Ну или корректность работы процедур, если они имеются. Скажем, один тест проверяет все процедуры для работы с конкретной сущностью — вставил, прочитал, сверил результаты, удалил.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 20.12.10 13:35
Оценка: +1
Здравствуйте, DarkGray, Вы писали:


H>>Ну так нужны примеры Я не помню чтобы ктото пытался комбинировать несколько могучих макросов, которые выполняют немалую работу и генерируют/модифицируют много кода.


DG>т.е. тогда ты утверждаешь, что макросы можно применять только для решения маленьких локальных задачек?


Где это в моих словах? Я лишь сказал что комбинирование некомбинируемого однозначно провальная затея. А теперь примеры некомбинируемых макросов в студию. А также вменяемые юзкейзы их комбинации.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 15:35
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

ВВ>>Ну запостил тему в форум "Флейм" и еще удивляешься, что тебя разводят на флейм. В первый раз что ли здесь


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



Э... не говори гоп. С Воронковым обычно все разговоры кончаются флэймами. Он в этом плане спортсмен. Не столь важна тема, сколь хорошая компания .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 16:03
Оценка: -1
Здравствуйте, hardcase, Вы писали:

L>>По остальным пунктам, как я понимаю, замечаний нет?


H>Конечно есть, но уже сколько раз говорилось о них что лень повторять.


Да бесполезно повторять. Хаскель — это религия. Она даже на совершенно очевидные вещи будут смотреть и говорить что не видят разницы.

Вообще, все эти соры совершенно бесполезны именно по той причине, что это реализованные споры.
Освоить обсуждаемые технологии не так просто. На это нужно много времени и сил. А без их освоения получается не боле чем абстрактная философия. Сравнение теплого с мягким.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 16:13
Оценка: +1
Здравствуйте, VladD2, Вы писали:

ВВ>>Хотя бы потому что с точки зрения любого фреймворка важно не то, как это фреймворк *пишется*, а то, как он используется.

VD>А тебе действительно не важно то насколько легко фрэймворк пишется и насколько он гладко скрывает все сложности разработки прикладной задачи?

Здесь обсуждается не это. Хочешь в очередной раз свести все к своему любимому флейму "макросы вс. мир"? Это если у Вульфхаунда не получится превратить все в филиал срача "Динамика вс. Статика".
Не об этом речь. Тема другая. Удобство конечного решения.

И да, мне *как пользователю* неважно, насколько сильно страдал разработчик при разработке фреймворка.

VD>Тебе не кажется, что если фрэймвор делается на базе более подходящего решения, то и результат получается лучше?


Здесь я связи не вижу. Если я использую внешний ДСЛ, почему результат — итоговая библиотека — должна получиться хуже? Ежу понятно, что макросы удобнее рукописного генератора, не об этом речь, но как это влияет на результат
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 21:11
Оценка: :)
Здравствуйте, hardcase, Вы писали:

L>>А ты видишь недостатки такого подхода? Если да — какие?

H>Стейтменты. Они мешают генерировать код — язык должен состоять из выражений. А еще язык должен быть полным метаязыком для самого себя — т.е. обладать механизмами цитирования (с контролем идентификаторов, "гигеной" имен) а также инструментами анализа и синтеза этих цитат. Без этого получается очень уныло, как CodeDOM и совершенно неудобно пользоваться.

У нас есть язык, состоящий из выражений, есть цитирование, макросы гигиеничны — ты теперь видишь недостатки?
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.12.10 21:16
Оценка: -1
Здравствуйте, hardcase, Вы писали:

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


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


L>>>>Для кодогенерилки достаточно динамики, нафиг тут типы выводить?

H>>>foreach — макрос выводящий типы. Как его на кодогенераторах сделать?

L>>Знаешь, я как-то об этом уже писал, но поиском не нашёл. Если вкратце, то такие вещи имхо нужно делать средствами языка. Например, в Haskell это будет функция. А типы выведет компилятор.


H>Макросы — это и есть средство языка Мы на языке описываем его самое и получаем новый язык — чуть более удобный и богатый.


Вот только проблема в том что не нужно людям средство создание языка. Им нужно async\yield\do-нотация\query comprehension\type providers и прочие вещи, которые вы называете "хардкодом компилятора". Именно эти хардкоды компилятора делают язык популярным. А создание средств для того чтобы каждый мог поменять синтаксис языка, с непонятными последствиями для самого языка (см рассуждения Липперта на тему синтаксиса yield), занятие конечно полезное, но вряд ли пипл будет хавать.

ЗЫ. Макросы — не средства языка, а средства компилятора языка. А то и T4 тоже средства языка получаются.
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.12.10 21:21
Оценка: +1
Здравствуйте, Воронков Василий, Вы писали:

VD>>Читать ХМЛ или работать с БД можно из С.


ВВ>Да, поэтому в любом языке есть динамика.


Что-то тебя понесло. Под "динамикой" обычно понимают что тип выражения определяется в runtime.
Как это соотносится с твоим утверждением что парсер xml, который есть функция String -> Some XDocument, является динамикой?
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 20.12.10 21:47
Оценка: :)
Здравствуйте, gandjustas, Вы писали:


L>>>Знаешь, я как-то об этом уже писал, но поиском не нашёл. Если вкратце, то такие вещи имхо нужно делать средствами языка. Например, в Haskell это будет функция. А типы выведет компилятор.


H>>Макросы — это и есть средство языка Мы на языке описываем его самое и получаем новый язык — чуть более удобный и богатый.


G>Вот только проблема в том что не нужно людям средство создание языка. Им нужно async\yield\do-нотация\query comprehension\type providers и прочие вещи, которые вы называете "хардкодом компилятора". Именно эти хардкоды компилятора делают язык популярным.


Ну так перечисленное сделано. И не без применения макросов (tm).

G>ЗЫ. Макросы — не средства языка, а средства компилятора языка. А то и T4 тоже средства языка получаются.


Наверно мне ключевое слово macro привиделось...
/* иЗвиНите зА неРовнЫй поЧерК */
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 23:56
Оценка: :)
Здравствуйте, Кэр, Вы писали:

Z>>А что, можно проектировать иерархию классов не задумываясь об SRP, LSP и прочих P? Это такая простая задача не наделать конфликтов с этими не вполне формальными принципами? Что, там нет ситуаций, когда все компилируется, а для исправления ошибки нужен редизайн иерархии либо костыли в виде навешиваний нескольких параллельных иерархий визиторов?


Кэр>Эти проблемы имеют меньшую стоимость разрешения. Хотя бы потому что они гораздо лучше изучены. Но я так понимаю, я тут уперся в секту, поэтому я лучше отойду в сторону.


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

Z>>Все библиотеки вещь в себе и никакой другой задачи кроме предоставления своего функционала не решают, это раз.


Кэр>Нет. Большинство библиотек как раз-таки не изолированы должном образом от бизнес-задачи и проекта, в котором они написаны. Поэтому их как раз с трудом можно перенести в новый проект. Библиотеки из фреймворков — они как раз отличаются тем, что изначально затачиваются на многоразовое использование и допускают, что там будет бюджет на различные красивости, чтобы выделится на фоне других фреймворков.


Что сказать-то хотели? Обсудить ваше понимание отличий фреймворка от библиотеки, спасибо, не надо.

Z>>Кастомный синтаксис это всего лишь один из многочисленных способов применения метапрограммирования и он широко используется во всех языках с поддержкой метапрограммирования, это два.


Кэр>Вот против этого широкого использования кастомного синтаксиса я как раз и выступаю. Он приносит дополнительные сложности, а инструментов, что бороться с этими сложностями что-то не видно.


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

Z>>Это не доказательства по аналогии, это пример вполне здравых рассуждений доказывающих ненужность конкретной технологии. Хотел обратить внимание на то, что все эти утверждения были абсолютно верны, логичны и обоснованы. Тем не менее не так страшен черт, IDE сделали, грабли научились аккуратно обходить.


Кэр>Вы здесь приводите исторический пример, затем заменяете одну технологию другой по аналогии и утверждаете, что пример остается валидным. Таким образом можно доказывать необходимость изучения любой новой технологии, которая сейчас не имеет поддержку IDE, но если хорошо вложится — то она появится. Если вы не понимаете, что это доказательство по аналогии — я лучше пойду.


Выделенное это ваши фантазии. Не надо мне их приписывать.

Кэр>Я всего лишь изложил то, что я вижу вокруг. Кастомный синтаксис в прикладных задачах — можно встретить очень и очень редко. И на это есть объективные причины, которые я изложил from the top of my head.

Кэр>А у вас сразу пошли обиды — мол я "эталон", и свое "неприятие распространяю на всех".

Эталон это не от обиды, вы уж простите, это оттого, что после изложения содержимого топа вашего хеда вы делаете вывод — "никому не нужен". Такие выводы делают люди которые считают себя эталоном, нравится вам это или нет.

Кэр>Вы меня лично еще обвините, что я не ценю работу немерлистов и лично торможу прогресс программирования в целом. И типичная картина разработчика компилятора Немерле будет завершена.


Снова фантазии, завязывайте, право.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 01:38
Оценка: :)
Здравствуйте, DarkGray, Вы писали:

VD>>Что такое q# ?


DG>самописный недоязычок


Ну, я смотрю, ты в одном шаге от примыкания к нашему лагерю.
Я тоже с R#-а начинал.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 10:01
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

Z>Нужные нам для работы структуры можем, иначе как мы с ними работаем? Пример про хештаблицы вообще не понял, ты их используешь их для хранения данных? Часто?


Напрямую — нет. Но в "загримированном под статическую типизацию" виде — да, бывает. Вот, к примеру, работаешь с объектом через транспарент прокси — выглядит "типизрованно", но по сути — та же хэш-таблица.

А в случае с ХМЛ-ем. Что я на самом-то деле хочу получить? Ну с чем бы я работал в идеальном мире? У меня была бы некая, скажем, коллекция объектов, т.е. экземпляры моих классов, все строго-типизированно, проверяется компилятором и т.п. и пр. Вместог этого я получают некий текст. В лучшем случае у меня есть некая ХМЛ схема, с помощью которой я могу этот "текст" проверить. А что есть эта проверка на самом-то деле? Рантайм тайп-чек не иначе. Вот вам и динамическая типизация.

ВВ>>Какие 4 хранимки? У нас что, конкурс передергивания?

Z>Ты объяснял, что для DAL нужны CRUD хранимки, а теперь я передергиваю?

Где я тебе такое объяснял? "Хранимки" — это что, матерное слово теперь? Их упоминание в приличном обществе вызывает волну негатива? Хранимки — пример того, что можно тестировать в regression testing-е. Нет хранимок — тестируются методы ДАЛ, линк там, whatever.

ВВ>>Миграции ваши — это хорошо, конечно, но это решение, которое строго идет в коробке с самим ДАЛ-ом. Если нужно следовать другим процедурам миграции, то весь ДАЛ становится бесполезным практически полностью.

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

Хм, а если сам отмигрировать с ДЕВа на ТЕСТ, то как себя ДАЛ будет чувствовать? База другая, схема (формально) другая. Или валидация модели не делается?

ВВ>>Я тебе через DataReader работать не предлагал. Но с точки зрения надежности и статического контроля это решение мало чем отличается от вашего типизированного ДАЛа.

Z>Даже так? При том, что у тебя точек вагон точек фейла, которые ловятся у нас на этапе компиляции? Смелое допущение.

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

ВВ>>Обоснуй, какие тут могут быть проблемы безопасности.

Z>Ну ты же всю логику на клиента засунуть пытаешься, у сервера будет очень богатый интерфейс доступа к данным, гарантировать в этой системе безопасность станет сложнее. Например тип атрибутов которые можно изменить при вызове PUT /myobject зачастую зависит от сценария использования, тебе придется генерировать апи для каждого сценария и сервер перестанет быть таким тонким либо ты поимеешь проблемы с безопасностью.

Веб-сервисы писал? Вот здесь ровно то же самое и никаких проблем с секьюрностью нет. АПИ сервера кстати куда компактнее, чем в случае обычного приложения. Ведь в обычном веб приложении у тебя каждая страница — это по сути как метод АПИ, куча точек входа.
Единственная реальная проблема — с УРЛ. Но иногда это даже скорее плюс, а не проблема. Ну и возможности языка, недостаток библиотек.

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

Z>Нет, код без сценария использования бесполезен. Сценарий должен приносить реальную пользу. Пока я вижу, что ты генеришь непонятный слой и вся польза в том, чтобы сгенеренный слой не устарел. Так вместо написания и поддержки тестов это решается генерацией этого слоя по актуальной схеме (польза слоя все равно остается необъясненной).

Сценарий использования чего? Хранимок? Тестов? Я тебя уже сказал — тесты нужны для regression-а. Ты думаешь, один раз сгенерил, сегодня работает и завтра будет? Нет, сегодня работает, завтра не работает. Тесты позволяют с этим бороться.

Я уже говорил — если что-то может поломаться, то ты просто обязан проверять, что это не сломано. "Скорее всего не сломается", "скорее всего не изменится" — это не категории, которыми можно оперировать. А проверять, что не сломано — проще и удобнее всего через тесты. А что ты тестируешь — хранимки, не хранимки — уже другой вопрос.

ВВ>>Вообще-то у меня не было желания сводить разговор в этом русло. Ну ладно. Для начала скажи — какая самая большая БД по кол-ву данных и пользователей, с которой ты работал?

Z>Писькомерство?

Вовсе нет. Я даже свой доставать не буду (Хотя у меня длиннее, конечно )

Z>Поддамся на провокацию, мне не жалко, самый большой проект у меня примерно 1300 рабочих серверов на 1-30 рабочих мест связанных офалайновой репликацией и один центральный с веб интрефейсом. Таблиц чуть более 300. Раскидано это все на территории размером в несколько Франций. Админов почти нет. Работает более 7 лет. При ее создании и поддержке я понял, что любые тесты это костыли, которые не только помогают, но и мешают. Чем меньше их требуется, тем лучше проекту. И любой лишний код тоже сильно мешает, его поддерживать надо. А лишний слой абстракции, при развитии, мешает как собаке пятая нога.


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

Z>>>Вобщем сделать из статики динамику действительно не так сложно, достаточно побольше хранимок, рефлекшена и работы с xml по строковым константам.

ВВ>>Не, не, не товарищ, ты определись. Выше ты говорил, что работа с хмл — это не динамика.
Z>Если правильно подойте — не динамика, но сделать динамикой несложно, приложив немного усилий и строковых констант. Любую статику можно сделать динамикой при помощи Dictionary<string, object>() и методов Dictionary<string, object> MyCoolDynamicMethod(params Dictionary<string, object>[] args).

Правильно — это как? ХМЛ так или иначе приходит к тебе в рантайме, и именно в рантайме тебе надо проверить, что присланный ХМЛ соответствует контракту. Что бы ты ни делал, ты от этого не уйдешь.

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

Z>Ну да, мосье любитель разложить граблей.

Да, я люблю, когда грабли — если они есть — лежат на самом видном места. А прятать их под коврик в надежде, что никто не наступит, я не очень люблю.

Z>>>Только это никакого отношения к теме не имеет, я говорю про перенос достоинств динамики в статику, а ты переносишь недостатки.

ВВ>>И что? Он состоялся этот перенос? Если состоялся — то зачем о нем говорить, все должно быть видно, нет?
Z>На то и философия, чтобы поговорить, устал?

Так о чем поговорить-то? Тема неизбежно сводится к "статика вс. динамика".
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 11:12
Оценка: :)
Z>Вот только применяться она будет на клиенте, а та, что с IQuerable вероятнее всего уйдет в запрос к базе. Очень странно, что такие вещи приходится разжевывать.

странно что нужно разжевывать, что функция с IEnumerable тоже может уйти как запрос к базе (и никаких проблем с этим нет)
мы до сих говорим про МП или про что-то другое?


Z>Давай разберемся, ты захотел паралелить код и показал код, в котором под капотом происходит какая-то неявная магия. При этом ты утверждаешь, что эта магия сломается в рантайме при некоторых условиях.


Z>Макросы тут при чем, скажи на милость? Если ты это распаралелишь без макросов, эта проблема исчезнет?


что стоит понимать, что макросы как любой обобщенный инструмент могут требовать тонкой настройки при конечном применении в зависимости от контекста.
эта проблема есть и у шаблонов, и у кодогенераторов, и у макросов.

и жаль, что вы эту проблему не видете, и не понимаете.
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: Mamut Швеция http://dmitriid.com
Дата: 21.12.10 13:18
Оценка: +1
ВВ>>"Уровня Немерла" — это какой? Чтобы переименование работало? Если в динамически-типизированном языке нет понятия "мутабельных переменных",

VD>Тогда это не язык, а никому не нужная игрушка. Даже в хаскеле их аналог есть.


Но в Erlang'е-то нет мутабельных переменных


dmitriid.comGitHubLinkedIn
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 21.12.10 14:48
Оценка: +1
Здравствуйте, Klikujiskaaan, Вы писали:

K>По этому никто, кроме вас, не знает как оно работает и вообще, существует ли в природе? :-D

K>Уже пару гневынх пстов о "хорошей" документации великого и ужасного было
http://blogs.msdn.com/b/ericlippert/archive/2003/10/28/53298.aspx
Если бы у нас было столько же народу сколько есть у Липперта...

* One dev to spend five minutes implementing ChangeLightBulbWindowHandleEx.
* One program manager to write the specification.
* One localization expert to review the specification for localizability issues.
* One usability expert to review the specification for accessibility and usability issues.
* At least one dev, tester and PM to brainstorm security vulnerabilities.
* One PM to add the security model to the specification.
* One tester to write the test plan.
* One test lead to update the test schedule.
* One tester to write the test cases and add them to the nightly automation.
* Three or four testers to participate in an ad hoc bug bash.
* One technical writer to write the documentation.
* One technical reviewer to proofread the documentation.
* One copy editor to proofread the documentation.
* One documentation manager to integrate the new documentation into the existing body of text, update tables of contents, indexes, etc.
* Twenty-five translators to translate the documentation and error messages into all the languages supported by Windows.The managers for the translators live in Ireland (European languages) and Japan (Asian languages), which are both severely time-shifted from Redmond, so dealing with them can be a fairly complex logistical problem.
* A team of senior managers to coordinate all these people, write the cheques, and justify the costs to their Vice President.

... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 20:48
Оценка: :)
VD>Кстати, объясни общественности какое отношение суперкомпиляция имеет к метапрограммированию?

если исходить из определений, то самое непосредственное.
суперкомпиляция — это подвид метапрограммирования.

Метапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы (в частности, на стадии компиляции их исходного кода), либо программ, которые меняют себя во время выполнения (самомодифицирующийся код).


Суперкомпиляция — специальная техника оптимизации алгоритмов, основанная на знании конкретных входных данных алгоритма. Суперкомпилятор принимает исходный код алгоритма плюс некоторые данные о входных параметрах и возвращает новый исходный код, который исполняет свою задачу на этих данных быстрее или является лучше исходного алгоритма по каким-то другим показателям.

Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 21:34
Оценка: :)
Здравствуйте, Кэр, Вы писали:

Кэр>Это как бы не нуждается в напоминании. Я только утверждаю, что идей действительно достойных нового языка не так уж много. И людей способных достойно эти идеи воплотить тоже. Иначе мы бы уже имели популярный язык для .Net, который решает твой вопрос, innit? Любую фичу можно использовать как во благо, так и во вред. Мне вот такое свободное изменение синтаксиса дает такую картину перекрестного опыления различными библиотеками результирующего кода, что жить не хочется. Представь, что ты хочешь заюзать либу для XML разработанной третьей стороной. А она заодно тебе привозит переопределение $, % и неровно дышит к наличию < > в коде. Что наступает на уши либе по обработке HTML, которая разработана yet another third party. И вдобавок это все конфликтует с кодом, который местный сениор отчаянно колбасил еще в самом начале проекта, изголяясь во все стороны и под разными углами. И сидишь ты и чешешь репу, как бы разодрать все эти либы в разные стороны, чтобы синтаксис наконец-то стал однозначным. И при чтении разных файлов тебе приходится вспоминать, а что означает вот этот keyword и вот этот символ в этом контексте.


Ну, по фантазировал и хватит, так как в C# с самого начала была поддержка переопределения операторов и конца света от этого не случилось. В худшем случае будет ошибка компилятора.

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

Кэр>Я скажу сразу — нах такое не нужно. Пока не показано, как эта проблема будет решена — я категорически против подобных завихрений в моих проектах.


А я скажу другое. Трепачи всегда были находками для шпиёнов. Больше от них толку не было ни когда. Вот и ты из этого числа. Сам ничего не пробовал, но мнение имеешь. Толку от твоего мнения не больше, чем от мнения бабки с базара.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 01:53
Оценка: +1
Здравствуйте, DarkGray, Вы писали:


DG>>>

DG>>>Метапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы


DG>>>

DG>>>Суперкомпиляция — специальная техника оптимизации алгоритмов, основанная на знании конкретных входных данных алгоритма.


DG>с каких это пор программа перестала быть видом записи алгоритма?


А к чему этот вопрос?

Ты не в состоянии отличить метода оптимизации от средства программирования. Вот в этом и вопрос.

К тому же лезешь рассуждать о весьма хитрых вещах даже не понимая их азов.

То как действует супер-компиляция плохо понимают даже такие люди как авторы хаскеля. На практике они практически не использовались. Только в Рефале — языке чисто эксперементаторском. А ты лезешь даже в такие непростое области.
Супер-компилятор не просто переписывает код по какому-то там алгоритму. Он создает мета-модель кода и производит частичные вычисления. При этом никаких новых результатов не получается. Получается всего лишь более шустрый код для той же самой программы.

Другими словами в суперкомпиляции присутствует "мета", но не присутствует программирования, так как никаких новых программ не создается. Мета-программирвоание же своей целью несет порождение или изменение имеющихся программ (изменение их семантики!).

Так что слова "если уж говорить о МП — то стоит говорить о суперкомпозиции кода и о суперкомпиляции, а не о макросах" — это полнейший лам, так как никакой связи между МП и суперкомпозицией нет. Это совершенно разные задачи.

DG>может тебе все-таки стоит почитать хотя бы книжку "теория программирования для маленьких"?

DG>а то я вижу, что с основами теоретии программирования — у тебя швах.

Ну, уважаемый ты уже совсем ниже плинтуса опустился. Я стремительно теряю остатки былого уважения.

ЗЫ

На будущее, все же советую прежде чем соваться обсуждать что-то, сначала ознакомься с предметом обсуждения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.12.10 04:44
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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


S>>Бенефит в том, чтобы одна команда могла заниматься dynamic, а другая команда параллельно и независимо могла заниматься async.

G>То есть макры — не тул для программистов, а тул для разработчиков компилятора.
Фактически — да. У меня по-прежнему нет личного опыта, но всё выглядит именно так. Придумать и реализовать макру уровня dynamic может далеко не всякий. Большинство из того, что доступно рядовому разработчику типа меня, реализуется в традиционных функциях. Т.е. максимум — это более чистый синтаксис для достаточно тривиальных вещей.

G>А вот на примере Nemerle это видно плохо. Потому что основная проблема при разработке языка — далеко не реализовать некоторые конструкции. А понять как они должны работать. Липперт пишет огромные посты, которые касаются только выбора синтаксиса для yield и\или async, совершенно не касаясь семантики, и даже реализации.

А мне казалось, что он как раз пишет в основном о семантике. Вопросы выбора синтаксиса, имхо, далеко не так важны.

G>С другой стороны есть немалая область, неподвластная сейчас C#\Visual Studio — compie-time rewriting. Те же code contracts реврайтятся отельными утилитами, для статического AOP используется PostSharp, который тоже реврайтит отдельным процессом.

Ну это как раз от того, что в языке средств нету.

G>Вот nemerle эту проблему решает, но его макры работают только для nemerle.

Угу.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.12.10 06:56
Оценка: +1
Здравствуйте, Ziaw, Вы писали:
Z>Кстати, а какие основные проблемы ты тут видишь? C# же компилируют в js?
Основные проблемы — в том, что код не собирается работать в вакууме. Он будет исполняться в определённом окружении — browser, window, document.
Попытка построить строготипизированную модель для HTML и CSS по мне не выглядит многообещающей.
А умение компилировать базовую арифметику не очень интересно — оно имеет узкие практические применения.

Z>Я вижу основную проблему в том, что хорошо зная js, обязательно захочется делать трюки обычные для js, но невозможные для nemerle.


Z>Примерна та же проблема была у ранних ORM со своим языком запросов, который был богат, но не являлся заменой SQL тому, кто использовал нетривиальные запросы, не говоря уже об особенностях серверов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 22.12.10 07:03
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>Основные проблемы — в том, что код не собирается работать в вакууме. Он будет исполняться в определённом окружении — browser, window, document.

S>Попытка построить строготипизированную модель для HTML и CSS по мне не выглядит многообещающей.

Тут http://ocsigen.org/ вроде это все уже сделано http://ocsigen.org/docu/1.3.0/XHTML.M.html, но я слишком далек от веба
чтобы оценить насколько хорошо. DSL'ы у них по моему весьма неплохие.
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 08:25
Оценка: :)
VD>То как действует супер-компиляция плохо понимают даже такие люди как авторы хаскеля. На практике они практически не использовались. Только в Рефале — языке чисто эксперементаторском. А ты лезешь даже в такие непростое области.

ты сейчас говоришь об универсальной автоматической суперкомпиляции.
это задача действительно сложная и непонятная — и решается только тем же рефалом

на практике же речь обычно идет о специализированной автоматизированной суперкомпиляции.

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

VD>Супер-компилятор не просто переписывает код по какому-то там алгоритму. Он создает мета-модель кода и производит частичные вычисления. При этом никаких новых результатов не получается. Получается всего лишь более шустрый код для той же самой программы.


те же грабли — в твоей неверной трактовке термина суперкомпиляция.
даже в вики второй строчкой написано, что это очень узкая трактовка суперкомпиляции.

еще раз повторю основную мысль суперкомпиляции:
по существующей версии кода(обычно обобщенного) — получить его специализированную версию.
специализация может идти по любому параметру — размер задачи, размер имеющейся памяти, заранее известное распределение исходных данных, вид исполнителя, имеющиеся языковые средства и т.д.

ничего кстати не напоминает?
а это кстати и есть, например, linq2sql — по версии на универсальном языке формируется специализированная sql-версия этого же кода.
Re[34]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 22.12.10 08:26
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Сейчас сходство в основном синтаксическое. Компилятор первой версии F# компилировался как компилятором ocaml, так и самим F#. После того как бустраппинг был пройдет начали резко отказываться от совместимости с ocaml.


Я согласен с тем что F# и OCaml уже достаточно далеко разошлись, но совместимость при этом осталась, например далеко нетривиальная библиотека http://www.coherentpdf.com/ocaml-libraries.html компилируется и OCaml и F#.
Re[36]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 22.12.10 08:45
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Ну это создатели библиотеки поставили цель сделать библиотеку компилируемой на обоих языках. Совершенно не означает что любой код будет компилироваться так. В общем случае как раз обратная картина будет.


Нет первоначально все было написано на OCaml'е тут http://coherentpdf.com/blog/?p=12 автор дает отчет о первоначальном портировании.
Любой код конечно не будет компилироваться, но общее подмножество языков достаточно большое (гораздо больше чем у родственных
сиобразных например) чтобы писать кроссязыковые библиотеки.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 08:49
Оценка: +1
S>Ну, это старый аргумент. Я наблюдаю этот спор тут чуть ли не со времён R#. Ответы на него мне тоже известны.
S>Как оно окажется на практике — пока что непонятно. Пока что мы имеем не очень много макросных библиотек для немерле, так что трудно сказать, насколько твой страх оправдан.

вопрос еще более старый (ему лет 50) — спор идет со времен lisp, макро-ассемблера и т.д.

и видно, что в mainstream-е выбор всегда делался в пользу "жестких" инструментов.
на текущий момент, не видно почему этот выбор должен измениться.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 22.12.10 10:22
Оценка: +1
Здравствуйте, DarkGray, Вы писали:

DG>опять исходная проблема подменяется обсуждением другой задачи.

DG>в проблеме шла речь — про конфликт двух и более макросов, ты же говоришь — да нет никакой проблемы, вот смотрите когда макрос один, то все хорошо.

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

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

DG>давай возьмем все-таки два сложных макроса с разным синтаксисом, например, json и макрос-шаблонизатор с синтаксисом:

DG>[{ }] операторы шаблонизатора
DG>[: :] — цитирование
DG>< > — подстановка значение
DG>и смешаем их

С такими операторами и без смешивания мы не сможем работать. Подробнее расскажи о задаче, я тебе набросаю синтаксис. Если задача генерить код a la Т4 — ради бога, это все будет обычной строкой для твоего макроса и, когда превратится в код, у джейсона не будет никаких проблем с синтаксисом шаблонизатора.

Ты придумал макрос шаблонизатора, так расскажи семантику и смысл кода с ним.

DG>
DG>  [{ j: 1..2
DG>   [:
DG>    def test<j> = json({ 
DG>    [{ i: 1..3
DG>    [: a<i> : arr; :]       
DG>    }]
DG>      b : obj; 
DG>      c : null;
DG>      d : [[{ i: 1..10 where i%2==0 [: <(j+i)>, :] }]];
DG>      e : { [{ i: 1..3 [: a<i> : <(j+i)*4>; :] }] "la la": null};
DG>      "f" : [true];
DG>      j : (43 + 55);
DG>    }); 
DG>   :]
DG>  }]
DG>  def test = test1 + test2;
DG>


DG>ну как? еще читается? а здесь еще даже конфликты синтаксиса минимальны


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

Твой пример показывает, что ты видишь макросы как Т4 на стероидах, на самом деле они очень органично вписаны в язык. Это позволяет применять и комбинировать их без особых конфликтов. Все проблемы от твоего неверного видения.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 22.12.10 12:25
Оценка: +1
Здравствуйте, DarkGray, Вы писали:

DG>давай побуквенно, что именно не будет астом и почему в следующей записи?

DG>синтаксис немерле ботать не хочу, поэтому синтаксис ближе к c#

Это почти корректный аст, опечатки не буду рассматривать. Выделенное — валидный идентификатор, в предыдущем примере, ты вместо него ставил test<n>
Такой аст ты вполне можешь проверить на наличие идентификаторов содержащих __n__ и сгенерировать нужные по шаблону.

Но, прострелить себе ногу и запутать синтаксис до непонимания немерле просто не даст. Использование макросов достаточно предсказуемо для читающего код. Смотри комментарии.

DG>
DG>F1(Enumerable.Range(1..2), n=>
DG>def test__n__ = json({ 
DG>    F2(ann : arr;)
DG>      b : obj; 
DG>      c : null;
// вот тут проблема, макрос должен возвращать одно выражение, в итоге при раскрытии твоего макроса джейсон получит код вроде [ [1, ..., 21] ]
DG>      d : [F2(Enumerable.Range(0, 20).where(nn=>nn%2==0), nn=>n+nn)]; 
// тут похожая  проблема, F2 должен вернуть одно выражение, джейсон получит код {{a0 : 0; ...; a4: 16} "la la": null}
DG>      e : { F2(Enumerable.Range(0, 2), nn => a__nn__:nn*4);   "la la": null};
DG>    }); 
DG>def test = f(test1, test2);
DG>


Для решения этих проблем тебе придется засунуть весь код опять же в макрос который перепишет выражения. Только сама задача подобного генератора менее бредовой не становится.

DG>зы

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

это ты пытаешься забивать гвозди микроскопом и генерировать код в стиле текстовых шаблонов. задача абсолютно не нужная в nemerle.
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 14:24
Оценка: :)
Z>// вот тут проблема, макрос должен возвращать одно выражение,

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

если правила редукции ограничиваются лишь видом выражение->выражение, то правила вида выражение->несколько выражений приходится записывать в виде выражение->исскуственное-выражение(выражения*), что подходит только для AST с семантикой в виде дерева.

но часть AST-а — является лишь списком, а не деревом:
последовательность параметров функции,
последовательность декларации параметров функции,
последовательность операндов через точку (хз, как их правильно назвать),
последовательность инициализации массива,структуры и т.п.
и т.д.
Re[32]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 17:39
Оценка: +1
Здравствуйте, DarkGray, Вы писали:

VD>>Повторяю последний раз. Супер-компиляция — это метод оптимизации. Она не изменяет семантики кода. Главной же целью мета-программирования является изменение семантики кода.


DG>задам тебе те же самые вопросы, что и WH


DG>изменение какой именно семантики: аксиоматической, операционной или может денотационной семантики?


Гы. Ты не на тех нарвался. Тут покидаться умными терминами с целью сойти за умного не удастся. Семантика кода — это всего лишь общепринятое короткое и красивое иностранное слово означающее трактование поведения кода. Если тебя не забанили в википедии, то сходи и погляди общепринятое в программировании значение этого слова.

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

DG>в виде определения, пожалуйста.


По ссылке.

DG>какую из этих семантик меняет введение foreach, using, peg-грамматики в язык?


Ту что по ссылке. Мы определяем поведение синтаксических конструкций (имеющихся или новых). Скажем макрос PegGrammar вводит в язык расширенный синтаксис PEG-грамматик и придает им семантику парсера. Ни один супер-навороченный супер компилятор никогда в жизни не догадается, что, скажем, конструкцию E* нужно преобразовать в цикл. Тут даже искусственный интеллект будет бессилен, если ему не объяснить семантику. Вот мета-программа и является эдакой записью семантики.

DG>какую семантику меняет linq2sql?


Никакую. Это вообще провайдер данных.

DG>почему ту же самую семантику не меняет суперкомпиляция?


Потому что ее цель изменение формальных свойств программы в которые не входит семантика.

DG>доказательство, пожалуйста.


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

Может мне еще доказать, что я не верблюд и и принести справки о том, что я не женат на всех женщинах мира?

DG>также могу добавить следующие вопросы

DG>на оценку 3+:

Гы. А ты не хочешь спросить нужны ли кому-то твои оценки?

DG>1. одинаковая ли аксиоматическая, операционная и денотационная семантика у макроса и у исходного кода?


Вопрос бредовый по определителю. Макросы и определяют семантику кода.

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

Так что жонглировать научными терминами не надо прекрывая ими собственное непонимание обсуждаемого вопроса. Тут достаточно обычного общепринятого понятия. Можешь даже вместо слова "семантика" использовать понятие "смысл кода" или даже "поведение". Смысл рассуждений не изменитя.

Так вот суперкомиляция не меняет смысла/поведения кода. Программа подвергшаяся суперкомиляции не начнет выдавать какие-то другие результаты. Надеюсь, тебе не придет в голову жонглировать терминами "поведение" и "смысл".

DG>на оценку 4

DG>2. как меняются данные семантики при переходе от исходного языка к макросам и обратно?

Встречный вопрос: Что означает "переходе от исходного языка к макросам"? Макрос расширяет язык. Появляется макрос — изменяется семантика языка. А раз семантика изменяется, то по фигу как ее там представлять или описывать. Она изменится в любом виде. Если раньше мы под "A+ B" понимали сложение целых, а теперь макрос стал интерпретировать этот код как грамматику, то семантика кода поменялась. И по фигу в каких терминах формально выражается эта семантика. Важно что смысл кода другой.

DG>на оценку 4+

DG>3. каковы правила редукции семантики при переходе от языка к макросам и обратно?

Это не вопрос. Это бредовый набор слов. По крайней мере пока не будет определено понятие "переходе от языка к макросам и обратно".

ЗЫ

Как бы ты не приседал, то всем кто в теме отчетливо понятно, что ты ляпнул чушь и теперь пытаешься увести разговор в другую сторону и скрыть свое не понимание за "умными" терминами. Но ты не на того напал. Я таких жонглеров повидал не мало. Меня так не разведешь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 17:57
Оценка: :)
VD>Гы. Ты не на тех нарвался. Тут покидаться умными терминами с целью сойти за умного не удастся. Семантика кода — это всего лишь общепринятое короткое и красивое иностранное слово означающее трактование поведения кода. Если тебя не забанили в википедии, то сходи и погляди общепринятое в программировании значение этого слова.

может тебе все-таки стоит почитать хотя бы английскую версию
http://en.wikipedia.org/wiki/Formal_semantics_of_programming_languages

так кроме трех базовых семантик, рассматривается еще как минимум 7.

это на тему того, что в россии на текущий момент — теория программирования почти совсем не развивается.
и поэтому в вики на русском всякий бред написан про программирование.

VD>Так что приплетать сюда красивые научные термины из других областей не нужно. По крайне мере со мной это не прокатит. С возрастом я выработал иммунитет к разводам. В том числе и к терминологическому подлогу.


DG>>в виде определения, пожалуйста.


VD>По ссылке.


с каких это пор определение для домохозяек (а в русской вики — именно такое определение семантики) стало аргументом в споре?
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 18:12
Оценка: +1
Здравствуйте, DarkGray, Вы писали:


VD>>В среде тех кто занимается макросами проффесионально второе называется применением макросов. Ни кто из тех кто использует макры не думает о том во что они реально разворачиваются. Люди мыслят на созданном с помощю макросов языке.


DG>дык, а в среде тех кто занимается проффесионально теорией программирования (в том числе разработкой языков программирования) — это называние редуцированием (или сверткой — если более по-русски).

DG>будем дальше меряться — кто более проффессионален?

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

Какими бы умными словами ты не называл простое понятие "смысл кода" оно не изменится! Суперкомпиляция смысла кода не меняет. Код будет другой, нон будет делать тоже самое, если ему на вход дадут одни и те же данные. А вот метапрограмма (ака макрос) своей целью несет изменение смысла кода или введение новых конструкций.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[36]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 19:37
Оценка: +1
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ты хоть понял, что речь о динамике и выводе типов для интеллисенса?


Слушай ну ты то ведь должен понимать, что если для динамики можно вывести типы, то это просто статика для которой забыли во время компиляции типы првоерить. А если это реальная динамика, то вывод будет невозможен?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:35
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>В чем суть примера?


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

То что эта методика работает и для обычного кода, скажем на шарпе, в расчет не принимается. Там он просто предложит не писать говнокод.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[37]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 21:04
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Слушай ну ты то ведь должен понимать, что если для динамики можно вывести типы, то это просто статика для которой забыли во время компиляции типы првоерить. А если это реальная динамика, то вывод будет невозможен?


Вывод типов же для статического языка тоже не всегда возможен, ХМ по-моему вообще работает для rank-1, хотя могу и ошибаться. Ведь ничего, живут же как-то люди?

Естественно, подразумевается, что автокомплит будет работать не всегда, лишь для ряда случаев. Я думаю, что этим "рядом случаев" может покрываться изрядная часть кода. Там будет автокомплит, интеллисенс и проч. Часть кода покрываться не будет. Компилировать, кстати, тоже можно по такой же модели — смогли вывести типы хорошо, не смогли — тоже ладно.
Re[33]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 21:09
Оценка: +1
Здравствуйте, VladD2, Вы писали:

ВВ>>Нет, не бред. Я просто понимаю, что типы будут выводиться не всегда и интеллисенс не будет работать в ряде случаев.

VD>А кому нужен то потухающий, то погасающий интеллисенс?

Не вижу тут проблемы
В Шарпе переключаешься на динамики — интеллисенса нет, никто ж не умер. Здесь так же.

Опять же — потухать он будет не полностью. Т.е. к примеру, мы можем вывести что foo — это функция типа a->b->c, но что такое эти a, b, c — не можем. Все равно это уже какая-то информация, которую можно использовать при автокомплите, давать ворнинг, если ты пытаешься делать с foo то, что нельзя делать с функциями и пр.

ВВ>>Но большинство сценариев он будет покрывать. В С# 4 вон тоже можно написать код, для которого интеллисенс "официально" не работает.

VD>А может пойти дальше и сделать как в Boo? Ну, чтобы динамика была только там где компилятор не в силах типы вычислить.

Это на мой взгляд очень разумный и правильный подход. Можно сказать, путь развития для динамики. Причем это должно быть прозрачно для программиста и никак не сужать гибкость типов. Просто компилятор будет уметь переключаться в статический режим в целях оптимизации.
Pure, например, делает так, если аннотировать типы.
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 23.12.10 07:20
Оценка: +1
Здравствуйте, DarkGray, Вы писали:

DG>в текстовых терминах проще формулировать утверждения.

DG>если рассматривать МП не в текстовых терминов — то там слишком много незнакомых терминов надо вводить.

Это каких же? Что-то я не заметил, что ты скромен в количестве термиинов. Той же семантики навалил целую кучу и в тему и не в тему.

DG>вон влад, например, до сих пор не выучил термин семантика, и чем одна семантика отличается от другой семантики.

DG>что такое редукция, что такой язык и т.д.

Ты на Влада стрелки не переводи, пока я вижу только одного человека в этой дискуссии, который утверждает, что у него полно знаний и опыта в МП, при этом демонстрирует понимание МП на уровне, "читал статьи, что-то прикольное, но выглядит страшно". Владу как раз ничего доказывать не надо, он разрабатывает компилятор одного из самых МПшных в мире языков. Код компилятора можно увидеть, сам компилятор поюзать.

А от тебя я все еще жду реальные примеры применения МП. Ведь у тебя множество исследовательских проектов применяющих МП. Не обязательно код, у тебя же наверняка NDA Просто проблема, способ решения.
Re[11]: Веб и динамика? Веб и статика+метапрограммирование.
От: Mamut Швеция http://dmitriid.com
Дата: 23.12.10 09:16
Оценка: +1
ВВ>>Не знаю, не уверен. По идее все, что нам может на Си помешать реализовать АСП.НЕТ MVC — будет мешать и в Си++.
S>Какая-то вывернутая логика. Мешать нам ничто не мешает. Вопрос в том, что нам помогает.
S>Если в языке нет понятия "типизированный указатель на функцию", то нам ничто уже не поможет его эмулировать — только рукопашный код, без какой-либо поддержки компилятором.

ВВ>>Но Си это все же язык, который создавался задолго до эпохи веб. А на любом более или менее современном языке, включая динамические скрипты, фреймворк соответствующий возможностям MVC реализуем. Даже наоборот — это на C# затруднительно сделать что-либо вроде РубиОнРаилс.

S>Возможно. Я весьма поверхностно знаком с рельсой.

Только по одной причине — сложно сделать такой же краткий DSL. То есть не вижу нникаких причин, почему сделать нельзя, просто все будет очень многословным.

Расширяем C# до Немерле и http://code.google.com/p/nemerleonrails/


dmitriid.comGitHubLinkedIn
Re[13]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 23.12.10 12:46
Оценка: -1
DG>>.net-ный linq очень плохо помогает при условных запросах.
DG>>когда конечный запрос собирается из кусочков на основе ввода пользователя (например, по каким полям фильтровать и сортировать)

Z>Это сравнению с чем плохо? С whereString += " AND Filed=@Field"?


по сравнению с тем, что идея linq может предложить.

через linq — даже изменение порядка сортировки делается очень геморройно, т.к. для сортировки используется аж 4 метода

DG>>зы

DG>>еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.

Z>Ну вот еще одна проблема, которую легко решает МП. Впрочем тулкит вроде сам кеширует компилированные запросы.


может, что-то даже делает, но 50мс никуда не деваются. (четкие 50 мс связаны скорее всего с какими-то потерями на переключение потоков)


Z> Ну вот еще одна проблема, которую легко решает МП.


так здесь как раз удобны inline-"макросы", которые как раз возвращают несколько выражений

например, можно сделать так:
 world.Managers.MyOrderBy({Name:asc, Money: desc})

а склейку кортежа сделать доп функциями
при этому MyOrderBy — возвращает последовательность из OrderBy.ThenBy
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 23.12.10 17:04
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>Условия проекта очень простые: У разработчиков должны быть мозги.


Тогда мейнстрим точно не светит
Re[15]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 23.12.10 20:55
Оценка: :)
DG>>через linq — даже изменение порядка сортировки делается очень геморройно, т.к. для сортировки используется аж 4 метода

VD>Во как? А мужики то и не знали (с). Вот тебе примерчик:


а теперь напиши полный вариант для следующей элементарной задачи:

от пользователя приходит список кортежей для фильтрации и сортировки.
вид кортежа фильтрации:
string field;
string op;
string value;


вид кортежа сортировки:
string field;
bool isAscElseDesc;


пример запроса пользователя:
filters: 
{field:'name', op:'starts', value='василий'}, 
{field:'birthday', op:'>=', value='10.01.1974'}, 
{field:'company', op:'==', value='rsdn'},

orders:
{field:'name', isAscElseDesc:true},
{field:'birthday', isAscElseDesc:false},


зы
в усложненной версии: filter-ы объединяются в группы and/or
filters: 
{op='and'
 {op='or',
   {field:'name', op:'starts', value='василий'}, 
   {field:'name', op:'starts', value='дмитрий'}, 
 }
 {field:'birthday', op:'>=', value='10.01.1974'}, 
 {field:'company', op:'==', value='rsdn'},
}

orders:
{field:'name', isAscElseDesc:true},
{field:'birthday', isAscElseDesc:false},
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.12.10 21:11
Оценка: :)
Здравствуйте, DarkGray, Вы писали:

DG>>>через linq — даже изменение порядка сортировки делается очень геморройно, т.к. для сортировки используется аж 4 метода


VD>>Во как? А мужики то и не знали (с). Вот тебе примерчик:


DG>а теперь напиши полный вариант для следующей элементарной задачи:


DG>от пользователя приходит список кортежей для фильтрации и сортировки.

DG>вид кортежа фильтрации:
DG>
DG>string field;
DG>string op;
DG>string value;
DG>


DG>вид кортежа сортировки:

DG>
DG>string field;
DG>bool isAscElseDesc;
DG>


DG>пример запроса пользователя:

DG>
DG>filters: 
DG>{field:'name', op:'starts', value='василий'}, 
DG>{field:'birthday', op:'>=', value='10.01.1974'}, 
DG>{field:'company', op:'==', value='rsdn'},

DG>orders:
DG>{field:'name', isAscElseDesc:true},
DG>{field:'birthday', isAscElseDesc:false},

DG>


DG>зы

DG>в усложненной версии: filter-ы объединяются в группы and/or
DG>
DG>filters: 
DG>{op='and'
DG> {op='or',
DG>   {field:'name', op:'starts', value='василий'}, 
DG>   {field:'name', op:'starts', value='дмитрий'}, 
DG> }
DG> {field:'birthday', op:'>=', value='10.01.1974'}, 
DG> {field:'company', op:'==', value='rsdn'},
DG>}

DG>orders:
DG>{field:'name', isAscElseDesc:true},
DG>{field:'birthday', isAscElseDesc:false},

DG>


Напиши один раз десериализатор этого json в ET и пользуй.

За 1000 баксов я тебе такой напишу, нужен?

Еще за 1000 напишу сериализатор подмножества ET в такой json.


ЗЫ. Вообще удивляюсь как люди не любят трогать пространство имен System.Linq.Expression можно очень простыми средствами динамическую генерацию кода делать.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.12.10 08:55
Оценка: +1
Здравствуйте, DarkGray, Вы писали:

G>>А какими средствами языка она должна решаться? По сути ты получаешь строку извне. Дальше ты сам её должен парсить, язык тут не при чем.


DG>строка уже распарсена в последовательность кортежей.


DG>а преобразовать последовательность кортежей в linq-последовательность — это уж точно языковая задача,

DG>и сводится она к понятным примитивным операциям:

DG>получить "ссылку" на поле по имени,

Одна строка

var prop = Expression.Property(p, name)


DG>преобразовать строку в значение типа данного поля,

Одна строка
var value = Expression.Constant(Convert.ChangeType(s, p.Type));


DG>получить операцию по имени,

DG>поле + операцию + значение склеить в выражение,
Одна строка
var e = opTable[op](prop, value);




DG>выражения склеить в where,

Одна строка
var lambda = Expression.Lambda(typeof(Func<,>).MakeGenericType(new [] {p.Type, typeof(bool)}), e, p);


DG>where подклеить ко всему linq-у выражению

Одна строка
var query = whereMethod.MakeGenericMethod(new[] {p.Type});


В итоге 5 строк кода + лукап таблица + 4-5 строк для инициализации.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 24.12.10 09:03
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Да и в чет проблема? Пользуйся другими провайдерами.


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

Что было сказано?

еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.


Что будет делать средний рсдновец, если указал на факт, но люди усомнились? Напишет тест, по результатам либо извинится, что ляпнул глупость либо докажет свою правоту в этом вопросе. Но DarkGray не из таких.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.12.10 09:25
Оценка: -1
VD>А за каким хреном надо было преобразовывать действия в текстовую форум? Просто формируй свои действия сразу в виде запросов и делать ничего не придется.

потому что они из браузера такие приходят.

VD>В худшем случае, если оставить текстовое представление, придется завести хэш-таблицу в которой смапить кортеж field * op (и field * isAscElseDesc) на соответствующую лямбду.

VD> Вот рабочий код для добавления сортировки (фильтрация делается аналогичным образом):

вот только он неправильный, и сортировка будет всегда по последнему кортежу: потому что orderby и thenby это не одно и тоже.

сложные вещи ты обошел:
преобразованием значения из строки в тип поля — не привел.

код с восстановлением операции по строке — тоже не привел.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.12.10 21:29
Оценка: -1
VD>Без макросов правда, но зато пример демонстрирует комбинаторные возможности немерла. Думаю, не ты один не понимаешь, что подобное возможно. Так что будет хорошим примером для новичков. Да и C#-щикам полезным будет. На шарпе конечно не так лаконично получится, но на нем этот код так же можно повторить.

мой сотрудник это сделал за 2 часа на C#
что я считаю верхом расточительности для задачи такого плана

DG>>преобразование фильтрующего-выражение из текстовой формы в код, это копеечная задача.

DG>>и это именно МП: есть программа в текстовом виде, есть программа в виде C# — одну программу надо преобразовать в другую.

VD>Как видишь я справился без МП. И скажу больше МП здесь не даст особых преимуществ. Разве что ли позволит автоматизировать генерацию похожих вещей.


с точки зрения МП — здесь мог ли бы помочь шаблоны кода, оперирующие на уровне выражений

DG>>при чем проблема, что основные временные затраты уходят на борьбу с кодом:

DG>>то, что order-by выражется четырьмя методами.

VD>Ты недавно утверждал, что задача вообще не решается средствами линка.


не надо мне приписывать не мои слова, я писал что linq плохо помогает решать такую задачу, а не то, что ее нельзя решить с помощью linq

а вот и точная цитата

DG>.net-ный linq очень плохо помогает при условных запросах.

что более чем верно.
потому что преобразование из текстового представления в текстовый sql — делается за 20 минут, а не за 2 часа.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.12.10 22:06
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

      using (var db = new StatDataContext(Settings.Current.ConnectionString))
      {
        db.ObjectTrackingEnabled = false;

        var stopwatch = new System.Diagnostics.Stopwatch();
        stopwatch.Start();
        var board1 = db.Boards.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c1-ac72-433408000000"));
        Console.WriteLine(stopwatch.Elapsed);

        stopwatch.Reset();
        stopwatch.Start();
        var board4 = db.Boards.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c1-ac73-433408000000"));
        Console.WriteLine(stopwatch.Elapsed);

        stopwatch.Reset();
        stopwatch.Start();
        var thread1 = db.Threads.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c1-ac73-433408000000"));
        Console.WriteLine(stopwatch.Elapsed);

        stopwatch.Reset();
        stopwatch.Start();
        var thread2 = db.Threads.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c2-ac73-433408000000"));
        Console.WriteLine(stopwatch.Elapsed);

        stopwatch.Reset();
        stopwatch.Start();
        var thread4 = db.Documents.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c1-ac73-433408000000"));
        Console.WriteLine(stopwatch.Elapsed);

        stopwatch.Reset();
        stopwatch.Start();
        var thread5 = db.Documents.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c2-ac73-433408000000"));
        Console.WriteLine(stopwatch.Elapsed);

      }

00:00:00.0507296
00:00:00.0030784
00:00:00.0234894
00:00:00.0029796
00:00:00.0293127
00:00:00.0026732


четко видно, что первый вызов одного вида долгий, а последующий такой же (хотя и с другим id) быстрый.
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.12.10 22:23
Оценка: -1
Z> Они бедные над удобным синтаксисом распараллеливания бьются-бьются. Можно оказывается забить и писать как синхронный, который потом сам заработает асинхронно.

с преобразованием синхронного кода в cps никакой проблемы нет.
идея решения даже в вики про cps написана.

развернутое описание как синхронный код отображается в cps я показывал в диалоге с Sinclair-ем в одной из соседних веток
http://www.rsdn.ru/forum/philosophy/4006735.flat.aspx
Автор: naf2000
Дата: 21.10.10


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

зы
C#-ные yield-ы — это кстати преобразование синхронного кода в примитивный cps
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.12.10 23:47
Оценка: :)
VD> А слова — "даже изменение порядка сортировки делается очень геморройно"? Не уж то 13 строк кода помещенные в метод — это такой нестерпимый геморрой?

конечно. чем хороши 13 строк, если тоже самое при улучшенном яп можно сделать за полстроки?
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 25.12.10 13:30
Оценка: -1
G> Это много? Два часа работы если с нуля писать.

много

одним из индикаторов выразительности языка является:
кол-во требуемых для изменения бит(символов) в коде на кол-во измененных бит информации в исходной постановке задачи.

см. пример ниже

DG>>3. большой разрыв между обычным кодом, и кодом генеренным. достаточно сложно переходить от одного к другому и обратно, использовать совместно и т.д.

G>Это ты что имеешь ввиду? Обычно ручное собирание expression прячется внутри функций, которые потом типизировано вызываются и отдают типизированный результат.

был исходный сложный запрос
var items = db.Items.Join(..).Where(pair.Item.Name == name && bla-bla || bla-bla-bla).ToArray();


дальше в ТЗ добавилось изменение:
пользователь может указать, что сравнение может быть не полное, а по начальному совпадению (starts)
и вот теперь чтобы встроить условную замену '==' на 'starts' — необходимо достаточно много перелопатить.

а в идеале это хотелось записать как:
var op = bla-bla ? == : starts;
var items = db.Items.Join(..).Where(pair.Item.Name op name && bla-bla || bla-bla-bla).ToArray();

с привлечением может доп. синтаксиса, но смысл именно такой.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.12.10 12:41
Оценка: +1
Здравствуйте, DarkGray, Вы писали:

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


DG>
DG>      using (var db = new StatDataContext(Settings.Current.ConnectionString))
DG>      {
DG>        db.ObjectTrackingEnabled = false;

DG>        var stopwatch = new System.Diagnostics.Stopwatch();
DG>        stopwatch.Start();
DG>        var board1 = db.Boards.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c1-ac72-433408000000"));
DG>        Console.WriteLine(stopwatch.Elapsed);

DG>        stopwatch.Reset();
DG>        stopwatch.Start();
DG>        var board4 = db.Boards.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c1-ac73-433408000000"));
DG>        Console.WriteLine(stopwatch.Elapsed);

DG>        stopwatch.Reset();
DG>        stopwatch.Start();
DG>        var thread1 = db.Threads.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c1-ac73-433408000000"));
DG>        Console.WriteLine(stopwatch.Elapsed);

DG>        stopwatch.Reset();
DG>        stopwatch.Start();
DG>        var thread2 = db.Threads.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c2-ac73-433408000000"));
DG>        Console.WriteLine(stopwatch.Elapsed);

DG>        stopwatch.Reset();
DG>        stopwatch.Start();
DG>        var thread4 = db.Documents.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c1-ac73-433408000000"));
DG>        Console.WriteLine(stopwatch.Elapsed);

DG>        stopwatch.Reset();
DG>        stopwatch.Start();
DG>        var thread5 = db.Documents.FirstOrDefault(_board => _board.Id == new Guid("8a8d7480-af2b-46c2-ac73-433408000000"));
DG>        Console.WriteLine(stopwatch.Elapsed);

DG>      }
DG>

DG>

DG>00:00:00.0507296
DG>00:00:00.0030784
DG>00:00:00.0234894
DG>00:00:00.0029796
DG>00:00:00.0293127
DG>00:00:00.0026732


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

А приложи-ка к этому trace с SQL Server. Ты меряешь время выполнения всего запроса, без учета компиляции запроса на SQL Server, считывания данных с диска итп.
Re: Веб и динамика? Веб и статика+метапрограммирование.
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.12.10 19:53
Оценка:
Здравствуйте, Ziaw, Вы писали:

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


Z>Некоторое время назад, я сделал экспериментальную библиотеку для немерле для проверки этих концепций, они работают.


Ты смотрел Lift? (сам его недавно изучать начал)
По словам Поллака по сути на основе опыта с RoR он сделал решение на статике, которое вроде как не уступает по краткости рельсовому, но даёт плюсы по производительности (в презентациях говорят о неких абстрактных 3x для SLiM vs LAMP на примере 4square) и проверкам компилятора.
Только вот метапрограммирования в скале нет.
Ещё вопрос — у тебя основные пункты, мне показалось, относятся к ORMу, как в твоём проекте с поддержкой нереляционных хранилищ? E.g. в аббревиатуре SLiM буква M это MongoDB
Re[2]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 17.12.10 20:33
Оценка:
Здравствуйте, Курилка, Вы писали:

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


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


Z>>Некоторое время назад, я сделал экспериментальную библиотеку для немерле для проверки этих концепций, они работают.


К>Ты смотрел Lift? (сам его недавно изучать начал)


Гляну, интересно, с первого взгляда напоминает ur.

К>По словам Поллака по сути на основе опыта с RoR он сделал решение на статике, которое вроде как не уступает по краткости рельсовому, но даёт плюсы по производительности (в презентациях говорят о неких абстрактных 3x для SLiM vs LAMP на примере 4square) и проверкам компилятора.

К>Только вот метапрограммирования в скале нет.

Странно, чем же они разбирают это?
def render = {
  <div>
  <ul>
  {
    msgs.reverse.map(m => <li>{m}</li>)
  }
  </ul>
  <lift:form>
  {
    // a <lift:form> is an Ajax form. Define our
    // input box that sends the message to the chat server
    SHtml.text("", s => ChatServer ! s)
  }
  <input type="submit" value="Chat"/>
  </lift:form>
  </div>
}

Неужели в рантайме? Или препроцессор? Если так — то это каменный век.

К>Ещё вопрос — у тебя основные пункты, мне показалось, относятся к ORMу, как в твоём проекте с поддержкой нереляционных хранилищ? E.g. в аббревиатуре SLiM буква M это MongoDB


У меня основные пункты относятся к тому, что можно сгенерить на основе уже имеющейся информации, DRY.
Это схема БД, сигнатуры экшенов, статик ресурсы, вывод типов вьюмодели. Поскольку схема данных выступает в роли исходных данных, пришлось написать DSL для управления схемой. В принципе ничего не мешает схему описывать классами и генерить код их эффективной сериализации/десереализации и запросов к MongoDB.

На самом деле первый реальный проект в котором я задействовал nrails в итоге вообще ушел от реляцонной БД к couchdb. И мне неожиданно понадобился не ORM, а удобный джейсон. Но проект больше исследовательский и вялотекущий, на следующей итерации сделаю и джейсон.
Re[3]: Веб и динамика? Веб и статика+метапрограммирование.
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.12.10 20:44
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, Курилка, Вы писали:


К>>Ты смотрел Lift? (сам его недавно изучать начал)

Z>Гляну, интересно, с первого взгляда напоминает ur.
а мне не так чтоб, тут реальный рабочий фреймворк, проверенный не единожды с реальными практическими подходами

Z>Странно, чем же они разбирают это?

Z>
Z>def render = {
Z>  <div>
Z>  <ul>
Z>  {
Z>    msgs.reverse.map(m => <li>{m}</li>)
Z>  }
Z>  </ul>
Z>  <lift:form>
Z>  {
Z>    // a <lift:form> is an Ajax form. Define our
Z>    // input box that sends the message to the chat server
Z>    SHtml.text("", s => ChatServer ! s)
Z>  }
Z>  <input type="submit" value="Chat"/>
Z>  </lift:form>
Z>  </div>
Z>}
Z>

Z>Неужели в рантайме? Или препроцессор? Если так — то это каменный век.

XML — это часть языка, по словам авторов довольно-таки оптимизированная, плюс валидность (если не делать "обходных манёвров") проверяется компилятором (насколько я понимаю) и, к тому же, это решает проблему ескейпа "опасных" строк.

Z>На самом деле первый реальный проект в котором я задействовал nrails в итоге вообще ушел от реляцонной БД к couchdb. И мне неожиданно понадобился не ORM, а удобный джейсон. Но проект больше исследовательский и вялотекущий, на следующей итерации сделаю и джейсон.


По идее (ещё толком не пощупал) в лифте очень тесная интеграция всего js в код, речь не только за JSON, к примеру, вроде как для формы элементарно поменять обработку её через POST на AJAX, плюс для интегрированного в решение JS включаются стат. проверки.

Но, опять же повторюсь, сейчас я это говорю больше под впечатлением пары презентаций, а на реальное "щупанье" много времени особо пока не удаётся выделить.
Re[4]: Веб и динамика? Веб и статика+метапрограммирование.
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.12.10 20:46
Оценка:
Здравствуйте, hardcase, Вы писали:

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


Z>>Странно, чем же они разбирают это?

Z>>
Z>> ....
Z>>

Z>>Неужели в рантайме? Или препроцессор? Если так — то это каменный век.

H>В Scala был API для расширения компилятора. Возможно какой-то плагин прикрутили...


зачем домыслы?
Re[5]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 17.12.10 21:49
Оценка:
Здравствуйте, Ziaw, Вы писали:

Да, для map/reduse вполне достаточно небольшого подмножества основного языка. Так что нет проблем сделать так:
def design = json({
  language: "javascript";
  views: {
     people_by_age: {
         map: js(doc => when (doc.type == "Person")  emit(doc.age, doc));
     };
     oldest: {
         map:  js(doc => when (doc.type == "Person")  emit(doc.name, doc.age));
         reduce: js((keys, values) => Math.max.apply(null, values));
     }
  }
})

автокомплита и рефакторинга в js естественно не получим, но получим гарантировано синтаксически валидный js, что тоже немало.
Re[5]: Веб и динамика? Веб и статика+метапрограммирование.
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.12.10 22:15
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, Курилка, Вы писали:


К>>>>Ты смотрел Lift? (сам его недавно изучать начал)

Z>>>Гляну, интересно, с первого взгляда напоминает ur.
К>>а мне не так чтоб, тут реальный рабочий фреймворк, проверенный не единожды с реальными практическими подходами

Z>Я про принципы. Мы же не выбираем тут фреймворк для продакшена.


Ну тут у меня несколько отличные от твоих приоритеты, извини, что они не в тему для твоих рассуждений.
Re[3]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.12.10 01:13
Оценка:
Здравствуйте, Ziaw, Вы писали:
Z>Странно, чем же они разбирают это?
Z>
Z>def render = {
Z>  <div>
Z>  <ul>
Z>  {
Z>    msgs.reverse.map(m => <li>{m}</li>)
...
Z>

Z>Неужели в рантайме? Или препроцессор? Если так — то это каменный век.

Гы. Это аналог макроса XML-литералов, только так как в Скал нет макросов, его функциональность встрона в язык. Короче, как Васик Скала поддерживает ХМЛ-литералы на уровне синтаксиса. И заметь, ни чуть не парятся относительно того что шаблоны встроены в код и того что используется декомпозиция на функции вместо складывания всего в один огромный файл.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.12.10 01:31
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z> а теряем только REPL. Возможно REPL тоже реализуем, но у меня пока много белых пятен в видении этого механизма.


REPL терять не обязательно. Собственно в немерле он тоже есть, но в менее развитой форме. А вот в F# консольный REPL сделан хорошо и (говорят) работает отлично.

Конечно в динамике реализовать REPL и вообще подмену кода в рантайме сложно. Но для целей Веб-фрэймворков это делается довольно просто.

Z>Некоторое время назад, я сделал экспериментальную библиотеку для немерле для проверки этих концепций, они работают.


Z>Какие еще плюсы дает динамика в вебе, недостижимые для сочетания статики и метапрограммирования? Что если вместо альтернативы — (быстро пишем|быстро и более надежно работает) выбрать быстро пишем — быстро и более надежно работает.


Динамика дает простоту реализации, но жертвует надежностью и скоростью.

Собственно по большому счету динамика есть и в статике. Ведь компиляция и выполнение произведенные в рантайме мало чем отличается от интерпретации в рантайме. Разве что компиляция может отнять существенно больше времени при пером прогоне. Зато она дает существенный выигрыш в случае если код выполняется многократно (что характерно для веба).

В общем и целом фрэймворки вроде РоР практически полностью основаны на возможностях метапрограммирования Руби (Груви и им подобных сктиптовых языков). Еде за долго до появления Руби и тем более Рельс Пол Грэхм разработал веб-магазин для Яху. Так вот писал он его на Лисе. И при этом он очень интенсивно использовал его макросы. Так что ты правильно заметил. Главное тут не динамика, а МП. Хотя конечно кто-то может заметить, что Лисп тоже динамически типизирован. Но все же его МП основан на синтаксических макрах. И именно макры делаю Лисп столь мощным языком.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.12.10 01:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Конечно в динамике реализовать REPL и вообще подмену кода в рантайме сложно. Но для целей Веб-фрэймворков это делается довольно просто.


Сори. Имелось в виду "в статике".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 18.12.10 05:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Собственно по большому счету динамика есть и в статике. Ведь компиляция и выполнение произведенные в рантайме мало чем отличается от интерпретации в рантайме. Разве что компиляция может отнять существенно больше времени при пером прогоне. Зато она дает существенный выигрыш в случае если код выполняется многократно (что характерно для веба).


Вот-вот, ради этого утверждения я и создавал ветку. Нужна ли именно динамика в динамике (как бы странно это не звучало)? Или для некоторых классов задач вполне достаточно "динамики в статике"? Твоя точка зрения на вопрос понятна, хотелось бы услышать других.
Re[4]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 18.12.10 06:16
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Гы. Это аналог макроса XML-литералов, только так как в Скал нет макросов, его функциональность встрона в язык. Короче, как Васик Скала поддерживает ХМЛ-литералы на уровне синтаксиса. И заметь, ни чуть не парятся относительно того что шаблоны встроены в код и того что используется декомпозиция на функции вместо складывания всего в один огромный файл.


Я парюсь не тем, что шаблоны можно встроить в код, а тем, что их должно быть можно оттуда удобно "выстроить". Но это отдельный топик.
Re[3]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.12.10 06:21
Оценка:
Здравствуйте, Ziaw, Вы писали:

VD>>Собственно по большому счету динамика есть и в статике. Ведь компиляция и выполнение произведенные в рантайме мало чем отличается от интерпретации в рантайме. Разве что компиляция может отнять существенно больше времени при пером прогоне. Зато она дает существенный выигрыш в случае если код выполняется многократно (что характерно для веба).


Z>Вот-вот, ради этого утверждения я и создавал ветку. Нужна ли именно динамика в динамике (как бы странно это не звучало)? Или для некоторых классов задач вполне достаточно "динамики в статике"? Твоя точка зрения на вопрос понятна, хотелось бы услышать других.


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

То что ты называешь динамикой на самом деле называется иначе. Это скорее автоматизация кодирования (что ли). Более точного термина пока что подобрать не могу. Речь идет о возможности создания и интеграции в язык ДСЛ-ей упрощающих решение задач и "склеивающие" отдельные решения в единое (общее) решение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Веб и динамика? Веб и статика+метапрограммирование.
От: Курилка Россия http://kirya.narod.ru/
Дата: 18.12.10 11:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Гы. Это аналог макроса XML-литералов, только так как в Скал нет макросов, его функциональность встрона в язык. Короче, как Васик Скала поддерживает ХМЛ-литералы на уровне синтаксиса. И заметь, ни чуть не парятся относительно того что шаблоны встроены в код и того что используется декомпозиция на функции вместо складывания всего в один огромный файл.


Про "не парятся" это довольно странное утверждение, на Scala есть делеко не 1 (веб)фреймворк и подходы используются разные, но, например в том же Lift используются отдельные шаблоны (на том же xml), причём в качестве базы для view (причём предлагается подход view first в некоторое противопоставление MVC с акцентом на букве C в RoR и подобных фреймворках), а в circumflex используются, например, шаблоны Freemarker.
Re[5]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.12.10 12:19
Оценка:
Здравствуйте, Курилка, Вы писали:

VD>>Гы. Это аналог макроса XML-литералов, только так как в Скал нет макросов, его функциональность встрона в язык. Короче, как Васик Скала поддерживает ХМЛ-литералы на уровне синтаксиса. И заметь, ни чуть не парятся относительно того что шаблоны встроены в код и того что используется декомпозиция на функции вместо складывания всего в один огромный файл.


К>Про "не парятся" это довольно странное утверждение, на Scala есть делеко не 1 (веб)фреймворк и подходы используются разные, но, например в том же Lift используются отдельные шаблоны (на том же xml), причём в качестве базы для view (причём предлагается подход view first в некоторое противопоставление MVC с акцентом на букве C в RoR и подобных фреймворках), а в circumflex используются, например, шаблоны Freemarker.


Ты влез в спор который начался не здесь и не сейчас. Суть спора была в том, что Ziaw взросший на ASP и вообще МС-ных пожходах на прочь не мог принять простую истину, что код веб-страницы не обязан лежать в одном огромном факле и быть плоским и прямолинейным, а может собираться из частей функциями (в том числе и ФВП). Я как раз считал, что такое подход намного мощнее и гибче. Лифт устроен именно так и является отличным подтверждением правоты моих слов. Ziaw тогда просил привести примеры, но у меня их не было под рукой...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 18.12.10 12:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ты влез в спор который начался не здесь и не сейчас. Суть спора была в том, что Ziaw взросший на ASP и вообще МС-ных пожходах на прочь не мог принять простую истину, что код веб-страницы не обязан лежать в одном огромном факле и быть плоским и прямолинейным, а может собираться из частей функциями (в том числе и ФВП). Я как раз считал, что такое подход намного мощнее и гибче. Лифт устроен именно так и является отличным подтверждением правоты моих слов. Ziaw тогда просил привести примеры, но у меня их не было под рукой...


Ты с каким-то вымышленным Ziaw спорил тогда Я лично совсем не против этого был, даже объяснял тебе, что спарк позволяет собирать все из кусков, в том числе допиливается локальными функциями. Что и реализовал потом, пример функции тут. Но ты настаивал на своем суперском вьюэнжине, что я не мог потянуть тогда.

Сейчас другое дело, пег отлажен и появилась дока, я его пощупал на практике, скоро можно будет регистрировать свои парсеры в компиляторе. С этими возможностями свой вьюэнжин выглядит недорогим и более предпочтительным.
Re[7]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.12.10 14:35
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Ты с каким-то вымышленным Ziaw спорил тогда Я лично совсем не против этого был, даже объяснял тебе, что спарк позволяет собирать все из кусков, в том числе допиливается локальными функциями. Что и реализовал потом, пример функции тут. Но ты настаивал на своем суперском вьюэнжине, что я не мог потянуть тогда.


У нас все ходы записаны .

Z>Сейчас другое дело, пег отлажен и появилась дока, я его пощупал на практике, скоро можно будет регистрировать свои парсеры в компиляторе. С этими возможностями свой вьюэнжин выглядит недорогим и более предпочтительным.


В том все и дело, что для Лифта не нужны никакие вьюэнжины. Шаблон может лежать просто в ХМЛ-файле. А микро-шаблоны в коде. Ты же хотел чтобы весь шаблон лежал в отдельном файле, т.е. внешний ДСЛ. Я же тебе объяснял, что подобные вещи требуют декомпозиции. И внутренний ДСЛ тут подойдет несравнимо лучше.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 18.12.10 15:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В том все и дело, что для Лифта не нужны никакие вьюэнжины. Шаблон может лежать просто в ХМЛ-файле. А микро-шаблоны в коде. Ты же хотел чтобы весь шаблон лежал в отдельном файле, т.е. внешний ДСЛ. Я же тебе объяснял, что подобные вещи требуют декомпозиции. И внутренний ДСЛ тут подойдет несравнимо лучше.


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

Для лифта вьюэнжины может и не нужны, а для ASP.NET MVC, поверх которого работают nrails, нужны. Это та часть системы которая соберет все нужные шаблоны в один html и засунет его в респонс. В каком виде они будут лежать и откуда браться это исключительно детали реализации конкретного вьюэнжина.
Re[6]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 19.12.10 19:14
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>А вот этот кошмар не надо расписывать каждый раз "_.key(JString(JInt(30)))". И спрятать это за макросом или за вызовом функции — не так уж важно. Хотя нет. Нахождение всех вхождения макроса и его автоматический рефакторинг Решарпер не предоставит. А вот с функцией — без проблем.


Естественно, зачем писать макрос, если можно использовать функцией. Макрос нужно писать там, где функцией не обойтись.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[8]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 19.12.10 19:47
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Где можно и нельзя обойтись функцией всецело зависит от системы типов.


Но есть задачи принципиально не решаемые просто функцией в рамках статической типизации.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 19.12.10 19:59
Оценка:
Здравствуйте, Кэр, Вы писали:

Z>>в динамике выглядел бы примерно так:

Z>>
Z>>viewReturn = Person.design_name.people_by_age(30)
Z>>


Z>>Согласись, разный по читабельности код?


Кэр>Соглашусь. Почему куда-то делось queryView — совсем неясно. И не надо рассказывать, что это мол и так понятно из контекста. Нифига не понятно. Особенно тому человеку, который видит этот код в первый раз. А с ротацией людей в команде — это происходит постоянно.


Это вопрос знания инструмента, люди на рельсах пишут register_user_path(@user) вместо asp.net mvc'шного Url.Route("RegisterUser", new { id = user.id}) и никого не парит куда делся Url.Action. Так же пишут Person.find_by_age(30) или Person.my_custom_scope(42).

Кэр>А вот этот кошмар не надо расписывать каждый раз "_.key(JString(JInt(30)))". И спрятать это за макросом или за вызовом функции — не так уж важно. Хотя нет. Нахождение всех вхождения макроса и его автоматический рефакторинг Решарпер не предоставит. А вот с функцией — без проблем.


Он и будет спрятан за функцией. А вообще, странно, что кого-то волнует, какой функцией 30 превращается в джейсон. Зато всех волнует, как и безопаснее дергать нужные вьюхи из базы. Через строковые константы или с автокомплитом.

Кэр>Можно. Только чем больше я смотрю на эту возню с мета-программированием тем больше мне кажется, что оно хорошо только для прототипирования новых решений. А реализацию самих решений лучше отдать матерым профи, но даже близко не давать в руки обычным программистам. Иначе опять получится, что исходная задача проще решается в лоб на С, чем в обход через создание специальных DSL на чем-то другом. Ключевые библиотеки в проекте не дают писать кому угодно. С DSL ситуация еще хуже — хотя бы потому что технология новая и не обложена поддержкой мега-тулов вроде Решарпера.


Вот мы и подошли к основной теме, почему в вебе рулит динамика. Потому что есть очень большой сегмент сайтов, которые вечные прототипы. В них новый функционал появляется не реже раза в месяц. И никто в здравом уме не будет приглашать команду профи за огромные деньги переписать работающий прототип на С или любом другом надежном языке, ибо выльется это в бешенные бабки и к моменту готовности безнадежно устареет. Да и не сможет решение вырубленное в граните дальше жить и развиваться теми же темпами. Тот же гугл свой look&feel на питоне меняет быстрее чем я к нему успеваю привыкнуть. И питон там не потому, что сишных и джава профи в гугле недостаточно, а потому, что та же джава не даст той скорости разработки и легкости изменения.

Сравни распространенность XWiki, навороченной, с богатейшим API и кучей плагинов и той же mediawiki (корпоративный интранет сегмент мы не берем). Казалось бы разработчикам легче взять готовую расширяемую и настраиваемую по самое не могу систему, так нет, либо пишут свою вики, либо берут что-то готовое/полуготовое на скриптах.
Re[10]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 19.12.10 20:08
Оценка:
Здравствуйте, gandjustas, Вы писали:

H>>Но есть задачи принципиально не решаемые просто функцией в рамках статической типизации.


G>Например?


Типизированный вызов хранимки из БД, решается генераторами кода либо макросами.

Выше приводил пример джейсона. Функцией оно решается, но создание объекта выглядит малочитабельно.
На этом примере, можно обломать всех кто плачет о том, что в DSL надо вникать всем новым участникам проекта. Только они забывают, что при его отсутствии всем придется вникать в API конструирования джейсона используемой библиотеки.
Re[12]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 19.12.10 20:48
Оценка:
Здравствуйте, gandjustas, Вы писали:

Z>>Типизированный вызов хранимки из БД, решается генераторами кода либо макросами.

G>Он в принципе не решается в compile-time, потому что хранимка может поменяться независимо от кода.

Несмотря на это, подобные генераторы пользуются бешеной популярностью.

Z>>Выше приводил пример джейсона. Функцией оно решается, но создание объекта выглядит малочитабельно.

G>Тем не менее читается. Те принципиально решаема задача.

Принципиально все задачи решаются на брейнфаке.

G>Вообще говоря гораздо эффективнее была бы сериализация в JSON, а не ручное конструирование его в любом виде.


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

Но сериализация тоже хороший пример задачи, которая на функциях решается через задницу рефлекшн. Поскольку это непримемлемо медленно, приходится добавлять рантайм генерацию кода, чтобы не лазить за метаданными каждый раз.
Re[13]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.12.10 21:01
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>>>Выше приводил пример джейсона. Функцией оно решается, но создание объекта выглядит малочитабельно.

G>>Тем не менее читается. Те принципиально решаема задача.
Z>Принципиально все задачи решаются на брейнфаке.
Мы говорим конкретно о том что принципиально не решается типизировано без макросов. Имеется ввиду compile-time генерация и модификация кода, precompile-time не рассматриваем.

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

G>>Вообще говоря гораздо эффективнее была бы сериализация в JSON, а не ручное конструирование его в любом виде.

Z>Спорное утверждение, сериализация эффективнее там где нужна сериализация, ручное конструирование там, где нужно конструирование. И те и другие задачи востребованы.
Z>Но сериализация тоже хороший пример задачи, которая на функциях решается через задницу рефлекшн. Поскольку это непримемлемо медленно, приходится добавлять рантайм генерацию кода, чтобы не лазить за метаданными каждый раз.
Рантайм-генерация это не макросы.
Re[14]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 19.12.10 22:39
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Мы говорим конкретно о том что принципиально не решается типизировано без макросов. Имеется ввиду compile-time генерация и модификация кода, precompile-time не рассматриваем.


Мне не нравится слово принципиально. Принципиально макросы заменяются аналогичными, но менее удобными инструментами: анализаторы кода, генераторы исходников, рантайм генерация кода и инструментирование байткода. Это все очень тяжелые пушки. Их используют когда уже деваться некуда.

Теперь о задачах, например, во время компиляции можно найти все чистые методы и параллелить их вычисления или прозрачно кешировать результаты.

Code contracts.

Пресловутый DSL в прекомпайл тайме такой геморой, что его никто не использует. Максимум — делают что-то типа fluent api и наслаждаются.

AOP без макросов делается либо с огромным оверхедом либо через bytecode instrumentation, что собственно является очень неудобным аналогом макросов. IoC на макрах тоже будет сильно юзабельнее.

G>Любое взаимодействие с любой внешней системой не решается только при условии, что интерфейс внешней системы не меняется. Тогда можно хоть compile-time, хоть precompile. А в динамике еще и runtime-кодогенерация работает отлично, в статике чуть хуже, хотя для той же сериализации вполне подходит.


Естественно подходит, ибо ничего лучше нет. Хотя xmlserializer можно сгенерить в сборку заранее. Эту фичу придумали не от хорошей жизни.

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

G>Рантайм-генерация это не макросы.

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

А вообще мы ушли от темы Мне вообще не интересно доказывать незаменимость макросов для статики. Незаменимых инструментов мало, есть те которые заменить дорого.

Тема про динамику. Какие ее возможности дающие профит в вебразработке нельзя протащить в статически типизируемый язык заюзав макросы не убив при этом лаконичность и выразительность.
Re[12]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 19.12.10 22:42
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>чем кстати макросы отличаются от функций?


Макрос выполняется в компайл тайме, он может анализировать компилируемый код и изменять его, например сгенерировать нужные методы для вызова хранимки.
Re[12]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 19.12.10 22:53
Оценка:
Здравствуйте, Кэр, Вы писали:

Z>>Типизированный вызов хранимки из БД, решается генераторами кода либо макросами.


Кэр>Вполне возможно, что это решается через type providers о которых говорил Don Syme на PDC.


Кэр>Это решение потенциально покрывает такой пласт проблем, что возникает большой вопрос — а зачем тогда нужны будут макросы.


Я бы переформулировал вопрос. Зачем жалкое подобие макросов type providers тому у кого есть полноценные макросы. Эти провайдеры для конкретной задачи реализуются одним человеком максимум за пару недель без привлечения Don Syme и хайпа на PDC.

А вообще я уже устал офтопить, тема не является рекламой макросов. Мне не интересно обращать кого-то в немерле. Меня интересуют плюсы динамики которые недостижимы в статике с поддержкой метапрограммирования.
Re[13]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 19.12.10 23:51
Оценка:
DG>>чем кстати макросы отличаются от функций?

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


по смыслу template-ы и generics делают тоже самое, но при этом они не являются макросами.

т.е. по чему нужны именно макросы, а не навореченные template-ы?
Re[15]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 03:05
Оценка:
Здравствуйте, Ziaw, Вы писали:

G>>Мы говорим конкретно о том что принципиально не решается типизировано без макросов. Имеется ввиду compile-time генерация и модификация кода, precompile-time не рассматриваем.


Z>Мне не нравится слово принципиально. Принципиально макросы заменяются аналогичными, но менее удобными инструментами: анализаторы кода, генераторы исходников, рантайм генерация кода и инструментирование байткода. Это все очень тяжелые пушки. Их используют когда уже деваться некуда.


Ты абсолютно прав, но ты ничего не докажешь тем, кто знаком только с "закатом солнца вручную", так как они мыслит другими категориями.

Проблема в том, что ты знаком со всеми подходами на практике, а твой оппонент только с частью на практике, а с частью в теории. А как известно в теории теория и практика одинаковы, но на практике то — нет.

Так что можешь хоть в прах разбиться, но ты ничего не докажешь ибо — это синдром Блаба.

Собственно и ты тоже был бы в этом лагере если бы некоторое время назад "с дуру" не освоил бы "другую сторону силы".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 03:15
Оценка:
Здравствуйте, DarkGray, Вы писали:

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


DG>по смыслу template-ы и generics делают тоже самое, но при этом они не являются макросами.

DG>т.е. по чему нужны именно макросы, а не навореченные template-ы?

Чтобы тебе было лучше понятна ошибка в твоей логике я приведу твои же утверждения но заменю объекты.

XXX> Самолеты используются для передвижения. Они быстро летают и с них видно большую площадь.

По смыслу тракторы и велосипеды делают тоже самое, но при этом они не являются самолетами.


Да, черт побери, есть подвид задач которые решаются и тем и тем, но вот макросы не тождественны шаблонам и тем более дженерикам. С помощью макросов можно сделать все что можно сделать с помощью шаблонов и джененриков. Более того, то что хорошо делается шаблонами и дженериками не стоит делать марами. Но многое что можно сделать макрами сделать шаблонами и дженериками невозможно. В частности выделенное в цитате Ziaw сделать дженериками или шаблонами невозможно. Кроме того в них нельзя анализировать внешние источники данных.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 03:23
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Я бы переформулировал вопрос. Зачем жалкое подобие макросов type providers тому у кого есть полноценные макросы.


Ну, как зачем? Затем же зачем нужны готовые макры, чтобы пользоваться готовыми мета-программами. Просто Кэр явно предвзято относится к мета-программам которые называются макрами, и почему-то с радостью принимает те же мета-программы захандкоженые в язык.

Следующие строки являются детекторами. Если при их прочтении вы почувствуете резкую боль в анальном отверстии, то прекратите чтение (с) Лурк .

Короче мы имеем дело с животными страхами противопоставленными поклонению гения Макйрософта. МС он же плохого не предложит. И раз МС не ходит некоторыми дорогами, значит они очень опасны.

Z>А вообще я уже устал офтопить, тема не является рекламой макросов. Мне не интересно обращать кого-то в немерле. Меня интересуют плюсы динамики которые недостижимы в статике с поддержкой метапрограммирования.


Ты не понял. Большинство людей будут ревностно бороться с тем, что они не понимают/не знают. Это человеческая природа. Вот это и раздражало меня в прошлом. Теперь правда смешит.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 08:14
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>Вы сами задали вопрос противопоставив type providers макросам. Я вам высказал свою точку зрения на тот момент, когда type providers появятся, и если они будут справлятся с этими задачами.


Передергиваете, type providers макросам противопоставили вы
Автор: Кэр
Дата: 20.12.10
.

Z>>Язык проектировать так же просто, как проектировать иерархию объектов, даже проще, ошибки нагляднее.


Кэр>Ну конечно проще. Если не думать о конфликтах синтаксиса и ключевых слов/символов. Особенно о неявных, когда все компилируется, а понять что не работает можно только взвалив тонну генеренного кода на плечи. И если не думать о обратной совместимости со старым синтаксисом, который вообще не подразумевал особого расширения, а тут ВНЕЗАПНО пришлось расширить. И вместо того, чтобы напрямую решать прикладную задачу нужно тратить время на выдумывания синтаксических завихрений, чтобы и от нового синтаксиса глаз не вываливался и старый компилировался.


А что, можно проектировать иерархию классов не задумываясь об SRP, LSP и прочих P? Это такая простая задача не наделать конфликтов с этими не вполне формальными принципами? Что, там нет ситуаций, когда все компилируется, а для исправления ошибки нужен редизайн иерархии либо костыли в виде навешиваний нескольких параллельных иерархий визиторов?

Банальные экстеншен методы в умелых руках могут наделать жутких конфликтов, а если использовать их в виде DLL, понять, что не работает можно только взвалив на плечи рефлектор и тучу чужого кода.

Кэр>В общем, есть много объективных причин (еще со времен Лиспа), почему кастомный синтаксис в прикладных задачах используется очень редко. Его удел — библиотеки, которые вещь в себе. И никакой другой задачи, кроме предоставления своего функционала не решают. Это вполне может быть веб-фреймворк. Но это очень вряд ли прикладная задача.


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

Z>>Ваши аргументы напомнили мне фанатов процедурного программирования с жаром доказывающих ненужность С++ тем, что классы не нужны, когда есть структуры. Кричащими о сложности автокомплишена в современнных IDE и о том, что С++ никем нормально не поддерживается. О том, что наследование и виртуальные вызовы на С используются от силы в 1% проектов и требуют огромных усилий по поддержке. О том, что код с этими вызовами на С ни черта не понимают люди только что пришедшие в проект и потому такой код бяка.


Кэр>Правильно. Доказательства по аналогии — это наш метод. Всегда создает такое приятное душевное равновесие. Окружающих убедить удается не всегда — но себя всегда пожалуйста.


Это не доказательства по аналогии, это пример вполне здравых рассуждений доказывающих ненужность конкретной технологии. Хотел обратить внимание на то, что все эти утверждения были абсолютно верны, логичны и обоснованы. Тем не менее не так страшен черт, IDE сделали, грабли научились аккуратно обходить.

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


Кэр>Выдыхайте, то что я лапшу на ушах стараюсь не держать, не означает, что я считаю себя эталоном.


Перенос своего неприятия инструмента на всех именно это и означает.
Re[15]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 08:28
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Мне не нравится слово принципиально. Принципиально макросы заменяются аналогичными, но менее удобными инструментами: анализаторы кода, генераторы исходников, рантайм генерация кода и инструментирование байткода. Это все очень тяжелые пушки. Их используют когда уже деваться некуда.


Обоснуй, пожалуйста, чем генератор исходников менее удобен. Причем не простой генератор исходников, а внешний визуальный DSL, который сериализуется в код. Основная аудитория Немерле — это все же не рубисты, а вендор дотнета как раз активно продвигает именно внешние DSL-и, на основе которых и работают всяческие Entity Framework и иже с ними.
Re: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 08:45
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Давайте рассмотрим, основные плюсы которые дает динамика в вебе тем же рельсам в по сравнению с asp.net mvc:

Z>

    Z>
  1. Возможность не описывать поля модели хранящейся в БД
    Z>
  2. Возможность сформировать пачку данных и передать их во вьюху не заморачиваясь описанием их структуры
    Z>
  3. Возможность нагенерировать удобных хелперных методов для каждого чиха пользуясь соглашениями об именовании.
    Z>
  4. Делать красивые DSL заточенные для мелких задач.
    Z>
Z>Вероятно я что-то пропустил, думаю меня дополнят.

Я тебя читаю и вижу: что лучше MVC со статикой или MVC с динамикой. На MVC свет клином не сошелся. Да и работой с данными веб-разработка не исчерпывается. У тебя все выглядит как попытка создать идеальный MVC Но это, я бы сказал, нефиговое такое сужение темы.

Динамика в веб популярна прежде всего по историческим причинам. По большому счету конкретно для веб достаточно по фиг — динамика там на сервер-сайд или не динамика. Все равно в вебе по его специфике очень много динамики. В современном "веб 2.0" (или уже "веб 3.0"?) еще и очень много ДжаваСкрипта. А ДжаваСкрипт — весьма и весьма динамичный во всех смыслах этого слова язык.

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

И выстрелит на мой взгляд тот фреймворк, который полностью решит эту проблему — независимо от того, какая там типизация.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 09:10
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Обоснуй, пожалуйста, чем генератор исходников менее удобен. Причем не простой генератор исходников, а внешний визуальный DSL, который сериализуется в код. Основная аудитория Немерле — это все же не рубисты, а вендор дотнета как раз активно продвигает именно внешние DSL-и, на основе которых и работают всяческие Entity Framework и иже с ними.


Для каких-то случаев генератор исходников вероятно будет более удобен, но в общем случае вряд ли. Например тем, что при генерации мы ничего не знаем о коде который будет окружать генерируемый код. К примеру в нрельсах генерируются хелперы для типизированного указания экшенов, беря информацию о контроллерах и их экшенах из компилируемого кода. Хотя в Т4 вроде есть кое какие механизмы вытаскивания знаний студии о коде. Еще можно распарсить исходники, получить синтаксис, но для нормального анализа понадобится инструмент сравнимый по сложности с компилятором.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: dotneter  
Дата: 20.12.10 09:14
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>а вендор дотнета как раз активно продвигает именно внешние DSL-и, на основе которых и работают всяческие Entity Framework.

После чего приходится создавать Code Only c fluent интерфейсом.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[14]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 09:15
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>по смыслу template-ы и generics делают тоже самое, но при этом они не являются макросами.


DG>т.е. по чему нужны именно макросы, а не навореченные template-ы?


Странный вопрос. А template есть еще куда наворачивать? Мне кажется он уже уперся в потолок сложности решений по такому принципу. Если тебе не нравится слово макросы, назови их навороченными template и используй только как навороченные template.
Re[2]: Веб и динамика? Веб и статика+метапрограммирование.
От: Mamut Швеция http://dmitriid.com
Дата: 20.12.10 09:25
Оценка:
ВВ>Поэтому прикручивать макросы, который типизировано вызывают хранимку или как там у вас, это наверное очень интересно, но не шибко-то и нужно. Ибо их есть у нас. Пусть и без макросов, а несколько иначе. Но с т.з. использования — ничем не хуже. А вот тонны ДжаваСкрипта как были, так и остаются. Причем проблема даже не в ДжаваСкрипте как таковом, а в том, что код приходится писать на двух языках, на ДжаваСкрипте и серверном и, главное, то, что зачастую задачи одного и того же плана, приходится реализовывать как на сервере, так и на клиенте.

ВВ>И выстрелит на мой взгляд тот фреймворк, который полностью решит эту проблему — независимо от того, какая там типизация.


Ну, есть гугловский GWT, но не сказать, что он прямо-таки выстрелил


dmitriid.comGitHubLinkedIn
Re[2]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 09:28
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Я тебя читаю и вижу: что лучше MVC со статикой или MVC с динамикой. На MVC свет клином не сошелся. Да и работой с данными веб-разработка не исчерпывается. У тебя все выглядит как попытка создать идеальный MVC Но это, я бы сказал, нефиговое такое сужение темы.


Я всего лишь рассмотрел плюсы динамики на примере двух самых популярных для своих платформ веб-фреймворков с разных сторон баррикады. Давай свои примеры, обсудим их.

ВВ>Динамика в веб популярна прежде всего по историческим причинам. По большому счету конкретно для веб достаточно по фиг — динамика там на сервер-сайд или не динамика. Все равно в вебе по его специфике очень много динамики. В современном "веб 2.0" (или уже "веб 3.0"?) еще и очень много ДжаваСкрипта. А ДжаваСкрипт — весьма и весьма динамичный во всех смыслах этого слова язык.


ВВ>Поэтому прикручивать макросы, который типизировано вызывают хранимку или как там у вас, это наверное очень интересно, но не шибко-то и нужно. Ибо их есть у нас. Пусть и без макросов, а несколько иначе. Но с т.з. использования — ничем не хуже.


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

ВВ>А вот тонны ДжаваСкрипта как были, так и остаются. Причем проблема даже не в ДжаваСкрипте как таковом, а в том, что код приходится писать на двух языках, на ДжаваСкрипте и серверном и, главное, то, что зачастую задачи одного и того же плана, приходится реализовывать как на сервере, так и на клиенте.


А проблема ли это? Я не видел ни одной подобной платформы на которой писать джаваскрипты было приятнее чем на джаваскрипте. Он вполне себе продуманный язык и слой абстракции над ним будет не только помогать, но и активно ограничивать.

ВВ>И выстрелит на мой взгляд тот фреймворк, который полностью решит эту проблему — независимо от того, какая там типизация.


Ну есть такой фреймворк, node.js называется. Вобщем-то выстрелил. Согласен, проблему кучи джаваскрипта в вебе, метапрограммирование решает плохо.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 09:28
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Для каких-то случаев генератор исходников вероятно будет более удобен, но в общем случае вряд ли. Например тем, что при генерации мы ничего не знаем о коде который будет окружать генерируемый код. К примеру в нрельсах генерируются хелперы для типизированного указания экшенов, беря информацию о контроллерах и их экшенах из компилируемого кода. Хотя в Т4 вроде есть кое какие механизмы вытаскивания знаний студии о коде. Еще можно распарсить исходники, получить синтаксис, но для нормального анализа понадобится инструмент сравнимый по сложности с компилятором.


Тут, видимо, надо различать разные моменты:

— Удобство разработки самого DSL-я
— Удобство использования этого DSL-я
— Привычность того или иного механизма

С т.з. удобства разработки претензий к макросам нет. Мне не так редко приходится генерировать код с помощью XSLT и какой-то матери, чтобы это стало очевидным. Кстати, получение метаданных — достаточно типичная задача. В Т4 это кстати работает, т.е. метаданные внутри самого шаблона получить можно, но не всегда удобно. В рукопашном варианте в целом аналогично. Самым простым решением проблемы с метаданными — это вынесение этих самых метаданных (скажем, интерфейсов, по которым генерируются бизнес-сущности или whatever) в отдельную сборку.

Но это одна сторона медали. Другая — это DSLTools, BuildProviders в студии и пр.

И отсюда мы плавно переходим ко второму моменту, а именно — то, что итоговый результат и в случае внешнего DSL, и в случае с макросами по крайней мере одинаково удобен в плане использования. А визуальные DSL-и для многих даже удобнее макросов. А если мне *как пользователю* не видно разницы...

Иначе говоря, зачем убеждать кого-то, что макросы — это круто? Речь ведь не о макросах на самом деле, а о конкретном фреймворке. А применительно к конкретному фреймворку мне интересно прежде всего удобство использования этого фреймворка, а не то, насколько проще жилось его создателям, вы уж извините

Да и, кстати, при работе с данными статическая типизация не дает практически ничего. Статическая типизация хорошо работает лишь в том случае, когда "реальность" данная нам в компайл-тайме всегда совпадает с реальностью, данной в райнтайме. В случае с БД это, к сожалению, не так. Скомпилировался — не значит, что код корректный и что даже названия атрибутов правильные. И в этом плане тут опять же нет никакого противопоставления — можно делать ДАЛ на основе статически-типизированного языка, раз уж такой под рукой имеется, можно — на основе динамически-типизированного. Оба подхода примерно равные, с примерно равным количеством граблей — и преимуществ в данном случае статика не даст.
Re[3]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 09:31
Оценка:
Здравствуйте, Mamut, Вы писали:

ВВ>>И выстрелит на мой взгляд тот фреймворк, который полностью решит эту проблему — независимо от того, какая там типизация.

M>Ну, есть гугловский GWT, но не сказать, что он прямо-таки выстрелил

Ну решений-то немало на самом деле. Та же компиляция в ДжаваСкрипт сейчас становится весьма модной. Я имею в виду не то, что выстрелит любой фреймворк, который эту проблему решит Скорее то, что решение этой проблемы, есть, так сказать, необходимый компонент для "выстреливания".
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 09:41
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Иначе говоря, зачем убеждать кого-то, что макросы — это круто?


Так просят ведь.

ВВ>Речь ведь не о макросах на самом деле, а о конкретном фреймворке. А применительно к конкретному фреймворку мне интересно прежде всего удобство использования этого фреймворка, а не то, насколько проще жилось его создателям, вы уж извините


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

ВВ>Да и, кстати, при работе с данными статическая типизация не дает практически ничего. Статическая типизация хорошо работает лишь в том случае, когда "реальность" данная нам в компайл-тайме всегда совпадает с реальностью, данной в райнтайме. В случае с БД это, к сожалению, не так.


В случае с БД это сильно зависит от специфики задачи. Если специфика задачи требует постоянно изменения схемы бд, то и механизмы доступа к данным будут совсем другие. Это очень отдельный класс задач, на котором пасуют почти все ORM.

ВВ>Скомпилировался — не значит, что код корректный и что даже названия атрибутов правильные. И в этом плане тут опять же нет никакого противопоставления — можно делать ДАЛ на основе статически-типизированного языка, раз уж такой под рукой имеется, можно — на основе динамически-типизированного. Оба подхода примерно равные, с примерно равным количеством граблей — и преимуществ в данном случае статика не даст.


Если применять инструмент по назначению он дает гарантию. А можно подсунуть БД со схемой отличной от рантайма или поменять эту схему в рантайме. Вобщем один шар сломать один потерять можно, только зачем?
Re[3]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 09:45
Оценка:
Здравствуйте, Ziaw, Вы писали:

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


Проблема, как я сказал, не в том, что джаваскрипт, а в том, что присутствует само разделение на клиент и сервер, которое как правило не совпадает с логическим разделением приложения на лаеры. В итоге получается, что код решающий одни и те же задачи (скажем, генерацию пользовательского интерфейса) пишется и на сервере, и на клиенте, на разных языках, с использованием разных подходов. Вот это, мне кажется, — проблема. А сколько там строк кода надо для описания модели — по-моему достаточно по фиг. Как и то, какая там используется типизация в ДАЛе.

Например, одно полноценное и отработанное на практике решение этой проблемы — писать все на ДжаваСкрипте на клиенте Серверная часть при этом становится тонкой и занимается лишь тем, что возвращает на клиент данные в виде ХМЛ-я или Джейсона. Роль языка, на котором эта серверная часть пишется, как ты понимаешь, весьма серьезно падает.

Можно вытаскивать ДжаваСкрипт на сервер — это вот как раз случай node.js. Но тогда у нас вообще везде ДжаваСкрипт и становится непонятно, о чем тут вообще говорим-то

Еще одно решение — компилятор в ДжаваСкрипт. А вот тут возможности Немерла как раз очень пригодятся.

Других вариантов я не вижу
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 09:53
Оценка:
Здравствуйте, Ziaw, Вы писали:

ВВ>>Иначе говоря, зачем убеждать кого-то, что макросы — это круто?

Z>Так просят ведь.

Ну запостил тему в форум "Флейм" и еще удивляешься, что тебя разводят на флейм. В первый раз что ли здесь

ВВ>>Речь ведь не о макросах на самом деле, а о конкретном фреймворке. А применительно к конкретному фреймворку мне интересно прежде всего удобство использования этого фреймворка, а не то, насколько проще жилось его создателям, вы уж извините

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

Сама тема, видимо, интересная, но обсуждение все же идет в контексте веб-фреймворка, и контекст на мой взгляд странный. Хотя бы потому что с точки зрения любого фреймворка важно не то, как это фреймворк *пишется*, а то, как он используется. И я не вижу кардинальной разницы в использовании фреймворка, построенного на кодогенерации, фреймворка на макросах и фреймворка на динамике.

ВВ>>Да и, кстати, при работе с данными статическая типизация не дает практически ничего. Статическая типизация хорошо работает лишь в том случае, когда "реальность" данная нам в компайл-тайме всегда совпадает с реальностью, данной в райнтайме. В случае с БД это, к сожалению, не так.

Z>В случае с БД это сильно зависит от специфики задачи. Если специфика задачи требует постоянно изменения схемы бд, то и механизмы доступа к данным будут совсем другие. Это очень отдельный класс задач, на котором пасуют почти все ORM.

На новой БД по ходу разработки многое может меняться. Ты хочешь сказать, что *как правило* "статически-типизированный ДАЛ" работает корректно? Да, согласен. Так и есть. В противном случае никто бы не пользовался всяческими Линками. Но знаешь что интересно? Динамически-типизированный ДАЛ тоже *как правило* работает корректно.

Причем тесты для ДАЛа я буду писать в обоих случаях — и тесты довольно банальные, вплоть до того, что их генерить можно. И эти тесты вообще нивелируют какую бы то ни было разницу в типизациях. Т.е., повторюсь, в этой области по фиг вообще — статика или динамика. Результат один.
Re[15]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.10 09:55
Оценка:
Z>Странный вопрос. А template есть еще куда наворачивать? Мне кажется он уже уперся в потолок сложности решений по такому принципу. Если тебе не нравится слово макросы, назови их навороченными template и используй только как навороченные template.

есть конечно.

как минимум сейчас есть следующие ограничения:
во-первых, возможности шаблонов останавливаются на уровне классов.
на уровне полей/свойств/методов шаблоны уже не работают, не говоря уже про тела методов
во-вторых, шаблоны не предоставляют нормального способа для описания условий (операции над множествами, логические операции, операции над целыми числами и т.д.)
в-третьих, IDE — должна уметь наглядно показывать результат после применения (частичного применения) шаблонов.

зы
макросы плохи тем, что они могут сделать с кодом все что угодно, и соответственно макросы могут очень легко испортить код.
стыковка одного макроса с другим макросом — та еще по легкости задача.

для упрощения задач предсказания поведения, комбинирования, автоматической проверки валидности и т.д. обычно допускают лишь определенный набор изменений(инструментов) — но это ближе к шаблонам, чем к макросам.

ззы
т.е. я провожу грань между макросами и шаблонами как:
макросы имеют полный доступ к асту
шаблоны дают опосредованный доступ к асту, и предоставляют только "хорошие" способы изменения аста (и над этим подмножеством изменений — намного проще решить задачи комбинирования, предсказуемости, доказательства валидности и т.д.)
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.10 09:59
Оценка:
ВВ>Причем тесты для ДАЛа я буду писать в обоих случаях — и тесты довольно банальные, вплоть до того, что их генерить можно. И эти тесты вообще нивелируют какую бы то ни было разницу в типизациях. Т.е., повторюсь, в этой области по фиг вообще — статика или динамика. Результат один.

у статики ниже себестоимость сопровождения.
как минимум не надо писать простые тесты на каждое изменение кода.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 10:03
Оценка:
Здравствуйте, DarkGray, Вы писали:

ВВ>>Причем тесты для ДАЛа я буду писать в обоих случаях — и тесты довольно банальные, вплоть до того, что их генерить можно. И эти тесты вообще нивелируют какую бы то ни было разницу в типизациях. Т.е., повторюсь, в этой области по фиг вообще — статика или динамика. Результат один.

DG>у статики ниже себестоимость сопровождения.
DG>как минимум не надо писать простые тесты на каждое изменение кода.

Мы же о ДАЛе говорим? Для ДАЛа тесты будут в любом случае.
Потом ДАЛ — это "ненастоящая" статическая типизация, в том-то и проблема. Сколько раз уже нарывались на то, что кто-нибудь залезет в модель того же Linq2Sql, чего-нибудь там добавит, поправит — и все, рассинхрон. *Без тестов* тоже фиг найдешь ошибку.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.10 10:15
Оценка:
ВВ>Мы же о ДАЛе говорим? Для ДАЛа тесты будут в любом случае.
ВВ>Потом ДАЛ — это "ненастоящая" статическая типизация, в том-то и проблема. Сколько раз уже нарывались на то, что кто-нибудь залезет в модель того же Linq2Sql, чего-нибудь там добавит, поправит — и все, рассинхрон. *Без тестов* тоже фиг найдешь ошибку.

но одно дело сотня общих тестов на общую работу dal-а, которые при сопровождении почти не меняются.
другое дело тысяча тестов на то, что где-то в генераторе при сравнении не забыли числа сравнить как числа, а не как число со строкой, или что в одной из веток переменная инициализируется другим типом(забыли при внесении изменения поправить) и т.д.
вот такие опечатки — очень геморройно ловить тестами.
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 10:17
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>но одно дело сотня общих тестов на общую работу dal-а, которые при сопровождении почти не меняются.

DG>другое дело тысяча тестов на то, что где-то в генераторе при сравнении не забыли числа сравнить как числа, а не как число со строкой, или что в одной из веток переменная инициализируется другим типом(забыли при внесении изменения поправить) и т.д.
DG>вот такие опечатки — очень геморройно ловить тестами.

Это ты уже не в ту степь пошел. Статику вс. Динамику я здесь обсуждать не буду, наговорились уже на эту тему. Речь — исключительно о ДАЛ-е. А динамический ДАЛ прекрасно себя чувствуется и в насквозь статическом языке.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 10:30
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну запостил тему в форум "Флейм" и еще удивляешься, что тебя разводят на флейм. В первый раз что ли здесь


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

ВВ>Сама тема, видимо, интересная, но обсуждение все же идет в контексте веб-фреймворка, и контекст на мой взгляд странный. Хотя бы потому что с точки зрения любого фреймворка важно не то, как это фреймворк *пишется*, а то, как он используется. И я не вижу кардинальной разницы в использовании фреймворка, построенного на кодогенерации, фреймворка на макросах и фреймворка на динамике.


Контекст навеян темой про руление динамики в вебе. Потому и выбран веб.

ВВ>>>Да и, кстати, при работе с данными статическая типизация не дает практически ничего. Статическая типизация хорошо работает лишь в том случае, когда "реальность" данная нам в компайл-тайме всегда совпадает с реальностью, данной в райнтайме. В случае с БД это, к сожалению, не так.

Z>>В случае с БД это сильно зависит от специфики задачи. Если специфика задачи требует постоянно изменения схемы бд, то и механизмы доступа к данным будут совсем другие. Это очень отдельный класс задач, на котором пасуют почти все ORM.

ВВ>На новой БД по ходу разработки многое может меняться. Ты хочешь сказать, что *как правило* "статически-типизированный ДАЛ" работает корректно? Да, согласен. Так и есть. В противном случае никто бы не пользовался всяческими Линками.


Ну так и DAL генерируется на момент компиляции системы, а не на момент начала разработки.

ВВ>Но знаешь что интересно? Динамически-типизированный ДАЛ тоже *как правило* работает корректно.


Т.е. если динамика лишается своих плюсов, от нее можно избавиться, так?

ВВ>Причем тесты для ДАЛа я буду писать в обоих случаях — и тесты довольно банальные, вплоть до того, что их генерить можно. И эти тесты вообще нивелируют какую бы то ни было разницу в типизациях. Т.е., повторюсь, в этой области по фиг вообще — статика или динамика. Результат один.


Писать тесты на DAL занятие не только бесполезное, но и вредное. Нужна лишь гарантия, что DAL рассчитан на работу именно с этой схемой данных, остальное протестирует статика. Алгоритмические ошибки тестами выявить очень сложно.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 20.12.10 11:09
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Недорого. Для чего я вижу полезно использование макросов — так это всяческая кодогенерация. Это явно говорит о том, что язык недостаточно выразителен в этой области. Т.к. из меньшего (несколько строк макроса) получаем большее (кучу кода на этом языке). Однако для этой цели можно пользоваться и другими средствами — внешние кодогенераторы, препроцессоры и т.д.


Типы тоже кодогенераторами и препроцессорами выводить? А ведь многие макросы занимаются именно этим — выводят типы выражений, которые трансформируются.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 20.12.10 11:13
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>зы

DG>макросы плохи тем, что они могут сделать с кодом все что угодно, и соответственно макросы могут очень легко испортить код.
DG>стыковка одного макроса с другим макросом — та еще по легкости задача.

Был у нас макрос — реализовывал LINQ в Nemerle. А также был другой макрос (ToExpression) — генерировал Expression tree линковский. Но когда они писались, у нас небыло макроса для генерирования анонимных классов и вместо классов в проекциях использовались кортежи. И вот однажды это макрос (аналог new { .... } ) был написан. Как вы думаете, сколько усилий было потрачено на стыковку linq и ToExpression с ним? — Нисколько. Все заработало само.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 20.12.10 12:18
Оценка:
Здравствуйте, DarkGray, Вы писали:

H>>А сколько макросов Вы написали и отладили?


DG>для начала ответьте где вам логику преподавали?


Признаюсь, логику мне не преподавали.


>> Как вы думаете, сколько усилий было потрачено на стыковку linq и ToExpression с ним? — Нисколько. Все заработало само.


DG>и где вас научили что результаты одиночного факта можно использовать для доказательства правильности всего класса утверждений?


Результаты фактов (а также личный опыт) могут существенно сузить применимость утверждения.

DG>ps

DG>ты приводишь пример по стыковке не пересекающихся макросов.
DG>а серьезные проблемы начинаются с макросами, которые проводят изменения в одних и тех же точках.

Ну так нужны примеры Я не помню чтобы ктото пытался комбинировать несколько могучих макросов, которые выполняют немалую работу и генерируют/модифицируют много кода.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 20.12.10 12:26
Оценка:
Здравствуйте, lomeo, Вы писали:

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


H>>Типы тоже кодогенераторами и препроцессорами выводить? А ведь многие макросы занимаются именно этим — выводят типы выражений, которые трансформируются.


L>Для кодогенерилки достаточно динамики, нафиг тут типы выводить?


foreach — макрос выводящий типы. Как его на кодогенераторах сделать?

L>По остальным пунктам, как я понимаю, замечаний нет?


Конечно есть, но уже сколько раз говорилось о них что лень повторять. Макросы нужны как средство автоматизации и абстрагирования: ядро Nemerle очень компактно, а макросы позволяют его расширить в нужную сторону нужным способом.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 12:36
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Можно потроллить?


Все бы так конструктивно тролили

Z>>Теперь о задачах, например, во время компиляции можно найти все чистые методы и параллелить их вычисления или прозрачно кешировать результаты.


L>Нахождение чистых методов — pure type systems

L>Параллелить — автоматическое распараллеливание
L>Кэширование — ленивость, referential transparency, common subexpression elimination etc.

Эти системы либо хардкодятся в компилятор, либо навешиваются сверху его расширением. Т.е. метапрограммирование дает хороший инструмент для создания этих механизмов. Хотя можно конечно и без него, только сложнее будет.

Z>>Пресловутый DSL в прекомпайл тайме такой геморой, что его никто не использует. Максимум — делают что-то типа fluent api и наслаждаются.


L>Ну, неправда же. Или не понимаю о чём речь.


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

Z>>AOP без макросов делается либо с огромным оверхедом либо через bytecode instrumentation, что собственно является очень неудобным аналогом макросов.


L>Ой, тут как раз много чего можно сказать. Например, монад трансформеры. И вообще AOP не от хорошей жизни — либо язык недостаточно выразителен для описания advise-ов, либо программа так построена, что только AOP позволит впихнуть нвпихуемое. Всё таки separation of concerns должен по возможности достигаться с помощью правильного дизайна и удобного языка, а не с помощью внешних средств типа AOP.


Это утверждение говорит только об убогости AOP как внешних средств. Как только оно станет на расстоянии вытянутого пальца, ему найдутся вполне повседневные применения не нарушающие дизайн.

Z>>IoC на макрах тоже будет сильно юзабельнее.


L>Чем? Нужен пример, чтобы сравнить с тем, что можно делать без макросов.


Я оговорился, не IoC в общем смысле, а DI как механизм для него. Достигается например применением AOP ко всем конструкторам в коде.

L>Недорого. Для чего я вижу полезно использование макросов — так это всяческая кодогенерация. Это явно говорит о том, что язык недостаточно выразителен в этой области. Т.к. из меньшего (несколько строк макроса) получаем большее (кучу кода на этом языке). Однако для этой цели можно пользоваться и другими средствами — внешние кодогенераторы, препроцессоры и т.д.


Любой универсальный язык недостаточно выразителен в каждой специфической области. Но лично я всегда отбрасывал кодогенераторы как решение на самый крайний случай. А маросы не пугают нисколечко.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 13:13
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Обоснуй, пожалуйста, чем генератор исходников менее удобен.


Примерно тем же чем неудобно подключение исходников на Смолтолке к дотнетному приложению. В принципе осуществимо, но геморроя столько что ни кто не берется.

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

Генерация же кода — это много разного геморроя. Сам проект генератора получится на порядок сложнее. Потом его как-то нужно прикручивать к целевому проекту. Если нужен анализ кода, то вообще придется использовать многостадийную сборку с анализом промежуточных результатов. И код анализа будет ужасен, так как самое высокоуровневое средство будет — рефлексия. Далее будут исходники которые каждый норовит подправить и не может найти соответствие между оными и частью генератора который их породил. В общем, это огромный гимор на который люди рашаются только если по другому они уже совсем замучилась.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 13:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Генерация же кода — это много разного геморроя. Сам проект генератора получится на порядок сложнее. Потом его как-то нужно прикручивать к целевому проекту. Если нужен анализ кода, то вообще придется использовать многостадийную сборку с анализом промежуточных результатов. И код анализа будет ужасен, так как самое высокоуровневое средство будет — рефлексия. Далее будут исходники которые каждый норовит подправить и не может найти соответствие между оными и частью генератора который их породил. В общем, это огромный гимор на который люди рашаются только если по другому они уже совсем замучилась.


Я о другом. Скажем, linq2Sql, использующий "внешний" генератор кода, не менее удобен в использовании, чем аналогичное решение с макросами. Здесь же, мне показалось, не о крутости макросов идет речь, а об удобстве веб-фреймворка.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.10 13:23
Оценка:
H>Ну так нужны примеры Я не помню чтобы ктото пытался комбинировать несколько могучих макросов, которые выполняют немалую работу и генерируют/модифицируют много кода.

т.е. тогда ты утверждаешь, что макросы можно применять только для решения маленьких локальных задачек?

но это входит в противоречие с предыдущим утверждением, что макросы — это наше всё, которую могут решить любую задачу этапа компиляции.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 13:25
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>С т.з. удобства разработки претензий к макросам нет. Мне не так редко приходится генерировать код с помощью XSLT и какой-то матери, чтобы это стало очевидным. Кстати, получение метаданных — достаточно типичная задача. В Т4 это кстати работает, т.е. метаданные внутри самого шаблона получить можно, но не всегда удобно. В рукопашном варианте в целом аналогично. Самым простым решением проблемы с метаданными — это вынесение этих самых метаданных (скажем, интерфейсов, по которым генерируются бизнес-сущности или whatever) в отдельную сборку.


Одним словом это называется — гемморой. Вот ты и начал сам отвечать на свой вопрос.

ВВ>Но это одна сторона медали. Другая — это DSLTools, BuildProviders в студии и пр.


Их ты пробовал использовать? В прочем DSLTools это из другой оперы. Это скорее средство создания интерактивных диаграмм. Штука несомненно иногда очень полезная. Только вот средства изучения, преобразования и генерации кода там точно такие же — T4.

ВВ>И отсюда мы плавно переходим ко второму моменту, а именно — то, что итоговый результат и в случае внешнего DSL, и в случае с макросами по крайней мере одинаково удобен в плане использования.


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

ВВ>А визуальные DSL-и для многих даже удобнее макросов. А если мне *как пользователю* не видно разницы...


Визуальные DSL может и хороши но у них есть два недостатка.
1. Они далеко не для всего применимы. Точнее будет сказать применимы они весьма редко.
2. Их очень не просто создавать. Фактически DSLTools предоставляет средство только для рисования диаграм. А весь код по анализу кода и генерации оного придется написать самому. Отсюда и такое малое количество тех самых DSL-ей произведенных с его помощью.

Короче, ты опять теоретизируешь есть только один путь понять почему макросы лучше — попробовать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 20.12.10 13:32
Оценка:
Здравствуйте, Ziaw, Вы писали:


Z>Неужели в рантайме? Или препроцессор? Если так — то это каменный век.


Не все препроцессоры аналоги сишного, например camlp4 тот же XML/html запросто встраивает в код:

let html_of_tweet t =
   <:html<
      <div class="tweet">
        <div class="author">$html_of_author t.author$</div>
        <div class="date">$Date.html_of_date t.date$</div>
        <div class="contents">$t.contents$</div>
      </div>
   >>


http://www.openmirage.org/blog/introduction-to-htcaml
http://ocsigen.org/eliom/manual/1.3.0/1#p1baseprinciples

Ну и тут http://ocsigen.org/ как раз веб фреймворк на статическом (даже слишком статическом) функциональном языке,
но без макросов, но с препроцессорным (не обязательным) расширением синтаксиса.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 13:38
Оценка:
Здравствуйте, VladD2, Вы писали:

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

VD>Из сказанного никак не вытекает последнего утверждения.

Тебе неудобно пользоваться кодом, которые сгенерирован через студийные билд-провайдеры? С т.з. юзабилити это чем от макросов отличается?

ВВ>>А визуальные DSL-и для многих даже удобнее макросов. А если мне *как пользователю* не видно разницы...

VD>Визуальные DSL может и хороши но у них есть два недостатка.
VD>1. Они далеко не для всего применимы. Точнее будет сказать применимы они весьма редко.
VD>2. Их очень не просто создавать. Фактически DSLTools предоставляет средство только для рисования диаграм. А весь код по анализу кода и генерации оного придется написать самому. Отсюда и такое малое количество тех самых DSL-ей произведенных с его помощью.

И одно важное достоинство — они широко используются и, так сказать, насаждаются вендором платформы. Люди к ним привыкли. И таки-да, многим удобнее модель набросать в дизайнере, чем делать это макросом.

VD>Короче, ты опять теоретизируешь есть только один путь понять почему макросы лучше — попробовать.


Еще раз — речь не идет о том, лучше или хуже макросы. Речь об удобстве итогового продукта. Енд-юзеру по фиг — макросы там или внешний ДСЛ. Важен результат.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.10 14:11
Оценка:
H>А теперь примеры некомбинируемых макросов в студию. А также вменяемые юзкейзы их комбинации.

макрос распараллеливания кода может конфликтовать с linq2sql.

т.к. и тот и другой — хочет select/where заменить на свою конструкцию.

но этот конфликт решается просто: что макрос распараллеливания должен работать всегда после linq2sql, в других задачах — такой явной зависимости может не быть.

зы
причем дьявол в мелочах.
например, распараллеливание + linq2sql может дохнуть в итоге на том, что база технически или по лицензии поддерживает лишь ограниченное кол-во соединений.
соответственно макрос параллеливания может потребоваться учить, чтобы он по разному обрабатывал код с linq и без linq
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 15:24
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Хотя бы потому что с точки зрения любого фреймворка важно не то, как это фреймворк *пишется*, а то, как он используется.


А тебе действительно не важно то насколько легко фрэймворк пишется и насколько он гладко скрывает все сложности разработки прикладной задачи?

Тебе не кажется, что если фрэймвор делается на базе более подходящего решения, то и результат получается лучше?
Согласись куда приятнее иметь даже не фрэймворк, а библиотеку которая простым подключением к проекту устраняет все сложности и не стыковки которые били ранее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 15:25
Оценка:
Здравствуйте, lomeo, Вы писали:

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


Ты считаешь, что написать новый язык под конкретный проект будет проще? Ты точно ничего не путаешь? Силами одной команды можно относительно быстро сделать решение на макросах работающее с некоторыми ограничениями, которые всех устраивают. Разрабатывать новый язык слишком дорого. Вообще. Потянуть это могут считанные компании.

L>А! Речь про eDSL? Если взять другие языки, то окажется, что с этим там всё в порядке — ruby, например. Или, чтобы было схоже с Nemerle — Scala. Язык не имеет макросов, но писать на нём DSL-и приятно.


Жаль что на фреймворке который показывал здесь Курилка об этом забыли.

L>Если всё таки важен синтаксис, то во-первых — почему? Наверное, захочу примеров — мы как-то с VladD2 обсуждали разницу описания грамматики в Parsec и EBNF. Вместо p* пишем many p, вместо a | b, пишем a <|> b. Конечно, можно переопределить *, | для того, чтобы синтаксис был схож, но даже если нет — отличия только в синтаксисе — насколько это важно? Гораздо важнее в eDSL ведь семантика, как мне кажется.


L>Во-вторых — препроцессоры тоже разные бывают. С удобными разборщиками типа haskell-src-exts или с помощью camlp4 можно очень удобно работать.


Ну не может лишнее звено добавлять удобство. Как ни крути. Я не знаю, зачем там препроцессоры, расскажи плиз.

Z>>Это утверждение говорит только об убогости AOP как внешних средств. Как только оно станет на расстоянии вытянутого пальца, ему найдутся вполне повседневные применения не нарушающие дизайн.


L>А вот примеры очень хочется. Для меня писать pointcut, который матчит по имени (!) то ещё убожество. Абстракция тут явно протекает.


Да тут простор фантазии, Допустим все методы ISession.Commit(), или все методы помеченные атрибутом TransactionScope(); Или все методы, внутри которых есть вызов любого метода ISession. Ни один PostSharp не даст таких возможностей. Да что методы, pointcut оборачивающий все секции lock {} для того же логгирования или профилирования.

Z>>Я оговорился, не IoC в общем смысле, а DI как механизм для него. Достигается например применением AOP ко всем конструкторам в коде.


L>Т.е.? Зачем такие сложности? Что мы от этого выигрываем?


От DI? Или от избавления явного обращения к контейнеру?

Z>>Любой универсальный язык недостаточно выразителен в каждой специфической области.

L>Не так. "Любой универсальный язык недостаточно выразителен в какой-то специфической области" и применение макросов показывает в какой именно.

Любой универсальный язык недостаточно выразителен в некотором множестве специфичиеских областей
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 15:30
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Сколько раз уже нарывались на то, что кто-нибудь залезет в модель того же Linq2Sql, чего-нибудь там добавит, поправит — и все, рассинхрон. *Без тестов* тоже фиг найдешь ошибку.


В иделогии РоР база руками обычно не меняется. Для того там есть миграции. Раньше приверженцы разных Руби утверждали, что такую крутую штуку как миграции и можно залудить благодаря динамике. Но Ziaw воспроизвел миграции не хуже чем на Руби, но при этом в статически-типизированном окружении.

Собственно о том он и говорит... РоР — это набор сервисов, таких как, например, миграции красиво абстрагированных и склеенных вместе с помощью внутренних ДСЛ-ей. Но это не достижение динамики. Это достижение мета-программирования. И того же самого результата можно добиться и с использованием статически-типизированного мета-программирования.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 15:33
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Это ты уже не в ту степь пошел. Статику вс. Динамику я здесь обсуждать не буду, наговорились уже на эту тему. Речь — исключительно о ДАЛ-е. А динамический ДАЛ прекрасно себя чувствуется и в насквозь статическом языке.


Он сам создаст проблемы в следствии той самой рассинхронизации. Раз уж язык у нас статически-типизированный, то ДАЛ должен проверить версию мета-данных БД и выдать сообщение об ошибке если она отлична от той на которую рассчитан ДАЛ. Или ДАЛ должен уметь преобразовать метаданные БД к версии с которой он способен работать. Именно так поступают рельсы. Так что их динамичность никак не используется в этом аспекте.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 16:00
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Недорого. Для чего я вижу полезно использование макросов — так это всяческая кодогенерация. Это явно говорит о том, что язык недостаточно выразителен в этой области. Т.к. из меньшего (несколько строк макроса) получаем большее (кучу кода на этом языке). Однако для этой цели можно пользоваться и другими средствами — внешние кодогенераторы, препроцессоры и т.д.


Трепачи они всегда были находками для шпионов. Пока что ваш любимый супер-пупер язык всех времен и народов — Хаскель, глухо сливает в выразительности и производительности "недостаточно выразительному язык".

Хаскелю уже где-то лет двадцать, да? Но вот язык которому без году неделя делает его в области тех же парсеров как котенка, хотя казалось бы это та область на которой Хаскель пиарят последние лет 10.

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

Ваша хваленая ленивость сразу же выбрасывается за борт когда речь заходит о скорости выполнения.

Ваша хваленая гибкость так же почему-то не достаточна того чтобы оформить код именно так как хочется. Сравни, например, грамматики записанные на Хаскеле и грамматики записанные с использованием макроса PegGrammar. Ну, ведь очевидно же, что хаскелю явно не хватает выразительности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 20.12.10 16:19
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Это если у Вульфхаунда не получится превратить все в филиал срача "Динамика вс. Статика".

Так это вы опять орете "динамика это круто" и что характерно опять абсолютно голословно.

ВВ>И да, мне *как пользователю* неважно, насколько сильно страдал разработчик при разработке фреймворка.

Ой трололо.
Это очень важно.
Ибо если разработчик тратит меньше усилий он теми же ресурсами сделает гораздо более качественное решение.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 16:22
Оценка:
Здравствуйте, Ziaw, Вы писали:

L>>Нахождение чистых методов — pure type systems

L>>Параллелить — автоматическое распараллеливание
L>>Кэширование — ленивость, referential transparency, common subexpression elimination etc.

Z>Эти системы либо хардкодятся в компилятор, либо навешиваются сверху его расширением. Т.е. мета-программирование дает хороший инструмент для создания этих механизмов. Хотя можно конечно и без него, только сложнее будет.


Ты с ним так же говоришь на разных языках. Это представитель религии Хаскеля (даже не ФП, а его радикального крыла ).

Причем в данном случае уже ты сам вне контекста, так как явно не знаком с Хаскелем и его прибамбасами.

Хаскелисты пропагандируют ДСЛ-и на основе системы типов, трансформации функций, бесскобочной нотации и ленивости выполнения. Эти фишки действительно дают преимущества по сравнению с каким-нибудь языком в котором нет никаких средств мета-программирования.

Вот только они в своих рассуждениях забывают упоминать детали. А детали все портят...
1. Даже выразителности Хаскеля зачастую недостаточно чтобы записывать ДСЛ-и именно в том виде в котором его видя программисты. В итоге в ход идут ужимки. Вместо символов "/" в грамматике начинают использоваться супер-пупер конструкции вида "<@>" и т.п.
2. Красивый и легко расширяемый код в большинстве случаев — это медленный код. А быстрый код — это не очень красивый код. Например, красивые выкрутася на хаскеле зачастую связаны с применением ленивости (отложенного вычисления). Но те же ленивые списки частенько очень сильно замедляют код. Скажем для представление строк в хаскеле по умолчанию применяются ленивые списки, но это очень медленно. По этому там же придумали бинарные строки, которые, как я понимаю, являются массивами символов. Но вот уже с ними работать не так здорово.
3. Хаскель хорош когда речь идет о написании вычислительного кода. Но для проектирования больших симстем в нем нет ничего акромя возможности вручную эммулировать паттерн "Абстрактный Тип Данных". Соответственно и все выкрутасы с кодом и ДСЛ-ями обычно ограничиваются тем что мы называем уровнем метода.

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

Интересно, что авторы Хаскеля намного более трезвы в своих оценках. Их мнение значительно более взвешено. Вот тут есть интервью с одним из авторов Хаскеля где он весьма трезво и разумно говорит об этом языке. С ним трудно не согласиться (в отличии от фанатов). Хаскель, в первую очередь — это полигон (лаборатория) идей. Его главная идея изоляция и явная декларация кода содержащего побочные эффекты. А вот система типов у него переусложненная, но все равно не являющаяся идеальным средством для реализации DSL-ей.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 16:27
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>макросы плохи тем, что они могут сделать с кодом все что угодно, и соответственно макросы могут очень легко испортить код.


Во! Еще один. Буквально недавно тоже самое заявлял автор D.
Это видимо общая черта людей — придумывать себе пугалки вместо того чтобы просто попробовать то о чем рассуждаешь.

Просто подумай над простым фактом. ЛИСПу уже 50 лет и никто еще не заявлял, что он пострадал от того, что макрос им испортил код.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 16:28
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>для упрощения задач предсказания поведения, комбинирования, автоматической проверки валидности и т.д. обычно допускают лишь определенный набор изменений(инструментов) — но это ближе к шаблонам, чем к макросам.


А что за макросы ты написал чтобы выражать такие суждения?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 16:33
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>шаблоны дают опосредованный доступ к асту, и предоставляют только "хорошие" способы изменения аста (и над этим подмножеством изменений — намного проще решить задачи комбинирования, предсказуемости, доказательства валидности и т.д.)


Ну, вот давай сравним "хороший" доступ по конечному результату. Авторы Спирита работают над проектом уже много лет. А мы с Вольфхаундом заткнули Спирит за пол года ненапряжной рабты. Причем заткнули по всем параметрам. Наш парсер: быстр, выдает четкие и понятные сообщения об ошибках, использует более продвинутые алгоритмы, имеет чистую и понятную грамматику, интегрируется с IDE (показывает сообщения об ошибках по месту, обеспечивает навигацию). При этом код нашего рашения в несколько раз меньше и проще.

Так почему же на авторам Спирита не удалось "намного проще решить задачи комбинирования, предсказуемости, доказательства валидности и т.д."? Неужели мы настолько круче?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 16:39
Оценка:
Здравствуйте, DarkGray, Вы писали:

H>>А сколько макросов Вы написали и отладили?


DG>для начала ответьте где вам логику преподавали?


Хороший ответ на вопрос! Что и следовало ожидать. Слив засчитан!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.10 16:42
Оценка:
VD>А что за макросы ты написал чтобы выражать такие суждения?

из крупных:
генерация js
linq2sql
linq2xpath
преобразование кода в cps
склеивание множества запросов к базе в единый запрос

зы
но это не немерлье.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 16:49
Оценка:
Здравствуйте, hardcase, Вы писали:

DG>>ps

DG>>ты приводишь пример по стыковке не пересекающихся макросов.
DG>>а серьезные проблемы начинаются с макросами, которые проводят изменения в одних и тех же точках.

H>Ну так нужны примеры Я не помню чтобы ктото пытался комбинировать несколько могучих макросов, которые выполняют немалую работу и генерируют/модифицируют много кода.


Скажу больше не зафиксировано вообще ни одного пересечения. Были только случаи когда одни макросы не могли обработать результаты работы других, так как отрабатывали раньше. Что конечно проблема, но решаемая.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 17:09
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Ты считаешь, что написать новый язык под конкретный проект будет проще? Ты точно ничего не путаешь? Силами одной команды можно относительно быстро сделать решение на макросах работающее с некоторыми ограничениями, которые всех устраивают. Разрабатывать новый язык слишком дорого. Вообще. Потянуть это могут считанные компании.


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

L>>А! Речь про eDSL? Если взять другие языки, то окажется, что с этим там всё в порядке — ruby, например. Или, чтобы было схоже с Nemerle — Scala. Язык не имеет макросов, но писать на нём DSL-и приятно.

Z>Жаль что на фреймворке который показывал здесь Курилка об этом забыли.

Какой? Liftweb? А что там было не так, я уже не помню обсуждение?
Потом, это же нелогично — найти пример, где не используются возможности DSL-строения на Scala и предлагать его как опровержение возможности построения DSL-ей на нём. Посмотри squeryl, например. Вообще проще по задачам смотреть. Как задачи решаются с помощью макросов, как без. Есть хорошие примеры?

L>>Во-вторых — препроцессоры тоже разные бывают. С удобными разборщиками типа haskell-src-exts или с помощью camlp4 можно очень удобно работать.

Z>Ну не может лишнее звено добавлять удобство. Как ни крути. Я не знаю, зачем там препроцессоры, расскажи плиз.

А что такое макросы в Nemerle — они же тоже только в компайл-тайме работают?
Препроцессор обсуждать не хочется. По сути у него с макросом одна беда — используем там, где язык недостаточно выразителен сам по себе. Я их привёл как пример того, что есть тулзы не менее удобные, чем макросы. Например при использовании haskell-src-exts будет тот же паттерн-матчинг по разбору и перелопачиванию AST (с учётом типов и всего, что в AST лежит), что и в макросах Nemerle. Подключение — указание в директиве в исходнике.

Z>Да тут простор фантазии, Допустим все методы ISession.Commit(), или все методы помеченные атрибутом TransactionScope(); Или все методы, внутри которых есть вызов любого метода ISession. Ни один PostSharp не даст таких возможностей. Да что методы, pointcut оборачивающий все секции lock {} для того же логгирования или профилирования.


Как я и писал, это всё можно решить правильным дизайном на языке более высокого уровня. Использование AOP вместо улучшения дизайна — это использование подпорок, IMHO. Бывает по разному, но из моего опыта — AOP обычно вынужденная мера. Главная проблема AOP — ухудшение понимания кода. Мы не знаем, что сюда ещё вклинилось, нужно смотреть пойнткаты.

ISession.Commit — наследование не интерфейсов, а миксинов.
lock в некоторых языках это не конструкция, а first-class функция, уровень, на котором в одном месте нужно смешивать и lock и логирование — определённо выше, чем уровень самого lock — он, скорее всего будет обёрнут.
Ну и т.д. — например. вместо атрибутов можно использовать систему типов. Которые уже приведут к требуемому поведению (см. монад трансформеры).

Z>>>Я оговорился, не IoC в общем смысле, а DI как механизм для него. Достигается например применением AOP ко всем конструкторам в коде.

L>>Т.е.? Зачем такие сложности? Что мы от этого выигрываем?
Z>От DI? Или от избавления явного обращения к контейнеру?

От использования макросов для DI.

Z>Любой универсальный язык недостаточно выразителен в некотором множестве специфичиеских областей


Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 17:12
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


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


ВВ>Про меньшее количество движений — это совсем неочевидно. Как компилятор может контролировать то, что известно только в рантайме?


А как тесты у тебя это контролируют?

ВВ>Если, скажем, у меня задача читать ХМЛ, который приходит из внешнего источника — то это динамика. И если ты макросом сгенеришь красивый и как бы статически типизированный код для чтения этого ХМЛ-я — то это все равно будет динамика. Просто выглядящая как статика. И если вместо ХМЛ-я придет фигня, то все свалится в рантайме.


Кто мешает отловить экзепшен и сказать, что пришла фигня? Чем тут динамика поможет? Точно так же свалится в рантайме, если не делать проверок.

ВВ>Речь, наверное, не про "движения", а про меньшее количество тестов. Но тут мне тоже непонятно, насколько конкретно этих тестов будет меньше и как это вообще повлияет на разработку. Зато, например, мне понятно, что с тем же РОРом у меня уже есть готовый и работающий РЕПЛ. А вас пока только в планах. И я понимаю, что РЕПЛ-то как раз весьма заметно повлияет на мою эффективность.


Именно про движения, чтобы внести правки в код чрезмерно обложенный тестами надо исправить больше тестов.

Z>>Это что за задача с маленьким сервером и огромным клиентом?

ВВ>Это не задача, это один из вариантов решения.

Еще раз, что за задача, в которой сервер настолько прост, а гуи к нему настолько сложен, что такая разница в коде?

Z>>Это потому, что у тебя есть код и там и там, естественно ты его можешь и там и там править. У меня код только там, разъезжаться в таком случае просто нечему.


ВВ>Только "там" — это где? На сервере? Как у тебя так получается? Как можно писать приложения с богатым клиентским слоем, вроде того Гмейла, и не формировать HTML на джаваскрипте?


Бррр... Ты цитату не оттуда взял, это относилось к схеме бд и коду DAL.

ВВ>Да дело даже не в этом, пусть ДжаваСкрипт HTML вообще никак не генерит. Он что, с ним и не работает? Контрол задизеблить надо — сабмит форму или ее часть на сервер?


Я теряю полет мысли, честно.

Z>>Давай пример юнит теста и сценария в котором этот юнит тест нам будет полезен. Я не представляю о чем ты говоришь.


ВВ>А что непонятно-то Простые изолированные тесты, которые в первую очередь проверяют консистентность модели. Ну или корректность работы процедур, если они имеются. Скажем, один тест проверяет все процедуры для работы с конкретной сущностью — вставил, прочитал, сверил результаты, удалил.


Зачем проверять консистентность модели которая впрямую отображает БД и зачем нужны процедуры которые делают CRUD? При этом их еще и тестировать надо? В каком сценарии нам эти процедуры и тесты полезны будут?
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 17:18
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>В общем, есть много объективных причин (еще со времен Лиспа), почему кастомный синтаксис в прикладных задачах используется очень редко.


Можно на два вопроса ответить?

Когда кончились времена Лисп-а?

И сколько проектов ты написал на Лисп-е?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 17:23
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Кастомный синтаксис это всего лишь один из многочисленных способов применения метапрограммирования и он широко используется во всех языках с поддержкой метапрограммирования, это два. Тема как раз про вебфреймворки в динамике и статике, это три.


Да, но ты то ведешь беседу с человеком чьи воззрения базируются на использовании языков в которых вообще нет мета-программирования. Отсюда для него просто нет того о чем ты говоришь. Вот и реакция. Я долго бился об эту стену. Она не прошибаема.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 17:30
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Я о другом. Скажем, linq2Sql, использующий "внешний" генератор кода, не менее удобен в использовании, чем аналогичное решение с макросами. Здесь же, мне показалось, не о крутости макросов идет речь, а об удобстве веб-фреймворка.


Вот не надо. Бредовее тула я еще не видел. Единственный нормальный способ обновить сгенеренный код — убить все классы и перетащить снова все нужные объекты базы из окна сервера. При этом если ты в проперти гриде делал какие-то правки, они исчезнут.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 17:32
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну хорошие шаблоны очень близки по возможностям к макросам. Например D'шные вполне позволяют "анализировать компилируемый код" http://www.digitalmars.com/d/2.0/traits.html http://www.digitalmars.com/d/2.0/phobos/std_traits.html


Я только что влез в тему где дишники обсуждали возможности расширения своих "хороших" шаблонов. Точнее шаблоны их вообще мало пригодны для многих вещей. Так что речь шла о их "стринг миксинах". Вот погляди. Только у дишников все странно. В том числе и интерфейс их конфы. Так что всех сообщений почему-то не видно. Может есть какие-то другие интерфейсы?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 17:33
Оценка:
Здравствуйте, Ziaw, Вы писали:

ВВ>>Про меньшее количество движений — это совсем неочевидно. Как компилятор может контролировать то, что известно только в рантайме?

Z>А как тесты у тебя это контролируют?

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

ВВ>>Если, скажем, у меня задача читать ХМЛ, который приходит из внешнего источника — то это динамика. И если ты макросом сгенеришь красивый и как бы статически типизированный код для чтения этого ХМЛ-я — то это все равно будет динамика. Просто выглядящая как статика. И если вместо ХМЛ-я придет фигня, то все свалится в рантайме.

Z>Кто мешает отловить экзепшен и сказать, что пришла фигня? Чем тут динамика поможет? Точно так же свалится в рантайме, если не делать проверок.

Динамика ничем не поможет. Сам сценарий изначально — это динамика. Чтение ХМЛ через XmlReader — это динамика. Работа с базой — это динамика. Динамика — это просто данность. Тут другой вопрос — чем в данном случае поможет статика?

ВВ>>Речь, наверное, не про "движения", а про меньшее количество тестов. Но тут мне тоже непонятно, насколько конкретно этих тестов будет меньше и как это вообще повлияет на разработку. Зато, например, мне понятно, что с тем же РОРом у меня уже есть готовый и работающий РЕПЛ. А вас пока только в планах. И я понимаю, что РЕПЛ-то как раз весьма заметно повлияет на мою эффективность.

Z>Именно про движения, чтобы внести правки в код чрезмерно обложенный тестами надо исправить больше тестов.

Да ну, не так страшен черт. Что вы так боитесь этих тестов-то? Меняются готовые тесты вообще довольно редко. Чаще пишутся новые. Сделал фичу — парочку-другую тестов для нее. Это уже до автоматизма доходит. Времени всего ничего. Зато доходит чуть ли не до 100% coverage.

Z>>>Это что за задача с маленьким сервером и огромным клиентом?

ВВ>>Это не задача, это один из вариантов решения.
Z>Еще раз, что за задача, в которой сервер настолько прост, а гуи к нему настолько сложен, что такая разница в коде?

Причем тут ГУИ? Я говорю — вся логика пишется на клиенте. *Вся логика*. Кроме той, которую просто чисто физически нельзя писать на клиенте. Практически любое приложение можно так написать.

Z>>>Это потому, что у тебя есть код и там и там, естественно ты его можешь и там и там править. У меня код только там, разъезжаться в таком случае просто нечему.

ВВ>>Только "там" — это где? На сервере? Как у тебя так получается? Как можно писать приложения с богатым клиентским слоем, вроде того Гмейла, и не формировать HTML на джаваскрипте?
Z>Бррр... Ты цитату не оттуда взял, это относилось к схеме бд и коду DAL.

Тогда я уже не понимаю. У меня ДАЛ-а на клиенте тоже нет, откуда бы он там взялся.

Z>>>Давай пример юнит теста и сценария в котором этот юнит тест нам будет полезен. Я не представляю о чем ты говоришь.

ВВ>>А что непонятно-то Простые изолированные тесты, которые в первую очередь проверяют консистентность модели. Ну или корректность работы процедур, если они имеются. Скажем, один тест проверяет все процедуры для работы с конкретной сущностью — вставил, прочитал, сверил результаты, удалил.
Z>Зачем проверять консистентность модели которая впрямую отображает БД и зачем нужны процедуры которые делают CRUD?

Чтобы убедиться в том, что нет рассинхрона.

Z>При этом их еще и тестировать надо? В каком сценарии нам эти процедуры и тесты полезны будут?


В основном regression testing. Собственно, один из основных смыслов юнит-тестов.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 17:35
Оценка:
Здравствуйте, Ziaw, Вы писали:

ВВ>>Я о другом. Скажем, linq2Sql, использующий "внешний" генератор кода, не менее удобен в использовании, чем аналогичное решение с макросами. Здесь же, мне показалось, не о крутости макросов идет речь, а об удобстве веб-фреймворка.

Z>Вот не надо. Бредовее тула я еще не видел. Единственный нормальный способ обновить сгенеренный код — убить все классы и перетащить снова все нужные объекты базы из окна сервера. При этом если ты в проперти гриде делал какие-то правки, они исчезнут.

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

Ну в принципе это проблема linq2Sql. Никто им не мешал нормальное обновление сделать.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 17:36
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Трепачи они всегда были находками для шпионов. Пока что ваш любимый супер-пупер язык всех времен и народов — Хаскель, глухо сливает в выразительности и производительности "недостаточно выразительному язык".


Производительность — это твой бзик, я знаю, устал уже об этом с тобой говорить. Помню как ты радовался, когда Nemerle на несколько процентов обогнал Haskell. Определённо рвёт, о да, даже спорить не хочу.

Но про выразительность то ты как можешь говорить? Ты же Хаскеля не знаешь, сам таких людей называл Блабами — я слышал!

VD>Хаскелю уже где-то лет двадцать, да? Но вот язык которому без году неделя делает его в области тех же парсеров как котенка, хотя казалось бы это та область на которой Хаскель пиарят последние лет 10.


Чиво? Где это язык, которому... делает Haskell в области парсеров? И нет, парсеры — далеко не самое важное в Haskell, просто идея парсер комбинаторов пошла оттуда. А про Alex, Happy, autoparsec и прочую кучу библиотек и тулзов парсинга ты просто не в курсе.

VD>Вот когда хаскель будет порождать столь же шустрые и выразительные вещи как скажем PegGrammar, то тебя можно будет по слушать. А пока что твои слова выглядят как высокомерие зазнайки утратившего связь с реальностью.


Где логика? Или это просто твоё решение — вот когда хаскель будет..., тогда я и буду слушать lomeo! Если так — то на что ты вообще отвечаешь, не выслушав меня?

VD>Ваша хваленая ленивость сразу же выбрасывается за борт когда речь заходит о скорости выполнения.


А так как производительность зависит только от очень небольших участков, то выбрасывается она только там. Всё остальное смело использует все преимущества ленивости. Откуда следует, что ленивость по умолчанию в Haskell выбрана не зря. Ни один из пользователей Haskell это не подвергает сомнению. А вот человек, не пользовавший его пытается судить. Знаешь какова цена мнению дилетанта?

VD>Ваша хваленая гибкость так же почему-то не достаточна того чтобы оформить код именно так как хочется. Сравни, например, грамматики записанные на Хаскеле и грамматики записанные с использованием макроса PegGrammar. Ну, ведь очевидно же, что хаскелю явно не хватает выразительности.


Haskell не идельный язык — и вообще "avoid success at all costs" его лозунг. Но большинство проблем, о которых Nemerle даже не подозревает (и так и не будет подозревать, а будет совать свои макросы во все щели) в Haskell успешно решены. Там где Haskell невыразителен можно использовать макросы, никто не мешает — есть же TH. И, кстати, используют, вспоминая в свою очередь, например, о более generic языках. А вот там, где Haskell достаточно выразителен, Nemerle по прежнему придётся совать свои макросы. И какому из языков не хватает выразительности?
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 17:45
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Про меньшее количество движений — это совсем неочевидно. Как компилятор может контролировать то, что известно только в рантайме?


А не надо выдумывать. Все что нужно для веб-сервера известно в компайлтайме. Более того сам компайл-тайм может быть в рантайме, если что.

А контролировать он может очень многое. Главная разница в статическом МП (назовем это так) по сравнению с динамическим подходом заключается в том, что динамика как бы плывет по течению. Что есть то и используется. Скажем вызвали метод GetForumById(2)... Механизмы динамики перехватывают вызов несуществующего метода. На базе неких соглашений преобразуют его в некий SQL-запрос. Получают данные... Если данные есть, то заворачивают их, скажем, в JESON и отправляют клиенту. Все это происходит уже в рантайме. А значит от написания кода до отлова ошибки может пройти много времени.

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

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

И вот еще что... Вернемся опять же к ПЕГ-у. Вот казалось бы Rats! и PegGrammar основаны на одном и том же формализме — PEG-е. Они оба используют статически-типизированные бэкэнды и генерацию кода. Но PegGrammar предоставляет значительно больше сервиса. Он обеспечивает раннее обнаружение ошибок и внятное сообщение о них. Так же он предоставляет навигацию по грамматике, подсветку ошибок прямо в грамматике, фолдинг и другие прелести которые мы имеем для обычного кода. Все это мы имеем потому, что мета-код встроен в процесс компиляции. Компилятор и макрос образуют замкнутую взаимодействующую систему. И это огромный плюс!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 17:50
Оценка:
Здравствуйте, hardcase, Вы писали:

L>>Для кодогенерилки достаточно динамики, нафиг тут типы выводить?

H>foreach — макрос выводящий типы. Как его на кодогенераторах сделать?

Знаешь, я как-то об этом уже писал, но поиском не нашёл. Если вкратце, то такие вещи имхо нужно делать средствами языка. Например, в Haskell это будет функция. А типы выведет компилятор.

L>>По остальным пунктам, как я понимаю, замечаний нет?

H>Конечно есть, но уже сколько раз говорилось о них что лень повторять.

Ну так давай пофлеймим, скучно же.

H>Макросы нужны как средство автоматизации и абстрагирования: ядро Nemerle очень компактно, а макросы позволяют его расширить в нужную сторону нужным способом.


Грубо говоря: есть язык, недостаточно выразительный, скажем, C#. И вот мы добавляем к нему систему, позволяющую удобно писать к нему кучу компайлер-плагинов или там препроцессоров. Язык можно сделать жутко красивым и выразительным, расширяя его в нужную сторону таким способом. Это нормально?
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 20.12.10 17:58
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Грубо говоря: есть язык, недостаточно выразительный, скажем, C#. И вот мы добавляем к нему систему, позволяющую удобно писать к нему кучу компайлер-плагинов или там препроцессоров. Язык можно сделать жутко красивым и выразительным, расширяя его в нужную сторону таким способом. Это нормально?


Да.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 20.12.10 18:24
Оценка:
Здравствуйте, Ziaw, Вы писали:

Кэр>>Вы сами задали вопрос противопоставив type providers макросам. Я вам высказал свою точку зрения на тот момент, когда type providers появятся, и если они будут справлятся с этими задачами.


Z>Передергиваете, type providers макросам противопоставили вы
Автор: Кэр
Дата: 20.12.10
.


Я сказал, что возможно есть более прямое решение проблемы типизации изначально нетипизированных данных. Протиповоставление "или-или" сделали вы в этом сообщении:

Кэр>Это решение потенциально покрывает такой пласт проблем, что возникает большой вопрос — а зачем тогда нужны будут макросы.

Я бы переформулировал вопрос. Зачем жалкое подобие макросов type providers тому у кого есть полноценные макросы. Эти провайдеры для конкретной задачи реализуются одним человеком максимум за пару недель без привлечения Don Syme и хайпа на PDC.


Где тут передергивание с моей стороны — не вижу в упор. Хотя судя по тому что что у вас и доказательства по аналогии таковыми перестали быть — от вас я готов ожидать уже чего угодно.

Z>А что, можно проектировать иерархию классов не задумываясь об SRP, LSP и прочих P? Это такая простая задача не наделать конфликтов с этими не вполне формальными принципами? Что, там нет ситуаций, когда все компилируется, а для исправления ошибки нужен редизайн иерархии либо костыли в виде навешиваний нескольких параллельных иерархий визиторов?


Эти проблемы имеют меньшую стоимость разрешения. Хотя бы потому что они гораздо лучше изучены. Но я так понимаю, я тут уперся в секту, поэтому я лучше отойду в сторону.

Z>Банальные экстеншен методы в умелых руках могут наделать жутких конфликтов, а если использовать их в виде DLL, понять, что не работает можно только взвалив на плечи рефлектор и тучу чужого кода.


Кэр>>В общем, есть много объективных причин (еще со времен Лиспа), почему кастомный синтаксис в прикладных задачах используется очень редко. Его удел — библиотеки, которые вещь в себе. И никакой другой задачи, кроме предоставления своего функционала не решают. Это вполне может быть веб-фреймворк. Но это очень вряд ли прикладная задача.


Z>Все библиотеки вещь в себе и никакой другой задачи кроме предоставления своего функционала не решают, это раз.


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

Z>Кастомный синтаксис это всего лишь один из многочисленных способов применения метапрограммирования и он широко используется во всех языках с поддержкой метапрограммирования, это два.


Вот против этого широкого использования кастомного синтаксиса я как раз и выступаю. Он приносит дополнительные сложности, а инструментов, что бороться с этими сложностями что-то не видно.

Z>Тема как раз про вебфреймворки в динамике и статике, это три.


Я уже сказал, что веду речь об общем применении макросов. Хотя интерес к разговору у меня уже стремительно падает.

Z>>>Ваши аргументы напомнили мне фанатов процедурного программирования с жаром доказывающих ненужность С++ тем, что классы не нужны, когда есть структуры. Кричащими о сложности автокомплишена в современнных IDE и о том, что С++ никем нормально не поддерживается. О том, что наследование и виртуальные вызовы на С используются от силы в 1% проектов и требуют огромных усилий по поддержке. О том, что код с этими вызовами на С ни черта не понимают люди только что пришедшие в проект и потому такой код бяка.


Кэр>>Правильно. Доказательства по аналогии — это наш метод. Всегда создает такое приятное душевное равновесие. Окружающих убедить удается не всегда — но себя всегда пожалуйста.


Z>Это не доказательства по аналогии, это пример вполне здравых рассуждений доказывающих ненужность конкретной технологии. Хотел обратить внимание на то, что все эти утверждения были абсолютно верны, логичны и обоснованы. Тем не менее не так страшен черт, IDE сделали, грабли научились аккуратно обходить.


Вы здесь приводите исторический пример, затем заменяете одну технологию другой по аналогии и утверждаете, что пример остается валидным. Таким образом можно доказывать необходимость изучения любой новой технологии, которая сейчас не имеет поддержку IDE, но если хорошо вложится — то она появится. Если вы не понимаете, что это доказательство по аналогии — я лучше пойду.

Кэр>>Выдыхайте, то что я лапшу на ушах стараюсь не держать, не означает, что я считаю себя эталоном.

Z>Перенос своего неприятия инструмента на всех именно это и означает.

Я всего лишь изложил то, что я вижу вокруг. Кастомный синтаксис в прикладных задачах — можно встретить очень и очень редко. И на это есть объективные причины, которые я изложил from the top of my head. А у вас сразу пошли обиды — мол я "эталон", и свое "неприятие распространяю на всех". Вы меня лично еще обвините, что я не ценю работу немерлистов и лично торможу прогресс программирования в целом. И типичная картина разработчика компилятора Немерле будет завершена.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 18:26
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну во-первых, особого рефакторинга я в том же Немерле не вижу Вот у C# есть, Решарпер называется.


Вообще-то тот же рефакторинг переименования есть. И повторить Решарпер вполне можно. Это вопрос наличия сил и времени, а не принципиальный вопрос.

ВВ>Нормальная поддержка ИДЕ — на самом деле для языка с навороченным выводом типов это *сложнейшая* задача.


Глубочайшее заблуждение. Простота реализации IDE больше зависит от качества компилятора и самой IDE. Я не раз ловил себя на мысли, что сделать IDE с нуля проще чем сделать интеграцию к VS.

ВВ>В вашем случае она несколько упрощается, т.к. вы имеете прямой доступ к самому компилятору


А что мешает иметь доступ к компилятору в других языках? Я тебе больше скажу. В шарпе чем дальше тем сложнее будет жить без доступа к компилятору. Так что рано или поздно все прйдет к тому, что компиляторы будут сразу проектироваться не только как утилиты командной строки, но в первую очередь, как компонент рассчитанный на использование в разных задачах. Одной из дача несомненно будет движок интеграции с IDE.

ВВ>Если брать с чистого листа, то создание ИДЕ для динамически-типизированного языка и "языка вроде Немерле" — по сложности где-то близкие задачи.


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

Как раз все прелести динамики вроде "другой" интерпретации кода (например, обработка вызова не существующего метода), при этом не будут доступны. А если они будут использоваться, то ни о каком интеллисенсе уже говорить не придется.

Так что твои слова не более чем заблуждение (или намеренная лож).

ВВ>И там, и там будет хардкорный вывод типов Насколько сложна будет ИДЕ с рефакторингом зависит опять же от того, что за динамический язык у нас. Вот для языка вроде Pure задача вполне посильная и сравнивая по сложности с Немерлевской ИДЕ.


Ну, реализуй. У тебя вот есть Ела. Сделй для нее IDE. Погляди что выйдет. А то пока что это все не очень ответственный треп.

ВВ>Ну это даже и неважно. Важно то, что как только разговор переключается на веб, то мы начинаем оперировать чисто количественными критериями — больше телодвижений, меньше. Кардинальных преимуществ-то нет.


Не. Веб мало чем отличается от остального софта. Чем больше проект тем важнее контроль над ним и скорость его выполнения. Тут вот часто приводят в качестве примера разные Фэйсбуки. А я тут давича узнал, что они ПХП в С преобразуют и и уже компилированный код гоняют. Вот тебе и динамика.

ВВ>Вот какой стимул у РОР-иста переходить на nrails? Разве что ради скорости. Ну так РОР медленный потому что он тупо медленный, а не потому что динамика. V8 вон быстрее раз в сорок.


Не он тупо медленный потому что тупо на медленном Руби написан и с применением тупо медленных подходов которые на Руби проще реализовать нежели быстрые.

Многие пишут веб на Яве или Шарпе. Вот для них либа вроде nrails является отличным решением.
Кроме того переход с РоР на nrails даст людям и другие бенефиты: больший контроль над кодом, упрощение рефактринга, возможность исользования линка, интеллисенс (комплит, навигация по коду, ...), и конечно же возможность обеспечить максимальную производительность. Ведь макросы не только предоставляют компилированные решения, но и помогают скрывать некрасивый, но продуктивный код за фасадом простых абстракций.

ВВ>А для ASP.NET MVC программиста преимущества очевидны. Ну так им и не надо доказывать, что динамика лучше статики.


Гы-гы. Как раз надо! Именно им и надо! Те кто использовали РоР знают, что получат. По этому для них вопрос очень прост. Они теряют динамику, но получают другие бенефиты. А вот для шарпокодеров и явщиков все совсем не очевидно. Они ведь в массе своей динамические подходы то и не нюхивали. Даже работая с ЯваСкрипом они умудряются обходиться без мета-программирования. Именно что дизейбля кнопочки на вебе.

ВВ>По-моему все просто.

ВВ>А священная война в стиле "статика + вывод типов + макросы" во всем круче динамики ни к чему не приведет.

А это утверждение ты только что сам придумал. Ziaw всего лишь сказал, что по его наблюдениям того чего можно добиться динамикой можно добиться и статикой + МП. Ну, ты конечно прав в том, что в эту формулу вывод типов не плохо было бы добавить. Но никто не утверждал, что "статика + вывод типов + макросы" круче динамики. Утверждение было более частным. "статика + вывод типов + макросы" ~ "динамике + много тестов". А раз так, то не трудно сделать вывод, что ришения на "статика + вывод типов + макросы" сдерживаются исключительно тем, что сегодня средства разработки для "статика + вывод типов + макросы" банально не развиты. Немерл явные пионер в этой области. Подходы с внешними ДСЛ-ями настолько тяжелы в реализации и поддержке, что даже МС не может предложить ничего путного.

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


Очередную чушь морозишь. Системы типов есть везде. Даже в ассемлере. А уж в динамически-типизированных языках и подавно.

Если ты утверждаешь, что система типов скажем дотнета или немерла утупает Рубийной, то потрудись это обосновать.

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


Системы типов изобретаются для улучшения контроля над кодом. Хаскелисты (не без основания, надо заметить) утверждают, что описание типа во многом определяет реализацию. В этом отношении динамические системы типов — это попытка отсрочить контроль на как можно поздний срок. Это упрощает освоение таких языков, но не несет ничего хорошего проектам, так как снижает контроль над кодом и усложняет обнаружение ошибок (ведь чем позже ошибка выявлена, тем сложнее ее устранить). Именно по этому в динамике ДСЛ-естроение так развито. Ведь ДСЛ-и образуют собственные системы типов которые снижают вероятность ошибки.

ВВ>А для конкретной случае веба — ну реально по фиг динамика там или статика.


Это и есть положительный ответ на вопрос автора темы. По-фиг уже достаточно чтобы признать, что "статика + вывод типов + макросы" позволяет добиться того, чего позволяет добиваться "динамика + тесты".

ВВ>Слишком много переменных, известных только в рантайме, чтобы это что-то решало.


Что же тебя так тянет на откровенно высосанные из пальца утверждения?
Ну, что может быть известно только в рантайме при разработке того же веб-сервера? Ведь ответ очевиден — только данные! А это то как раз не являются проблемой.

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

ВВ>Я для себя буду выбирать более удобное и последовательное решение, более близкое к моим задачам, а какая там типизация — буду смотреть в последнюю очередь.


Вот с этим можно согласиться. Лично если я буду иметь на руках два решения одинаковых по возможностям, то я предпочту статически-типизированное просто потому, что оно будет более быстрым, комфортным и надежным. А раз мы сошлись на том, что можно достичь возможностей динамике используя связку "статика + вывод типов + макросы", то остается только создать действительно хорошую реализацию.

ЗЫ

Хотя на самом деле убедить окружающих в том, что хорошая реализация действительно хороша будет куда сложнее .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 18:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вот только они в своих рассуждениях забывают упоминать детали. А детали все портят...

VD>1. Даже выразителности Хаскеля зачастую недостаточно чтобы записывать ДСЛ-и именно в том виде в котором его видя программисты. В итоге в ход идут ужимки. Вместо символов "/" в грамматике начинают использоваться супер-пупер конструкции вида "<@>" и т.п.

Полностью неверно. В нём можно использовать символ /

VD>2. Красивый и легко расширяемый код в большинстве случаев — это медленный код. А быстрый код — это не очень красивый код. Например, красивые выкрутася на хаскеле зачастую связаны с применением ленивости (отложенного вычисления). Но те же ленивые списки частенько очень сильно замедляют код. Скажем для представление строк в хаскеле по умолчанию применяются ленивые списки, но это очень медленно. По этому там же придумали бинарные строки, которые, как я понимаю, являются массивами символов. Но вот уже с ними работать не так здорово.


"Ленивый код — медленный код" — неправда.

1. Явный strictness расставляют при профилировании там, где надо. Обрати внимание — там, где не надо, его не расставляют. Иначе он может, например, снизить производительность.
2. Списки и преобразования над ними как раз частенько транслируются в простые циклы.
3. Почему работать с бинарными строками не так здорово? Паттерн матчингом разбираются, есть функции аналогичные функциям над списками.

Ну, и конечно, главный аргумент — легко расширяемый код (независимо от языка) обычно достаточно быстрый. Надо быстрее — профилируют и правят узкие места. В Haskell, благодаря лёгкости equational reasoning в большинстве случаев не доходит до уродования кода — код остаётся столь же чистым, понятным, легко модифицирумым.

VD>3. Хаскель хорош когда речь идет о написании вычислительного кода. Но для проектирования больших симстем в нем нет ничего акромя возможности вручную эммулировать паттерн "Абстрактный Тип Данных". Соответственно и все выкрутасы с кодом и ДСЛ-ями обычно ограничиваются тем что мы называем уровнем метода.


Это даже не ложь, а глупость. Отсутствие у тебя знаний о функциональном дизайне ты представляешь как отсутсвие функционального дизайна вообще.
Чего не хватает не сказано. Что такое ручное эмулирование — не понимаю.

VD>Не смотря на все эти проблемы отледьные товарищи с огромным удовольствием вешают ярлыки "убогих недоязыков" на те языки которые попросту используют другие типы абстракции. К великому сожалению "недоязыки" делают их любимый хаскель в хвост и гриву.


Во-первых. Описанных тобой проблем нет — они только у тебя в голове.
Во-вторых. Я называл твой любимый Nemerle "убогим недоязыком"?? Вообще-то, он мне скорее нравится.
В-третьих. Про хвост и гриву — перестань уже выдавать свои фантазии за объективную реальность.

VD>Интересно, что авторы Хаскеля намного более трезвы в своих оценках. Их мнение значительно более взвешено. Вот тут есть интервью с одним из авторов Хаскеля где он весьма трезво и разумно говорит об этом языке. С ним трудно не согласиться (в отличии от фанатов). Хаскель, в первую очередь — это полигон (лаборатория) идей. Его главная идея изоляция и явная декларация кода содержащего побочные эффекты. А вот система типов у него переусложненная, но все равно не являющаяся идеальным средством для реализации DSL-ей.


Это же надо так передёргивать!

1. Haskell как лаборатория — это отношение SPJ и это естественно. Никакого "в первую очередь" тут даже нет.
2. "Его главная идея" — полный бред. Почитай уже об истории создания Haskell от того же SPJ. Побочными эффектами, а вернее даже зависимым от этого параллелизмом занимается SPJ. И он там и говорит про себя, а не про Haskell.
3. С переусложнением (по сравнению с лямбдой, а не, например, типизацией .NET!) соглашусь
4. Про идеальное средство никто и не говорил, зачем ты это приплёл?
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.10 18:40
Оценка:
VD>Если ты утверждаешь, что система типов скажем дотнета или немерла утупает Рубийной, то потрудись это обосновать.

как минимум отсутствует duck-typing
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 18:42
Оценка:
Здравствуйте, VladD2, Вы писали:

L>>>По остальным пунктам, как я понимаю, замечаний нет?

H>>Конечно есть, но уже сколько раз говорилось о них что лень повторять.
VD>Да бесполезно повторять. Хаскель — это религия. Она даже на совершенно очевидные вещи будут смотреть и говорить что не видят разницы.

А какова конечная цель? В чём польза может заключаться?

VD>Вообще, все эти соры совершенно бесполезны именно по той причине, что это реализованные споры.

VD>Освоить обсуждаемые технологии не так просто. На это нужно много времени и сил. А без их освоения получается не боле чем абстрактная философия. Сравнение теплого с мягким.

Есть люди, разбирающиеся и в Haskell и в Nemerle. Думаю, они могут сравнивать эти языки. Я же говорю про то, что знаю — Haskell и макросы (я знаю лисповые и TH, работал с обоими). Этого достаточно, чтобы я мог судить о Haskell и макросах?
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 18:44
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>>>Хотя бы потому что с точки зрения любого фреймворка важно не то, как это фреймворк *пишется*, а то, как он используется.

VD>>А тебе действительно не важно то насколько легко фрэймворк пишется и насколько он гладко скрывает все сложности разработки прикладной задачи?

ВВ>Здесь обсуждается не это. Хочешь в очередной раз свести все к своему любимому флейму "макросы вс. мир"?


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

ВВ>Не об этом речь. Тема другая. Удобство конечного решения.


Тема то та самая. Динамика выбирается не потому, что на ней есть хоть одно единственное преимущество для конечной системы (сайта, например), а потому, что она удобнее чем, скажем, C# для реализации того самого фрэймворка. И динамика выбирается не какая попало. Скажем я не знаю ни об одном фрэймворке подобном РоР-у созданном на Васике, хотя он с некоторыми опциями тоже очень даже динамичен. Динамика выбирается та что предоставляет мощьные механизмы МП.

Так что это ты от темы пытаешься уйти. Здесь не обсуждаются конченые сайты. Здесь обсуждаются фрэйворки для их разработки. А значит вопросы их реализации.

ВВ>И да, мне *как пользователю* неважно, насколько сильно страдал разработчик при разработке фреймворка.


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

VD>>Тебе не кажется, что если фрэймвор делается на базе более подходящего решения, то и результат получается лучше?


ВВ>Здесь я связи не вижу.


Приплыли. При столь очевидной лжи дальше разговаривать не о чем.

ВВ>Если я использую внешний ДСЛ, почему результат — итоговая библиотека — должна получиться хуже?


По определению. Более подходящее решение позволяет решить задачу проще. А значит:
1. Решить ее быстрее.
2. Решить ее качественнее.
3. Решить более объемную задачу.

ВВ>Ежу понятно, что макросы удобнее рукописного генератора, не об этом речь, но как это влияет на результат


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

Так что на твоем месте я бы упирал на то, что хотя динамика и обеспечивает примерно те же возможности, но делает это проще. Это будет конструктивно. Возможно это так и есть на самом дел... пока.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 18:46
Оценка:
Здравствуйте, hardcase, Вы писали:

L>>Грубо говоря: есть язык, недостаточно выразительный, скажем, C#. И вот мы добавляем к нему систему, позволяющую удобно писать к нему кучу компайлер-плагинов или там препроцессоров. Язык можно сделать жутко красивым и выразительным, расширяя его в нужную сторону таким способом. Это нормально?

H>Да.

А ты видишь недостатки такого подхода? Если да — какие?
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 18:59
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Я о другом. Скажем, linq2Sql, использующий "внешний" генератор кода, не менее удобен в использовании, чем аналогичное решение с макросами.


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

ВВ>Здесь же, мне показалось, не о крутости макросов идет речь, а об удобстве веб-фреймворка.


Не. Здесь речь идет о том, что для создания веб-фрэймворков можно с одинаковым успехом использовать как статику (с МП и выводом типов), так и динамику. И ты это вроде как даже признал.

А удобство конечно же — это многофакторный "продукт". Плюс ко всему прочему еще и субъективный. Кому-то вон копипэст и визарды в АСП.НЭТ.МВЦ нравится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 20.12.10 19:04
Оценка:
Здравствуйте, VladD2, Вы писали:

R>>Ну хорошие шаблоны очень близки по возможностям к макросам. Например D'шные вполне позволяют "анализировать компилируемый код" http://www.digitalmars.com/d/2.0/traits.html http://www.digitalmars.com/d/2.0/phobos/std_traits.html


VD>Я только что влез в тему где дишники обсуждали возможности расширения своих "хороших" шаблонов. Точнее шаблоны их вообще мало пригодны для многих вещей. Так что речь шла о их "стринг миксинах".


Cтринг миксины это не шаблоны, это практически текстовые макросы
Как не упирался Вальтер, но макросы давно уже в D пролезли

VD>Вот погляди. Только у дишников все странно. В том числе и интерфейс их конфы. Так что всех сообщений почему-то не видно. Может есть какие-то другие интерфейсы?


Да конфа у них ужас, я раньше через news reader читал, сейчас постоянно не слежу.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 19:37
Оценка:
Здравствуйте, lomeo, Вы писали:

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


Да, Кэп Очвидность! Реализовывать чистые функции на макрах — не самое разумное проведение времени (хотя я видел таких орлов).
А вот синтаксис для лямбд уже можно и весьма удобно.

L>А! Речь про eDSL? Если взять другие языки, то окажется, что с этим там всё в порядке — ruby, например.


О, да — Кэп! Руби — это отличный динамический язык известный своими возможностями мета-программирования и подмены семантики кода.

L>Или, чтобы было схоже с Nemerle — Scala.


Увы, но нет. Скале в области eDSL с немерлом не тягаться. Даже Хаскель (тот что не теплэйт) в пролете остается.

Руби был отличный пример. И основная разница между Руби и Немерлом как раз в том какими средствами достигаются нужные нам eDSL-ные возможности, и то сколь надежный и быстрый код мы получаем в итоге. И тут если средства Руби весьма хороши, то результат получается мягко говоря не таким хорошим. Все же Руби — это интерпретатор и при том оОчень медленный.

L> Язык не имеет макросов, но писать на нём DSL-и приятно.


Да, ладно. А что же они тогда ХМЛ-литералы в язык встроили?

L>Если всё таки важен синтаксис, то во-первых — почему? Наверное, захочу примеров — мы как-то с VladD2 обсуждали разницу описания грамматики в Parsec и EBNF. Вместо p* пишем many p, вместо a | b, пишем a <|> b.


Ага. И вывод был "а нам (вам) там больше нравится... для нас не принципиально...", хотя любому не предвзятому наблюдателю было очевидно, что грамматика превращается в кашу.

L>Конечно, можно переопределить *, | для того, чтобы синтаксис был схож,


Да? Ну, так зачем дело стало? Используй! За одно сгенерируй хороший алгоритм, а не обходись только комбинаторами.

L>но даже если нет — отличия только в синтаксисе — насколько это важно?


Для ДСЛ-ей то? Очень важно! Для них читаемость и лаконичность — это очень, очень, ОЧЕНЬ важно!

К тому же разница не только в синтаксисе. Разница и в средствах реализации. Хаскель очень крут в области оптимизации функциональных вычислений. Я снимаю шляпу перед тем кто писал его оптимизатор. Де-деревизация — это супер-фича для любого ФЯ! Но черт, побери оптимизаторы не могут превратить плохие алгоритмы в хорошие, и неподходящие для задачи структуры данных в подходящие! А вот макросы могут! Вся муть макроса заключается в том, что от разрываем связь между декларцией задачи и ее реализацией. Скажем мы, если нам понадобится, то мы реализуем в PegGrammar генерацию GLR или LALR(1). И при этом исходная грамматика не изменится.

Так что заявление — макросы сложнее писать может от части и верно, но при этом не стоит забывать, что макросы дают совершенно иной уровень контроля за получаемым кодом.

L>Гораздо важнее в eDSL ведь семантика, как мне кажется.


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

Для Скалы или Хаскеля все еще сложнее, так как средств МП в них нет вовсе. И все eDSL-естроение сводится к мимикрии обычного кода под DSL. А тут уже полно ограничений и с синтаксисом, и с реализацией. Когда приходится изворачиваться говорить о хороших результатах не приходится. Любой результат становится подвигом.

L>Во-вторых — препроцессоры тоже разные бывают. С удобными разборщиками типа haskell-src-exts или с помощью camlp4 можно очень удобно работать.


Дык, препроцессоры — это уже первый шаг к макросам. Если задача сводится к преобразованию одного синтаксиса в другой, то их в общем-то достаточно.

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

Z>>Любой универсальный язык недостаточно выразителен в каждой специфической области.


L>Не так. "Любой универсальный язык недостаточно выразителен в какой-то специфической области"


Не так. "Любой универсальный язык без макросов недостаточно выразителен в какой-то специфической области"

L>и применение макросов показывает в какой именно.


И применение макросов позволяет устранить недостатки. А показать оно ничего не может, так как если макросы есть, то недостатки устранимы, а если их нет, то применять макры просто не выйдет, а значит и показать ничего нельзя. А то из твоего утверждения следует, что язык без макросов автоматом не имеет недостатков .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 19:43
Оценка:
Здравствуйте, DarkGray, Вы писали:

VD>>А что за макросы ты написал чтобы выражать такие суждения?


DG>из крупных:

DG>генерация js
DG>linq2sql
DG>linq2xpath
DG>преобразование кода в cps
DG>склеивание множества запросов к базе в единый запрос

О как? И на каком же чудо-языке это все было сделано? Можно хотя бы на кусочек кода глянуть?

DG>зы

DG>но это не немерлье.

А может это вовсе не макросы были, а внешние кодогенераторы вроде Т4?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 20.12.10 19:52
Оценка:
Здравствуйте, DarkGray, Вы писали:

VD>>Если ты утверждаешь, что система типов скажем дотнета или немерла утупает Рубийной, то потрудись это обосновать.

DG>как минимум отсутствует duck-typing
То что динамика дает большую гибкость чем статика это очевидно.
А вот нужна ли эта дополнительная гибкость уже совсем даже не очевидно. Ибо эта гибкость приносит не только плюсы но и совершенно конкретные минусы.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 19:57
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Нет. Я об уже имеющихся языках. Мы же сравниваем языки с макросами и языки, в которых макросы неактуальны, верно?


Не верно. Нет таких языков.

L>На примеры того, что можно сделать с макросами я стараюсь приводить не менее выразительные решения.


Приведи аналог РоР на хаскеле. Сравним выражительность. Сравнение грамматик созданных на комбинаторах (на хаскеле) и с помощью PegGrammar мы уже видели. Все уже оценили насколько криво выглядит это дело без макросов. Да и тормоза Парсека всем тоже известны.

Так что не надо повторять одно и тоже заблуждение много раз. Оно от этого истиной не станет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 20:02
Оценка:
Здравствуйте, FR, Вы писали:

FR>В том же D доступен полноценный compile-time на довольно широком подмножестве языка http://www.digitalmars.com/d/2.0/function.html#interpretation


Не полноценный. Это, по словам же самого автора, крутой констант-фолдинг.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 20:09
Оценка:
Здравствуйте, FR, Вы писали:

FR>Не все препроцессоры аналоги сишного, например camlp4 тот же XML/html запросто встраивает в код:


А как, кстати, с поддержкой IDE при этом?

Так же забавно сравнить размер кода.
Моя реализация макры находится здесь.
Так же интересно, что нужно сделать чтобы задействовать окамловское расширение?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 20:12
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Динамика ничем не поможет. Сам сценарий изначально — это динамика. Чтение ХМЛ через XmlReader — это динамика. Работа с базой — это динамика. Динамика — это просто данность. Тут другой вопрос — чем в данном случае поможет статика?


Это не динамика. Это обработка данных. Читать ХМЛ или работать с БД можно из С.
Динамика будет если в рантайме данные будут влиять на работу кода. Например, если будут производиться пользовательские вычисления.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 20:15
Оценка:
Здравствуйте, DarkGray, Вы писали:


VD>>Если ты утверждаешь, что система типов скажем дотнета или немерла утупает Рубийной, то потрудись это обосновать.


DG>как минимум отсутствует duck-typing


Ну, вот макры как раз duck-typing обеспечивает. Еще примеры?

Только лучше не "фичи" а практические задачи приводить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 20:18
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Да, я и забыл об этом.

ВВ>Обычно, скажем, новое поле добавляется вручную. И ничего не теряется. Но тогда потенциально возникает проблема рассинхрона

ВВ>Ну в принципе это проблема linq2Sql. Никто им не мешал нормальное обновление сделать.


Мешает. Мешает объем кода которые для этого нужно написать и отладить. Если у МС сил не хватает, то что же говорить о мелких компаниях и частных лицах?

И тут вопрос подходящего "инструмента" встает в полный рост. То что МС врукопашную сделает за пол года, а смертный с Т4 за 2 месяца, с помощью макросов можно написать за неделю. В результате остается время и силы на изыски.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 20:24
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Есть люди, разбирающиеся и в Haskell и в Nemerle.


Есть наверно. Но боюсь, так чтобы гуру в обоих языках — это врад ли.

Но эти то люди как раз твои слова не повторяют.

L>Думаю, они могут сравнивать эти языки. Я же говорю про то, что знаю — Haskell и макросы (я знаю лисповые и TH, работал с обоими). Этого достаточно, чтобы я мог судить о Haskell и макросах?


Нет. Точно так же как моего знания Хаскеля недостаточно для серьезного сравнения. Но я хотя бы не делаю абсолютно явно ложных утверждений. Я если что-то подозреваю, то просто молчу по этому поводу. А ты постоянно повторяешь заклинания про вроде "есть языки которым макросы не нужны". Но ведь асболютно же ясно, что само наличие ТемлейтХаскеля уже говорит о том, что все же кому-то нужны. Да и наличие более быстрых и выразительных реализаций тех же парсеров тоже очевидно показательный. Так зачем в сотый раз повторять явно ложные утверждения?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 20:27
Оценка:
Здравствуйте, lomeo, Вы писали:

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


L>>>Для кодогенерилки достаточно динамики, нафиг тут типы выводить?

H>>foreach — макрос выводящий типы. Как его на кодогенераторах сделать?

L>Знаешь, я как-то об этом уже писал, но поиском не нашёл. Если вкратце, то такие вещи имхо нужно делать средствами языка. Например, в Haskell это будет функция. А типы выведет компилятор.


Знаешь, я как-то об этом уже писал, когда говорящий плохо понимает о чем он говорит, то у него получается очень красивый, лаконичный и не верный ответ.

L>Грубо говоря: есть язык, недостаточно выразительный, скажем, C#. И вот мы добавляем к нему систему, позволяющую удобно писать к нему кучу компайлер-плагинов или там препроцессоров. Язык можно сделать жутко красивым и выразительным, расширяя его в нужную сторону таким способом. Это нормально?


Грубо говоря: есть язык, недостаточно выразительный, скажем, Haskell. И вот мы не добавляем к нему систему, позволяющую удобно писать к нему кучу компайлер-плагинов или там препроцессоров. Язык можно сделать жутко красивым и выразительным, не расширяя его в нужную сторону хоть каким-то способом? Это нормально?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 20.12.10 20:41
Оценка:
Здравствуйте, lomeo, Вы писали:

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


L>>>Для кодогенерилки достаточно динамики, нафиг тут типы выводить?

H>>foreach — макрос выводящий типы. Как его на кодогенераторах сделать?

L>Знаешь, я как-то об этом уже писал, но поиском не нашёл. Если вкратце, то такие вещи имхо нужно делать средствами языка. Например, в Haskell это будет функция. А типы выведет компилятор.


Макросы — это и есть средство языка Мы на языке описываем его самое и получаем новый язык — чуть более удобный и богатый.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 20:43
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Ну во-первых, особого рефакторинга я в том же Немерле не вижу Вот у C# есть, Решарпер называется.

VD>Вообще-то тот же рефакторинг переименования есть. И повторить Решарпер вполне можно. Это вопрос наличия сил и времени, а не принципиальный вопрос.

Я имел в виду полноценный рефакторинг. А так — да, переименование есть. Хорошо, конечно. Дело осталось за "малым" — реализовать полноценный рефакторинг а ля Решарпер. Вот только это проект на тысячи человекочасов. А пока, извините, но я не могу принять рефакторинг за плюс Немерла, ибо он в зачаточной стадии.

ВВ>>В вашем случае она несколько упрощается, т.к. вы имеете прямой доступ к самому компилятору

VD>А что мешает иметь доступ к компилятору в других языках? Я тебе больше скажу. В шарпе чем дальше тем сложнее будет жить без доступа к компилятору. Так что рано или поздно все прйдет к тому, что компиляторы будут сразу проектироваться не только как утилиты командной строки, но в первую очередь, как компонент рассчитанный на использование в разных задачах. Одной из дача несомненно будет движок интеграции с IDE.

"Доступ к компилятору" — это не только АПИ, но еще и возможность влиять на развитие языка. Были бы вы просто группой поддержки, отвечающей за интеграцию, когда поляки бы занимались развитием языка без всяких оглядок на студию, сдается мне, накушались бы вы по полной. Это ты вот не видишь будущее языка без ИДЕ, поэтому и фичи рассматриваются в контексте интеграции — без этого жизнь бы медом не казалось.
А представь вот как весело энтузиастам какого-нибудь OCaml ИДЕ для него делать.

ВВ>>Если брать с чистого листа, то создание ИДЕ для динамически-типизированного языка и "языка вроде Немерле" — по сложности где-то близкие задачи.

VD>Несешь несусветную чушь. Полноценная IDE для немерла возможно не потому, что у него нет или есть вывод типов, а потому, что в итоге — это статически-типизированный язык — язык для которого в итоге можно узнать все типы. Это позволяет нам точно утверждать, что имя А в конкретном месте — это метод такого-то класса, или имя такого-то типа. В динамике же, в общем случае, это невозможно. Там где вывод типов возможен, там — да, можно что-то сделать. Но если вывод типов возможен, то мы уже имеем дело не совсем сдинамикой. Точнее совсем не с динамикой.

Вывод типов как раз серьезно усложняет задачу создания полноценной ИДЕ. Фактически приходится выводить типы на уровне интеграции. Возможность при этом задействовать сервисы компилятора есть далеко не у всех языков. Кстати, у Немерле эти сервисы были или ты их сам сделал?
К тому же ты вырезал самый важный фрагмент из моего сообщения. Нет просто "динамики". Есть конкретные языки. Задача создания ИДЕ для них обладает неодинаковым, скажем так, уровнем сложности. Создание ИДЕ для Питона — это задача сложнейшая. А я привел в пример другой язык — Pure. Функциональный, без мутабельных переменных. Для него во многих случаях реально возможен вывод типов. *Естественно* вывод типов возможен не всегда. Ну так в этом и смысл динамики. Так где в динамике невозможен вывод типов, в статике будет просто неработающий код. Даже если этот код в принципе корректен — тайп-чекер его не пропустит.
Банальный пример того, что свернет мозги немерлевскому тайп-чекеру:

using system;
out x = puts x $$ out;
out "One" "Two" "Three" "Four" "Five";


VD>Как раз все прелести динамики вроде "другой" интерпретации кода (например, обработка вызова не существующего метода), при этом не будут доступны. А если они будут использоваться, то ни о каком интеллисенсе уже говорить не придется.

VD>Так что твои слова не более чем заблуждение (или намеренная лож).

У меня такое ощущение, что ты взял какой-то конкретный дизайн динамически-типизированного языка и его критикуешь. Что такое "обработка вызова несуществующего метода"? Я достаточно слабо знаю Руби, чтобы проводить тут его сравнение с Немерле.
Я повторю — да, в динамике интеллисенс будет работать не всегда. Но там, где он не будет работать, в статике код вообще не будет работать.

ВВ>>И там, и там будет хардкорный вывод типов Насколько сложна будет ИДЕ с рефакторингом зависит опять же от того, что за динамический язык у нас. Вот для языка вроде Pure задача вполне посильная и сравнивая по сложности с Немерлевской ИДЕ.

VD>Ну, реализуй. У тебя вот есть Ела. Сделй для нее IDE. Погляди что выйдет. А то пока что это все не очень ответственный треп.

Для начала надо бы язык закончить. И таки да, у меня не ДжаваСкрипт и не Питон, мне типы выводить гораздо проще.

ВВ>>Вот какой стимул у РОР-иста переходить на nrails? Разве что ради скорости. Ну так РОР медленный потому что он тупо медленный, а не потому что динамика. V8 вон быстрее раз в сорок.

VD>Не он тупо медленный потому что тупо на медленном Руби написан и с применением тупо медленных подходов которые на Руби проще реализовать нежели быстрые.

И с чем ты не согласен? Руби — медленный интерпретатор. Динамически-типизированный язык может быть и компилируемым. И разница в скорости будет весьма заметной.

ВВ>>А для ASP.NET MVC программиста преимущества очевидны. Ну так им и не надо доказывать, что динамика лучше статики.

VD>Гы-гы. Как раз надо! Именно им и надо! Те кто использовали РоР знают, что получат. По этому для них вопрос очень прост. Они теряют динамику, но получают другие бенефиты. А вот для шарпокодеров и явщиков все совсем не очевидно. Они ведь в массе своей динамические подходы то и не нюхивали. Даже работая с ЯваСкрипом они умудряются обходиться без мета-программирования. Именно что дизейбля кнопочки на вебе.

Я имел в виду, что асп-нет-чикам не надо доказывать, что статика лучше динамики. Это другая аудитория совсем. Никто тут по динамике не сохнет по большей части. А nrails — это именно для них. В миграцию рубистов я что-то слабо верю.

ВВ>>По-моему все просто.

ВВ>>А священная война в стиле "статика + вывод типов + макросы" во всем круче динамики ни к чему не приведет.
VD>А это утверждение ты только что сам придумал.

Да нет, кто-то из ваших говорил нечто подобное. Возможно, что не ты.

VD>Ziaw всего лишь сказал, что по его наблюдениям того чего можно добиться динамикой можно добиться и статикой + МП. Ну, ты конечно прав в том, что в эту формулу вывод типов не плохо было бы добавить. Но никто не утверждал, что "статика + вывод типов + макросы" круче динамики. Утверждение было более частным. "статика + вывод типов + макросы" ~ "динамике + много тестов". А раз так, то не трудно сделать вывод, что ришения на "статика + вывод типов + макросы" сдерживаются исключительно тем, что сегодня средства разработки для "статика + вывод типов + макросы" банально не развиты. Немерл явные пионер в этой области. Подходы с внешними ДСЛ-ями настолько тяжелы в реализации и поддержке, что даже МС не может предложить ничего путного.


Тем не менее в дотнете мы просто окружены с разных сторон этими внешними ДСЛ-ями — до такой степени, что их уже не замечаем. Наверное, им очень тяжело эти ДСЛ-и делать, но мне вот их что-то не жалко.
Мне, конечно, тоже ДСЛ-и делать непросто, но это уже другой вопрос.

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

VD>Очередную чушь морозишь. Системы типов есть везде. Даже в ассемлере. А уж в динамически-типизированных языках и подавно.

Я где-то сказал, что в динамике нет типов? Ты опять по диагонали читаешь?

VD>Если ты утверждаешь, что система типов скажем дотнета или немерла утупает Рубийной, то потрудись это обосновать.


Про Руби не знаю. Но вот намедни попробовал перевести такой вот код на вполне себе статически-типизированном OCaml на Немерле, и не смог:

let rec iter arr i act =
    act arr.(i);
    if i < Array.length arr - 1 then
        let next = iter arr (i + 1)
        in `Some next
    else
        `None;;
        
let (~~) arr = iter arr 0;; (* just a construction helper *)

let lst = [ ~~[| 1;2;3 |]; ~~[| 4;5;6 |]; ~~[| 7;8;9 |]; ];; 

let rec filter f lst = 
    let rec filter' = function
        | x::xs -> (match x f with
                   | `Some v -> v :: filter' xs
                   | `None   -> filter' xs)
        | []    -> []
    in
    match filter' lst with
    | []  -> ()
    | nl  -> filter f nl;;
        
filter (Printf.printf "%d\n") lst;;


Впрочем, может, знаний не хватило

ВВ>>А для конкретной случае веба — ну реально по фиг динамика там или статика.

VD>Это и есть положительный ответ на вопрос автора темы. По-фиг уже достаточно чтобы признать, что "статика + вывод типов + макросы" позволяет добиться того, чего позволяет добиваться "динамика + тесты".

Ага. Только вот тесты все равно нужны.

ВВ>>Слишком много переменных, известных только в рантайме, чтобы это что-то решало.

VD>Что же тебя так тянет на откровенно высосанные из пальца утверждения?
VD>Ну, что может быть известно только в рантайме при разработке того же веб-сервера?

Какого еще веб-сервера?

VD>Ведь ответ очевиден — только данные! А это то как раз не являются проблемой.


Угу, а программа отвечает за преобразование данных. А так как данные относятся к числу неизвестных, то и статика идет лесом.
Специфика веба в том, что данные эти приходят черт знает откуда. И часто вообще никакого контроля над ними нет. К тому же половина приложения — клиент — так или иначе голимая динамика. Именно голимая, на голимом ДжаваСкрипте. Поэтому ценность того, что вы там где-то в каком-то месте повысите статический контроль в целом падает, ага.

VD>Всегда можно сделать так, чтобы все что нужно для проекта было бы известно до рантайма. Задач которые действительно требуют анализа мета-данных в рантайме очень мало. И даже их можно решать путем динамической компиляции.

VD>Так что не надо выдумывать.

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

Да, но "2 + 2" у нас будет конечно статически-типизированно, тут базара нет.

ВВ>>Я для себя буду выбирать более удобное и последовательное решение, более близкое к моим задачам, а какая там типизация — буду смотреть в последнюю очередь.

VD>Вот с этим можно согласиться. Лично если я буду иметь на руках два решения одинаковых по возможностям, то я предпочту статически-типизированное просто потому, что оно будет более быстрым, комфортным и надежным. А раз мы сошлись на том, что можно достичь возможностей динамике используя связку "статика + вывод типов + макросы", то остается только создать действительно хорошую реализацию.

Два решения? А губа не треснет? Тут одно бы найти
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 20.12.10 20:44
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>В том же D доступен полноценный compile-time на довольно широком подмножестве языка http://www.digitalmars.com/d/2.0/function.html#interpretation


VD>Не полноценный. Это, по словам же самого автора, крутой констант-фолдинг.


Вообще-то тьюринг полный
Ну и конечно вынужденно функционально чистый.
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 20:50
Оценка:
Здравствуйте, VladD2, Вы писали:

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


Мое утверждение — и при использовании внешних ДСЛ-ей и при использовании макросов результат обладает сравнимым уровнем юзабилити.
Опровергай.

VD>Так что это ты от темы пытаешься уйти. Здесь не обсуждаются конченые сайты. Здесь обсуждаются фрэйворки для их разработки. А значит вопросы их реализации.


Да? Ну извините. Вопросы разработки я обсуждать не собирался.

ВВ>>И да, мне *как пользователю* неважно, насколько сильно страдал разработчик при разработке фреймворка.

VD>Но важно, что фрэймворк имеет меньше возможностей. А средства разработки влияют на возможности фрэймворка. Ведь фрэймворк делают люди. А у людей силы ограничены. Значит речь идет не о стараниях, а о производительности труда разработчика и том результате которые при этом получается.

VD>>>Тебе не кажется, что если фрэймвор делается на базе более подходящего решения, то и результат получается лучше?

ВВ>>Здесь я связи не вижу.
VD>Приплыли. При столь очевидной лжи дальше разговаривать не о чем.

Ну и не разговаривай. Я ж тебя за язык не тянул, а сколько постов мне накатал. Не, я понимаю, конечно. "В интернете кто-то не прав".

ВВ>>Ежу понятно, что макросы удобнее рукописного генератора, не об этом речь, но как это влияет на результат

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

Ой, ради бога. Эта проблема называется — нанять ли одну снегоуборочную машину или сорок таджиков с лопатами. У контор типа МС вообще обычно второй способ работает. И недостатков ресурсов у них тоже как-то нет. Поэтому да — заботиться о том, насколько им там сложно со своими ДСЛ-ями возиться мне совершенно не хочется.

VD>Так что на твоем месте я бы упирал на то, что хотя динамика и обеспечивает примерно те же возможности, но делает это проще. Это будет конструктивно. Возможно это так и есть на самом дел... пока.


Э, мне казалось, что тут не спор "динамика вс. статика". Или он все-таки начался?
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 20.12.10 21:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я не понял как логическая ошибка вообще может быть связана с какими-то утверждениями. Отсюда никакой ответ на твой вопрос не будет иметь смысл.

VD>Еще раз повторюсь. Нельзя делать выводы из несвязанных утверждений. Нельзя по законам логики. Или мы очень далеко уйдем!

Ты меня задолбал уже этой логикой. Ты сам-то понимаешь, что такое логика? Если бы понимал, наверное, не приплетал бы ее по каждому поводу. Или посмотрел в википедии что такое "силлогизм"? Кстати, тебе было бы приятно, если бы продавщица в магазине пыталась бы тебе объяснить, что ты ни хрена не понимаешь в программировании на основе прочтения книги "Бейсик для носорога"?

В сообщении, на которое ты отвечал никаких логических выводов не было. Потому что я ничего не доказывал. Я сказал, что билд-провайдеры в студии делают использование внешних ДСЛ-ей удобными.

ВВ>>И одно важное достоинство — они широко используются и, так сказать, насаждаются вендором платформы.

VD>Достоинство до весьма надуманное. Я знаком с двумя DSLTools-DSL-ями. Оба разработаны МС. Оно — это дизайнер классов. Согласен, штука очень удобная и полезная для ОО-проектов. Второй — это дизайнер для WWF (который теперь вроде как просто WF). Вот он на мой взгляд используется не так часто и не так нужен. Но это скорее следствие применимости (странности) самого WF.

Нет, в студии этих ДСЛ-ей до хрена. Построение моделей БД, работа с настройками, работа с ресурсами. Все это используется очень часто. WWF тоже используется часто — в тех сферах, для которых он предназначен. Вот у нас WWF довольно много. Без дизайнера там, кстати, вообще как-то затруднительно знаешь ли.

VD>Потом я еще раз повторяюсь DSLTools — это библиотеке облегчающая создание визуальных рисовалок. Создание самого DSL она не упрощает! Разработку с использованием DSLTools можно было бы намного упростить, если в качестве бэкэнда использовать макрос-систему аналогичную немерловой (или собственно ее).


Ага, визуальные рисовалки. Это то, что нужно мейнстриму.

ВВ>>Люди к ним привыкли. И таки-да, многим удобнее модель набросать в дизайнере, чем делать это макросом.

VD>Покажи мне хотя бы одного человека коорый создал бы свой DSL на базе DSLTools? Так к чему привыкли люди?

Люди привыкли пользоваться. Создавать — не привыкли. Вообще мейнстрим такая штука — что в нем в основном используют созданное другими, а не создают сами. И с чего бы эти люди вдруг стали тоннами писать макросы?

VD>Еще раз — это демагогия и уход от темы. Лучше средства — лучше и фрэймворк. Лучше фрэймворк — лучше и конечный продукт. Не уже ли это не очевидно?


Мне совершенно не очевидно, зачем в очередной раз обсуждать макросы. Мало было разговоров на эту тему? Еще хочется?
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 21:13
Оценка:
Здравствуйте, lomeo, Вы писали:

VD>>Вот только они в своих рассуждениях забывают упоминать детали. А детали все портят...

VD>>1. Даже выразителности Хаскеля зачастую недостаточно чтобы записывать ДСЛ-и именно в том виде в котором его видя программисты. В итоге в ход идут ужимки. Вместо символов "/" в грамматике начинают использоваться супер-пупер конструкции вида "<@>" и т.п.

L>Полностью неверно. В нём можно использовать символ /


Ну, тогда где же эти полноценные грамматики.

Давай проще, а? Вот тебе PEG-грамматика:
any                   = ['\u0000'..'\uFFFF'];
digit                 = ['0'..'9']+;
spaces : void         = ' '*;
num                   : int = digit spaces;
unaryMinus            : int = '-' spaces simplExpr;
parenthesesExpr       : int = '(' spaces sumOrSub ')' spaces;
simplExpr             : int;
mulOrDiv              : int = simplExpr (('*' / '/') spaces simplExpr)*;
sumOrSub              : int = mulOrDiv  (('+' / '-') spaces mulOrDiv )*;
start                 : int = spaces sumOrSub !any;

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

Если не сможешь, то давай закроем тему выразительности ДСЛ-ей на хаскеле.

VD>>2. Красивый и легко расширяемый код в большинстве случаев — это медленный код. А быстрый код — это не очень красивый код. Например, красивые выкрутася на хаскеле зачастую связаны с применением ленивости (отложенного вычисления). Но те же ленивые списки частенько очень сильно замедляют код. Скажем для представление строк в хаскеле по умолчанию применяются ленивые списки, но это очень медленно. По этому там же придумали бинарные строки, которые, как я понимаю, являются массивами символов. Но вот уже с ними работать не так здорово.


L>"Ленивый код — медленный код" — неправда.


Ленивые списки вообще, то. Ну, да ладно.
Сравним Пасрек и PerGrammar?

L>1. Явный strictness расставляют при профилировании там, где надо. Обрати внимание — там, где не надо, его не расставляют. Иначе он может, например, снизить производительность.


Не, не. Так не пойдет. Что за явный strictness? Ленивость же быстра как ветер! Компилятор умен как мудрый ворон! Зачем нам приседания?

L>2. Списки и преобразования над ними как раз частенько транслируются в простые циклы.


Зачем слова? Сравним Парсек и PerGrammar на одинаковых не тривиальных грамматиках?
Или они в теории "частенько транслируются", а на практике частенько не транслируется?

L>3. Почему работать с бинарными строками не так здорово? Паттерн матчингом разбираются, есть функции аналогичные функциям над списками.


А почему Парсен на на них основан?
И что там с ленивостью у них?
В конце концов, мы о ленивости говорим. Так почему же ты сразу хочешь отказаться от ленивых строк хасееля? Они же ведь, как я понимаю, просто штатные списки, да?

L>Ну, и конечно, главный аргумент — легко расширяемый код (независимо от языка) обычно достаточно быстрый. Надо быстрее — профилируют и правят узкие места. В Haskell, благодаря лёгкости equational reasoning в большинстве случаев не доходит до уродования кода — код остаётся столь же чистым, понятным, легко модифицирумым.


Не надо. Хороший и чистый код — это заслуга программиста. Пусти большую часть здешних посетителей и они тебе на любом языке говнокода нафигачат. А хороший программист знающий язык напишет легко расширяемый ... бла-бла-бла код.

Ленивость приятная фича языка, но далеко не бесплатная. Не все люди выбирающие обычные языки не понимают что творят. Лично я сознательно не приемлю ленивость по умолчанию. Было бы очень приятно иметь язык имеющий прозрачную как в хаскеле, но при этом управляемую ленивость которая была бы по умолчанию выключена. Так же было бы приятно иметь нормальный язык в котором бы фукнции с побочными эффектами были бы выделены. Но при этом очень хочется не иметь того что есть в хаскеле. В общем, хаскель твой — это очень интересный прототип. Но использовать его в реальной жизни могут только те кто совсем оторвался от жизни. Ну, или наперевес с С, что лично меня не радует.

VD>>3. Хаскель хорош когда речь идет о написании вычислительного кода. Но для проектирования больших симстем в нем нет ничего акромя возможности вручную эммулировать паттерн "Абстрактный Тип Данных". Соответственно и все выкрутасы с кодом и ДСЛ-ями обычно ограничиваются тем что мы называем уровнем метода.


L>Это даже не ложь, а глупость.


Да, это не лож. Да — это глупость, но не моя. Это глупость его создателей. Точнее они то не не делали язык для реальной жизни. Они делали эксперимент. И то чего его пытаются в жизни использовать это действительно не очень разумно.

L>Отсутствие у тебя знаний о функциональном дизайне ты представляешь как отсутсвие функционального дизайна вообще.


Ой, ой, ой! Ну, прям пристыдил! Какой на фиг "функциональный дизайн"? Нет такого в природе. Ваш дизайн он весь воображаемый. Хаскель с точки зрения дизайна не далеко ушел от С. Модули и функции вот все что у нас есть. Побочные эффекты в монадах, но монаду в карман не положишь.

L>Чего не хватает не сказано. Что такое ручное эмулирование — не понимаю.


Это когда вместо конструкций языка вроде "class ..." лепят код по патернам. Лет 30 назад народ устал делать это на С с Паскалем и изобрел ООП. И тут на тебе через 30 лет нашлись гениальные пророки которые всем объяснили, что это была ошибка и нужно вернуться на 30 лет назад и чуть улучшить модули, чтобы боль в заднице была не столь очевидна.

VD>>Не смотря на все эти проблемы отледьные товарищи с огромным удовольствием вешают ярлыки "убогих недоязыков" на те языки которые попросту используют другие типы абстракции. К великому сожалению "недоязыки" делают их любимый хаскель в хвост и гриву.


L>Во-первых. Описанных тобой проблем нет — они только у тебя в голове.


Гы-гы. Нет программ, нет проблем.

L>Во-вторых. Я называл твой любимый Nemerle "убогим недоязыком"?? Вообще-то, он мне скорее нравится.


Ты это постоянно высказываешь, но в чуть более завуалировано форме. Достаточно примитивного логического вывода. (К слову, меня логике учили в институте.)

Просто не надо рассказывать про том, что есть языки которым макросы не нужны и все будет ОК.

L>В-третьих. Про хвост и гриву — перестань уже выдавать свои фантазии за объективную реальность.


Какие фантазии? Я уже видел не мало задач которые решаются на немерле лучше или как минимум не хуже. Выразительность достигаемая марками однозначно выше. Производительность они тоже позволяют достичь ту что нужно, а не ту что вышла.

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

VD>>Интересно, что авторы Хаскеля намного более трезвы в своих оценках. Их мнение значительно более взвешено. Вот тут есть интервью с одним из авторов Хаскеля где он весьма трезво и разумно говорит об этом языке. С ним трудно не согласиться (в отличии от фанатов). Хаскель, в первую очередь — это полигон (лаборатория) идей. Его главная идея изоляция и явная декларация кода содержащего побочные эффекты. А вот система типов у него переусложненная, но все равно не являющаяся идеальным средством для реализации DSL-ей.


L>Это же надо так передёргивать!


Да ну? Ты и с авторами Хаскеля решил не согласиться?

L>1. Haskell как лаборатория — это отношение SPJ и это естественно. Никакого "в первую очередь" тут даже нет.


Ну, да. Авторы могут считать что угодно.

L>2. "Его главная идея" — полный бред. Почитай уже об истории создания Haskell от того же SPJ. Побочными эффектами, а вернее даже зависимым от этого параллелизмом занимается SPJ. И он там и говорит про себя, а не про Haskell.


Я не уверен, что переводчики не наврали. Но если нет, но вот эти слова мне трудно по другому воспринять:

— Как Вы думаете, существуют ли декларативный и императивный способы мышления? Считаете ли Вы, что естественное мышление человека принадлежит к той или иной категории?

Саймон: Я всегда с подозрением отношусь к фразе «это естественно». Обычно люди говорят, что что-то является естественным, потому что оно естественно для них. Совсем необязательно это будет естественным для кого-то ещё. Я вполне могу сказать, что декларативное мышление и мышление чисто функциональное, или даже преимущественно функциональное, заставляет вас применять иной подход к задачам. Чтобы писать поистине функциональные, а не императивные программы, действительно необходимо в некоторой степени перестроить мозги. И не слегка. Это очень существенная перестройка. Я не хочу сказать этим, что какой-то из способов мышления более естественен, чем другой. Главным двигателем моей исследовательской программы и причиной, по которой я считаю, что компании Microsoft полезно финансировать мои исследования и в частности Haskell, является то, что цена, которую приходится платить за неограниченные побочные эффекты, присутствующие в широко распространенной императивной модели, становится всё выше по мере того, как мы создаём всё более грандиозные программные продукты, от которых мы хотим корректности, а также параллелизма. Наблюдаемая повсюду ничем не ограниченная масса побочных эффектов на деле обходится нам всё дороже. Функциональный подход всё более оправдывает себя. Мне не важно, естественно это или нет. Суть в том, что его ценность непрерывно растёт. Я не знаю, все ли начнут использовать Haskell через 10 или 20 лет. Но я уверен, что те языки, которые будут популярны через 10 или 20 лет, так или иначе будут иметь механизмы контроля, управления и отделения побочных эффектов. Как бы то ни было, если вы хотите контролировать побочные эффекты, за идеями следует обращаться к сообществу чистых функциональщиков. Я отношусь к Haskell как к своеобразной лаборатории для развития подобных идей. Вне зависимости от того, используется ли именно Haskell, идеи остаются прежними и могут применяться в другом обличье. Не только в рамках того, что носит название H-A-S-K-E и двойное L.


L>3. С переусложнением (по сравнению с лямбдой, а не, например, типизацией .NET!) соглашусь


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

L>4. Про идеальное средство никто и не говорил, зачем ты это приплёл?


Мне не понравилось (не нравится постоянно) твое рассуждение на тему макросов демонстрирующих недостатки. Хаскель мне в общем-то индифферентен. Но я же понимаю откуда ноги растут. Как говорится, чтобы уважали подходы что нравятся тебе, уважай и альтернативные.

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

У хаскеля и немерла есть одна общая черта — они оба являются строготипизированными, статически-типизироваными, компилируемыми языками программирования. А у этого класса языков есть явные недостатки по сравнению с динамикой. И макры — это тот самый путь позволяющий полностью нивелировать эти недостатки. Тьюринг-полная система типов — это другой путь. Можно конечно спорить о том какой из них лучше, но уж точно не стоит снисходительно относиться альтернативе только лишь на том основании, что ты предпочел другой подход. Лично я считаю, что прямой путь всегда лучше извилистых. И по сему если уж вычисления в время компиляции нужны, то лучше делать их явно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 20.12.10 21:26
Оценка:
Здравствуйте, hardcase, Вы писали:

L>>Знаешь, я как-то об этом уже писал, но поиском не нашёл. Если вкратце, то такие вещи имхо нужно делать средствами языка. Например, в Haskell это будет функция. А типы выведет компилятор.

H>Макросы — это и есть средство языка Мы на языке описываем его самое и получаем новый язык — чуть более удобный и богатый.

Я имел в виду first-class средства.

Макрос типа grammar декларирует новый язык. Думаю, что запихнуть туда что-то снаружи тяжело, если вообще возможно — я не знаю его реализации. Соответственно, расширив что-то снаружи мы не сможем это подключить внутрь нашей грамматики. Например, для упрощения описания правил. Или даже правило из одного макроса использовать в другом (хотя тут не уверен — не знаю как реализован). Как только мы стараемся позволить то или это в нашем новом языке — макрос сильно усложняется. А ведь всё это уже есть в нашем host-языке, только синтаксис отличается.

Макрос же типа foreach в Haskell реализуется обычной функцией
Автор: lomeo
Дата: 09.08.07
. Стоит ли реализовывать его в виде макроса?

Да! Напоминаю, что я сюда пришёл чуть-чуть пофлеймить, так что если я излишне категоричен, не считай меня противником макросов
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 21:38
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Производительность — это твой бзик, я знаю, устал уже об этом с тобой говорить. Помню как ты радовался, когда Nemerle на несколько процентов обогнал Haskell. Определённо рвёт, о да, даже спорить не хочу.


Он на несколько процентов обогнал спец-реализацию. А Парсек он рвет как Тузик грелку. И сравнение с парсеком более честное, так как именно это два стандартных решения "из коробки".

L>Но про выразительность то ты как можешь говорить? Ты же Хаскеля не знаешь, сам таких людей называл Блабами — я слышал!


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

VD>>Хаскелю уже где-то лет двадцать, да? Но вот язык которому без году неделя делает его в области тех же парсеров как котенка, хотя казалось бы это та область на которой Хаскель пиарят последние лет 10.


L>Чиво? Где это язык, которому... делает Haskell в области парсеров?


Тут.

L>И нет, парсеры — далеко не самое важное в Haskell,


Конечно не главное. Если судить по примерам на форуме, то главное это Фибоначи!

L>просто идея парсер комбинаторов пошла оттуда. А про Alex, Happy, autoparsec и прочую кучу библиотек и тулзов парсинга ты просто не в курсе.


Ну, почему же? Слышал. Но почему-то приводят в пример всегда Парсек. И повторить на других языках именно его пытаются.

VD>>Вот когда хаскель будет порождать столь же шустрые и выразительные вещи как скажем PegGrammar, то тебя можно будет по слушать. А пока что твои слова выглядят как высокомерие зазнайки утратившего связь с реальностью.


L>Где логика? Или это просто твоё решение — вот когда хаскель будет..., тогда я и буду слушать lomeo! Если так — то на что ты вообще отвечаешь, не выслушав меня?


Логика очень простая. Выпендиваться крутостью можно когда есть явные преимущества. А так как их нет, то лучше убрать снисходительный тон и прекратить говорить макросах как о средствах демонстрирующих что-то нехорошее в языке. Иначе действительно не ясно где логика.

VD>>Ваша хваленая ленивость сразу же выбрасывается за борт когда речь заходит о скорости выполнения.


L>А так как производительность зависит только от очень небольших участков, то выбрасывается она только там.


Вообще-то производительность она зависит от всех участков. Есть просто узкие места где падение очень заметно. А вот бенефиты от ленивости есть дейсвительно не везде. И хорошо было бы иметь ровно обратный подход — вставлять ее там где она дает реальный выигрыш и не вредит производительности.

L>Всё остальное смело использует все преимущества ленивости. Откуда следует, что ленивость по умолчанию в Haskell выбрана не зря.


Какие преимущества? Где логика? Ну в чем преимущество в ленивости "1 + а"? Зафиг она нужна в 90% кода?

L>Ни один из пользователей Haskell это не подвергает сомнению.


Да подвергают. Я не раз слышал.

L>А вот человек, не пользовавший его пытается судить. Знаешь какова цена мнению дилетанта?


Да человек знает цену этой ленивости. И не понимает зачем ему нужно ее платить. Да и сомнений нет. Все в общем-то очевидно. И преимущества, и недостатки. У нас ленивость тоже есть в распоряжении. И мы ее постоянно пользуем, когда от этого есть бенефиты.

VD>>Ваша хваленая гибкость так же почему-то не достаточна того чтобы оформить код именно так как хочется. Сравни, например, грамматики записанные на Хаскеле и грамматики записанные с использованием макроса PegGrammar. Ну, ведь очевидно же, что хаскелю явно не хватает выразительности.


L>Haskell не идельный язык


Ну, наконец-то! Я тебе по секрету скажу, что идеальных языков нет вообще. Но стремиться к идеалу надо. Вот только понятия об идеале у всех разные. И, соответственно, рецепты ее достижения тоже.
Я уважаю миссию хаскеля. Он многое доказал и показал правильные пути. Но не все. Вот немерл тоже показал один из правильных путей. Более того он доказал (вместе со Скалой), что ФП отлично уживается вместе с ООП. Это тоже значимые достижения. Так еж он доказал, что МП тоже может жить бок о бок с другими парадигмами и давать офигительный бенефит на практике. Тоже в общем-то достижение заслуживающее уважения.

L> — и вообще "avoid success at all costs" его лозунг.


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

L>Но большинство проблем, о которых Nemerle даже не подозревает (и так и не будет подозревать, а будет совать свои макросы во все щели) в Haskell успешно решены.


Но кого колышат чужие проблемы, если у него их нет?

L> Там где Haskell невыразителен можно использовать макросы, никто не мешает — есть же TH.


Ага. Не ясно только почему про него никто ничего не говорит.

L> И, кстати, используют, вспоминая в свою очередь, например, о более generic языках. А вот там, где Haskell достаточно выразителен, Nemerle по прежнему придётся совать свои макросы. И какому из языков не хватает выразительности?


По моему, ответ очевиден — тому в кортом свои идеи нельзя выразить так как хочется, а не так как получается. И Хаскель (без TH) тут явно не победитель.

Собственно с выразительностью у немерла проблем не так много. Те что есть мы постараемся исправить в следующей версии. Но есть ряд других проблем. Одна из них — это как раз то, что в отличии от Хаскеля Немерл создает ощутимый оверхэд при использовании функциональных конструкций. Как и с ленивостью хаскеля это не всегда заметно. Но бывают случаи когда императив оказывается предпочтительнее. И тут конечно нужно черпать идеи у хаскеля. Де-деревизация, а в перспективе и спер-компиляция — это то что очень хотелось бы заполучить. Но у нас, в отличии от Хаскеля нет ни 20-ти летнего возратса, ни спонсирования со стороны Майкрософт. Что очень печально. Но мы не унываем, а пытаемся сами сделать будущее таким каким каким мы его хотим видеть.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 22:29
Оценка:
Здравствуйте, FR, Вы писали:

FR>>>В том же D доступен полноценный compile-time на довольно широком подмножестве языка http://www.digitalmars.com/d/2.0/function.html#interpretation


VD>>Не полноценный. Это, по словам же самого автора, крутой констант-фолдинг.


FR>Вообще-то тьюринг полный


Не путай тюринг-полноту и полноту возможностей. Это совсем разные вещи. Скажем С++ и его шаблоны тюринг-полны. Но С++ может читать файлы, а его шаблоны — нет.

FR>Ну и конечно вынужденно функционально чистый.


Не вынужденный, а по прихоти авторов. В немерле, вот вполне себе императивный аналог и никто не кашлеет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 22:31
Оценка:
Здравствуйте, FR, Вы писали:

VD>>А как, кстати, с поддержкой IDE при этом?


FR>Традиционно для окамла


А можно не уходить от ответа? Мне правда интересно.

VD>>Так же забавно сравнить размер кода.

VD>>Моя реализация макры находится здесь.

FR>Тут не понял это же вроде ссылка на корень немерлевского SVN.


Сори. Это так странно в гуглкоде ссылки сделаны. Вот правильная:
http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/Nemerle.Xml/Nemerle.Xml.Macro/?r=9458
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 20.12.10 22:48
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Я имел в виду полноценный рефакторинг. А так — да, переименование есть. Хорошо, конечно. Дело осталось за "малым" — реализовать полноценный рефакторинг а ля Решарпер. Вот только это проект на тысячи человекочасов. А пока, извините, но я не могу принять рефакторинг за плюс Немерла, ибо он в зачаточной стадии.

Покажи мне рефакторинг уровня немерла для динамически типизированного языка.
JetBrains PyCharm "IDE" для питона в плане рефакторинга сливает немерлу.

ВВ>"Доступ к компилятору" — это не только АПИ, но еще и возможность влиять на развитие языка. Были бы вы просто группой поддержки, отвечающей за интеграцию, когда поляки бы занимались развитием языка без всяких оглядок на студию, сдается мне, накушались бы вы по полной. Это ты вот не видишь будущее языка без ИДЕ, поэтому и фичи рассматриваются в контексте интеграции — без этого жизнь бы медом не казалось.

Повторю еще раз: Мелкософт режет фичи для C# на основании "трудно поддержить в IDE".

ВВ>Вывод типов как раз серьезно усложняет задачу создания полноценной ИДЕ. Фактически приходится выводить типы на уровне интеграции. Возможность при этом задействовать сервисы компилятора есть далеко не у всех языков.

Их нет только у тех то об этом не задумывался.

ВВ>Банальный пример того, что свернет мозги немерлевскому тайп-чекеру:

ВВ>
ВВ>using system;
ВВ>out x = puts x $$ out;
ВВ>out "One" "Two" "Three" "Four" "Five";
ВВ>

Немерле не поддерживает рекурсивные типы. И что?
Думаешь большая проблема их поддержать?

ВВ>Я повторю — да, в динамике интеллисенс будет работать не всегда. Но там, где он не будет работать, в статике код вообще не будет работать.

И правильно. Нефиг код с ошибками пытаться выполнять.

ВВ>Для начала надо бы язык закончить. И таки да, у меня не ДжаваСкрипт и не Питон, мне типы выводить гораздо проще.

А из-за чего тебе типы выводить проще?
Может из-за того что у тебя метапрограммирования нет?

ВВ>И с чем ты не согласен? Руби — медленный интерпретатор. Динамически-типизированный язык может быть и компилируемым. И разница в скорости будет весьма заметной.

Компиляция динамике нихрена не помогает.
Не смотря на всю свою круть V8 тормоз и жрет память тоннами на ровном месте.
Ибо ему приходится на лету классы объектов менять и на каждый чих новый тип создавать.

ВВ>Ага. Только вот тесты все равно нужны.

Функциональные ониже регрессионные. И делаются они по мере нахождения багов.

ВВ>Угу, а программа отвечает за преобразование данных. А так как данные относятся к числу неизвестных, то и статика идет лесом.

Что за бред?
Какое отношение валидация пользовательского ввода имеет к типизации?

ВВ>Специфика веба в том, что данные эти приходят черт знает откуда. И часто вообще никакого контроля над ними нет.

Это как?
Я что в своем собственном приложении не могу контролировать свои собственные данные?

ВВ>К тому же половина приложения — клиент — так или иначе голимая динамика. Именно голимая, на голимом ДжаваСкрипте. Поэтому ценность того, что вы там где-то в каком-то месте повысите статический контроль в целом падает, ага.

Вот только этот жабаскрипт можно генерировать.
Причем за основу исходного кода можно взять реактивное программирование и зарулить императивный жабаскрипт в глубокие минуса.
Ага?
http://www.impredicative.com/ur/

ВВ>Угу. Получаешь данные из внешнего источника и осуществляешь их разбор. Все, это динамика. Вылетать будешь в рантайме. Читаешь в своем приложении конфиг? Ага, динамика. Работаешь с хэш-таблицами? Динамика. Читаешь параметры УРЛ? Динамика. Работаешь с куками? Динамика. И так далее, и тому подобное.

Написал if динамика... ой трололо.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 20.12.10 22:56
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Что-то тебя понесло. Под "динамикой" обычно понимают что тип выражения определяется в runtime.

G>Как это соотносится с твоим утверждением что парсер xml, который есть функция String -> Some XDocument, является динамикой?
Да он просто понял что в очередной раз с треском слил и начал спамить кучу постов основанных на полностью искажонном смысле общепринятых терминов.
Он всегда так делает.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 20.12.10 23:05
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Мое утверждение — и при использовании внешних ДСЛ-ей и при использовании макросов результат обладает сравнимым уровнем юзабилити.

ВВ>Опровергай.
Это очевидный бред для любого кто имел дело например с макросом PegGrammar и любым внешним генератором парсеров.
Или вот например http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/Nemerle.Xml/Test/Main.n
Попробуй повторить внешним ДСЛ.

ВВ>Ну и не разговаривай. Я ж тебя за язык не тянул, а сколько постов мне накатал. Не, я понимаю, конечно. "В интернете кто-то не прав".

Если ложь не опровергать то кто-то может поверить.

ВВ>Ой, ради бога. Эта проблема называется — нанять ли одну снегоуборочную машину или сорок таджиков с лопатами. У контор типа МС вообще обычно второй способ работает. И недостатков ресурсов у них тоже как-то нет. Поэтому да — заботиться о том, насколько им там сложно со своими ДСЛ-ями возиться мне совершенно не хочется.

И получается очередной говнопродукт.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.12.10 23:18
Оценка:
Здравствуйте, hardcase, Вы писали:

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



L>>>>Знаешь, я как-то об этом уже писал, но поиском не нашёл. Если вкратце, то такие вещи имхо нужно делать средствами языка. Например, в Haskell это будет функция. А типы выведет компилятор.


H>>>Макросы — это и есть средство языка Мы на языке описываем его самое и получаем новый язык — чуть более удобный и богатый.


G>>Вот только проблема в том что не нужно людям средство создание языка. Им нужно async\yield\do-нотация\query comprehension\type providers и прочие вещи, которые вы называете "хардкодом компилятора". Именно эти хардкоды компилятора делают язык популярным.


H>Ну так перечисленное сделано. И не без применения макросов (tm).


Точно? И type providers? И async как в 5-ом шарпе? А yield разве не через тот самый "хардкод компилятора" реализован?
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.10 23:28
Оценка:
VD>О как? И на каком же чудо-языке это все было сделано?

дикая смесь c# и q#

VD> Можно хотя бы на кусочек кода глянуть?


пока нет
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 20.12.10 23:39
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Динамика ничем не поможет. Сам сценарий изначально — это динамика. Чтение ХМЛ через XmlReader — это динамика. Работа с базой — это динамика. Динамика — это просто данность. Тут другой вопрос — чем в данном случае поможет статика?


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

ВВ>Да ну, не так страшен черт. Что вы так боитесь этих тестов-то? Меняются готовые тесты вообще довольно редко. Чаще пишутся новые. Сделал фичу — парочку-другую тестов для нее. Это уже до автоматизма доходит. Времени всего ничего. Зато доходит чуть ли не до 100% coverage.


Не работает это все для быстрого прототипирования. В РОР я пишу миграцию с количеством строк равным нужному мне количеству атрибутов и через пару секунд могу работать со вновь созданным в базе объектом. А ты что рекламируешь? Создай таблицу, создай 4(!!!) хранимки которые будут что-то там контролировать, создай тесты на эти хранимки, которые будут контроллировать сами хранимки и работай потом с этими хранимками через GetReader, ибо динамика и нет разницы какой DAL юзать. При всем этом тотальном контроле у тебя это все все равно остается динамикой, которая вечно разваливается, т.к. контроллируется тестами вместо компилятора.

Статика и динамика тут не при чем. Естественно никакого выигрыша в данном случае от статики ты не получишь, но это не проблемы статики.

ВВ>Причем тут ГУИ? Я говорю — вся логика пишется на клиенте. *Вся логика*. Кроме той, которую просто чисто физически нельзя писать на клиенте. Практически любое приложение можно так написать.


Кроме web, хреновое приложение получится. Начиная от безопасности, кончая урлами.

ВВ>>>А что непонятно-то Простые изолированные тесты, которые в первую очередь проверяют консистентность модели. Ну или корректность работы процедур, если они имеются. Скажем, один тест проверяет все процедуры для работы с конкретной сущностью — вставил, прочитал, сверил результаты, удалил.

Z>>Зачем проверять консистентность модели которая впрямую отображает БД и зачем нужны процедуры которые делают CRUD?

ВВ>Чтобы убедиться в том, что нет рассинхрона.


Чего с чем? Процедур со схемой? Или процедур с кодом? Ты внес еще один слой возможного рассинхрона и тут же счастливо отрапортовал, что рассинхрона не будет, потому, что есть протестированый спец слой который это гарантирует.

Z>>При этом их еще и тестировать надо? В каком сценарии нам эти процедуры и тесты полезны будут?


ВВ>В основном regression testing. Собственно, один из основных смыслов юнит-тестов.


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


Вобщем сделать из статики динамику действительно не так сложно, достаточно побольше хранимок, рефлекшена и работы с xml по строковым константам. Только это никакого отношения к теме не имеет, я говорю про перенос достоинств динамики в статику, а ты переносишь недостатки.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.10 23:47
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>дикая смесь c# и q#


Что такое q# ?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 00:14
Оценка:
VD>Что такое q# ?

самописный недоязычок
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 21.12.10 00:46
Оценка:
Здравствуйте, DarkGray, Вы писали:

H>>А теперь примеры некомбинируемых макросов в студию. А также вменяемые юзкейзы их комбинации.


DG>макрос распараллеливания кода может конфликтовать с linq2sql.


DG>т.к. и тот и другой — хочет select/where заменить на свою конструкцию.


Не будет макрос распараллеливания работать с select where, а будет с Select(this IEnumerable src, ..), это не проблема.

DG>но этот конфликт решается просто: что макрос распараллеливания должен работать всегда после linq2sql, в других задачах — такой явной зависимости может не быть.


Нет, этот конфликт просто от незнания простых приемов работы с макросами.

DG>зы

DG>причем дьявол в мелочах.

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

DG>например, распараллеливание + linq2sql может дохнуть в итоге на том, что база технически или по лицензии поддерживает лишь ограниченное кол-во соединений.


Никто не будет делать распараллеливание linq2sql просто потому, что это а) это не паралелится так просто, ибо одна транзакция не параллелится, б) все что нужно сервер распаралелит гороаздо лучше, его для этого и писали.

DG>соответственно макрос параллеливания может потребоваться учить, чтобы он по разному обрабатывал код с linq и без linq


Re[6]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 21.12.10 01:11
Оценка:
Здравствуйте, FR, Вы писали:

FR>Исходники https://github.com/samoht/htcaml тут, прямая ссылка на архив

FR>http://download.github.com/samoht-htcaml-htcaml-0.1.0-10-geaa7ddb.zip

FR>Размер небольшой, zip'ка всего 20 кб.


Справедливости ради надо отметить, что кода у Влада меньше, а возможностей больше. Кроме встраивания xml в произвольное место (как умеет и htcaml), в немеловом варианте есть if и foreach, позволяющие вставлять тег по условию или множить его в цикле.
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 01:12
Оценка:
DG>>т.к. и тот и другой — хочет select/where заменить на свою конструкцию.

Z>Не будет макрос распараллеливания работать с select where, а будет с Select(this IEnumerable src, ..), это не проблема.


так и linq2sql работает с Select(this IEnumerable src, ...)

DG>>но этот конфликт решается просто: что макрос распараллеливания должен работать всегда после linq2sql, в других задачах — такой явной зависимости может не быть.


Z>Нет, этот конфликт просто от незнания простых приемов работы с макросами.


bla-bla.. я самый умный, все остальные тупее меня...

DG>>например, распараллеливание + linq2sql может дохнуть в итоге на том, что база технически или по лицензии поддерживает лишь ограниченное кол-во соединений.


Z>Никто не будет делать распараллеливание linq2sql просто потому, что это а) это не паралелится так просто, ибо одна транзакция не параллелится, б) все что нужно сервер распаралелит гороаздо лучше, его для этого и писали.


опять считаешь других тупее тебя... либо сам не понимаешь о чем идет речь.

вот этот код успешно параллелится, но может сдохнуть в runtime если у базы ограниченное кол-во подключений.
при этом параллельная версия будет работать в два раза быстрее (если считать что время выполнения запросов сравнимое)

parallel
(
  var managers = db.Managers.Where(manager=>manager.IsTopManager).ToArray();
  var cars = db.Cars.Where(car=>car.IsFree).ToArray();
  return НазначитьМашиныДляМенеджеров(managers, cars);
)


зы
вместо parallel здесь также можно применить замену синхронных запросов на асинхронные, объедиение запросов и т.д.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 21.12.10 02:06
Оценка:
Здравствуйте, DarkGray, Вы писали:


DG>>>т.к. и тот и другой — хочет select/where заменить на свою конструкцию.


Z>>Не будет макрос распараллеливания работать с select where, а будет с Select(this IEnumerable src, ..), это не проблема.


DG>так и linq2sql работает с Select(this IEnumerable src, ...)


Нет, linq2sql работает с Select(this IQuerable src, ...)

Z>>Нет, этот конфликт просто от незнания простых приемов работы с макросами.


DG>bla-bla.. я самый умный, все остальные тупее меня...


сорри, если обидел, не хотел.

Z>>Никто не будет делать распараллеливание linq2sql просто потому, что это а) это не паралелится так просто, ибо одна транзакция не параллелится, б) все что нужно сервер распаралелит гороаздо лучше, его для этого и писали.


DG>опять считаешь других тупее тебя... либо сам не понимаешь о чем идет речь.


Объясни популярно. Какой смысл автоматом параллелить вызовы к БД.

DG>вот этот код успешно параллелится, но может сдохнуть в runtime если у базы ограниченное кол-во подключений.

DG>при этом параллельная версия будет работать в два раза быстрее (если считать что время выполнения запросов сравнимое)

DG>
DG>parallel
DG>(
DG>  var managers = db.Managers.Where(manager=>manager.IsTopManager).ToArray();
DG>  var cars = db.Cars.Where(car=>car.IsFree).ToArray();
DG>  return НазначитьМашиныДляМенеджеров(managers, cars);
DG>)
DG>


DG>зы

DG>вместо parallel здесь также можно применить замену синхронных запросов на асинхронные, объедиение запросов и т.д.

Не будет работать вообще, тут одно соединение и одна транзакция.
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 03:33
Оценка:
Z>Нет, linq2sql работает с Select(this IQuerable src, ...)

зачем нужен IQueryable при наличии макроса раскрывающего код linq2sql? лишняя сущность какая-то..

Z>Объясни популярно. Какой смысл автоматом параллелить вызовы к БД.


есть такое слово "чтобы быстро работало"

Z>Не будет работать вообще, тут одно соединение и одна транзакция.


зависит от условий задачи — требуется или нет единая транзакция.
допустим не требуется
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 21.12.10 04:08
Оценка:
Здравствуйте, DarkGray, Вы писали:

Z>>Нет, linq2sql работает с Select(this IQuerable src, ...)


DG>зачем нужен IQueryable при наличии макроса раскрывающего код linq2sql? лишняя сущность какая-то..


обоснуй мысль у тебя какая-то не очивидная

Z>>Объясни популярно. Какой смысл автоматом параллелить вызовы к БД.


DG>есть такое слово "чтобы быстро работало"


быстро но неправильно?

Z>>Не будет работать вообще, тут одно соединение и одна транзакция.


DG>зависит от условий задачи — требуется или нет единая транзакция.

DG>допустим не требуется

еще раз повторяю, ты привел код который использует одно соединение. его нельзя распаралелить, макросы тут ни при чем.
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 21.12.10 05:50
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Если вывод возможен, то в этих местах он уже не динамический, а статический. И конечно же все что относится к статике для него не чуждно. А там где невозможен, то для него справедливо все что говорится о динамике (в том числе и жопа с IDE).


Для IDE и разных верификаторов кода используется два подхода, первый то, что ты говоришь то есть статический вывод типов и абстрактная интерпретация, второй динамический анализ, загрузка модулей и частичный (например прогон тестов) или полный запуск кода, те же IDE просто запоминают информацию при запусках.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 21.12.10 05:56
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Не путай тюринг-полноту и полноту возможностей. Это совсем разные вещи. Скажем С++ и его шаблоны тюринг-полны. Но С++ может читать файлы, а его шаблоны — нет.


Ну так и шаблоны C++ и CTF D тоже весьма разные вещи. В D CTF позволяют писать на подмножестве самого языка а не на птичьем диалекте языка шаблонов. Да и файлы читать и разбирать во время компиляции вполне возможно.

FR>>Ну и конечно вынужденно функционально чистый.


VD>Не вынужденный, а по прихоти авторов. В немерле, вот вполне себе императивный аналог и никто не кашлеет.


Для D именно вынужденный.
Re[7]: Веб и динамика? Веб и статика+метапрограммирование.
От: FR  
Дата: 21.12.10 07:31
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Справедливости ради надо отметить, что кода у Влада меньше, а возможностей больше. Кроме встраивания xml в произвольное место (как умеет и htcaml), в немеловом варианте есть if и foreach, позволяющие вставлять тег по условию или множить его в цикле.


Ну кода практически одинаково:

N:\dev\repo\nemerle\snippets\Nemerle.Xml\Nemerle.Xml.Macro

nemerle: files = 7  lines = 789  size = 28 kb. (28876 bytes)



N:\dev\repo\htcaml\pa_lib

ocaml: files = 10  lines = 845  size = 27 kb. (27969 bytes)


Ну и парсятся немного разные вещи, XML и XHTML.

Вместо foreach там $list доступ к списку и возможность использовать ФВП типа map fold и т. п.
let process tweets =
    let html = <:html<
      <html>
        <head>
          <link rel="stylesheet" type="text/css" href="style.css"/>
        </head>
        <body>
          My collection of tweets :
          $list:List.map html_of_tweet tweets$
        </body>
      </html>
    >> in
    let chan = open_out "tweets.html" in
    output_string chan (Html.to_string html);
    close_out chan


Ну и foreach при желании прикрутить много кода не нужно, например http://www.ocaml-tutorial.org/camlp4_3.10/foreach_tutorial
(сейчас у меня сайт не доступен можно тут посмотреть)
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 08:18
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Извини, но это ерунда. Реляционки это в большинстве задач никакая не динамика, как и xml приходящий от известного сервиса. Нету там динамики, там все должно быть в том состоянии на которое рассчитан код, либо корректная работа программы не может быть гарантирована. Все это спокойно контролирует система типов. Просто не надо ей мешать.


Это не ерунда. Когда ты используешь хэш-таблицы, ты точь-в-точь имитируешь семантику тех же джаваскриптовых объектов. Пример с ХМЛ или базой простой чуть более сложный, а суть-то там одна — речь идет о данных, структуру которых мы не может гарантировать в компайлтайме.

Z>Не работает это все для быстрого прототипирования. В РОР я пишу миграцию с количеством строк равным нужному мне количеству атрибутов и через пару секунд могу работать со вновь созданным в базе объектом. А ты что рекламируешь? Создай таблицу, создай 4(!!!) хранимки которые будут что-то там контролировать, создай тесты на эти хранимки, которые будут контроллировать сами хранимки


Какие 4 хранимки? У нас что, конкурс передергивания?
Миграции ваши — это хорошо, конечно, но это решение, которое строго идет в коробке с самим ДАЛ-ом. Если нужно следовать другим процедурам миграции, то весь ДАЛ становится бесполезным практически полностью.

Z>и работай потом с этими хранимками через GetReader, ибо динамика и нет разницы какой DAL юзать. При всем этом тотальном контроле у тебя это все все равно остается динамикой, которая вечно разваливается, т.к. контроллируется тестами вместо компилятора.


Я тебе через DataReader работать не предлагал. Но с точки зрения надежности и статического контроля это решение мало чем отличается от вашего типизированного ДАЛа.

ВВ>>Причем тут ГУИ? Я говорю — вся логика пишется на клиенте. *Вся логика*. Кроме той, которую просто чисто физически нельзя писать на клиенте. Практически любое приложение можно так написать.

Z>Кроме web, хреновое приложение получится. Начиная от безопасности, кончая урлами.

Обоснуй, какие тут могут быть проблемы безопасности.

Z>Чего с чем? Процедур со схемой? Или процедур с кодом? Ты внес еще один слой возможного рассинхрона и тут же счастливо отрапортовал, что рассинхрона не будет, потому, что есть протестированый спец слой который это гарантирует.


О чем ты вообще? Ты никогда хранимые процедуры не писал? Я привел их в пример того, для чего разумно писать тесты. Хранимые процедуры я тебе писать не предлагаю.

Z>>>При этом их еще и тестировать надо? В каком сценарии нам эти процедуры и тесты полезны будут?

ВВ>>В основном regression testing. Собственно, один из основных смыслов юнит-тестов.
Z>Я просил конкретный сценарий, в котором нам помогут твои сотни тестов, которые очень легко писать. Ты почему-то предпочел отделаться общими фразами. Еще раз, напиши конкретный сценарий которые оправдывает все трудозатраты которые внес в проект созданием хранимок и их тестированием.

Я тебя приводил пример. Нужно код что ли сюда скопировать? Я только что осознал, что ты оказывается ждешь от меня обоснования для введения хранимок.
Вообще-то у меня не было желания сводить разговор в этом русло. Ну ладно. Для начала скажи — какая самая большая БД по кол-ву данных и пользователей, с которой ты работал?

Z>Вобщем сделать из статики динамику действительно не так сложно, достаточно побольше хранимок, рефлекшена и работы с xml по строковым константам.


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

Z>Только это никакого отношения к теме не имеет, я говорю про перенос достоинств динамики в статику, а ты переносишь недостатки.


И что? Он состоялся этот перенос? Если состоялся — то зачем о нем говорить, все должно быть видно, нет?
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 08:43
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Это очевидный бред для любого кто имел дело например с макросом PegGrammar и любым внешним генератором парсеров.

WH>Или вот например http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/Nemerle.Xml/Test/Main.n
WH>Попробуй повторить внешним ДСЛ.

При поддержке со стороны среды разработки внешний ДСЛ может быть не менее удобен в использовании.
В общем-то вполне можно и собственными силами сделать нормальную интеграцию какого-нибудь Кокора со студией — так, чтобы был интеллисенс и поддержка дебага по ATG. Студия такие сценарии расширения учитывает. И когда это сделано — разницы по юзабилити с макросами нет.

"Тру" путь от МС — это именно делать через внешний ДСЛ, через билд-провайдеры и коде дом, что, конечно, создает нехреновый оверхед при разработке, но зато получается решение, которое работает не только в Немерле. А от макросов Немерле на Шарпе мало толку, нет?

WH>ВВ>Ой, ради бога. Эта проблема называется — нанять ли одну снегоуборочную машину или сорок таджиков с лопатами. У контор типа МС вообще обычно второй способ работает. И недостатков ресурсов у них тоже как-то нет. Поэтому да — заботиться о том, насколько им там сложно со своими ДСЛ-ями возиться мне совершенно не хочется.

WH>И получается очередной говнопродукт.

Да, например, .NET. Конкретный говнопродукт. Не, на самом деле. Только вот что ж вы этими говнопродуктами пользуетесь? Делали бы китайскую вазу для ценителей, зачем говнорешения-то повторять?
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 21.12.10 09:05
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Это не ерунда. Когда ты используешь хэш-таблицы, ты точь-в-точь имитируешь семантику тех же джаваскриптовых объектов. Пример с ХМЛ или базой простой чуть более сложный, а суть-то там одна — речь идет о данных, структуру которых мы не может гарантировать в компайлтайме.


Нужные нам для работы структуры можем, иначе как мы с ними работаем? Пример про хештаблицы вообще не понял, ты их используешь их для хранения данных? Часто?

ВВ>Какие 4 хранимки? У нас что, конкурс передергивания?


Ты объяснял, что для DAL нужны CRUD хранимки, а теперь я передергиваю?

ВВ>Миграции ваши — это хорошо, конечно, но это решение, которое строго идет в коробке с самим ДАЛ-ом. Если нужно следовать другим процедурам миграции, то весь ДАЛ становится бесполезным практически полностью.


ДАЛ от миграций никак не зависит. Он генерится по схеме данных, миграции лишь средство в одно движение развернуть корректную схему на любой базе.

ВВ>Я тебе через DataReader работать не предлагал. Но с точки зрения надежности и статического контроля это решение мало чем отличается от вашего типизированного ДАЛа.


Даже так? При том, что у тебя точек вагон точек фейла, которые ловятся у нас на этапе компиляции? Смелое допущение.

ВВ>Обоснуй, какие тут могут быть проблемы безопасности.


Ну ты же всю логику на клиента засунуть пытаешься, у сервера будет очень богатый интерфейс доступа к данным, гарантировать в этой системе безопасность станет сложнее. Например тип атрибутов которые можно изменить при вызове PUT /myobject зачастую зависит от сценария использования, тебе придется генерировать апи для каждого сценария и сервер перестанет быть таким тонким либо ты поимеешь проблемы с безопасностью.

ВВ>О чем ты вообще? Ты никогда хранимые процедуры не писал? Я привел их в пример того, для чего разумно писать тесты. Хранимые процедуры я тебе писать не предлагаю.


Ты так и не привел ни одного внятного сценария полезности хранимок и тестов на них.

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


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

ВВ>Вообще-то у меня не было желания сводить разговор в этом русло. Ну ладно. Для начала скажи — какая самая большая БД по кол-ву данных и пользователей, с которой ты работал?


Писькомерство? Поддамся на провокацию, мне не жалко, самый большой проект у меня примерно 1300 рабочих серверов на 1-30 рабочих мест связанных офалайновой репликацией и один центральный с веб интрефейсом. Таблиц чуть более 300. Раскидано это все на территории размером в несколько Франций. Админов почти нет. Работает более 7 лет. При ее создании и поддержке я понял, что любые тесты это костыли, которые не только помогают, но и мешают. Чем меньше их требуется, тем лучше проекту. И любой лишний код тоже сильно мешает, его поддерживать надо. А лишний слой абстракции, при развитии, мешает как собаке пятая нога.

Доставай свой, не стесняйся.

Z>>Вобщем сделать из статики динамику действительно не так сложно, достаточно побольше хранимок, рефлекшена и работы с xml по строковым константам.


ВВ>Не, не, не товарищ, ты определись. Выше ты говорил, что работа с хмл — это не динамика.


Если правильно подойте — не динамика, но сделать динамикой несложно, приложив немного усилий и строковых констант. Любую статику можно сделать динамикой при помощи Dictionary<string, object>() и методов Dictionary<string, object> MyCoolDynamicMethod(params Dictionary<string, object>[] args).

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


Ну да, мосье любитель разложить граблей.

Z>>Только это никакого отношения к теме не имеет, я говорю про перенос достоинств динамики в статику, а ты переносишь недостатки.

ВВ>И что? Он состоялся этот перенос? Если состоялся — то зачем о нем говорить, все должно быть видно, нет?

На то и философия, чтобы поговорить, устал?
Re[8]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 21.12.10 09:17
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну кода практически одинаково:


Хм, верно, видимо понятный код кажется меньше

FR>Вместо foreach там $list доступ к списку и возможность использовать ФВП типа map fold и т. п.


Я видел, в немерловом варианте это тоже есть.

FR>Ну и foreach при желании прикрутить много кода не нужно, например http://www.ocaml-tutorial.org/camlp4_3.10/foreach_tutorial

FR>(сейчас у меня сайт не доступен можно тут посмотреть)
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 10:07
Оценка:
DG>>зачем нужен IQueryable при наличии макроса раскрывающего код linq2sql? лишняя сущность какая-то..

Z>обоснуй мысль у тебя какая-то не очивидная


iqueryable был введен только для того, чтобы методы сами "понимали" — им необходимо выполняться или склеиваться.
а также чтобы отметить, что where и т.д. принимают expression, а не делегат.


но
1) макрос и так уже принимает expression(ast)
2)если же замена идем внешним кодом, то такая пометка лишняя. и даже вредная, т.к. требуется писать два разных кода — один для IQueryable, а другой — для IEnumerable

например, непонятно зачем необходимо писать два варианта следующей функции, когда достаточно одного:
IEnumerable<Manager> TopManagers(this IEnumerable<Manager> managers)
{
  return managers.Where(manager=>manager.IsTopManager);
}


эта функция успешно может применяться и для работы с внутренним хранением, и при linq2sql.


Z>>>Объясни популярно. Какой смысл автоматом параллелить вызовы к БД.


DG>>есть такое слово "чтобы быстро работало"


Z>быстро но неправильно?


скорее всего нет понимания, что валидность данных в базе можно обеспечить и без тотального применения транзакций.


Z>>>Не будет работать вообще, тут одно соединение и одна транзакция.


DG>>зависит от условий задачи — требуется или нет единая транзакция.

DG>>допустим не требуется

Z>еще раз повторяю, ты привел код который использует одно соединение. его нельзя распаралелить, макросы тут ни при чем.


ты даже не спросил какого-то типа db, а до сих пор талдычишь про одно соединение.
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 21.12.10 10:54
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>эта функция успешно может применяться и для работы с внутренним хранением, и при linq2sql.


Вот только применяться она будет на клиенте, а та, что с IQuerable вероятнее всего уйдет в запрос к базе. Очень странно, что такие вещи приходится разжевывать. Зато в языке с макросами ты сможешь написать только одну и не дублировать код.

Впрочем мы ушли от темы, два разных макроса не будут биться над разбором линка, они будут применяться на уже разобраный linq превращенный во вполне стандартный method chain. В котором методы работы с базой и методы работы в памяти будут отличаться сигнатурой.

Z>>>>Не будет работать вообще, тут одно соединение и одна транзакция.


DG>>>зависит от условий задачи — требуется или нет единая транзакция.

DG>>>допустим не требуется

DG>ты даже не спросил какого-то типа db, а до сих пор талдычишь про одно соединение.


Давай разберемся, ты захотел паралелить код и показал код, в котором под капотом происходит какая-то неявная магия. При этом ты утверждаешь, что эта магия сломается в рантайме при некоторых условиях.

Макросы тут при чем, скажи на милость? Если ты это распаралелишь без макросов, эта проблема исчезнет?

Вот гипотетический код в который будет преобразован вызов твое гипотетического макроса, если ты его руками напишешь, тебе легче станет?
def (managers, cars) = Parrallel.Run(
      () => db.Managers.Where(manager=>manager.IsTopManager).ToArray(), 
      () => db.Cars.Where(car=>car.IsFree).ToArray()
);

НазначитьМашиныДляМенеджеров(managers, cars);


p.s. кстати, computation expressions делают именно подобное распараллеливание, причем более сложные примеры руками в код ты так просто не переведешь. например запустить еще один поток обрабатывющий managers после того, как их достали из базы, не дожидаясь доставания cars.
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 13:15
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>"Уровня Немерла" — это какой? Чтобы переименование работало? Если в динамически-типизированном языке нет понятия "мутабельных переменных",


Тогда это не язык, а никому не нужная игрушка. Даже в хаскеле их аналог есть.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 13:16
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>При поддержке со стороны среды разработки внешний ДСЛ может быть не менее удобен в использовании.


А ты в курсе сколько стоит ее реализовать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 21.12.10 13:55
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Но в Erlang'е-то нет мутабельных переменных

Process Dictionary это что?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 21.12.10 13:55
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>"Уровня Немерла" — это какой? Чтобы переименование работало? Если в динамически-типизированном языке нет понятия "мутабельных переменных", то переименования в том объеме, в котором оно работает, скажем, в студии, сделать в принципе не так сложно.

Языком.
А на практике JetBrains с этим не справились.

ВВ>И что? А причем тут "Мелкософт"? Или они у вас пример для подражания? Можешь мне объяснить следственную цепочку, по которой от обсуждения "Немерла и интеграции в студию" мы перешли к C# и его интеграции?

"Доступ к компилятору" — это не только АПИ, но еще и возможность влиять на развитие языка.

(С)
Автор: Воронков Василий
Дата: 20.12.10


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

Для разработчиков C#, VB.NET,...

ВВ>Я думаю, да. Если проблема не большая, то что ж они не поддерживаются?

Просто до тебя на это никто ни разу не жаловался.

ВВ>Я без них не смог сделать на Немерле банальный итератор в CPS-стиле.

Какой кошмар. Какже жить без итератора в CPS стиле...

ВВ>Код на Pure (см. выше) — это не ошибочный код. Но он в Немерле не работает.

Мне что показать тебе код на Agda2 с зависимыми типами? Или на Mercury там типы совсем веселые.

ВВ>МП есть, как в любой динамике. Макросов нет.

В каком виде это самое МП?

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

Я IDE питона без всей это мути запутал.

ВВ>Тормоз по сравнению с чем? Жрет память по сравнению с чем?

По сравнению со статикой.
А так как динамическая типизация не нужна то нахрена нам эти проблемы?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 21.12.10 13:57
Оценка:
Здравствуйте, FR, Вы писали:

FR>Для IDE и разных верификаторов кода используется два подхода, первый то, что ты говоришь то есть статический вывод типов и абстрактная интерпретация, второй динамический анализ, загрузка модулей и частичный (например прогон тестов) или полный запуск кода, те же IDE просто запоминают информацию при запусках.

Вот только ни то ни другое не работает.
При этом для статически типизированных языков этих проблем вообще нет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 14:04
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Но в Erlang'е-то нет мутабельных переменных


А хэш-таблицы? Вроде как Гапертон говорил, что там можно некие внутренние хэш-таблицы внутри процессов создавать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.12.10 14:09
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Бенефит в том, чтобы одна команда могла заниматься dynamic, а другая команда параллельно и независимо могла заниматься async.

То есть макры — не тул для программистов, а тул для разработчиков компилятора.

S>Это позволяет масштабировать скорость разработки языка.

А вот на примере Nemerle это видно плохо. Потому что основная проблема при разработке языка — далеко не реализовать некоторые конструкции. А понять как они должны работать. Липперт пишет огромные посты, которые касаются только выбора синтаксиса для yield и\или async, совершенно не касаясь семантики, и даже реализации.



С другой стороны есть немалая область, неподвластная сейчас C#\Visual Studio — compie-time rewriting. Те же code contracts реврайтятся отельными утилитами, для статического AOP используется PostSharp, который тоже реврайтит отдельным процессом.

Вот nemerle эту проблему решает, но его макры работают только для nemerle.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 21.12.10 14:12
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>При поддержке со стороны среды разработки внешний ДСЛ может быть не менее удобен в использовании.

Ой трололо.
Ты вот это как внешним ДСЛ делать собрался?
      def props = cls.GetProperties();
      def events = cls.GetEvents();
      def title = $"Класс <$(cls.Name)>";
      def html = xml <# 
        <html>
          <head>
            <title>$title</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
            <link rel="stylesheet" href="http://rsdn.ru/css/article.css" type="text/css" />
          </head>
          <body marginwidth="20" marginheight="20">
            <H1>$title</H1>
            
            <H2 $unless (props.IsEmpty())>Свойства</H2>
            <ol $unless (props.IsEmpty())>
              <li $foreach (p in props)>$(p.Name) : $(p.PropertyType)</li>
            </ol>
            
            <H2 $unless (events.IsEmpty())>События</H2>
            <ol $unless (events.IsEmpty())>
              <li $foreach (e in events)>$(e.Name) : $(e.EventHandlerType)</li>
            </ol>
          </body>
        </html>
   #>;


ВВ>В общем-то вполне можно и собственными силами сделать нормальную интеграцию какого-нибудь Кокора со студией — так, чтобы был интеллисенс и поддержка дебага по ATG. Студия такие сценарии расширения учитывает. И когда это сделано — разницы по юзабилити с макросами нет.

Ой трололо.
Ты попробуй сделать.
Интеграция со студией это не реально жирный пушной зверек.
Про то что тебя не волнует сколько автор потратит на создание тулзов я уже слышал. Вот только нормальные люди понимают что ресурсы у авторов тулзов очень сильно ограничены.
Даже у МС.

ВВ>"Тру" путь от МС — это именно делать через внешний ДСЛ, через билд-провайдеры и коде дом, что, конечно, создает нехреновый оверхед при разработке, но зато получается решение, которое работает не только в Немерле.

Ага. Языком. А на практике тебе придется поодерживать каждый язык отдельно.

ВВ>А от макросов Немерле на Шарпе мало толку, нет?

Немерле с шарпом отлично совместим.
Можно сделать парсер на немерле и с готовым АСТ работать в шарпе.
Вот только дурь это. Ибо работать с АСТ на шарпе это такой геморой что никакая ИДЕ не поможет.

ВВ>Да, например, .NET. Конкретный говнопродукт. Не, на самом деле. Только вот что ж вы этими говнопродуктами пользуетесь? Делали бы китайскую вазу для ценителей, зачем говнорешения-то повторять?

Ответ банален: Нет ресурсов на написание своей ВМ. Хотя руки очень сильно чешатся.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 14:13
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Точно? И type providers?


Их пока в природе нет. Появится их спецификация и нужные данные для реализации — сделаем (если, конечно они вообще нужны будут).

G>И async как в 5-ом шарпе?


Намного кручи. Как в F#. Хотя тоже мальца по круче.

G>А yield разве не через тот самый "хардкод компилятора" реализован?


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

А вы пока что облизывайтесь и завидуйте. Вам то остается только курить трубку у биологов, как жена чукчи и ждать милости от природыМайкрософта.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 21.12.10 14:20
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Липперт пишет огромные посты, которые касаются только выбора синтаксиса для yield и\или async, совершенно не касаясь семантики, и даже реализации.


Ну а мы просто делаем прототип и крутим в руках. Не понравился синтаксис — выбрасываем и делаем новый. При том, без отрыва на блоги
/* иЗвиНите зА неРовнЫй поЧерК */
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: Klikujiskaaan КНДР  
Дата: 21.12.10 14:23
Оценка:
Здравствуйте, hardcase, Вы писали:

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


G>>Липперт пишет огромные посты, которые касаются только выбора синтаксиса для yield и\или async, совершенно не касаясь семантики, и даже реализации.


H>Ну а мы просто делаем прототип и крутим в руках. Не понравился синтаксис — выбрасываем и делаем новый. При том, без отрыва на блоги

По этому никто, кроме вас, не знает как оно работает и вообще, существует ли в природе? :-D
Уже пару гневынх пстов о "хорошей" документации великого и ужасного было
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 21.12.10 14:29
Оценка:
Здравствуйте, Klikujiskaaan, Вы писали:

K>По этому никто, кроме вас, не знает как оно работает и вообще, существует ли в природе? :-D

K>Уже пару гневынх пстов о "хорошей" документации великого и ужасного было

Ну так не могу я, например, как Липперт в четыре руки фигачить: и работать и во блогах мегабайты текста постить.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: Klikujiskaaan КНДР  
Дата: 21.12.10 14:33
Оценка:
Здравствуйте, hardcase, Вы писали:

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


K>>По этому никто, кроме вас, не знает как оно работает и вообще, существует ли в природе? :-D

K>>Уже пару гневынх пстов о "хорошей" документации великого и ужасного было

H>Ну так не могу я, например, как Липперт в четыре руки фигачить: и работать и во блогах мегабайты текста постить.


Ну так на холивары время есть, а на документация — работа, мегабайты, болги...
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.12.10 14:39
Оценка:
Здравствуйте, VladD2, Вы писали:

G>>И async как в 5-ом шарпе?

VD>Намного кручи. Как в F#. Хотя тоже мальца по круче.
"намного круче, но другое" нафиг не нужно. я уже объяснял что тысячи разработчиков не будут изучать новые фреймворки.
С вашим подходом к продвижению nemerle в массы вы всегда будете в роли догоняющих и делать "круче, но другое" бессмысленно.

G>>А yield разве не через тот самый "хардкод компилятора" реализован?

VD>Нет, вот это код встроен в компилятор.
Что и требовалось доказать.

VD>А вы пока что облизывайтесь и завидуйте. Вам то остается только курить трубку у биологов, как жена чукчи и ждать милости от природыМайкрософта.

Я вообще сейчас SharePoint занимаюсь, мне не до Nemerle совсем.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 21.12.10 14:48
Оценка:
Здравствуйте, gandjustas, Вы писали:

S>>Бенефит в том, чтобы одна команда могла заниматься dynamic, а другая команда параллельно и независимо могла заниматься async.

G>То есть макры — не тул для программистов, а тул для разработчиков компилятора.
Это тул стерающий границу между пользователями компилятора и разработчиками компилятора.

G>А вот на примере Nemerle это видно плохо. Потому что основная проблема при разработке языка — далеко не реализовать некоторые конструкции. А понять как они должны работать. Липперт пишет огромные посты, которые касаются только выбора синтаксиса для yield и\или async, совершенно не касаясь семантики, и даже реализации.

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

G>Вот nemerle эту проблему решает, но его макры работают только для nemerle.

Другие .NET языки не нужны.
Хотя C++/CLI может пригодится для жестокого интеропа с жестоким легаси.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.12.10 15:20
Оценка:
Здравствуйте, WolfHound, Вы писали:

G>>Вот nemerle эту проблему решает, но его макры работают только для nemerle.

WH>Другие .NET языки не нужны.

Чувствую влияние темной стороны в твоих словах я...
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 15:26
Оценка:
Здравствуйте, WolfHound, Вы писали:

ВВ>>"Уровня Немерла" — это какой? Чтобы переименование работало? Если в динамически-типизированном языке нет понятия "мутабельных переменных", то переименования в том объеме, в котором оно работает, скажем, в студии, сделать в принципе не так сложно.

WH> Языком.
WH>А на практике JetBrains с этим не справились.

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

ВВ>>И что? А причем тут "Мелкософт"? Или они у вас пример для подражания? Можешь мне объяснить следственную цепочку, по которой от обсуждения "Немерла и интеграции в студию" мы перешли к C# и его интеграции?

WH>"Доступ к компилятору" — это не только АПИ, но еще и возможность влиять на развитие языка.
WH>(С)
Автор: Воронков Василий
Дата: 20.12.10


И что? Я по-прежнему не понимаю, причем тут C#. Да, да, у этих ребят тоже есть "доступ к компилятору". Ну есть и...?

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

WH>Для разработчиков C#, VB.NET,...

А для разработчиков, которые не пахают на большого и сильного вендора? Давай возьмем разработчиков OCaml, Haskell, Pure и пр. В реальности у вас получается не апология статики вообще, а пиар вполне конкретного языка. Только вот сравнивается он не с каким-то конкретным динамически-типизированным языком, а со всеми сразу — вернее с теми, которые наиболее удобны вам для сравнения.

ВВ>>Код на Pure (см. выше) — это не ошибочный код. Но он в Немерле не работает.

WH>Мне что показать тебе код на Agda2 с зависимыми типами? Или на Mercury там типы совсем веселые.

Зачем мне Agda2? Мы о Немерле или не о Немерле?
Если не о Немерле, то давай таки учитывать реалии, в которых разрабатываются остальные языки и которые от Немерлевых отличаются. Если все же о Немерле, то причем тут Агда?

А так я знаю, в статике многое возможно. Когда "типы совсем веселые". Но почему-то в Немерле они совсем грустные. Но зато макросы, да.

ВВ>>МП есть, как в любой динамике. Макросов нет.

WH>В каком виде это самое МП?

Можно замутить что-то в стиле метаклассов питона. И таки да, типизатор отдохнет в таком случае. Доволен?
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 15:28
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>"Уровня Немерла" — это какой? Чтобы переименование работало? Если в динамически-типизированном языке нет понятия "мутабельных переменных",

VD>Тогда это не язык, а никому не нужная игрушка. Даже в хаскеле их аналог есть.

Мутабельные переменные спокойно заменяются на reference cells, с которыми жить уже несколько проще.
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 15:29
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>При поддержке со стороны среды разработки внешний ДСЛ может быть не менее удобен в использовании.

VD>А ты в курсе сколько стоит ее реализовать?

Я слышал, что разработку Линк-провайдера МС оценивает в два что ли миллиона долларов. Ну тут наверное где-то так же
Но я чужие деньги не считаю, а они не разорятся. А сам я все же чаще пользуюсь ДСЛ-ями, чем пишу их.
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 15:42
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Воронков Василий, Вы писали:


ВВ>>При поддержке со стороны среды разработки внешний ДСЛ может быть не менее удобен в использовании.

WH>Ой трололо.
WH>Ты вот это как внешним ДСЛ делать собрался?

Берешь и пишешь парсер своего языка, а также парсер ХТМЛ-я. На основе полученного АСТ можно генерировать код на целевом языке, который генерирует ХТМЛ.
По сравнению с макросом задача усложняется тем, что нужен еще и парсер своего языка. Но его можно создать один раз и реюзать для дальнейших ДСЛ-ей.

ВВ>>Да, например, .NET. Конкретный говнопродукт. Не, на самом деле. Только вот что ж вы этими говнопродуктами пользуетесь? Делали бы китайскую вазу для ценителей, зачем говнорешения-то повторять?

WH>Ответ банален: Нет ресурсов на написание своей ВМ. Хотя руки очень сильно чешатся.

Есть и другие VM. Например, LLVM.
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: Mamut Швеция http://dmitriid.com
Дата: 21.12.10 16:17
Оценка:
M>>Но в Erlang'е-то нет мутабельных переменных
WH>Process Dictionary это что?

Это — process dictionary Он так и называется local store. По сути является key-value хранилищем.


dmitriid.comGitHubLinkedIn
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: Mamut Швеция http://dmitriid.com
Дата: 21.12.10 16:18
Оценка:
M>>Но в Erlang'е-то нет мутабельных переменных

VD>А хэш-таблицы? Вроде как Гапертон говорил, что там можно некие внутренние хэш-таблицы внутри процессов создавать.


Есть process dictionary, который является key-value хранилищем в текущем процессе, и который можно использовать.


dmitriid.comGitHubLinkedIn
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 16:22
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>>>"Уровня Немерла" — это какой? Чтобы переименование работало? Если в динамически-типизированном языке нет понятия "мутабельных переменных",

VD>>Тогда это не язык, а никому не нужная игрушка. Даже в хаскеле их аналог есть.

ВВ>Мутабельные переменные спокойно заменяются на reference cells, с которыми жить уже несколько проще.


Вы говорите загадками, Киса (с)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 16:29
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>>>При поддержке со стороны среды разработки внешний ДСЛ может быть не менее удобен в использовании.

VD>>А ты в курсе сколько стоит ее реализовать?

ВВ>Я слышал, что разработку Линк-провайдера МС оценивает в два что ли миллиона долларов. Ну тут наверное где-то так же


Возьмусь на немерле сделать за 200 штук баксов, т.е. за 10%. Найдешь заказчика?

ВВ>Но я чужие деньги не считаю, а они не разорятся. А сам я все же чаще пользуюсь ДСЛ-ями, чем пишу их.


Так вот я тебе точно скажу, что в МС за это платят минимум сотни тысяч. А вот при наличии макросов аналогичное решение можно сделать за неделю силами одного программиста, т.е. это уже в худшем случае тысячи долларов.

Итого мы имеем минимум на порядок более дешевое решение. Не кисло, да?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 16:42
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>И async как в 5-ом шарпе?

VD>>Намного кручи. Как в F#. Хотя тоже мальца по круче.
G>"намного круче, но другое" нафиг не нужно.

Почему другое? Реализация другая, а суть та же. Реализация на монадах. В шарпе будет на итераторах. Наша реализация более гибкая.

G>я уже объяснял что тысячи разработчиков не будут изучать новые фреймворки.


Какие фрэймворки? Ты опять вещаешь о том в чем не удосужился разобраться?

G>С вашим подходом к продвижению nemerle


Это что за подход? И что в нем не так?

G>в массы вы всегда будете в роли догоняющих и делать "круче, но другое" бессмысленно.


Догоняющих кого?

Пожалуй надо завершать эту "плодотворную" беседу, покая я не сорвался и не перешел на личности.

G>Я вообще сейчас SharePoint занимаюсь, мне не до Nemerle совсем.


Ну, ты занимайся SharePoint-ом дальше. Еще 1С хорошее занятие. Творческий успехов в этом не легком деле.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 16:47
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Есть process dictionary, который является key-value хранилищем в текущем процессе, и который можно использовать.


Это и есть изменяемые переменные. Без них язык будет мертв, потому как чистая математика и без компьютера отлично работает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 17:01
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Мутабельные переменные спокойно заменяются на reference cells, с которыми жить уже несколько проще.

VD>Вы говорите загадками, Киса (с)

Запись с мутабельным полем.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 17:01
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>едва ли.

DG>nemerle слишком низкоуровневый и примитивный: та же подветка с ziaw — это подтверждает.

DG>если уж говорить о МП — то стоит говорить о суперкомпозиции кода и о суперкомпиляции, а не о макросах


А, ну, говори. Главное не пробовать то о чем говоришь. Тут много дятлов которые говорят о том, что даже не понимают. С ними можно успешно убить время.

А я, пожалуй, пойду допиливать низкоуровневый и примитивный Nemerle. А то ведь иначе придется пользоваться C#. А я как-то от такого высокого и развитого уровня по отвык. Меня от него почему-то все больше и больше тошнит.

Успехов в разговорах!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 17:05
Оценка:
Здравствуйте, Воронков Василий, Вы писали:


ВВ>>>Мутабельные переменные спокойно заменяются на reference cells, с которыми жить уже несколько проще.

VD>>Вы говорите загадками, Киса (с)

ВВ>Запись с мутабельным полем.


А что мешало сразу по-русски выразиться?

ЗЫ

Это один фиг изменяемые переменные. Скажу больше. Локальные переменные как раз менее опасны.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 21.12.10 17:09
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>>>"Уровня Немерла" — это какой? Чтобы переименование работало? Если в динамически-типизированном языке нет понятия "мутабельных переменных", то переименования в том объеме, в котором оно работает, скажем, в студии, сделать в принципе не так сложно.

WH>> Языком.
WH>>А на практике JetBrains с этим не справились.

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


С руби ситуация та же. Ты зря упорно не признаешь очевидное.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: IT Россия linq2db.com
Дата: 21.12.10 17:12
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>едва ли.

DG>nemerle слишком низкоуровневый и примитивный: та же подветка с ziaw — это подтверждает.

DG>если уж говорить о МП — то стоит говорить о суперкомпозиции кода и о суперкомпиляции, а не о макросах


А можно как-нибудь расшифровать этот псевдотехнический бред?
Если нам не помогут, то мы тоже никого не пощадим.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 17:30
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>nemerle слишком низкоуровневый и примитивный: та же подветка с ziaw — это подтверждает.

DG>если уж говорить о МП — то стоит говорить о суперкомпозиции кода и о суперкомпиляции, а не о макросах

Кстати, объясни общественности какое отношение суперкомпиляция имеет к метапрограммированию?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 18:12
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>>>Мутабельные переменные спокойно заменяются на reference cells, с которыми жить уже несколько проще.

VD>>>Вы говорите загадками, Киса (с)
ВВ>>Запись с мутабельным полем.
VD>А что мешало сразу по-русски выразиться?

Термин вроде достаточно распространенный.

VD>ЗЫ

VD>Это один фиг изменяемые переменные. Скажу больше. Локальные переменные как раз менее опасны.

Мутабельные локальные переменные могут мешать выводу типов. Собственно, в общем случае их тип не выводится вообще. С ref гораздо проще. И в контексте разговора они сильно лучше мутабельных локальных переменных. При этом, что, собственно, ясно из названия, они обеспечивают ref семантику. Для мутабельных переменных пришлось бы вводить дополнительный механизм. А в плане опасности ref ничуть не опаснее хэш-таблиц, частным случаем которых и являются.
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 21.12.10 18:12
Оценка:
Здравствуйте, Ziaw, Вы писали:

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

Z>С руби ситуация та же. Ты зря упорно не признаешь очевидное.

Руби я вообще не знаю и ничего о нем не говорил. Я говорил о Pure.
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.12.10 18:38
Оценка:
Здравствуйте, VladD2, Вы писали:

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


G>>>>И async как в 5-ом шарпе?

VD>>>Намного кручи. Как в F#. Хотя тоже мальца по круче.
G>>"намного круче, но другое" нафиг не нужно.

VD>Почему другое? Реализация другая, а суть та же. Реализация на монадах. В шарпе будет на итераторах. Наша реализация более гибкая.

Но другая. В F# есть набор методов в модуле Async, в C#5 норовят свести к TPL и дополнить его еще Dataflow, еще Rx с этим как-то работает.
А что будет в nemerle?

G>>я уже объяснял что тысячи разработчиков не будут изучать новые фреймворки.

VD>Какие фрэймворки? Ты опять вещаешь о том в чем не удосужился разобраться?
Например классы компилятора для написания макросов.

G>>С вашим подходом к продвижению nemerle

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

G>>в массы вы всегда будете в роли догоняющих и делать "круче, но другое" бессмысленно.

VD>Догоняющих кого?
Тот же C# и даже полуисследовательский F#.

VD>Пожалуй надо завершать эту "плодотворную" беседу, покая я не сорвался и не перешел на личности.

Нервы пора лечить.

G>>Я вообще сейчас SharePoint занимаюсь, мне не до Nemerle совсем.

VD>Ну, ты занимайся SharePoint-ом дальше.
Ну вот кстати на Nemerle вполне можно было бы сделать code-first разработку для SharePoint, иначе приходится руками писать XML определения типов контента. На T4 такое делается крайне плохо, на нем тяжело анализировать код решения.

VD>Еще 1С хорошее занятие.

Ну 1c не я занимаюсь. Но вот кажись именно в этой теме некоторые люди пиарили макросы как средство работы с внешними системами, почему бы не написать ченить для работы с 1С?
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 20:59
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Есть и другие VM. Например, LLVM.


Опять языком чешешь. Ты попробуй на нем чего-то сделать. Это весьма низкоуровневое решение. Там сил нужно положить огого сколько.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 21:11
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Но другая. В F# есть набор методов в модуле Async, в C#5 норовят свести к TPL и дополнить его еще Dataflow, еще Rx с этим как-то работает.

G>А что будет в nemerle?

Почему будет? Есть. Аналог решения из F#. Только не вмонтированный в язык, а в виде макроса.
Вот тесты.

В C# 5 тоже будет хардкод в языке, но другой. Там реализация будет сделана на базе конечного автотама генерируемого для итераторов. Прерилиз доступен. Скачай, скомпилиру пример, и декомпельни. Там все очевидно.

G>>>я уже объяснял что тысячи разработчиков не будут изучать новые фреймворки.

VD>>Какие фрэймворки? Ты опять вещаешь о том в чем не удосужился разобраться?
G>Например классы компилятора для написания макросов.

Ты о чем? Выше тесты приведены. Где там эти мифические классы?

G>>>С вашим подходом к продвижению nemerle

VD>>Это что за подход? И что в нем не так?
G>Делать инструменты для делания инструментов для делания приложений.

Почему ты называешь библиотеки "инструментами для делания инструментов"?

G>Слишком большой путь от фичи до реального профита. Вместо рекламирования фич лучше бы показали профит от них.


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

G>>>в массы вы всегда будете в роли догоняющих и делать "круче, но другое" бессмысленно.

VD>>Догоняющих кого?
G>Тот же C# и даже полуисследовательский F#.

Ты совсем с реальностью связь потерял. Шарпу лет 20 развиваться, чтобы первый немерл догнать. F# по менее, но тоже не мало.

Короче, не выставляй себя ламером. Разберись в предмете обсуждения.

VD>>Пожалуй надо завершать эту "плодотворную" беседу, покая я не сорвался и не перешел на личности.

G>Нервы пора лечить.

Видимо. Общение с трепачами смело и без доли сомнения высказывающихся о том, что освоить не смогли сильно расшатывает нервы. Есть такое.

G>>>Я вообще сейчас SharePoint занимаюсь, мне не до Nemerle совсем.

VD>>Ну, ты занимайся SharePoint-ом дальше.
G>Ну вот кстати на Nemerle вполне можно было бы сделать code-first разработку для SharePoint, иначе приходится руками писать XML определения типов контента. На T4 такое делается крайне плохо, на нем тяжело анализировать код решения.

Не, ребят. Шарыпоинты и 1С-ы, это вы сами как-нить.

VD>>Еще 1С хорошее занятие.

G>Ну 1c не я занимаюсь. Но вот кажись именно в этой теме некоторые люди пиарили макросы как средство работы с внешними системами, почему бы не написать ченить для работы с 1С?

Жалко свой интеллект. Да и есть чем заняться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 21:21
Оценка:
Здравствуйте, DarkGray, Вы писали:

WH>>Простите не поверю.

WH>>Ибо моя практика говорит что ничего подобного нет.

DG>тебе просто повезло и ты очень умный. остальные, к сожалению, не такие...


Как не повезло этим остальным.

ЗЫ

Попробуй, все же то о чем говоришь на практике (не свой самопал, а то о чем говришь).
Готов помочь тебе разобраться с тем, что ты не понял.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 21:25
Оценка:
Здравствуйте, Klikujiskaaan, Вы писали:

K>По этому никто, кроме вас, не знает как оно работает и вообще, существует ли в природе? :-D

K>Уже пару гневынх пстов о "хорошей" документации великого и ужасного было

Как показывают этюды Никова — это в C# никто (кроме Никова) не знает как он работает .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 21:29
Оценка:
Здравствуйте, WolfHound, Вы писали:

G>>Вот nemerle эту проблему решает, но его макры работают только для nemerle.

WH>Другие .NET языки не нужны.
WH>Хотя C++/CLI может пригодится для жестокого интеропа с жестоким легаси.

На самом деле все это могло бы жить и в рамках массы языков. Сделал же МС рантайм для разных языков?

Могли бы и компиляторный бэкэнд общий сделать. Языки МС — это близнецы браться. Для них два бэкэнда ненужно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.12.10 21:50
Оценка:
Здравствуйте, VladD2, Вы писали:

G>>>>в массы вы всегда будете в роли догоняющих и делать "круче, но другое" бессмысленно.

VD>>>Догоняющих кого?
G>>Тот же C# и даже полуисследовательский F#.

VD>Ты совсем с реальностью связь потерял. Шарпу лет 20 развиваться, чтобы первый немерл догнать. F# по менее, но тоже не мало.

Тем не менее на F# пишет больше народу, чем на Nemerle.
Наверное потому что плохой язык, да.

VD>Короче, не выставляй себя ламером. Разберись в предмете обсуждения.

От этого больше народу начнет пользоваться Nemerle? или там появятся Type Providers? Или yield в нем перестанет быть хардкодом?

Ты огрзаешься вместо того чтобы попытаться увидеть проблемы. И вспоминать Блаб тут неуместно, хаскели, nemerle и F# находятся примерно на одном уровне блабнутости.
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 21.12.10 22:09
Оценка:
DG>>

DG>>Метапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы


DG>>

DG>>Суперкомпиляция — специальная техника оптимизации алгоритмов, основанная на знании конкретных входных данных алгоритма.


с каких это пор программа перестала быть видом записи алгоритма?

может тебе все-таки стоит почитать хотя бы книжку "теория программирования для маленьких"?
а то я вижу, что с основами теоретии программирования — у тебя швах.
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 02:17
Оценка:
Здравствуйте, gandjustas, Вы писали:

VD>>Ты совсем с реальностью связь потерял. Шарпу лет 20 развиваться, чтобы первый немерл догнать. F# по менее, но тоже не мало.

G>Тем не менее на F# пишет больше народу, чем на Nemerle.

Алё! Ты еще и с логикой не дружишь? Где связь между возможнсотями языка и тем сколько людей на нем пишут. Скажем на PHP пишет раз в 100 больше чем на F#. Можно из этого сделать вывод, что F# не дорос до PHP?

Или ты живешь по принципу — "Миллионы мух не могут ошибиться!"?

G>Наверное потому что плохой язык, да.


Ты про этот язык тоже на форуме прочитал?
У F# есть только одно, весьма спорное, преимущество — глобальный вывод типов. Во всем остальном он <= Nemerle. Отсутствие макросистемы (при наличии, кстати, квази-цитирования необходимого для макросов) уже делает F# языком гораздо менее мощным. Функциональные возможности у языков почти идентичные. ООП в F# несравнимо хуже. Куча проблем вроде необходимости размещения файлов в проекте в определенном порядке и невозможность создать папку в которую поместить часть кода. При этом та же интеграция с IDE не в пример слабее. Все что сделано в F# или уже есть в немерле, или реализовано в виде макросов. Так как же F# может быть лучше?

Ну, а пишут на нем может и по более. Только заслуга тут исключительно в том ярлыке "Под покровительством Майкрософт". Ни одного реального достоинства у F# перед немерлом нет. И это факт, а не чьи-то домыслы.

VD>>Короче, не выставляй себя ламером. Разберись в предмете обсуждения.

G>От этого больше народу начнет пользоваться Nemerle?

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

G> или там появятся Type Providers? Или yield в нем перестанет быть хардкодом?


Тебя заело? Про Type Providers тебе уже раз 20 ответили.
Где, кстати, yield в F#?

G>Ты огрзаешься вместо того чтобы попытаться увидеть проблемы.


Проема тут только над. Ты и твое алогичено мышление. Ты вместо того чтобы попробовать то что хаишь несешь чушь и что-то пытаемый доказать применяя "аргумент" про миллионы мух.

G>И вспоминать Блаб тут неуместно, хаскели, nemerle и F# находятся примерно на одном уровне блабнутости.


Чтобы судить об этом тебе все это надо изучить. Хотя бы поверхностно. А ты судишь о вещах лежащих вне твоей компетенции на базе опыта C#-программиста. Это все равно как рассуждать о космических аппаратах на базе знаний тракториста. Это уже не парадокс Блаба. Это уже по чище. Это воинствующие невежество. Уж извини за прямоту. Достал ты не на шутку.

ЗЫ

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

Всем идущим ровными рядами к светлому будущему — счастливой дороги!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 02:22
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>кстати, макросы (раскрытие и свертку), исходя из теории программирования можно рассматривать, как подвид суперкомпиляции программы.


Что за свертку макросов ты сейчас придумал?

Что до суперкомпиляции, то еще раз повторяю тебе — это метод оптимизации. Она не меняет семантики кода. МП же своей целю имеет изменение семантики.

Ты лучше овтеть на прсотой вопрос. С какой целью ты суперкомпиляцию сюда приплел (если, кончено, отбросить предположение, что брякнул не подумав)?

DG>при этом фиксированным доп. параметром суперкомпиляции — является исполнитель: с одной стороны — компилятор конкретного языка, с другой стороны — разработчик.


О, блин, дожили. Разработчик стал у нас параметром программы!

DG>улучшаемые показатели — компактность, понятность.


Ну, да. Название форума распологает к подобному бреду. Нет уж, увольте. В подобную софистику я играть не буду.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.12.10 05:06
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Супер-компилятор не просто переписывает код по какому-то там алгоритму. Он создает мета-модель кода и производит частичные вычисления. При этом никаких новых результатов не получается. Получается всего лишь более шустрый код для той же самой программы.

VD>Другими словами в суперкомпиляции присутствует "мета", но не присутствует программирования, так как никаких новых программ не создается. Мета-программирвоание же своей целью несет порождение или изменение имеющихся программ (изменение их семантики!).

Вот тут, имхо, ты не прав. Суперкомпиляция всё же порождает новую программу, которая семантически эквивалентна исходной, но в более узкой области определения входных параметров.
Это всего лишь другая ветка метапрограммирования.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.12.10 05:17
Оценка:
Здравствуйте, Воронков Василий, Вы писали:
ограничивать.

ВВ>Проблема, как я сказал, не в том, что джаваскрипт, а в том, что присутствует само разделение на клиент и сервер, которое как правило не совпадает с логическим разделением приложения на лаеры. В итоге получается, что код решающий одни и те же задачи (скажем, генерацию пользовательского интерфейса) пишется и на сервере, и на клиенте, на разных языках, с использованием разных подходов. Вот это, мне кажется, — проблема. А сколько там строк кода надо для описания модели — по-моему достаточно по фиг. Как и то, какая там используется типизация в ДАЛе.

Есть разные способы разделения; не при всех выполняется значительное дублирование.
Для некоторых частных случаев (например — валидация данных) метапрограммирование как раз позволяет построить компилятор с одного языка в несколько бэк-ендов:
— в SQL, чтобы оптимизатор запросов мог пользоваться semantic query optimizaiton
— в серверный код (например MSIL), чтобы нельзя было подсунуть некорректные данные в API
— в JavaScript, чтобы можно было выполнять валидацию без похода на сервер.

В общем случае я не вижу способа сделать компиляцию Nemerle-кода в JS. По крайней мере, в эффективный JS.

ВВ>Например, одно полноценное и отработанное на практике решение этой проблемы — писать все на ДжаваСкрипте на клиенте Серверная часть при этом становится тонкой и занимается лишь тем, что возвращает на клиент данные в виде ХМЛ-я или Джейсона. Роль языка, на котором эта серверная часть пишется, как ты понимаешь, весьма серьезно падает.

Не вижу никакого падения роли серверного языка.
Даже "толстый" JS-клиент работает не в вакууме. Фактически, имеем клиент-серверное приложение. API сервера для него весьма и весьма важен, т.к. именно он определяет возможности клиента. На первый план выступает REST и прочее.
Статика тут позволяет опять же гарантировать ссылочную корректность (к примеру, что JavaScript код не пытается обращаться к несуществующим точкам входа) и много других полезных вещей.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 22.12.10 05:53
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>В общем случае я не вижу способа сделать компиляцию Nemerle-кода в JS. По крайней мере, в эффективный JS.


Кстати, а какие основные проблемы ты тут видишь? C# же компилируют в js?

Я вижу основную проблему в том, что хорошо зная js, обязательно захочется делать трюки обычные для js, но невозможные для nemerle.

Примерна та же проблема была у ранних ORM со своим языком запросов, который был богат, но не являлся заменой SQL тому, кто использовал нетривиальные запросы, не говоря уже об особенностях серверов.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 22.12.10 06:04
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Кэр, Вы писали:


Кэр>>Await/async покрываются пятой версией шарпа...

S>Это понятно. В теории (я не силён в немерле) макросы позволяют сделать await/async. В отличие от собственно тайп провайдеров.

С учетом того, что type provider решают задачу типизации нетипизированных данных, то это прямо удивительно, что они не решают проблему await/async. Хм...

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

S>Ну, пока что их хватило на выпуск ажно пяти версий шарпа, и, если верить блогу Липперта, у них ещё втрое больше лежит в бэклоге потому что не хватает ресурсов на реализацию.
>>Иначе мы бы уже имели популярный язык для .Net, который решает твой вопрос, innit?
S>Хм. Чем-то эта фраза похожа на "если бы это было нужно, то это бы уже сделал microsoft"
S>Мы же всё-таки тренируем критическое мышление

А языки теперь разрабатывает только Микрософт? Макросы и кастомный синтаксис далеко не Немерле придумал. Концепт давний и имеют большую историю быть непопулярным. Предлагаю в качестве упражнения по критическому мышлению подумать почему.

Кэр>>Любую фичу можно использовать как во благо, так и во вред. Мне вот такое свободное изменение синтаксиса дает такую картину перекрестного опыления различными библиотеками результирующего кода, что жить не хочется.

S>Ну, это старый аргумент. Я наблюдаю этот спор тут чуть ли не со времён R#. Ответы на него мне тоже известны.
S>Как оно окажется на практике — пока что непонятно. Пока что мы имеем не очень много макросных библиотек для немерле, так что трудно сказать, насколько твой страх оправдан.

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

Кэр>>Я скажу сразу — нах такое не нужно. Пока не показано, как эта проблема будет решена — я категорически против подобных завихрений в моих проектах.

S>Пока нужно доказать наличие проблемы

Кому надо? Я сказал свои критерии. И сказал, почему их не будет в моих проектах. Все остальные могут прототипировать наздоровье. Кто мешает?

Кэр>>Прототипировать — сколько угодно. Nemerle на самом деле дальше прототипа и не ускакал.

S>

А ну да. Это уже полноценная замена шарпа. Извините, опять забыл

S>>>Основной бенефит даже не в том, чтобы не трогать компилятор — с точки зрения пользователя нет разницы, откуда взялся async.

S>>>Бенефит в том, чтобы одна команда могла заниматься dynamic, а другая команда параллельно и независимо могла заниматься async. Это позволяет масштабировать скорость разработки языка.

Кэр>>С точки зрения прототипирования — бенефит вполне ощутим и очень крут. С точки зрения разработки — цена за эти бенефиты несоозмерима.

S>Ну, пока что у нас нет никакой статистики для определения этой цены.

Everyone is welcome to try. Everyone else, of course.

S>Впрочем, мы отклонились от темы. Вопрос же был не в том, лучше ли Nemerle чем C#. Вопрос был "зачем нужны макросы, когда есть type providers". Я своё мнение на эту тему высказал. Стоят ли эти бенефиты недостатков или нет — вопрос отдельный.


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

S>Await/async, реализованный в Nemerle, для таких людей всегда будет хуже, чем await/async, реализованный в C#.
S>Аудитория Nemerle — всё же люди, которым наличие таких фич в языке важнее, чем одобрение авторитетов компайлеростроения.

Ага. И именно эту аудиторию все никак не удается нащупать.
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.12.10 07:42
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>Ты совсем с реальностью связь потерял. Шарпу лет 20 развиваться, чтобы первый немерл догнать. F# по менее, но тоже не мало.

G>>Тем не менее на F# пишет больше народу, чем на Nemerle.

VD>Алё! Ты еще и с логикой не дружишь? Где связь между возможнсотями языка и тем сколько людей на нем пишут. Скажем на PHP пишет раз в 100 больше чем на F#. Можно из этого сделать вывод, что F# не дорос до PHP?


Нет, они из разных "экосистем". А вот nemerle и f# из одной — оба на .net, оба — функциональные языки и по возрасту примерно одинаковы.


VD>У F# есть только одно, весьма спорное, преимущество — глобальный вывод типов. Во всем остальном он <= Nemerle. Отсутствие макросистемы (при наличии, кстати, квази-цитирования необходимого для макросов) уже делает F# языком гораздо менее мощным. Функциональные возможности у языков почти идентичные. ООП в F# несравнимо хуже. Куча проблем вроде необходимости размещения файлов в проекте в определенном порядке и невозможность создать папку в которую поместить часть кода. При этом та же интеграция с IDE не в пример слабее. Все что сделано в F# или уже есть в немерле, или реализовано в виде макросов. Так как же F# может быть лучше?

Да-да-да, и тем не менее на f# пишут гораздо больше народу.

VD>Ну, а пишут на нем может и по более. Только заслуга тут исключительно в том ярлыке "Под покровительством Майкрософт". Ни одного реального достоинства у F# перед немерлом нет. И это факт, а не чьи-то домыслы.

Хороший язык, на котором никто не пишет и не хочет писать — плохой язык. Наоборот кстати тоже.

VD>>>Короче, не выставляй себя ламером. Разберись в предмете обсуждения.

G>>От этого больше народу начнет пользоваться Nemerle?

VD>Ты вроде не в обсуждение диалогического исследования влез, а в техническое обсуждение. Так что же ты начинаешь увиливать? Ты на делал кучу безосновательных заявлений и теперь пытаешься подменить тему. Сливаешь?

Это же философия, технические вопросы в других форумах обсуждаются.

VD>Где, кстати, yield в F#?

seq {
    yield x;
}
Re[7]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 22.12.10 07:55
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

Z>>Кстати, а какие основные проблемы ты тут видишь? C# же компилируют в js?
S>Основные проблемы — в том, что код не собирается работать в вакууме. Он будет исполняться в определённом окружении — browser, window, document.
S>Попытка построить строготипизированную модель для HTML и CSS по мне не выглядит многообещающей.
S>А умение компилировать базовую арифметику не очень интересно — оно имеет узкие практические применения.

А не строго? Это же наш язык, мы можем любые принципы применить.

Например сделать явное выделение динамических вызовов, которые компилятор не будет проверять. Да, полной проверки типов не будет, но значит ли это, что частичная бесполезна?

Гипотетический код:
var newWin = window.open("/test", "Test"); // статика, ибо сигнатуру метода мы указали в метаданных
newWin.focus();        // а вот сигнатуру focus, допустим, не указали, будет ошибка компиляции, можно ее описать и все заработает

dyn                    // а можно отключить проверку для конкретного блока, все, у нас внутри динамика, которую мы не контроллируем
{ 
  newWin.focus() 
}


При контроль типов не получится отдать компилятору, придется самостоятельно, через duck typing. Это будет не nemerle, но язык очень похожий на него с достаточно мощными механизмами статической типизации.
Re[32]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 22.12.10 08:01
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Нет, они из разных "экосистем". А вот nemerle и f# из одной — оба на .net, оба — функциональные языки и по возрасту примерно одинаковы.


Ты ничего не путаешь? F# это порт на .net ocaml'а, которому 25 лет от роду и комьюнити огромное. Причем ocaml это всего лишь популярный диалект ML, который еще старше.

G>Хороший язык, на котором никто не пишет и не хочет писать — плохой язык. Наоборот кстати тоже.


Если никто — то конечно да. А плохой у немерле не язык, а PR, стабильность и доки.
Re[5]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 08:05
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Есть разные способы разделения; не при всех выполняется значительное дублирование.

S>Для некоторых частных случаев (например — валидация данных) метапрограммирование как раз позволяет построить компилятор с одного языка в несколько бэк-ендов:
S>- в SQL, чтобы оптимизатор запросов мог пользоваться semantic query optimizaiton
S>- в серверный код (например MSIL), чтобы нельзя было подсунуть некорректные данные в API
S>- в JavaScript, чтобы можно было выполнять валидацию без похода на сервер.

Это я не очень понял, к чему ты.

S>В общем случае я не вижу способа сделать компиляцию Nemerle-кода в JS. По крайней мере, в эффективный JS.


Вон даже Хаскель вполне себе компилируют.

S>Не вижу никакого падения роли серверного языка.

S>Даже "толстый" JS-клиент работает не в вакууме. Фактически, имеем клиент-серверное приложение. API сервера для него весьма и весьма важен, т.к. именно он определяет возможности клиента. На первый план выступает REST и прочее.

Хороший API можно написать даже на PHP. Но вот задача серверной части становится сильно сужена. Например, функциональный язык не даст мне никаких преимуществ — на сервере будет довольно грязный по большей части код. Интерфейсом этого кода станет HTTP, поэтому по сути уже не имеет значения какова там внутренняя архитектура — написан ли он в процедурном или в каком-то более другом стиле.
Серверная часть в первую очередь выполняет такие вещи как работа с данными, где скорость упирается в БД, поэтому статически-типизированный язык не даст каких-то значительных преимуществ, да и скорость этого языка практически по фигу — все в БД упрется так или иначе.

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


Каким образом? Основной код-то на ДжаваСкрипт. Как ты его анализировать будешь?
Re[33]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.12.10 08:08
Оценка:
Здравствуйте, Ziaw, Вы писали:

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


G>>Нет, они из разных "экосистем". А вот nemerle и f# из одной — оба на .net, оба — функциональные языки и по возрасту примерно одинаковы.


Z>Ты ничего не путаешь? F# это порт на .net ocaml'а, которому 25 лет от роду и комьюнити огромное.

Сейчас сходство в основном синтаксическое. Компилятор первой версии F# компилировался как компилятором ocaml, так и самим F#. После того как бустраппинг был пройдет начали резко отказываться от совместимости с ocaml.

Z>Причем ocaml это всего лишь популярный диалект ML, который еще старше.

Все языки так или иначе от чего-то берут свои корни, так можно сказать что любой язык с фигурными скобками — наследник C, который тоже немолодой. Но язык не работает в вакууме. Он работает в некоторой экосистеме с платформой (библиотеками) и средствами разработки.

G>>Хороший язык, на котором никто не пишет и не хочет писать — плохой язык. Наоборот кстати тоже.

Z>Если никто — то конечно да. А плохой у немерле не язык, а PR, стабильность и доки.
Это фактически означает плохой язык.
Re[35]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.12.10 08:34
Оценка:
Здравствуйте, FR, Вы писали:

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


G>>Сейчас сходство в основном синтаксическое. Компилятор первой версии F# компилировался как компилятором ocaml, так и самим F#. После того как бустраппинг был пройдет начали резко отказываться от совместимости с ocaml.


FR>Я согласен с тем что F# и OCaml уже достаточно далеко разошлись, но совместимость при этом осталась, например далеко нетривиальная библиотека http://www.coherentpdf.com/ocaml-libraries.html компилируется и OCaml и F#.


Ну это создатели библиотеки поставили цель сделать библиотеку компилируемой на обоих языках. Совершенно не означает что любой код будет компилироваться так. В общем случае как раз обратная картина будет.
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 08:42
Оценка:
DG>>кстати, макросы (раскрытие и свертку), исходя из теории программирования можно рассматривать, как подвид суперкомпиляции программы.

VD>Что за свертку макросов ты сейчас придумал?


если говорить, что foreach — это макрос, то:

это развернутый код
for(int i = 0; i < 10; ++i)
{
   Console.WriteLine(i);
}
[code]

это свернутый с помощью макросов
[code]
foreach (var i in Enumerable.Range(0, 10))
  Console.WriteLine(i);



VD>Что до суперкомпиляции, то еще раз повторяю тебе — это метод оптимизации. Она не меняет семантики кода. МП же своей целю имеет изменение семантики.


суперкомпиляция — это теоретическая формулировка решаемой задачи.
это ответ на вопросы:
1. какую теоретическую задачу решает введение макросов?
2. какая теоретическая задача решается при linq2sql, pl2js и т.д.?

VD>Ты лучше овтеть на прсотой вопрос. С какой целью ты суперкомпиляцию сюда приплел (если, кончено, отбросить предположение, что брякнул не подумав)?


цель — как у и любого приплетания теории: получить фундаментальный базис на который можно опереться при решении задачи.

DG>>при этом фиксированным доп. параметром суперкомпиляции — является исполнитель: с одной стороны — компилятор конкретного языка, с другой стороны — разработчик.


VD>О, блин, дожили. Разработчик стал у нас параметром программы!


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

если мы говорим про МП, то пользователем такой программы — является разработчик.
и поэтому — да, для метапрограммы — разработчик является весомым параметром.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 09:22
Оценка:
Z>Вменяемый разработчик не станет делать "переопределение $, % и неровно дышит к наличию < > в коде", как сейчас не делают екстеншены с сигнатурой IEnumerable<T> First<T>(Func<T,bool> predicate). В первом случае это будет вести к конфликтам с семантикой кода, во втором со стандартной библиотекой.

но в том же .net-е (c#) — это является не просто соглашением "давайте писать хороший код", но и предоставляются способы по защите от плохого кода.
есть namespace, есть алиасы и т.д. — которые позволяют при необходимости один плохой код скрестить с другим плохим кодом, и все это использовать из хорошего кода.

Z>Давай на примере джейсона:

Z>
Z>    def test = json({ 
Z>      a : arr; 
Z>      b : obj; 
Z>      c : null;
Z>      d : true;
Z>      e : { a : 1; "la la": null};
Z>      "f" : [true];
Z>      j : (43 + 55);
Z>    }); 
Z>


Z>В теории он переопределяет значение оператора уточнения типа ":", на практике это никаких проблем в понимании кода не вызывает (по крайней мере у тех, кто знает что такое джейсон). Он не переопределяет ":" глобально, просто при разборе кода внутри себя интерпретирует его по своему.


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

давай возьмем все-таки два сложных макроса с разным синтаксисом, например, json и макрос-шаблонизатор с синтаксисом:
[{ }] операторы шаблонизатора
[: :] — цитирование
< > — подстановка значение

и смешаем их
  [{ j: 1..2
   [:
    def test<j> = json({ 
    [{ i: 1..3
    [: a<i> : arr; :]       
    }]
      b : obj; 
      c : null;
      d : [[{ i: 1..10 where i%2==0 [: <(j+i)>, :] }]];
      e : { [{ i: 1..3 [: a<i> : <(j+i)*4>; :] }] "la la": null};
      "f" : [true];
      j : (43 + 55);
    }); 
   :]
  }]
  def test = test1 + test2;


ну как? еще читается? а здесь еще даже конфликты синтаксиса минимальны
Re[6]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 10:30
Оценка:
Здравствуйте, Ziaw, Вы писали:

S>>В общем случае я не вижу способа сделать компиляцию Nemerle-кода в JS. По крайней мере, в эффективный JS.

Z>Кстати, а какие основные проблемы ты тут видишь? C# же компилируют в js?
Z>Я вижу основную проблему в том, что хорошо зная js, обязательно захочется делать трюки обычные для js, но невозможные для nemerle.

Не, мужик, по-моему наоборот. *Хорошо* зная JS, захочется НЕ делать трюки, обычные для JS.
Re[7]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 10:40
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

Z>>Кстати, а какие основные проблемы ты тут видишь? C# же компилируют в js?
S>Основные проблемы — в том, что код не собирается работать в вакууме. Он будет исполняться в определённом окружении — browser, window, document.
S>Попытка построить строготипизированную модель для HTML и CSS по мне не выглядит многообещающей.
S>А умение компилировать базовую арифметику не очень интересно — оно имеет узкие практические применения.

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

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

И самое забавное, что как раз одна из основных проблема джаваскрипта, которую в идеальном мире хотелось бы решить — это бедность доступных на нем библиотек.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 10:57
Оценка:
Z>С такими операторами и без смешивания мы не сможем работать. Подробнее расскажи о задаче, я тебе набросаю синтаксис.

в максимально произвольном месте иметь возможность свернуть код вида:
A<i_1>B<i_1>C
A<i_2>B<i_2>C
A<i_3>B<i_3>C

где A, B, C(ит.д.) — фиксированные части, а i_n — изменяемая часть по определенным правилам
в код вида
генерация по i для шаблона A<i>B<i>C



под этот вид подходит следующий код
   def test1 = json({ 
     a1 : arr;       
     a2 : arr;       
     a3 : arr;       
      b : obj; 
      c : null;
      d : [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23];
      e : { a1:0, a2: 4, a3:8,   "la la": null};
    }); 
  }]
   def test2 = json({ 
     a1 : arr;       
     a2 : arr;       
     a3 : arr;       
      b : obj; 
      c : null;
      d : [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24];
      e : { a1:4, a2: 8, a3:12,   "la la": null};
    }); 
  }]
  def test = f(test1, test2);


в этом коде можно свернуть куски в один:
a) test1 и test2
b) последовательность a1, a2, a3
b) последовательность чисел в d
c) последовательность a1, a2, a3 внутри e
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 22.12.10 11:15
Оценка:
Здравствуйте, DarkGray, Вы писали:

Z>>С такими операторами и без смешивания мы не сможем работать. Подробнее расскажи о задаче, я тебе набросаю синтаксис.


DG>в максимально произвольном месте иметь возможность свернуть код вида:

DG>
DG>A<i_1>B<i_1>C
DG>A<i_2>B<i_2>C
DG>A<i_3>B<i_3>C
DG>

DG>где A, B, C(ит.д.) — фиксированные части, а i_n — изменяемая часть по определенным правилам
DG>в код вида
DG>
DG>генерация по i для шаблона A<i>B<i>C
DG>


Макросы работают не с текстом программы, а с AST. Они работают осмысленно, с валидными выражениями. Твой пример не может быть разобран в AST, ты хочешь собирать выражение из невалидных кусков. Это решается засовыванием всего в строку и собственным текстовым парсером. Любые конфликты со своим синтаксисом естественно будут на совести парсера.

Еще примеры конфликтов будут? Или сойдемся на том, что проблема конфликтов синтаксиса надумана?
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 11:43
Оценка:
DG>>в максимально произвольном месте иметь возможность свернуть код вида:

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

Z>Макросы работают не с текстом программы, а с AST. Они работают осмысленно, с валидными выражениями. Твой пример не может быть разобран в AST, ты хочешь собирать выражение из невалидных кусков. Это решается засовыванием всего в строку и собственным текстовым парсером. Любые конфликты со своим синтаксисом естественно будут на совести парсера.


давай побуквенно, что именно не будет астом и почему в следующей записи?
синтаксис немерле ботать не хочу, поэтому синтаксис ближе к c#
F1(Enumerable.Range(1..2), n=>
def test__n__ = json({ 
    F2(ann : arr;)
      b : obj; 
      c : null;
      d : [F2(Enumerable.Range(0, 20).where(nn=>nn%2==0), nn=>n+nn)];
      e : { F2(Enumerable.Range(0, 2), nn => a__nn__:nn*4),   "la la": null};
    }); 
def test = f(test1, test2);


зы
такое ощущение, что детям дали гранату, которой они гвозди забивают.
или другими словами разработчики и фанаты немерле сами не понимают, какой мощностью обладают макросы, имеющие доступ к асту
Re[6]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.12.10 12:51
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Это я не очень понял, к чему ты.

К отсутствию дублирования в некоторых стратегиях разделения обязанностей.
ВВ>Вон даже Хаскель вполне себе компилируют.
Проблема не в коде, а в окружении. Я по соседству комментировал.

ВВ>Хороший API можно написать даже на PHP.

Вот только стоимость написания будет зависеть.

ВВ>Но вот задача серверной части становится сильно сужена.

С чего бы это вдруг?
ВВ>Например, функциональный язык не даст мне никаких преимуществ — на сервере будет довольно грязный по большей части код. Интерфейсом этого кода станет HTTP, поэтому по сути уже не имеет значения какова там внутренняя архитектура — написан ли он в процедурном или в каком-то более другом стиле.
Это очень смелое утверждение. Мне вот отчего-то кажется, что написать RESTful API при помощи ASP.NET MVC значительно проще, чем, к примеру, на процедурном C.

ВВ>Серверная часть в первую очередь выполняет такие вещи как работа с данными, где скорость упирается в БД, поэтому статически-типизированный язык не даст каких-то значительных преимуществ, да и скорость этого языка практически по фигу — все в БД упрется так или иначе.

Это ещё одно очень смелое утверждение. Я не то, чтобы его опровергаю, но безалаберное обращение с кодом сервера приложений вполне способно заметно испортить общую производительность. Это раз.
Два — для скорости в СУБД важно уметь строить эффективные запросы. Наличие средств эффективного построения гарантированно корректных запросов сильно помогает.
Хотя, конечно, строить код типа if (MinAge != null) { whereClause += " AND Age>@MinAge"; params.Add(new SqlParam("@MinAge", typeof(int)); params["@MinAge"].Value = MinAge} можно и на PHP — вопросов нет.

ВВ>Каким образом? Основной код-то на ДжаваСкрипт. Как ты его анализировать будешь?

Стандартным образом: вызовы к серверу в JS будут генерироваться при помощи всё того же механизма. Тебя же не удивляет то, что чисто текстовые URL-и в тегах <A> и <IMG> можно сделать гарантированно корректными?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 14:45
Оценка:
Здравствуйте, Sinclair, Вы писали:

ВВ>>Это я не очень понял, к чему ты.

S>К отсутствию дублирования в некоторых стратегиях разделения обязанностей.

Тогда не очень понял, что это за стратегии. Примерчик можно?

ВВ>>Вон даже Хаскель вполне себе компилируют.

S>Проблема не в коде, а в окружении. Я по соседству комментировал.

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

ВВ>>Хороший API можно написать даже на PHP.

S>Вот только стоимость написания будет зависеть.

Какие-то вещи на PHP можно сделать даже быстрее. И не в ущерб качеству. Библиотек — так, чтобы все работало "из коробки" — там тоже до хрена. Просто сам язык убогий. Но тут-то мы и подходим к интересному — каких-то особенных языковых возможностей тут, собственно-то, и не требуется.

ВВ>>Например, функциональный язык не даст мне никаких преимуществ — на сервере будет довольно грязный по большей части код. Интерфейсом этого кода станет HTTP, поэтому по сути уже не имеет значения какова там внутренняя архитектура — написан ли он в процедурном или в каком-то более другом стиле.

S>Это очень смелое утверждение. Мне вот отчего-то кажется, что написать RESTful API при помощи ASP.NET MVC значительно проще, чем, к примеру, на процедурном C.

Ну а причем тут С? Часто на С веб-приложения пишут? На PHP вполне сравнимо, мне кажется. На Nemerle или С# тоже будет практически одинаково.

Заметь, кстати, ты сравнил Си и ASP.NET MVC, т.е. корову и яйца. А не Си и C#. Т.е. что тебе упрощает твой РЕСТ-то на самом деле? Не язык, нет. Библиотека.

ВВ>>Серверная часть в первую очередь выполняет такие вещи как работа с данными, где скорость упирается в БД, поэтому статически-типизированный язык не даст каких-то значительных преимуществ, да и скорость этого языка практически по фигу — все в БД упрется так или иначе.

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

Безалаберное обращение — это одно. А выжимать биты из тонкого клиентского кода, стоимость выполнения которого на порядки ниже стоимости запросов к БД — это уже совсем другое.

S>Два — для скорости в СУБД важно уметь строить эффективные запросы. Наличие средств эффективного построения гарантированно корректных запросов сильно помогает.


Я таких средств не знаю. Linq к ним не относится, к примеру.
Кстати, такие средства даже на уровне, скажем, C# кода вносят такой оверхед, что мало не покажется. Представляешь же как linq2sql работает? Не будешь же ты предлагать отказаться от него только потому что он пессимизирует скорость C# кода?

ВВ>>Каким образом? Основной код-то на ДжаваСкрипт. Как ты его анализировать будешь?

S>Стандартным образом: вызовы к серверу в JS будут генерироваться при помощи всё того же механизма. Тебя же не удивляет то, что чисто текстовые URL-и в тегах <A> и <IMG> можно сделать гарантированно корректными?

Мне, честно говоря, не особо знакома эта проблема. И совсем не знакомо рекламируемое тобой решение. Если ссылки генерятся с помощью какого-то механизма, то наверное нам уже все равно, на каком языке там код на сервере? На худой конец — парсер JS + валидатор ссылок, которые можно тупо натравить на исходники и получить результат, должны решить эту проблему чуть более чем полностью и без всякой статической типизации.
Re[8]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 14:57
Оценка:
ВВ>валидатор ссылок

вот это что такое? и как он доказывает, что не будет сгенерена невалидная ссылка?
Re[9]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 15:06
Оценка:
Здравствуйте, DarkGray, Вы писали:

ВВ>>валидатор ссылок

DG>вот это что такое? и как он доказывает, что не будет сгенерена невалидная ссылка?

Запрос делает?
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 22.12.10 15:10
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Берешь и пишешь парсер своего языка, а также парсер ХТМЛ-я. На основе полученного АСТ можно генерировать код на целевом языке, который генерирует ХТМЛ.

ВВ>По сравнению с макросом задача усложняется тем, что нужен еще и парсер своего языка. Но его можно создать один раз и реюзать для дальнейших ДСЛ-ей.
Ты сам то понял что только что предложил сделать макросы?

ВВ>Есть и другие VM. Например, LLVM.

А там уже есть в поставке точный ГЦ
А как вставить свой без "теневого стека"?
Короче LLVM это то еще УГ.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 22.12.10 15:10
Оценка:
Здравствуйте, gandjustas, Вы писали:

WH>>Другие .NET языки не нужны.

G>Чувствую влияние темной стороны в твоих словах я...
Ну так объясни смысл других языков.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 15:26
Оценка:
Здравствуйте, WolfHound, Вы писали:

ВВ>>Берешь и пишешь парсер своего языка, а также парсер ХТМЛ-я. На основе полученного АСТ можно генерировать код на целевом языке, который генерирует ХТМЛ.

ВВ>>По сравнению с макросом задача усложняется тем, что нужен еще и парсер своего языка. Но его можно создать один раз и реюзать для дальнейших ДСЛ-ей.
WH>Ты сам то понял что только что предложил сделать макросы?

Я предложил внешний ДСЛ.
Макросы позволяют сделать внутренний ДСЛ.
А кардинальной разницы нет, да.

ASPX вот — тоже такой внешний ДСЛ. Просто очень убогий. И вместо парсера там регексы. Почему — я не знаю. Но мне слабо верится в то, что он убогий, потому что в C# нет макросов, и у МС не хватило денег и времени на разработку чего-то более вменяемого. Скорее были приоритеты другие на момент его создания + совместимость с ASP Classic.

Интереснее тут другое. Я в общем не очень понимаю, почему на вопрос "а насколько этим удобно пользоваться?" я получаю ответ "но зато это написано на макросах". И целый поток словоблудия, которое пытается меня убедить в том, что у меня просто нет прав не интересоваться, как тяжело жилось бы разработчику на макросах и как легко и просто задача была решена с ними. Проще говоря — почему любой разговор о Немерле должен сводиться к макросам? Я вообще не хотел их обсуждать. Преимущества макросов перед внешними ДСЛ-ями *для разработчика* очевидны. Но также очевидно и то, что внешние ДСЛ-и в принципе покрывают основные возможности макросов. И не имея поддержки макросов в языке я все же могу ДСЛ-и создавать. А вот поддержку циклических типов я в C# сам не добавлю, хоть об стенку убьюсь.

ВВ>>Есть и другие VM. Например, LLVM.

WH>А там уже есть в поставке точный ГЦ
WH>А как вставить свой без "теневого стека"?

Э, там вроде как раз идея в том, что каждый может реализовать свой ГЦ, именно тот, который нужен, для чего и предоставляются базовое API. Но надо делать, да. Впрочем, я не в курсе деталей.

WH>Короче LLVM это то еще УГ.


Да, да, я понял. Все написанные VM — это УГ. А все VM, которые не УГ, не написаны.
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 22.12.10 15:34
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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

Ну давай сделай IDE уровня немерла для своего любимого pure.
А я посмотрю...

ВВ>А для разработчиков, которые не пахают на большого и сильного вендора? Давай возьмем разработчиков OCaml, Haskell, Pure и пр.

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

ВВ>В реальности у вас получается не апология статики вообще, а пиар вполне конкретного языка. Только вот сравнивается он не с каким-то конкретным динамически-типизированным языком, а со всеми сразу — вернее с теми, которые наиболее удобны вам для сравнения.

Сделай IDE для pure.

ВВ>Зачем мне Agda2? Мы о Немерле или не о Немерле?

За тем что всегда можно найти фичу в которой нет в системе типов некоторого языка.

ВВ>Можно замутить что-то в стиле метаклассов питона. И таки да, типизатор отдохнет в таком случае. Доволен?

А в немерле сволочь такая не смотря на макросы не дохнет.
Теперь то тебе очевидно что твое утверждение

Если брать с чистого листа, то создание ИДЕ для динамически-типизированного языка и "языка вроде Немерле" — по сложности где-то близкие задачи. И там, и там будет хардкорный вывод типов

Бред.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 22.12.10 15:34
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Мутабельные локальные переменные могут мешать выводу типов. Собственно, в общем случае их тип не выводится вообще. С ref гораздо проще. И в контексте разговора они сильно лучше мутабельных локальных переменных. При этом, что, собственно, ясно из названия, они обеспечивают ref семантику. Для мутабельных переменных пришлось бы вводить дополнительный механизм. А в плане опасности ref ничуть не опаснее хэш-таблиц, частным случаем которых и являются.

Бред!
Изменяемость переменной выводу типов не мешает.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 22.12.10 15:44
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>>>Берешь и пишешь парсер своего языка, а также парсер ХТМЛ-я. На основе полученного АСТ можно генерировать код на целевом языке, который генерирует ХТМЛ.

ВВ>>>По сравнению с макросом задача усложняется тем, что нужен еще и парсер своего языка. Но его можно создать один раз и реюзать для дальнейших ДСЛ-ей.
WH>>Ты сам то понял что только что предложил сделать макросы?
ВВ>Я предложил внешний ДСЛ.
ВВ>Макросы позволяют сделать внутренний ДСЛ.
ВВ>А кардинальной разницы нет, да.
А зачем ты написал выделенное?
Это же явное предложение сделать возможность внутри своего языка вставлять другой.
Те превратить нешний ДСЛ во внутренний но сделать это через задний проход.

ВВ>ASPX вот — тоже такой внешний ДСЛ. Просто очень убогий. И вместо парсера там регексы. Почему — я не знаю. Но мне слабо верится в то, что он убогий, потому что в C# нет макросов, и у МС не хватило денег и времени на разработку чего-то более вменяемого.

Именно так.
Они там все на С++ пишут...
А этот язык требует просто нереальное колличество ресурсов для разработки.

ВВ>Скорее были приоритеты другие на момент его создания + совместимость с ASP Classic.



ВВ>Интереснее тут другое. Я в общем не очень понимаю, почему на вопрос "а насколько этим удобно пользоваться?" я получаю ответ "но зато это написано на макросах".

Это твои фантазии.
Я тебе показал два примера которые в качестве внешних ДСЛ неюзабельны вообще но ты их проигнорировал.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 15:55
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>и еще раз повторю, что данная решаемая задача: переписывание кода из одного вида в другой — это и есть суперкомпиляция чисто исходя из определения суперкомпиляции.


Нет. Это, просто, еще одна проблема о которой ты что-то где-то читал, но вникнуть не удосужился. И в очередной раз ты смело бросаешься в обсуждение того в чем не разорался.

Повторяю последний раз. Супер-компиляция — это метод оптимизации. Она не изменяет семантики кода. Главной же целью мета-программирования является изменение семантики кода.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 16:07
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>на практике же речь обычно идет о специализированной автоматизированной суперкомпиляции.


Примеры этой "практики" в студию.

VD>>Супер-компилятор не просто переписывает код по какому-то там алгоритму. Он создает мета-модель кода и производит частичные вычисления. При этом никаких новых результатов не получается. Получается всего лишь более шустрый код для той же самой программы.


DG>те же грабли — в твоей неверной трактовке термина суперкомпиляция.

DG>даже в вики второй строчкой написано, что это очень узкая трактовка суперкомпиляции.

Ой, блин, поймал на лжи. Ну, да. Если быть точным, то авторы говорят о свойствах программы. Так что можно достигать меньшего или большего по объему кода или другого потребления памяти. Но суть от этого не меняется. Главное, что у программы не меняется семантика. Главным же свойством программы (если исключить семнтику) является скорость. Потому я о ней и говорю.

DG>еще раз повторю основную мысль суперкомпиляции:


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

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

DG>ничего кстати не напоминает?


Ничего. Оптимизация есть оптимизация. Семантика не изменяется.

DG>а это кстати и есть, например, linq2sql — по версии на универсальном языке формируется специализированная sql-версия этого же кода.


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

Кочай нести бред. Linq2sql не имеет никакого отношения к суперкопмпиляции. Это провайдер преобразующий статические вызовы в SQL и обратно. Сам же LINQ (в той его части что работает с деревьями выражений и поддержкой синтаксиса) — это встроенный в компилятор или реализованные средствами МП конвертер кода в типизированное АСТ и синтаксическая поддержка в языке. Все это опять же никакого отношения к суперкомпиляции не имеет, так как меняется семантика кода, а не его характеристики.

В общем, продолжай. Это довольно забавно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 16:19
Оценка:
VD>Нет. Это, просто, еще одна проблема о которой ты что-то где-то читал, но вникнуть не удосужился. И в очередной раз ты смело бросаешься в обсуждение того в чем не разорался.

VD>Повторяю последний раз. Супер-компиляция — это метод оптимизации. Она не изменяет семантики кода. Главной же целью мета-программирования является изменение семантики кода.


задам тебе те же самые вопросы, что и WH

изменение какой именно семантики: аксиоматической, операционной или может денотационной семантики?

в виде определения, пожалуйста.

какую из этих семантик меняет введение foreach, using, peg-грамматики в язык?
какую семантику меняет linq2sql?

почему ту же самую семантику не меняет суперкомпиляция?

доказательство, пожалуйста.

также могу добавить следующие вопросы
на оценку 3+:
1. одинаковая ли аксиоматическая, операционная и денотационная семантика у макроса и у исходного кода?
на оценку 4
2. как меняются данные семантики при переходе от исходного языка к макросам и обратно?
на оценку 4+
3. каковы правила редукции семантики при переходе от языка к макросам и обратно?
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 16:21
Оценка:
Здравствуйте, WolfHound, Вы писали:

ВВ>>>>Берешь и пишешь парсер своего языка, а также парсер ХТМЛ-я. На основе полученного АСТ можно генерировать код на целевом языке, который генерирует ХТМЛ.

ВВ>>>>По сравнению с макросом задача усложняется тем, что нужен еще и парсер своего языка. Но его можно создать один раз и реюзать для дальнейших ДСЛ-ей.
WH>>>Ты сам то понял что только что предложил сделать макросы?
ВВ>>Я предложил внешний ДСЛ.
ВВ>>Макросы позволяют сделать внутренний ДСЛ.
ВВ>>А кардинальной разницы нет, да.
WH>А зачем ты написал выделенное?
WH>Это же явное предложение сделать возможность внутри своего языка вставлять другой.
WH>Те превратить нешний ДСЛ во внутренний но сделать это через задний проход.

Это игра какая-то? Ты меня спросил — как без макросов встроить в свой язык код на другом языке (HTML). Теперь тебя удивляет то, что я предложил добавить "возможность внутри своего языка вставлять другой"? А как еще это сделать-то?
И все равно это будет внешний ДСЛ — так же, как и ASPX это внешний ДСЛ. Просто выделять блоки кода лучше все же парсером, чем регексами.

ВВ>>ASPX вот — тоже такой внешний ДСЛ. Просто очень убогий. И вместо парсера там регексы. Почему — я не знаю. Но мне слабо верится в то, что он убогий, потому что в C# нет макросов, и у МС не хватило денег и времени на разработку чего-то более вменяемого.

WH>Именно так.
WH>Они там все на С++ пишут...
WH>А этот язык требует просто нереальное колличество ресурсов для разработки.

Ну сделать парсер на С++ или на С# невелика разница. Скорее всего в обоих случаях будет опять же внешний тул с внешним ДСЛ-ем. Ну есть спирит еще. А у шарпа вот никаких спиритов нету.

ВВ>>Скорее были приоритеты другие на момент его создания + совместимость с ASP Classic.

WH>

А что смешного? Приоритеты и правда были другие. Они хотели сделать веб-фреймворк по аналогии с виндоус формс. Эта идея благополучно слилась. Когда она слилась, и у них появились менее кретинические идеи, тот же MVC, они остались один-на-один с убогим шаблонизатором. Теперь много новых накатали, тот же Разр. Правда, все равно они как-то не то чтобы айс.

ВВ>>Интереснее тут другое. Я в общем не очень понимаю, почему на вопрос "а насколько этим удобно пользоваться?" я получаю ответ "но зато это написано на макросах".

WH>Это твои фантазии.
WH>Я тебе показал два примера которые в качестве внешних ДСЛ неюзабельны вообще но ты их проигнорировал.

Это какие? Я вообще часто по диагонали читаю, мог и проигнорировать.
Re[35]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 16:22
Оценка:
Здравствуйте, WolfHound, Вы писали:

ВВ>>Мутабельные локальные переменные могут мешать выводу типов. Собственно, в общем случае их тип не выводится вообще. С ref гораздо проще. И в контексте разговора они сильно лучше мутабельных локальных переменных. При этом, что, собственно, ясно из названия, они обеспечивают ref семантику. Для мутабельных переменных пришлось бы вводить дополнительный механизм. А в плане опасности ref ничуть не опаснее хэш-таблиц, частным случаем которых и являются.

WH>Бред!
WH>Изменяемость переменной выводу типов не мешает.

Ты хоть понял, что речь о динамике и выводе типов для интеллисенса?
Re[29]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 16:23
Оценка:
Здравствуйте, DarkGray, Вы писали:


DG>>>кстати, макросы (раскрытие и свертку), исходя из теории программирования можно рассматривать, как подвид суперкомпиляции программы.


VD>>Что за свертку макросов ты сейчас придумал?


DG>если говорить, что foreach — это макрос, то:


DG>это развернутый код

DG>
DG>for(int i = 0; i < 10; ++i)
DG>{
DG>   Console.WriteLine(i);
DG>}
DG>[code]

DG>это свернутый с помощью макросов
DG>[code]
DG>foreach (var i in Enumerable.Range(0, 10))
DG>  Console.WriteLine(i);
DG>


Супер! Придумываешь новые термины и потом ими оперируешь.

В среде тех кто занимается макросами проффесионально второе называется применением макросов. Ни кто из тех кто использует макры не думает о том во что они реально разворачиваются. Люди мыслят на созданном с помощю макросов языке.

VD>>Что до суперкомпиляции, то еще раз повторяю тебе — это метод оптимизации. Она не меняет семантики кода. МП же своей целю имеет изменение семантики.


DG>суперкомпиляция — это теоретическая формулировка решаемой задачи.


Давай ты не будешь подменять определения авторов.

DG>это ответ на вопросы:

DG>1. какую теоретическую задачу решает введение макросов?

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

DG>2. какая теоретическая задача решается при linq2sql, pl2js и т.д.?


У них практическая задача. Это провайдеры занимающиеся конвертацией деревьев выражений в другие форматы данных и обратно. К слову, как раз их то очень эффективно реализовывать средствами макросов. Решение задачи упрощает в сотни раз (по сравнению с реализацией на С#).

Суперкомпиляыией же здесь даже не пахнет.

VD>>Ты лучше овтеть на прсотой вопрос. С какой целью ты суперкомпиляцию сюда приплел (если, кончено, отбросить предположение, что брякнул не подумав)?


DG>цель — как у и любого приплетания теории: получить фундаментальный базис на который можно опереться при решении задачи.


А чем прилепленная не понятно из каких соображений теория поможет в другой области? Может давай еще сюда теорию относительности прилепим?

DG>>>при этом фиксированным доп. параметром суперкомпиляции — является исполнитель: с одной стороны — компилятор конкретного языка, с другой стороны — разработчик.


VD>>О, блин, дожили. Разработчик стал у нас параметром программы!


DG>конечно. пользователь программы всегда является одним из самых важных параметром программы.


Вот это гон.

DG>программа делающая одну и ту же функцию — но для космонавта или бухгалтера — это две разные программы.


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

DG>если мы говорим про МП, то пользователем такой программы — является разработчик.


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

DG>и поэтому — да, для метапрограммы — разработчик является весомым параметром.


ОК. И как суперкомпиляция влияет на этот фактор?

ЗЫ

Самому то не смешно? Бред же несешь страшнейший!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 16:27
Оценка:
Здравствуйте, WolfHound, Вы писали:

ВВ>>Можно замутить что-то в стиле метаклассов питона. И таки да, типизатор отдохнет в таком случае. Доволен?

WH>А в немерле сволочь такая не смотря на макросы не дохнет.
WH>Теперь то тебе очевидно что твое утверждение
WH>

WH>Если брать с чистого листа, то создание ИДЕ для динамически-типизированного языка и "языка вроде Немерле" — по сложности где-то близкие задачи. И там, и там будет хардкорный вывод типов

WH>Бред.

Нет, не бред. Я просто понимаю, что типы будут выводиться не всегда и интеллисенс не будет работать в ряде случаев. Но большинство сценариев он будет покрывать. В С# 4 вон тоже можно написать код, для которого интеллисенс "официально" не работает.
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 16:47
Оценка:
VD>В среде тех кто занимается макросами проффесионально второе называется применением макросов. Ни кто из тех кто использует макры не думает о том во что они реально разворачиваются. Люди мыслят на созданном с помощю макросов языке.

дык, а в среде тех кто занимается проффесионально теорией программирования (в том числе разработкой языков программирования) — это называние редуцированием (или сверткой — если более по-русски).
будем дальше меряться — кто более проффессионален?
Re[8]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.12.10 17:26
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


ВВ>>>Это я не очень понял, к чему ты.

S>>К отсутствию дублирования в некоторых стратегиях разделения обязанностей.

ВВ>Тогда не очень понял, что это за стратегии. Примерчик можно?

Я же приводил. Пишем констреинт на свойство; этот констреинт компилируется в DDL, в JS, и в MSIL.
Кода по построению UI нет в сервере, кода по работе с разделяемым состоянием нет в JS.

ВВ>Ну а причем тут С? Часто на С веб-приложения пишут? На PHP вполне сравнимо, мне кажется. На Nemerle или С# тоже будет практически одинаково.

В PHP я не эксперт.
ВВ>Заметь, кстати, ты сравнил Си и ASP.NET MVC, т.е. корову и яйца. А не Си и C#. Т.е. что тебе упрощает твой РЕСТ-то на самом деле? Не язык, нет. Библиотека.
А на C ASP.NET MVC написать невозможно. Нет в языке средств по построению таких "библиотек". Иначе бы С++ так никогда и не родился бы.

ВВ>Я таких средств не знаю. Linq к ним не относится, к примеру.

Почему? По-моему, он таки как раз относится. Банально то, что он реализует пейджинг из коробки, уже решает очень многое. Потому что на более традиционных фреймворках программисты тупо на это забивают и делают skip/take в серверном коде. Проблемы с масштабируемостью такого подхода очевидны?

ВВ>Кстати, такие средства даже на уровне, скажем, C# кода вносят такой оверхед, что мало не покажется. Представляешь же как linq2sql работает? Не будешь же ты предлагать отказаться от него только потому что он пессимизирует скорость C# кода?

Он оптимизирует скорость SQL кода. Это гораздо лучше.

ВВ>Мне, честно говоря, не особо знакома эта проблема. И совсем не знакомо рекламируемое тобой решение. Если ссылки генерятся с помощью какого-то механизма, то наверное нам уже все равно, на каком языке там код на сервере?

Не на всех языках можно сгенерировать такой код. На шарпе есть метаданные обо всём: мы можем передать в генератор типизированный делегат, который гарантированно резолвится в нужный нам метод. А можем и прямо конкретный вызов передать — при помощи лямбды. Мне не очень понятно, как это же сделать на языке, где нет понятий о типах.

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

Хм. Каким образом предполагается валидировать ссылки?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.12.10 17:27
Оценка:
Здравствуйте, Воронков Василий, Вы писали:


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

Я об этом и говорю — вопрос в окружении. На сервере ты взял, к примеру, прицепился к CryptoAPI, и побежал. Или там на диск сбегал. Вокруг тебя — ось.
На клиенте вокруг тебя — DOM и CSS. С точки зрения системы типов, никакого преимущества у статики тут нет — всё равно всё, с чем работаешь, это хеш таблицы. Как будет выглядеть код на C#, манипулирующий DOM-ом?

Поэтому, на мой взгляд, польза сводится к трансляции изолированных функций типа IsValidEma
ВВ>И самое забавное, что как раз одна из основных проблема джаваскрипта, которую в идеальном мире хотелось бы решить — это бедность доступных на нем библиотек.
Возможно. Лично я в джаваскрипте не особо силён. Мне казалось, что основная проблема там — отсутствие автокомплита и интеллисенса.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 22.12.10 17:54
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>>>по опыту скажу, что вот это очень неприятное ограничение. очень ограничивает встраиваемость макросов.


Z>> У тебя просто нет опыта использования нормального метапрограммирования.

Z>> Ты наверняка встречал людей незнакомых с функциональным программированием. Им довольно сложно объяснить профит от первоклассных функций. Тут все то же самое.

DG>имхо, ты что-то не понимаешь..


DG>я использую МП, активно использую.

DG>настолько активно — что у меня есть две больших работающие системы построенные с помощью того или иного применения МП.
DG>есть множество иследовательских проектов по МП — по тому или иному его аспекту применения и работы.

Ты не стесняйся, расскажи, а то как Воронков, "у меня длиннее" и все. Приводи инструменты и сценарии, где МП слажало.

В твоем опыте хорошо виден очень низкий уровень "МП", ты уж извини за прямоту. У тебя даже гипотетическая кодогенерация выходит насквозь текстовая, тот кто работал с АСТ, пусть с теми же экспрешенами линкушными, так не мыслит. Так что либо ты только что выдумал этот свой опыт, либо просто МП было на уровне кодогенераторов. Впрочем, не буду загадывать, ты же не хочешь прослыть пустомелей и расскажешь как все было.

Кстати, про экспрешены, это уже метапрограммирование. Им бы еще квазицитирование и получилось бы жалкое подобие макросов немерла. А экспрешены я вижу уже в куче библиотек, с очень разнообразными сценариями использования, в том числе и для создания удобного синтаксиса. Так что МП применяют многие передовые проекты, только самые упертые твердят, МП не нужно, МП опасно.
Re[34]: Веб и динамика? Веб и статика+метапрограммирование.
От: hardcase Пират http://nemerle.org
Дата: 22.12.10 18:04
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>с каких это пор определение для домохозяек (а в русской вики — именно такое определение семантики) стало аргументом в споре?


А что доказать-то пытаешься?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[34]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 18:59
Оценка:
Здравствуйте, DarkGray, Вы писали:

VD>>Гы. Ты не на тех нарвался. Тут покидаться умными терминами с целью сойти за умного не удастся. Семантика кода — это всего лишь общепринятое короткое и красивое иностранное слово означающее трактование поведения кода. Если тебя не забанили в википедии, то сходи и погляди общепринятое в программировании значение этого слова.


DG>может тебе все-таки стоит почитать хотя бы английскую версию

DG>http://en.wikipedia.org/wiki/Formal_semantics_of_programming_languages

Ты мозг то не трахай. Хочешь читать английскую читай ее на здоровье. Смысл слов от этого не изменится.
Еще раз повторяю, что говоря "семантика" я имею в виду общепринятое значение этого слова, а не какие-то тонкие завихрения научной мысли. В нашем случае это просто излишне.

Ты же подсовываешь ссылку на унылое описание направления исследования в математике. Это полнейший оверкил. Зачем это здесь? Ответ очевиден — дальнейшая попытка запутать окружающих с целью завуалировать несостоятельность собственных суждений.

Да и не сказано там ничего нового. Много воды не относящейся к делу. Не более того.

DG>так кроме трех базовых семантик, рассматривается еще как минимум 7.


Да какая разница что там умные ученые придумали для формализации исследований в области семантики языков программирования? Я же не говорил об этом.

DG>это на тему того, что в россии на текущий момент — теория программирования почти совсем не развивается.


Ды ты бы помолчал лучше. А то слово Россия написать нормально не можешь, а лезешь ярлыки приклеивать.
К тому же чья бы корова мычала. Ты несешь путаешься в трех соснах и несешь несусветную чушь в разговорах на поверхностном уровне, но при этом апеллируешь к науке и имеешь наглость говорить о российской науке.
Те же суперкомпиляторы придумал представитель той самой российской науки (тебе явно это известно).

DG>и поэтому в вики на русском всякий бред написан про программирование.


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

VD>>Так что приплетать сюда красивые научные термины из других областей не нужно. По крайне мере со мной это не прокатит. С возрастом я выработал иммунитет к разводам. В том числе и к терминологическому подлогу.


DG>>>в виде определения, пожалуйста.


Уже несколько раз давал.

VD>>По ссылке.


DG>с каких это пор определение для домохозяек (а в русской вики — именно такое определение семантики) стало аргументом в споре?


Ладно. Твое время видимо ничего не стоит. А мне мое жалко. Неси свою ахинею сколько влезет. Ценность твоих слов лично для меня уже сравнялась с нулем.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[35]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 22.12.10 19:10
Оценка:
VD>Еще раз повторяю, что говоря "семантика" я имею в виду общепринятое значение этого слова, а не какие-то тонкие завихрения научной мысли. В нашем случае это просто излишне.

слился значит.
как можно утверждать — что-то меняется или не меняется? если при этом ты не хочешь фиксировать это самое "что-то"

VD>Те же суперкомпиляторы придумал представитель той самой российской науки (тебе явно это известно).


во-первых, советской, а не российской. российскую науку — разве что в микроскоп можно увидеть.
во-вторых, в СССР он не смог продолжать свои исследования, и вынужден был уехать в США.
Re[36]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 19:24
Оценка:
Здравствуйте, DarkGray, Вы писали:

VD>>Еще раз повторяю, что говоря "семантика" я имею в виду общепринятое значение этого слова, а не какие-то тонкие завихрения научной мысли. В нашем случае это просто излишне.


DG>слился значит.


Ты? Давно. Над тобой уже давно все потешаются.

DG>как можно утверждать — что-то меняется или не меняется? если при этом ты не хочешь фиксировать это самое "что-то"


Что меняется? Семантика? Я тебе уже отвечал на этот вопрос сто раз.

VD>>Те же суперкомпиляторы придумал представитель той самой российской науки (тебе явно это известно).


DG>во-первых, советской, а не российской. российскую науку — разве что в микроскоп можно увидеть.


Напомню, что РСФСР — Россия, входила в состав СССР с самого его основания. И еще до этого много сотен лет существовала.

DG>во-вторых, в СССР он не смог продолжать свои исследования, и вынужден был уехать в США.


Хорошая тема для обсуждения. Очень подходит чтобы подменить слитую тему.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 19:40
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Нет, не бред. Я просто понимаю, что типы будут выводиться не всегда и интеллисенс не будет работать в ряде случаев.


А кому нужен то потухающий, то погасающий интеллисенс?

ВВ>Но большинство сценариев он будет покрывать. В С# 4 вон тоже можно написать код, для которого интеллисенс "официально" не работает.


А может пойти дальше и сделать как в Boo? Ну, чтобы динамика была только там где компилятор не в силах типы вычислить.

Или как в шарпе? Ну, чтобы динамика была только там где это нужно программисту.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 19:53
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Я предложил внешний ДСЛ.


А делать его ты будешь топром и киянкой?

Пойми макры — это ведь просто технология. Их ведь и для внешних ДСЛ-ей можно приспособить. Вопрос только в том насколько технология позволяет упростить разработку ДСЛ-я и его интеграцию с компилятором и IDE. Так вот то что называется в немерле макрами позволяет очень существнно упростить эту задачу. Причем это далеко не предел. Можно упростить ее еще больше. А вот в ДСЛТулз почти ничего нет для этого. Это почти сто-процентный закат солнца вручну.

ВВ>Макросы позволяют сделать внутренний ДСЛ.


И внешний тоже. Мы тут недавно приколькный такой ДСЛ-чик написали — C#.
Сделано все на макросах.

ВВ>А кардинальной разницы нет, да.


С чем? Я же говорю. Разница в простоте реализации. Миллионы долларов против тысяч. Это ли не выгода?

ВВ>ASPX вот — тоже такой внешний ДСЛ.


Ага. МС вот делает движок рендеренга новый к нему. Делает уже более года. Тоже на макрах делается где-то за месяц одним человеком. И это не преувеличение или понты.

ВВ> Просто очень убогий. И вместо парсера там регексы. Почему — я не знаю.


В последнем видимо это не так. Но ответ очень простой. У них просто нет подходящих стредств. А у нас есть.

ВВ> Но мне слабо верится в то, что он убогий, потому что в C# нет макросов, и у МС не хватило денег и времени на разработку чего-то более вменяемого.


Но это так. Через десят лет после выпуска убогой версии выкупают и менее убогую.

ВВ> Скорее были приоритеты другие на момент его создания + совместимость с ASP Classic.


А чем тут совместимость то мешает?

Пойми все очень просто. МС даже в своих компиляторах все вручуню да еще и на С++ фигачит. Цена такой разработки очень высока. А отдавать на разные АСП (денег на прямую не приносящих) жаба душит. По сему прогресс у них такой медленный. И это при их то ресурсах. А были бы они как мы — без копейки в кармане, то вообще ничего бы не сделали.

ВВ>Интереснее тут другое. Я в общем не очень понимаю, почему на вопрос "а насколько этим удобно пользоваться?" я получаю ответ "но зато это написано на макросах".


Ты извини, но тему не ты создал. И вопрос в ней был другой. А ты просто его подменить другим пытаешься. Ответ на твой вопрос очевиден. Даже созданный самыми экстенсивными и не эффективными методами продукт может удовлетворять потребителя. MS или IBM так и поступают. Но вот даже при их ресурсах МС пока что не продемонстрировал действительно удобного решения для разработки веб-сайтов. А энтузиасты-рубисты продемонстрировали. Вот и на немерле продемонстрировали недавно. Разве это не наталкивает на мысли?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:01
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Хороший язык, на котором никто не пишет и не хочет писать — плохой язык. Наоборот кстати тоже.


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

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

Получается какой-то порочный круг.

Что до сравнения PHP с F#... Если тебе оно не нравится, то можешь сравнить F# с C# или с VB. Они то из одной экосистемы. Но на их фоне F# не видно даже в микроскоп.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:02
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Если никто — то конечно да. А плохой у немерле не язык, а PR, стабильность и доки.


Про стабильность я бы не согласился.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[35]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:05
Оценка:
Здравствуйте, FR, Вы писали:

FR>Я согласен с тем что F# и OCaml уже достаточно далеко разошлись, но совместимость при этом осталась, например далеко нетривиальная библиотека http://www.coherentpdf.com/ocaml-libraries.html компилируется и OCaml и F#.


Скажу больше. Я дже где-то читал, что сам компилятор F#-а до сих пор можно окамловским скомпилить. Не уверен, что это до сих пор правда. Но как минимум так было довольно долго. Так что у F# и ОКамла просто есть общий сабсэт. А при этом говорить о каком-то там новом языке немного странно. Думаю человек с опытом использования ОКамла сможет начать писать на F# довольно быстро. Вот только мало таких.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:12
Оценка:
Здравствуйте, Sinclair, Вы писали:

G>>То есть макры — не тул для программистов, а тул для разработчиков компилятора.

S>Фактически — да. У меня по-прежнему нет личного опыта, но всё выглядит именно так.

А кстати, что так? Может пришла пора попробовать? Или боишься подсесть на эту "траву"?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:22
Оценка:
Здравствуйте, Sinclair, Вы писали:

Кэр>>Любую фичу можно использовать как во благо, так и во вред. Мне вот такое свободное изменение синтаксиса дает такую картину перекрестного опыления различными библиотеками результирующего кода, что жить не хочется.

S>Ну, это старый аргумент. Я наблюдаю этот спор тут чуть ли не со времён R#. Ответы на него мне тоже известны.
S>Как оно окажется на практике — пока что непонятно. Пока что мы имеем не очень много макросных библиотек для немерле, так что трудно сказать, насколько твой страх оправдан.

Тем кто использовал макры на практике (не баловался, я делал что-то полезное) — понятно. Я не сказал бы, что все уж так прекрасно, но проблем с конфликтами нет. Есть проблемы с тем, что иногда хочется, чтобы один макрос обрабатывал результаты работы другого, но по причине их не синхронизированности этого достичь не удается. Пример этого я видел только один раз. Это конечно недоработка макрос-системы, но опять же это не системная проблема, как тут пытаются это интерпретировать, а проблема реализации. В двушке, я думаю, мы и ее устраним.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:26
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>вопрос еще более старый (ему лет 50) — спор идет со времен lisp, макро-ассемблера и т.д.


У макро-ассемблера нет ничего общего, кроме названия, с макросами лиспа.

DG>и видно, что в mainstream-е выбор всегда делался в пользу "жестких" инструментов.

DG>на текущий момент, не видно почему этот выбор должен измениться.

Мэйнстрим тупо не осилил Лисп. А некоторые вообще хавают только то что дают ему корпорации. Они вообще не будут даже смотреть на что-то где нет клейма "Мэйд бай Майкрософт".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:29
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Надеюсь я хоть немного развеял опасения, если это конечно были опасения, а поиск причин не любить немерле.


Вот это вряд ли. Тут логика обратная.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:30
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>но в том же .net-е (c#) — это является не просто соглашением "давайте писать хороший код", но и предоставляются способы по защите от плохого кода.

DG>есть namespace, есть алиасы и т.д. — которые позволяют при необходимости один плохой код скрестить с другим плохим кодом, и все это использовать из хорошего кода.

Дык они и тут работают. Любой макрос можно вызвать в виде фунции (без использования синтаксиса). А синтаксис импортируется using-ами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.12.10 20:39
Оценка:
Здравствуйте, VladD2, Вы писали:

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

Самое забавно что я уже освоил nemerle на уровне написания кода, но:
1)По сравнению с C# не хватает тулинга
2)По сравнению с F# не слишком лаконичный, и сильно не хватает карринга
Поэтому не могу в моей работе найти места nemerle. Может для задач, которые потребуют DSL и прочего разберусь с макросами, но пока это довольно сложно ибо недокументировано, и не хватает для обучения материалов.

VD>Получается какой-то порочный круг.

Именно порочный круг, чтобы выйти из него — надо заниматься популяризацией, на приемр того же липперта, сайма, SPJ, мейера и других деятелей.
Заметь — они все довольно частые гости на различных конференциях, пишут в блогах, снимают видео итп. Такой hype даже в отсутствии нормальных доков сможет привлечь волну ковырятелей исходников, которые сами со всем разберутся.
Re[26]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:51
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>я использую МП, активно использую.


Покажите код!

DG>настолько активно — что у меня есть две больших работающие системы построенные с помощью того или иного применения МП.


Вертишься в своей песочницы и на основании этого делаешь далеко идущие выводы о других подходах.

DG>есть множество иследовательских проектов по МП — по тому или иному его аспекту применения и работы.


Опять же, код в студи, тогда и обсудим.

DG>я на совсем опыте видел, на сколько плохо заканчивается проект, если разработка макросов отдается в массы.


Ну, вот тебе опыт работы минимум трех десятков человек над одним проектом — компилятором немерла. Как видишь, проект жив и развивается.

DG>и опять же на совсем опыте видел, что все призывы — а давайте не будем писать плохих макросов, заканчивается ничем.


Бюсь об заглад, что если ты перестанешь долдонить одно и то же, а просто изучишь немерл и напишешь на нем 2-3 не тривиальных макроса, то все твои опасения уйдут сами собой.

Готов принять участие в этом смелом научном эксперементе и оказать посильную помощь.

Ну, как слабо доказать или опровергнуть свои теории на реальном опыте?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 20:58
Оценка:
Здравствуйте, DarkGray, Вы писали:

Особенно понравилось вот это:


DG>не передергивай. я утверждаю лишь, что бесконтрольное применение МП — лажает...

DG>...само по себе МП — конечно благо и необходимая в хозяйстве вещь...
DG>...но это понятное контролируемое применение МП, которое не вызывает таких побочных эффектов — как те же макросы.

Простой логический рад. МП — благо, лажает бесконтрольное МП, макросы это контролируемое применение МП. Выводы: Макросы не лажают — Макросы это благо.

Что и требовалось доказать!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 21:00
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>В общем случае я не вижу способа сделать компиляцию Nemerle-кода в JS. По крайней мере, в эффективный JS.


Это еще почему? Даже для ОКамла и F# подобное сделали. Чем немерл то хуже?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 22.12.10 21:01
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

S>Я об этом и говорю — вопрос в окружении. На сервере ты взял, к примеру, прицепился к CryptoAPI, и побежал. Или там на диск сбегал. Вокруг тебя — ось.
S>На клиенте вокруг тебя — DOM и CSS.

Это-то как раз не проблема. ur/web, на который Вульфхаунд тут уже раз надцать приводил ссылку, как раз производит такое прозрачное транслирование себя в ДжаваСкрипт по принципу — если метод должен выполняться на сервере (ему нужны ресурсы на сервере), то он останется серверным, если нет — то будет транслирован в ДжаваСкрипт.

S>С точки зрения системы типов, никакого преимущества у статики тут нет — всё равно всё, с чем работаешь, это хеш таблицы. Как будет выглядеть код на C#, манипулирующий DOM-ом?


C# не знаю. Я предпочел бы функциональный язык, пусть даже и динамически типизированный. И с ДОМ-ом тоже надо как-то в другом стиле работать — например, формировать его через литералы. А так, да, если взять C# as is, то смысла вообще мало очень.

S>Поэтому, на мой взгляд, польза сводится к трансляции изолированных функций типа IsValidEma

ВВ>>И самое забавное, что как раз одна из основных проблема джаваскрипта, которую в идеальном мире хотелось бы решить — это бедность доступных на нем библиотек.
S>Возможно. Лично я в джаваскрипте не особо силён. Мне казалось, что основная проблема там — отсутствие автокомплита и интеллисенса.

Для начала должно быть то, что можно было бы автокомплитить и интеллисенсить
Re[8]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 21:03
Оценка:
Здравствуйте, FR, Вы писали:

FR>Тут http://ocsigen.org/ вроде это все уже сделано http://ocsigen.org/docu/1.3.0/XHTML.M.html, но я слишком далек от веба

FR>чтобы оценить насколько хорошо. DSL'ы у них по моему весьма неплохие.

Ага. У ребят есть чему поучиться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 21:07
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> Мне казалось, что основная проблема там — отсутствие автокомплита и интеллисенса.


Кое какой интеллисенс там был еще лет 10 назад.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 21:29
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Самое забавно что я уже освоил nemerle на уровне написания кода, но:


Ой не зарекайся. Я и через 3 года активного программирования открывал для себя много нового.

G>1)По сравнению с C# не хватает тулинга


Туллинг — это круто! А по русски?

G>2)По сравнению с F# не слишком лаконичный, и сильно не хватает карринга


В иднет-режиме 1 в 1. Так что разница только в скобках.

А вот если еще макросы использовать...

G>Поэтому не могу в моей работе найти места nemerle. Может для задач, которые потребуют DSL и прочего разберусь с макросами, но пока это довольно сложно ибо недокументировано, и не хватает для обучения материалов.


Ну, все новое по началу сложно. Я тоже не сразу все освоил.

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

VD>>Получается какой-то порочный круг.

G>Именно порочный круг, чтобы выйти из него — надо заниматься популяризацией,

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

G>на приемр того же липперта, сайма, SPJ, мейера и других деятелей.


Мы ведь не можем привлечь к популяризации ПиАр-машину МС? У перечисленных лиц есть свои игрушки. Липерт по уши в компиляторе шарп. Дон Сайм в своем компиляторе. Меер в хаскеле. А как было бы здорово прокатить ДонБокса (который не мало хорошего о макрах лиспа говаривал) по миру с рассказом о крутости микросистемы. Забить пол МСДН-а примерами и статьями? Вот только это нереальные мечты.

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

G>Заметь — они все довольно частые гости на различных конференциях, пишут в блогах, снимают видео итп. Такой hype даже в отсутствии нормальных доков сможет привлечь волну ковырятелей исходников, которые сами со всем разберутся.


Да, 2 лимона баксов дать на пиар и разработку было бы проще и дешевле .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[35]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.12.10 23:40
Оценка:
Здравствуйте, VladD2, Вы писали:

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


G>>Самое забавно что я уже освоил nemerle на уровне написания кода, но:


VD>Ой не зарекайся. Я и через 3 года активного программирования открывал для себя много нового.


G>>1)По сравнению с C# не хватает тулинга

VD>Туллинг — это круто! А по русски?
Различные инструменты для работы с кодом
1)Поддержка студии 2010
2)рефлектор
3)решарпер
4)сниппеты
5)работа в silverlight
6)работа в SQL CLR

Да и тупо 98% примеров кода на .NET идут на C#
Re[36]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.12.10 23:47
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


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


G>>>Самое забавно что я уже освоил nemerle на уровне написания кода, но:


VD>>Ой не зарекайся. Я и через 3 года активного программирования открывал для себя много нового.


G>>>1)По сравнению с C# не хватает тулинга

VD>>Туллинг — это круто! А по русски?
G>Различные инструменты для работы с кодом
G>1)Поддержка студии 2010
G>2)рефлектор
G>4)сниппеты
G>6)работа в SQL CLR

Вот это:
G>3)решарпер
G>5)работа в silverlight
конечно недостаток. В остальном же требования явно высосаны из пальца.
Зафиг тебе более одной IDE? Рефлектор в 90% случаев декомпилирует код в C#.


G>Да и тупо 98% примеров кода на .NET идут на C#


А что ты не в силах их воспроизвести с другим синтаксисом?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.12.10 03:20
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>С учетом того, что type provider решают задачу типизации нетипизированных данных, то это прямо удивительно, что они не решают проблему await/async. Хм...

Я не пытаюсь кого-то удивить.
Напомню ещё раз — вот вопрос:

Вполне возможно, что это решается через type providers о которых говорил Don Syme на PDC.
Это решение потенциально покрывает такой пласт проблем, что возникает большой вопрос — а зачем тогда нужны будут макросы.

Я отвечаю на этот вопрос. А не пытаюсь указать на какие-то недостатки в тайп провайдерах.

Кэр>А языки теперь разрабатывает только Микрософт? Макросы и кастомный синтаксис далеко не Немерле придумал. Концепт давний и имеют большую историю быть непопулярным. Предлагаю в качестве упражнения по критическому мышлению подумать почему.

Ну, как сказать. Некоторые макросы (к примеру те, которые в препроцессоре C/C++) популярнее, скажем, чем linq и dynamic вместе взятые.

Обсуждение проблемы совместимости синтаксисов я поскипал.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[35]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 23.12.10 06:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Думаю, что даже банальная поставка немерла в составе студии и даже намек на то что МС будет его поддерживать сразу бы в корне изменили ситуацию. Скептики быстро бросились бы изучать новую модную штуку и нашли бы в ней массу крутых и полезных вещей.


+1. Кстати, в 2010 студии появился пекедж менеджер. Это дает установку немерла в 2 клика прямо из студии. Но 2010 надо поддержать, как ни крути, пусть простейшую интеграцию, без сенса и прочего.
Re[9]: Веб и динамика? Веб и статика+метапрограммирование.
От: Воронков Василий Россия  
Дата: 23.12.10 07:55
Оценка:
Здравствуйте, Sinclair, Вы писали:

ВВ>>Тогда не очень понял, что это за стратегии. Примерчик можно?

S>Я же приводил. Пишем констреинт на свойство; этот констреинт компилируется в DDL, в JS, и в MSIL.
S>Кода по построению UI нет в сервере, кода по работе с разделяемым состоянием нет в JS.

Ну т.е. у тебя идет все та же трансляция в JS, только в более ограниченном объеме. Я, честно говоря, с трудом вижу тут альтернативу компилятору некоего "нашего" языка в JS — скорее это другой подход к реализации, более проблемно-ориентированный что ли.

ВВ>>Заметь, кстати, ты сравнил Си и ASP.NET MVC, т.е. корову и яйца. А не Си и C#. Т.е. что тебе упрощает твой РЕСТ-то на самом деле? Не язык, нет. Библиотека.

S>А на C ASP.NET MVC написать невозможно. Нет в языке средств по построению таких "библиотек". Иначе бы С++ так никогда и не родился бы.

Не знаю, не уверен. По идее все, что нам может на Си помешать реализовать АСП.НЕТ MVC — будет мешать и в Си++.
Но Си это все же язык, который создавался задолго до эпохи веб. А на любом более или менее современном языке, включая динамические скрипты, фреймворк соответствующий возможностям MVC реализуем. Даже наоборот — это на C# затруднительно сделать что-либо вроде РубиОнРаилс.

ВВ>>Я таких средств не знаю. Linq к ним не относится, к примеру.

S>Почему? По-моему, он таки как раз относится. Банально то, что он реализует пейджинг из коробки, уже решает очень многое. Потому что на более традиционных фреймворках программисты тупо на это забивают и делают skip/take в серверном коде. Проблемы с масштабируемостью такого подхода очевидны?

Ну если с таких позиций подходить — то да, эффективный. Я под эффективностью понимаю как раз хорошую масштабируемость — какими бы ни были объемы данных и сложность запросов, linq должен быть реальной альтернативной рукописным запросам. Но это в реальности не так. Да и не может быть так, ибо он слишком высокоуровневый по сравнению с конкретным диалектом SQL.
Но да, если программисты не умеют делать пейджинг и лепять skip/take, то linq может стать даже этаким средством оптимизации.

ВВ>>Кстати, такие средства даже на уровне, скажем, C# кода вносят такой оверхед, что мало не покажется. Представляешь же как linq2sql работает? Не будешь же ты предлагать отказаться от него только потому что он пессимизирует скорость C# кода?

S>Он оптимизирует скорость SQL кода. Это гораздо лучше.

Да не оптимизируют они. Разве что по сравнению с очень плохим SQL. Любой программист, имеющий хотя бы базовые знания конкретного диалекта SQL, напишет запросы, которые по крайней мере не медленнее.

ВВ>>Мне, честно говоря, не особо знакома эта проблема. И совсем не знакомо рекламируемое тобой решение. Если ссылки генерятся с помощью какого-то механизма, то наверное нам уже все равно, на каком языке там код на сервере?

S>Не на всех языках можно сгенерировать такой код. На шарпе есть метаданные обо всём: мы можем передать в генератор типизированный делегат, который гарантированно резолвится в нужный нам метод. А можем и прямо конкретный вызов передать — при помощи лямбды. Мне не очень понятно, как это же сделать на языке, где нет понятий о типах.
ВВ>>На худой конец — парсер JS + валидатор ссылок, которые можно тупо натравить на исходники и получить результат, должны решить эту проблему чуть более чем полностью и без всякой статической типизации.
S>Хм. Каким образом предполагается валидировать ссылки?

Я, видимо, все же не понимаю проблему. Какого рода ссылки предполагается проверять? Банальный способ проверки ссылки — ну сделать HEAD запрос, скажем. Или имеется в виду механизм, который сможет проверить, что GET /products/5 — это валидно, а вот GET /products/7 — уже невалидно, ибо продукта с ид 7 у нас нет?
Re[9]: Веб и динамика? Веб и статика+метапрограммирование.
От: Mamut Швеция http://dmitriid.com
Дата: 23.12.10 09:13
Оценка:
S>Поэтому, на мой взгляд, польза сводится к трансляции изолированных функций типа IsValidEma
ВВ>>И самое забавное, что как раз одна из основных проблема джаваскрипта, которую в идеальном мире хотелось бы решить — это бедность доступных на нем библиотек.
S>Возможно. Лично я в джаваскрипте не особо силён. Мне казалось, что основная проблема там — отсутствие автокомплита и интеллисенса.

Ну, современные IDE уже научены понимать даже фреймворки яваскриптовые и всякие извращения типа расширения объектов методами фреймворков. Хотя еще есть, куда улучшаться, естественно


dmitriid.comGitHubLinkedIn
Re[12]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 23.12.10 12:07
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>>Вот тут линк должен очень-очень сильно помочь.


DG>.net-ный linq очень плохо помогает при условных запросах.

DG>когда конечный запрос собирается из кусочков на основе ввода пользователя (например, по каким полям фильтровать и сортировать)

Это сравнению с чем плохо? С whereString += " AND Filed=@Field"?

DG>зы

DG>еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.

Ну вот еще одна проблема, которую легко решает МП. Впрочем тулкит вроде сам кеширует компилированные запросы.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 23.12.10 12:45
Оценка:
Здравствуйте, Sinclair, Вы писали:

Кэр>>Спорно, но допустим. Как отсюда возьмется аудитория для Немерле? Ты пытаешься сказать, что препроцессорными директивами в плюсах какая-то видимая часть аудитории пытается создать новый язык?

S>Конечно! Наивно этого не видеть.

Наивно это пытаться тут увидеть

S>Посмотри на тот же ATL или MFC — там макрос на макросе и макросом погоняет. Там, где в Delphi наш общий знакомый просто встроил message maps в язык, расширив синтаксис, MFC реализовал "мини-расширение" синтаксиса плюсов при помощи макросов.


ATL и MFC никак не тянут на расширения языка народными массами. Это фреймворки, которые решают единственную задачу — предоставить свой функционал. В которые вложены огромные ресурсы. Я считаю, что эти два условия необходимы в данный момент, чтобы можно было заводить речь о кастомном синтаксисе, чтобы сделать использование библиотек еще получше за счет поддержки синтаксиса.

Просто потому что задача расширения синтаксиса языка общего назначения — это очень и очень большая ответственность. Самой возможности этот синтаксис расширять недостаточно. Должны быть люди, которые это могут делать, должны быть условия проекта, которые это позволяют и идеально должен быть инструментарий, который таки позволит эти усилия тиражировать хоть с какой-то частотой.

S>И так устроены практически все известные мне плюсовые фреймворки. Как только появляется нужда в DSL — хреначатся макросы BEGIN_SOMETHING_MAP(), END_SOMETHNG_MAP(), DEFINE_SOMETHING_HANDLER() — и поехали, вперёд и с пестней.


В плюсах это обусловленно невыносимым размером необходимого boilerplate кода. В C# мы не наблюдаем этой картины, хотя язык решает почти все те же задачи.

S>Да не переживай ты так. Вроде бы никто не заставляет тебя романтикой-то заниматься %)


Хых. Ты и правда думаешь, что я переживаю?
Re[36]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.12.10 14:33
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Но 2010 надо поддержать, как ни крути, пусть простейшую интеграцию, без сенса и прочего.


Ну, так присоединяйся. После нового года я как раз собирался ею заняться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 23.12.10 16:33
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>Наивно это пытаться тут увидеть

Клиника.

Кэр>ATL и MFC никак не тянут на расширения языка народными массами.

И что же в них такого?
Я сам когда на С++ писал полобными трюками пользовался.

Кэр>Это фреймворки, которые решают единственную задачу — предоставить свой функционал.

А что есть фреймворки которые решают другую задачу

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

Речь о кастомном синтаксисе можно заводить всегда когда это заметно сокращает геморой при реализации чего бы то нибыло.

Кэр>Просто потому что задача расширения синтаксиса языка общего назначения — это очень и очень большая ответственность.

Ты не путай хардкод в компилятор который появляется у всех и навсегда.
И макрос который хочу использую не хочу не использую.
В немерле 2 гранулярность подключения синтаксиса будет доведена до предела.
Например можно будет делать так:
{
    using Nemerle.Xml.Literal;//Подключили синтаксис
    //разбираем xml литерал:
    <asd qwe="asdasda">
    </asd>
}//А вот тут синтаксис отключится.
//И следующий код уже не будет компилироваться.
    <asd qwe="asdasda">
    </asd>


Кэр>Самой возможности этот синтаксис расширять недостаточно. Должны быть люди, которые это могут делать,

Расширять синтаксис немерла может любой у кого мозг в голове находится.
В немерле 2 это будет совсем просто.

Кэр>должны быть условия проекта, которые это позволяют и

Условия проекта очень простые: У разработчиков должны быть мозги.
Впрочем разработчики без мозгов всеравно ничего хорошего не сделают.

Кэр>идеально должен быть инструментарий, который таки позволит эти усилия тиражировать хоть с какой-то частотой.

Он есть. То что ты его отрициешь это твои проблемы.

Кэр>В плюсах это обусловленно невыносимым размером необходимого boilerplate кода. В C# мы не наблюдаем этой картины, хотя язык решает почти все те же задачи.

Да правда чтоли?
Ты WPF видел?
Как dependency property объявить знаешь?

Кэр>Хых. Ты и правда думаешь, что я переживаю?

А чтож ты тогда в каждую тему лезешь?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: Веб и динамика? Веб и статика+метапрограммирование.
От: WolfHound  
Дата: 23.12.10 16:52
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>.net-ный linq очень плохо помогает при условных запросах.

DG>когда конечный запрос собирается из кусочков на основе ввода пользователя (например, по каким полям фильтровать и сортировать)
И в чем проблема?

DG>зы

DG>еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.
Ты про какую из реализаций?
http://www.ormbattle.net/index.php/scorecard.html
Там даже у самый тормоз на порядок быстрее чем ты говоришь.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.12.10 17:16
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>>Вот тут линк должен очень-очень сильно помочь.


DG>.net-ный linq очень плохо помогает при условных запросах.

DG>когда конечный запрос собирается из кусочков на основе ввода пользователя (например, по каким полям фильтровать и сортировать)

Как раз для таких запросов линк подходит очень хорошо. Мы можем делать примерно так:
var query = from x in xs where x.Prop1 == 123 select x;
var query = condition ? query.Where(x => x.Prop2 == "abc")
                      : query.Where(x => x.Prop3 == "xyz");

При этом генерируется специализированный запрос который работает весьма шустро.

DG>зы

DG>еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.

Это все зависит от провайдера. Возьми BLToolkit и у тебя все будет летать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.12.10 17:40
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>по сравнению с тем, что идея linq может предложить.


DG>через linq — даже изменение порядка сортировки делается очень геморройно, т.к. для сортировки используется аж 4 метода


Во как? А мужики то и не знали (с). Вот тебе примерчик:

def data = [(2, "xyz"), (1, "abc"), (3, "dfg"), (0, "qwerty")];
def query = data.Where((_, y) => y != "qwerty");
def random = Random(7);

repeat (5)
{
  def query = if (random.Next(2) == 1)  query.OrderBy((x, _) => x) 
              else                      query.OrderByDescending((x, _) => x);
  WriteLine(query.NToList());
}

Выводит:
[(3, dfg), (2, xyz), (1, abc)]
[(1, abc), (2, xyz), (3, dfg)]
[(1, abc), (2, xyz), (3, dfg)]
[(3, dfg), (2, xyz), (1, abc)]
[(3, dfg), (2, xyz), (1, abc)]


Еще раз повторяю линк как раз позволяет очень красиво комбинировать запросы (собирать их из частей). Причем делается это все статически-типизированно и очень удобно.

DG>может, что-то даже делает, но 50мс никуда не деваются. (четкие 50 мс связаны скорее всего с какими-то потерями на переключение потоков)


Какие потоки? Что ты выдумываешь? Лучше пруф-линк дай к своим словам.

Z>> Ну вот еще одна проблема, которую легко решает МП.


DG>так здесь как раз удобны inline-"макросы", которые как раз возвращают несколько выражений


DG>например, можно сделать так:

DG>
DG> world.Managers.MyOrderBy({Name:asc, Money: desc})
DG>

DG>а склейку кортежа сделать доп функциями
DG>при этому MyOrderBy — возвращает последовательность из OrderBy.ThenBy

Это прекрасно делает синтаксическое расширение. Зачем для этого еще макросы городить? Оно конечно в немерле тоже через макрос сделано. Но аналог в шарпе вшит в язык и делает тоже самое.

Тут вопрос в другом. При наличии хорошей макрос-системы не пришлось бы внедрять в язык сам синтаксис.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.12.10 18:02
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>через linq — даже изменение порядка сортировки делается очень геморройно, т.к. для сортировки используется аж 4 метода

Сложно написать компарер?

DG>>>зы

DG>еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.
Z>>Ну вот еще одна проблема, которую легко решает МП. Впрочем тулкит вроде сам кеширует компилированные запросы.
DG>может, что-то даже делает, но 50мс никуда не деваются. (четкие 50 мс связаны скорее всего с какими-то потерями на переключение потоков)
Каких потоков? провайдеры в одном потоке работают.
На каком-то древнем бенчмарке (не найду ссылку) 50мс удалось получить на 1000 запросов. Те около 50мкс на запрос, это при нетривиальном запросе.
Угадай какой процент от общего времени работы составляет время компиляции Linq в SQL.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: yoriсk.kiev.ua  
Дата: 23.12.10 19:36
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Потом ДАЛ — это "ненастоящая" статическая типизация, в том-то и проблема. Сколько раз уже нарывались на то, что кто-нибудь залезет в модель того же Linq2Sql, чего-нибудь там добавит, поправит — и все, рассинхрон. *Без тестов* тоже фиг найдешь ошибку.


А почему вы не генерите dbml при каждом запуске билда на сервере? Будет просто complile error с конкретным указанием что не совпадает без всяких там тестов(точнее компиляция и будет тестом).
Re[15]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 23.12.10 21:29
Оценка:
DG>>через linq — даже изменение порядка сортировки делается очень геморройно, т.к. для сортировки используется аж 4 метода
G>Сложно написать компарер?

не сложно. но мы до сих пор говорим про удобную и эффективную среду разработки?

DG>>>>зы

DG>>еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.
Z>>>Ну вот еще одна проблема, которую легко решает МП. Впрочем тулкит вроде сам кеширует компилированные запросы.
DG>>может, что-то даже делает, но 50мс никуда не деваются. (четкие 50 мс связаны скорее всего с какими-то потерями на переключение потоков)
G>Каких потоков? провайдеры в одном потоке работают.
G>На каком-то древнем бенчмарке (не найду ссылку) 50мс удалось получить на 1000 запросов. Те около 50мкс на запрос, это при нетривиальном запросе.
G>Угадай какой процент от общего времени работы составляет время компиляции Linq в SQL.

проблема в одном из corner case в linq. а не во всем linq.

вроде бы, что после пересоздания datacontext-а некомпилированный запрос при первом выполнении отжирает 50 мс.

соответственно, если надо сделать 10 разных запросов, то это будет 500мс
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 23.12.10 21:32
Оценка:
G>ЗЫ. Вообще удивляюсь как люди не любят трогать пространство имен System.Linq.Expression можно очень простыми средствами динамическую генерацию кода делать.

сделали так конечно.

меня просто удивляет, что на дворе 21-век, а такая простая задача решается только через громоздкий reflection и громоздкие expression-ы, и не решается средствами языка
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.12.10 22:09
Оценка:
Здравствуйте, DarkGray, Вы писали:


DG>>>через linq — даже изменение порядка сортировки делается очень геморройно, т.к. для сортировки используется аж 4 метода

G>>Сложно написать компарер?

DG>не сложно. но мы до сих пор говорим про удобную и эффективную среду разработки?

Да, именно о не и говорим. Мы не говорим что кто-то всю работу сделает за тебя.

DG>>>>>зы

DG>>>еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.
Z>>>>Ну вот еще одна проблема, которую легко решает МП. Впрочем тулкит вроде сам кеширует компилированные запросы.
DG>>>может, что-то даже делает, но 50мс никуда не деваются. (четкие 50 мс связаны скорее всего с какими-то потерями на переключение потоков)
G>>Каких потоков? провайдеры в одном потоке работают.
G>>На каком-то древнем бенчмарке (не найду ссылку) 50мс удалось получить на 1000 запросов. Те около 50мкс на запрос, это при нетривиальном запросе.
G>>Угадай какой процент от общего времени работы составляет время компиляции Linq в SQL.

DG>проблема в одном из corner case в linq. а не во всем linq.

DG>вроде бы, что после пересоздания datacontext-а некомпилированный запрос при первом выполнении отжирает 50 мс.
Так это не в Linq а в реализации провайдера. Бери BLToolkit, он всех по производительности в какашки рвет.

DG>соответственно, если надо сделать 10 разных запросов, то это будет 500мс

Не понял, нельзя 10 разных запросов через 1 DataContext?

ЗЫ Видимо ты путаешь с первой загрузкой метаданных. Она выполняется один раз на время жизни процесса.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.12.10 22:12
Оценка:
Здравствуйте, DarkGray, Вы писали:


G>>ЗЫ. Вообще удивляюсь как люди не любят трогать пространство имен System.Linq.Expression можно очень простыми средствами динамическую генерацию кода делать.


DG>сделали так конечно.


DG>меня просто удивляет, что на дворе 21-век, а такая простая задача решается только через громоздкий reflection и громоздкие expression-ы, и не решается средствами языка


А какими средствами языка она должна решаться? По сути ты получаешь строку извне. Дальше ты сам её должен парсить, язык тут не при чем.
Многие фреймворки обеспечивают автоматически парсинг входящих строк. Но так как формат запроса в json ты придумал сам вот и занимайся парсингом сам.
Re[17]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 23.12.10 22:27
Оценка:
G>Мы не говорим что кто-то всю работу сделает за тебя.

почему нет?

DG>>>>>>зы

DG>>>>еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.
Z>>>>>Ну вот еще одна проблема, которую легко решает МП. Впрочем тулкит вроде сам кеширует компилированные запросы.
DG>>>>может, что-то даже делает, но 50мс никуда не деваются. (четкие 50 мс связаны скорее всего с какими-то потерями на переключение потоков)
G>>>Каких потоков? провайдеры в одном потоке работают.
G>>>На каком-то древнем бенчмарке (не найду ссылку) 50мс удалось получить на 1000 запросов. Те около 50мкс на запрос, это при нетривиальном запросе.
G>>>Угадай какой процент от общего времени работы составляет время компиляции Linq в SQL.

DG>>проблема в одном из corner case в linq. а не во всем linq.

DG>>вроде бы, что после пересоздания datacontext-а некомпилированный запрос при первом выполнении отжирает 50 мс.
G>Так это не в Linq а в реализации провайдера. Бери BLToolkit, он всех по производительности в какашки рвет.

DG>>соответственно, если надо сделать 10 разных запросов, то это будет 500мс

G>Не понял, нельзя 10 разных запросов через 1 DataContext?

если запроса определенного вида при первом запуске отжирает 50 мс.
то 10 запросов десяти разных видов отожрут 500мс,
при этом 10 запросов одного вида — отожрут только 50мс
и 1000 запросов одного вида — тоже отожрет только 50 мс (если база локальная, а запрос — маленький).

G>ЗЫ Видимо ты путаешь с первой загрузкой метаданных. Она выполняется один раз на время жизни процесса.


не совсем верно, в linq2sql создается она на каждое создание datacontext-а, но это можно побороть если закэшить MappingSource и передавать его в конструктор datacontext-а

http://blogs.msdn.com/b/gisenberg/archive/2008/05/20/linq-to-sql-optimizing-datacontext-construction-with-the-factory-pattern.aspx

However, constructing a DataContext object is a relatively expensive operation. 99.9% of this performance hit is spent building out the MappingSource object that gets used by your DataContext. Consider that, in a stock scenario, your application goes out and builds out the MappingSource object every single time that the DataContext object is created. Typically, this is something that will happen very frequently.

Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.12.10 22:50
Оценка:
Здравствуйте, DarkGray, Вы писали:


DG>>>>>>>зы

DG>>>>>еще у нескомпилированного linq на каждый запрос куда-то уходит ровно 50мс, соответственно больше 20 запросов в секунду не сделать.
Z>>>>>>Ну вот еще одна проблема, которую легко решает МП. Впрочем тулкит вроде сам кеширует компилированные запросы.
DG>>>>>может, что-то даже делает, но 50мс никуда не деваются. (четкие 50 мс связаны скорее всего с какими-то потерями на переключение потоков)
G>>>>Каких потоков? провайдеры в одном потоке работают.
G>>>>На каком-то древнем бенчмарке (не найду ссылку) 50мс удалось получить на 1000 запросов. Те около 50мкс на запрос, это при нетривиальном запросе.
G>>>>Угадай какой процент от общего времени работы составляет время компиляции Linq в SQL.

DG>>>проблема в одном из corner case в linq. а не во всем linq.

DG>>>вроде бы, что после пересоздания datacontext-а некомпилированный запрос при первом выполнении отжирает 50 мс.
G>>Так это не в Linq а в реализации провайдера. Бери BLToolkit, он всех по производительности в какашки рвет.

DG>>>соответственно, если надо сделать 10 разных запросов, то это будет 500мс

G>>Не понял, нельзя 10 разных запросов через 1 DataContext?

DG>если запроса определенного вида при первом запуске отжирает 50 мс.

DG>то 10 запросов десяти разных видов отожрут 500мс
DG>при этом 10 запросов одного вида — отожрут только 50мс
DG>и 1000 запросов одного вида — тоже отожрет только 50 мс (если база локальная, а запрос — маленький).
Чушь вообще-то. Как провайдер виды запросов то отличать будет? Он каждый компилирует.

G>>ЗЫ Видимо ты путаешь с первой загрузкой метаданных. Она выполняется один раз на время жизни процесса.


DG>не совсем верно, в linq2sql создается она на каждое создание datacontext-а, но это можно побороть если закэшить MappingSource и передавать его в конструктор datacontext-а

Все равно не пойму где ты 50мс вял, я такого времени на создание DataContext не видел.

DG>http://blogs.msdn.com/b/gisenberg/archive/2008/05/20/linq-to-sql-optimizing-datacontext-construction-with-the-factory-pattern.aspx

DG>

DG>However, constructing a DataContext object is a relatively expensive operation. 99.9% of this performance hit is spent building out the MappingSource object that gets used by your DataContext. Consider that, in a stock scenario, your application goes out and builds out the MappingSource object every single time that the DataContext object is created. Typically, this is something that will happen very frequently.

и? Где ты тут 50мс увидел?
Да и в чет проблема? Пользуйся другими провайдерами.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 23.12.10 23:32
Оценка:
G>А какими средствами языка она должна решаться? По сути ты получаешь строку извне. Дальше ты сам её должен парсить, язык тут не при чем.

строка уже распарсена в последовательность кортежей.

а преобразовать последовательность кортежей в linq-последовательность — это уж точно языковая задача,
и сводится она к понятным примитивным операциям:
получить "ссылку" на поле по имени,
получить операцию по имени,
преобразовать строку в значение типа данного поля,
поле + операцию + значение склеить в выражение,
выражения склеить в where,
where подклеить ко всему linq-у выражению

зы
и речь идет о том, что это должно делаться за минимум действий и наглядный код, а не о том — можно это или нельзя сделать.
то, что на C#(а также на любом другом ЯП) можно решить любую задачу — это не обсуждается, это напрямую следует из полноты по тьюрингу.
Re[16]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 07:44
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>а теперь напиши полный вариант для следующей элементарной задачи:


DG>от пользователя приходит список кортежей для фильтрации и сортировки.

DG>вид кортежа фильтрации:
DG>
DG>string field;
DG>string op;
DG>string value;
DG>


DG>вид кортежа сортировки:

DG>
DG>string field;
DG>bool isAscElseDesc;
DG>


DG>пример запроса пользователя:

DG>
DG>filters: 
DG>{field:'name', op:'starts', value='василий'}, 
DG>{field:'birthday', op:'>=', value='10.01.1974'}, 
DG>{field:'company', op:'==', value='rsdn'},

DG>orders:
DG>{field:'name', isAscElseDesc:true},
DG>{field:'birthday', isAscElseDesc:false},
DG>


А за каким хреном надо было преобразовывать действия в текстовую форум? Просто формируй свои действия сразу в виде запросов и делать ничего не придется.

В худшем случае, если оставить текстовое представление, придется завести хэш-таблицу в которой смапить кортеж field * op (и field * isAscElseDesc) на соответствующую лямбду. Вот рабочий код для добавления сортировки (фильтрация делается аналогичным образом):
using Nemerle.Collections;

using System;
using System.Collections.Generic;
using System.Console;
using System.Linq;

[Record]
class Person
{
  public Name     : string;
  public Birthday : DateTime;
  public Company  : string;
  
  public override ToString() : string
  {
      $"Person: $Name, $Birthday, $Company"
  }
}

module Program
{
  data : list[Person] = 
    [
      Person("Вася", DateTime(1976, 5, 15), "RSDN"),
      Person("Петя", DateTime(1967, 3, 1), "Мега"),
      Person("Петя", DateTime(1981, 1, 5), "Мега"),
      Person("Петя", DateTime(1953, 1, 12), "Мега"),
      Person("Аня", DateTime(1981, 12, 21), "Мега"),
      Person("Дуня", DateTime(1982, 12, 21), "Мега"),
    ];

  Main() : void
  {
    def myQuery = data.Where(p => p.Birthday < DateTime(1982, 1, 1)); // эмулируем основной запрос.
    
    // orderingInfos содержит кортежи описывающие сортировки. По уму вместо 
    // текстового представления здесь нужно было сразу использовать список 
    // функций-преобразователей запросов.
    def orderingInfos = [("name", true), ("birthday", false)];
    
    def orderedMyQuery = OrderingInfosToQuery(myQuery, orderingInfos);
    //orderedQuery // теперь мы имеем запрос к которому добавлены нужные методы сортировки
    WriteLine($<#..$(orderedMyQuery; "\n")#>); // выводим результат на консоль разделяя строки переносом строки
   _ = ReadLine();
  }

    // Функция пребразования списка кортежей описывающих сортировк в запрос.
    OrderingInfosToQuery(query : IEnumerable[Person], orderingInfos : list[string * bool]) : IEnumerable[Person]
    {
      def map = Hashtable();
      // map отображает один кортеж описывающий сортировку на функцию 
      // добавляющую эту сортировку к запросу. Функция принимает IEnumerable,
      // но ничто не мешает использовать и IQueryble.
      map["name",     true]  = (query : IEnumerable[Person]) => query.OrderBy(_.Name);
      map["birthday", false] = (query : IEnumerable[Person]) => query.OrderByDescending(_.Birthday);
      //...
      def addOrdering(orderingInfo, query)
      {
        def addOrder = map[orderingInfo]; // получаем функцию добавляющую к запросу сортировку
        def newQuery = addOrder(query); // трансформируем запрос
        newQuery
      }
      def orderedQuery = orderingInfos.FoldLeft(query, addOrdering);
      orderedQuery
    }
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.12.10 08:30
Оценка:
Здравствуйте, VladD2, Вы писали:

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


G>>Напиши один раз десериализатор этого json в ET и пользуй.


G>>За 1000 баксов я тебе такой напишу, нужен?


VD>Кто же тебе даст 1000 за работу которую тот же Ziaw уже проделал
Автор: Ziaw
Дата: 10.12.10
?

Уже проделал говоришь?

По просьбе трудящихся выложил наброски будущей либы по работе с джейсоном.


Кстати в .NET FW есть DataContractJsonSerializer, который делает угадай что.

VD>Впрочем, спасибо! Это прикольная оценка того насколько ты дорого обходишься своей компании.

Я уже давно на себя работаю.

VD>Вот смотри. Написать парсер JSON-а у Ziaw заняло около 3 часов (это без опыта использования парсера).

VD>Чтобы написать преобразователь из кортежей в ЛИНК у меня ушло 20 минут.
VD>Умножим это дело на 2 чтобы получить время с разными заморочками которые обычно встречаются на практике.
VD>Итого мы получаем 8 рабочих часов. Твоя оценка этой работы 1000 долларов. Стало быть, если бы ты работал с нашей производительностью турда, то получал бы 20 000 долларов в месяц.
Ох как не хочется про бизнес тебе рассказывать.

VD>Уверен, что тебе столько не платят.

И больше платят


VD>Удивительно другое... Вы не знаете толком даже те средства которые используете на практике (C#), но умудряетесь с пеной у рта очернять те технологии которые вы изучили намного более посредственно. Это не только удивляет, но и удручает .

Датыче? С чего ты взял что я толком чего-то не знаю?
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 08:56
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Уже проделал говоришь?


Да, проделал.

G>

G>По просьбе трудящихся выложил наброски будущей либы по работе с джейсоном.


Это он от скромности написал. Библиотека вполне рабочая.

G>Кстати в .NET FW есть DataContractJsonSerializer, который делает угадай что.


Это не кого не трогает. Ты оценил работу в 1000 долларов.

VD>>Впрочем, спасибо! Это прикольная оценка того насколько ты дорого обходишься своей компании.

G>Я уже давно на себя работаю.

Это без разницы. Страдает не работодатель, так клиенты.

G>Ох как не хочется про бизнес тебе рассказывать.


Да, да. Тут ты совершенно прав. Не учи отца е.....я.

VD>>Уверен, что тебе столько не платят.

G>И больше платят

Да ты успешный бизнесмен! Что ты делаешь в форуме для программистов?

VD>>Удивительно другое... Вы не знаете толком даже те средства которые используете на практике (C#), но умудряетесь с пеной у рта очернять те технологии которые вы изучили намного более посредственно. Это не только удивляет, но и удручает .

G>Датыче? С чего ты взял что я толком чего-то не знаю?

Дык ты сам всем только что это изложил оценив работу цена которой баксов 100 в 1000.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.12.10 09:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>Впрочем, спасибо! Это прикольная оценка того насколько ты дорого обходишься своей компании.

G>>Я уже давно на себя работаю.
VD>Это без разницы. Страдает не работодатель, так клиенты.
Кто тебе сказал что страдают клиенты?

VD>>>Удивительно другое... Вы не знаете толком даже те средства которые используете на практике (C#), но умудряетесь с пеной у рта очернять те технологии которые вы изучили намного более посредственно. Это не только удивляет, но и удручает .

G>>Датыче? С чего ты взял что я толком чего-то не знаю?
VD>Дык ты сам всем только что это изложил оценив работу цена которой баксов 100 в 1000.
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 24.12.10 09:12
Оценка:
Здравствуйте, DarkGray, Вы писали:

Z>>А от тебя я все еще жду реальные примеры применения МП. Ведь у тебя множество исследовательских проектов применяющих МП. Не обязательно код, у тебя же наверняка NDA Просто проблема, способ решения.


DG>

DG>проблема:
DG>в стандартной трехзвенке — для описания бизнес-логики приходится использовать три с половиной языка: c#, sql, js и xpath
DG>решение:
DG>введение единого языка для описания бизнес-логики — который транслируется во все эти три с половиной языка


DG>

DG>проблема:
DG>последовательная-синхронная запись — подвешивает программу на операциях коммуникации с внешними источниками и длительных вычислениях.
DG>запись в виде cps — сложна в понимании, изменении и поддержке.

DG>решение:
DG>код записывается как последовательный-синхронный, но автоматически преобразуется в cps


DG>

DG>проблема:
DG>удобная объектно-ориентированная запись бизнес-логики приводит к большому кол-ву запросов к базе

DG>решение:
DG>поддержка двухфазной модели выполнения бизнес-логики:
DG>на первой фазе пробегом по дереву БЛ определяется какие данные она требует и склеивание в единый запрос, данные запрашиваются и складываются в кэш
DG>на второй фазе — БЛ исполняется поверх кэша


Гениально! Имея рабочий прототип решения этих задач можно смело выбивать миллионные гранты из MS Research. Они бедные над удобным синтаксисом распараллеливания бьются-бьются. Можно оказывается забить и писать как синхронный, который потом сам заработает асинхронно.

Признаю, я не дорос до твоего уровня, сливаюсь.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 09:31
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Кто тебе сказал что страдают клиенты?


Логика. Когда исполнитель оценивает работу ~ в 10 раз дороже ее реальной стоимости, клиент от этого не может не страдать.

VD>>Дык ты сам всем только что это изложил оценив работу цена которой баксов 100 в 1000.

G>

Да — это очень смешно. Может ты и хороший бизнесмен (у меня нет данных, чтобы утверждать обратное), но программисты ты средний (это я могу утверждать точно). Зато горлопанишь так как-будто ты матерый профи.

Задача которую ты оценил в 1000 долларов решается на коленке за пол часа
Автор: VladD2
Дата: 24.12.10
. Никаких страшных конвертеров для этого писать не надо. Ты просто выбрал неверную реализацию. Я за время пока с тобой разговраиваю, еще успел баг в другом приложении пофиксить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 24.12.10 09:39
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Уже проделал говоришь?


G>

G>По просьбе трудящихся выложил наброски будущей либы по работе с джейсоном.


G>Кстати в .NET FW есть DataContractJsonSerializer, который делает угадай что.


Делает она не совсем то. Основное предназначение либы — работа с джейсоном, структура которого в компайлтайме либо не известна либо известна только частично.

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

Сериализация у меня на последнем месте в приоритетах, просто потому, что не нужна пока.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 10:16
Оценка:
Здравствуйте, DarkGray, Вы писали:


VD>>В худшем случае, если оставить текстовое представление, придется завести хэш-таблицу в которой смапить кортеж field * op (и field * isAscElseDesc) на соответствующую лямбду.

VD>> Вот рабочий код для добавления сортировки (фильтрация делается аналогичным образом):

DG>вот только он неправильный, и сортировка будет всегда по последнему кортежу: потому что orderby и thenby это не одно и тоже.


Да, согласен. Это я упустил из виду.
Но учесть это не так сложно. Нужно создать еще один map в который заполнить преобразованием в ThenBy. Далее первый элемент кортежа обрабатывать по первому map-у, а остальные по второму.

DG>сложные вещи ты обошел:

DG>преобразованием значения из строки в тип поля — не привел.

Что тут сложного? Типы полей известны? Известны! Так что все сводится к такому же отображению на функции string -> TypeOfField.

DG>код с восстановлением операции по строке — тоже не привел.


В нем ничего нового не будет. Такое же отображение.
Я же тебе не нанимался за тебя программы писать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.12.10 10:30
Оценка:
Здравствуйте, VladD2, Вы писали:

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


G>>Кто тебе сказал что страдают клиенты?

VD>Логика. Когда исполнитель оценивает работу ~ в 10 раз дороже ее реальной стоимости, клиент от этого не может не страдать.
Тебе не понять. Продается не "работа", а "решение проблем". Второе стоит гораздо дороже. Но тебе видимо не понять.
Ты ведь оцениваешь работу опираясь на то что ты уже умеешь и знаешь, а для человека, который не умеет и не знает подобная работа будет иметь гораздо большую стоимость.
Короче тебе не понять и мы сильно уходим от темы.

VD>>>Дык ты сам всем только что это изложил оценив работу цена которой баксов 100 в 1000.

G>>

VD>Да — это очень смешно. Может ты и хороший бизнесмен (у меня нет данных, чтобы утверждать обратное), но программисты ты средний (это я могу утверждать точно). Зато горлопанишь так как-будто ты матерый профи.

Может сразу достанем линейки?

VD>Задача которую ты оценил в 1000 долларов решается на коленке за пол часа
Автор: VladD2
Дата: 24.12.10
. Никаких страшных конвертеров для этого писать не надо. Ты просто выбрал неверную реализацию. Я за время пока с тобой разговраиваю, еще успел баг в другом приложении пофиксить.

Ну ладно, достанем линейки. Я успел два проекта закрыть за время этого обсуждения и че?
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.12.10 10:31
Оценка:
Здравствуйте, Ziaw, Вы писали:

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


G>>Уже проделал говоришь?


G>>

G>>По просьбе трудящихся выложил наброски будущей либы по работе с джейсоном.


G>>Кстати в .NET FW есть DataContractJsonSerializer, который делает угадай что.


Z>Делает она не совсем то. Основное предназначение либы — работа с джейсоном, структура которого в компайлтайме либо не известна либо известна только частично.


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

Парсер из чего во что?
Для парсинга на выходе должен быть конкретный тип, какой у тебя используется?
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 24.12.10 10:35
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Парсер из чего во что?

G>Для парсинга на выходе должен быть конкретный тип, какой у тебя используется?

Аст джейсона. Который в свою очередь можно конструировать через макрос json.
Re[30]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 16:51
Оценка:
Здравствуйте, DarkGray, Вы писали:

У меня вопрос к Синклеру за что ты на этот набор букв оценку поставил?

Или тебя тоже завораживает набор терминов за уши притянутый к МП?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 16:59
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Ты ведь оцениваешь работу опираясь на то что ты уже умеешь и знаешь, а для человека, который не умеет и не знает подобная работа будет иметь гораздо большую стоимость.


Человек которому ты тут пытался продать решение не только у тебя не купит твою работу, но будет с пеной у рта отрицать саму возможность ее решения описанным тобой образом.

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

Заметь, ты против макросов, но сам предлагаешь решение основанное на мета-программировнии, что по сути те же макросы только в профиль. И это при том, что есть более простое решение без макросов.

G>Короче тебе не понять и мы сильно уходим от темы.


Со вторым согласен, первое меня не колышет.

G>Может сразу достанем линейки?


Лучше предмет измерения .

VD>>Задача которую ты оценил в 1000 долларов решается на коленке за пол часа
Автор: VladD2
Дата: 24.12.10
. Никаких страшных конвертеров для этого писать не надо. Ты просто выбрал неверную реализацию. Я за время пока с тобой разговраиваю, еще успел баг в другом приложении пофиксить.

G>Ну ладно, достанем линейки. Я успел два проекта закрыть за время этого обсуждения и че?

Чё, разоряешься?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.12.10 17:31
Оценка:
Здравствуйте, VladD2, Вы писали:

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


G>>Ты ведь оцениваешь работу опираясь на то что ты уже умеешь и знаешь, а для человека, который не умеет и не знает подобная работа будет иметь гораздо большую стоимость.


VD>Человек которому ты тут пытался продать решение не только у тебя не купит твою работу, но будет с пеной у рта отрицать саму возможность ее решения описанным тобой образом.

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

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

Кстати я для решения задачи не предлагал заниматься кодогенерацией вообще. Я предлагал использовать System.Linq.Expression и говорил про еще одно полезное применение.

VD>Заметь, ты против макросов, но сам предлагаешь решение основанное на мета-программировнии, что по сути те же макросы только в профиль. И это при том, что есть более простое решение без макросов.

А я тебе говорил что я против макросов? Я все время говорил что
а)"это из пушки по воробъям" (с) ты сам признал это выше
б)требуется изучение нового фреймворка с AST компилятора, заместо уже известного мне System.Linq.Expression, а у меня тупо нет времени

VD>>>Задача которую ты оценил в 1000 долларов решается на коленке за пол часа
Автор: VladD2
Дата: 24.12.10
. Никаких страшных конвертеров для этого писать не надо. Ты просто выбрал неверную реализацию. Я за время пока с тобой разговраиваю, еще успел баг в другом приложении пофиксить.

G>>Ну ладно, достанем линейки. Я успел два проекта закрыть за время этого обсуждения и че?
VD>Чё, разоряешься?
Нет, НГ на носу, все хотят закрыть хвосты и я некоторый "бонус" себе получил.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.12.10 18:57
Оценка:
VD>В нем ничего нового не будет. Такое же отображение.
VD>Я же тебе не нанимался за тебя программы писать?

позиционировалось, что немерле МП-задачи позволит решать за пару копеек.

преобразование фильтрующего-выражение из текстовой формы в код, это копеечная задача.
и это именно МП: есть программа в текстовом виде, есть программа в виде C# — одну программу надо преобразовать в другую.

при чем проблема, что основные временные затраты уходят на борьбу с кодом:
то, что order-by выражется четырьмя методами.
то что для конвертации из строки в объект — для каждого типа необходимо вызвать разные методы,
одна и та же операция, но для разных типов — это тоже разные методы
и т.д.
Re[18]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 19:19
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>вот только он неправильный, и сортировка будет всегда по последнему кортежу: потому что orderby и thenby это не одно и тоже.


DG>сложные вещи ты обошел:

DG>преобразованием значения из строки в тип поля — не привел.

DG>код с восстановлением операции по строке — тоже не привел.


Убил еще час времени чтобы создать полный рабочий вариант воспроизводящий твое т.з.
Интересно как ты теперь будешь выкручиваться? Просто сделаешь вид, что не заметил ответ или найдешь фатальный недостаток?
using Nemerle.Collections;

using System;
using System.Collections.Generic;
using System.Console; // В Nemerle можно открывать не только пространства имен, но и классы!
using System.Linq;

using PersonQuery; // В Nemerle можно открывать не только пространства имен, но и классы!

[Record] // Этот макрос генерирует коструктор инициализирующий все поля класса
class Person
{
  public Name     : string;
  public Birthday : DateTime;
  public Company  : string;
  
  public override ToString() : string
  { // $-строка - это песня! :)
    $"Person: $Name, $(string(' ', 4 - Name.Length)) $(Birthday.ToShortDateString()), $Company"
  }
}

module Program
{
  data : list[Person] = 
    [
      Person("Вася", DateTime(1976, 5, 15),  "RSDN"),
      Person("Петя", DateTime(1967, 3, 1),   "Мега"),
      Person("Петя", DateTime(1981, 1, 5),   "Мега"),
      Person("Петя", DateTime(1953, 1, 12),  "Мега"),
      Person("Аня",  DateTime(1981, 12, 21), "Мега"),
      Person("Дуня", DateTime(1982, 12, 21), "Мега"),
    ];

  Main() : void
  {
    def print(query, msg)
    {
      WriteLine($"$msg:");
      WriteLine($<#..$(query; "\n")#>);
      WriteLine();
    }
    
    def myQuery = data.Where(p => p.Birthday < DateTime(1982, 1, 1)); // эмулируем основной запрос.
    print(myQuery, "Исходный запрос");
    
    def orderingInfos = [("name", true), ("birthday", false)];
    def filterInfos = [("name", "starts", "Пе"), ("birthday", ">=", "10.01.1955")];
    
    def filteredQuery = FilterInfoToQuery(myQuery, filterInfos);
    print(filteredQuery, "После добавления фильтра");

    def orderedMyQuery = OrderingInfosToQuery(filteredQuery, orderingInfos);
    print(orderedMyQuery, "После добавления сортировки");

    def orderedMyQuery2 = OrderingInfosToQuery(myQuery, orderingInfos);
    print(orderedMyQuery2, "После добавления сортировки к исходному запросу (демонстрирвет, что сортировка производится по двум полям)");
   _ = ReadLine();
  }
}

/// Модуль предоставляющий функции конвертации опписаний заданных в виде
/// в соответствующие кобмбинатроные функции.
module PersonQuery
{
  // Таблицы отображения.
  _personFieldOperMap : Hashtable[string * string, Person * string -> bool];
  _orderFirstMap  : Hashtable[string * bool, IEnumerable[Person]        -> IOrderedEnumerable[Person]];
  _orderFollowMap : Hashtable[string * bool, IOrderedEnumerable[Person] -> IOrderedEnumerable[Person]];
  
  this()
  {
    // Заполняем таблицы отображения...
    // Вот эту хрень любо-дорого заполнить на макросах!
    
    _personFieldOperMap = Hashtable();
    _personFieldOperMap["birthday", ">="]     = (p, value) => p.Birthday >= DateTime.Parse(value);
    _personFieldOperMap["birthday", "=="]     = (p, value) => p.Birthday == DateTime.Parse(value);
    _personFieldOperMap["birthday", "<="]     = (p, value) => p.Birthday <= DateTime.Parse(value);
    _personFieldOperMap["company",  "=="]     = (p, value) => p.Company == value;
    _personFieldOperMap["company",  "starts"] = (p, value) => p.Company.StartsWith(value);
    _personFieldOperMap["name",     "=="]     = (p, value) => p.Name == value;
    _personFieldOperMap["name",     "starts"] = (p, value) => p.Name.StartsWith(value);

    _orderFirstMap = Hashtable();
    _orderFirstMap["name",     true]  = query => query.OrderBy(_.Name); // "_.Name" - это синтаксис частичного применения. Это аналогично коду "p => p.Name"
    _orderFirstMap["name",     false] = query => query.OrderByDescending(_.Name);
    _orderFirstMap["birthday", true]  = query => query.OrderBy(_.Birthday);
    _orderFirstMap["birthday", false] = query => query.OrderByDescending(_.Birthday);
    _orderFirstMap["company",  true]  = query => query.OrderBy(_.Company);
    _orderFirstMap["company",  false] = query => query.OrderByDescending(_.Company);

    _orderFollowMap = Hashtable();
    _orderFollowMap["name",     true]  = query => query.ThenBy(_.Name);
    _orderFollowMap["name",     false] = query => query.ThenByDescending(_.Name);
    _orderFollowMap["birthday", true]  = query => query.ThenBy(_.Birthday);
    _orderFollowMap["birthday", false] = query => query.ThenByDescending(_.Birthday);
    _orderFollowMap["company",  true]  = query => query.ThenBy(_.Company);
    _orderFollowMap["company",  false] = query => query.ThenByDescending(_.Company);
  }

  /// Формирует LINQ-запрос фильтрующий данные в исходном запросе.
  /// query - исходный запрос.
  /// filteringInfos - список котежей описывающих фильрацию. 
  ///   Первое поле - имя поля в Person. 
  ///   Второе поле - бинарный оператор используемый для создания фильтрующего предиката.
  ///   Третье поле - значение используемое для сравнения (в предикате).
  public FilterInfoToQuery(query : IEnumerable[Person], filteringInfos : list[string * string * string]) : IEnumerable[Person]
  {
    def addFilter((field, op, value), query)
    {
      def predicate = _personFieldOperMap[field, op];
      query.Where(predicate(_, value))
    }

    filteringInfos.FoldLeft(query, addFilter) // производим свертку filteringInfos и формирование запроса
  }

  /// Формирует LINQ-запрос сортирующий данные в исходном запросе.
  /// query - исходный запрос.
  /// orderingInfos - список котежей описывающих сортировку. 
  ///   Первое поле - имя поля в Person. 
  ///   Второе поле - сортировка по возрастанию (true) или убыванию (false).
  public OrderingInfosToQuery(query : IEnumerable[Person], orderingInfos : list[string * bool]) : IEnumerable[Person]
  {
    def addOrdering(orderingInfo, query)
    {
      def addOrder = _orderFollowMap[orderingInfo]; // получаем функцию добавляющую к запросу сортировку
      def newQuery = addOrder(query); // трансформируем запрос
      newQuery
      // Разбиение на стадии и использование промежуточных переменных сделаны
      // чтобы более наглядно продемонстрировать, что делает этот метод.
      // Код этого метода вполне можно было бы записать в одну строку:
      // _orderFollowMap[orderingInfo](query)
    }
    
    def orderedQuery = 
      match (orderingInfos)
      {
        | [] => query // в случае пустого списка фильтрации возвращ исходный запрос.
        | [first] => _orderFirstMap[first](query) // если в списке только один элемент, добавляем тольтко OrderBy
        | first :: tail => tail.FoldLeft(_orderFirstMap[first](query), addOrdering) // иначе добавляем OrderBy для первого элемента и ThenBy для последующих.
      };
    
    orderedQuery // Возвращаем сформированный запрос как возвращаемое значение функции.
  }
}


Консольный вывод:
Исходный запрос:
Person: Вася,  15.05.1976, RSDN
Person: Петя,  01.03.1967, Мега
Person: Петя,  05.01.1981, Мега
Person: Петя,  12.01.1953, Мега
Person: Аня,   21.12.1981, Мега

После добавления фильтра:
Person: Петя,  01.03.1967, Мега
Person: Петя,  05.01.1981, Мега

После добавления сортировки:
Person: Петя,  05.01.1981, Мега
Person: Петя,  01.03.1967, Мега

После добавления сортировки к исходному запросу (демонстрирвет, что сортировка производится по двум полям):
Person: Аня,   21.12.1981, Мега
Person: Вася,  15.05.1976, RSDN
Person: Петя,  05.01.1981, Мега
Person: Петя,  01.03.1967, Мега
Person: Петя,  12.01.1953, Мега


К слову, о том где действительно рулит MP в виде макросов. Создание модулей вроде PersonQuery можно легко автоматизировать с помощью макросов. На вход он может получать описание класса, а на выходе выдавать модуль ИмяКлассаQuery содержащий все нужные вспомогательные методы. При этом можно даже генерировать как IEnumerable- и IQueryable-версию модуля.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.12.10 19:33
Оценка:
G>
G>var prop = Expression.Property(p, name)
G>


в общем виде — лучше PropertyOrField

DG>>преобразовать строку в значение типа данного поля,

G>Одна строка
G>
G>var value = Expression.Constant(Convert.ChangeType(s, p.Type));
G>



      foreach (var pair in new[] 
      {
       //основные типы используемые при хранении данных
        new {type = typeof(string), value = "x"},
        new {type = typeof(int), value = "123"},
        new {type = typeof(double), value = "12.34"},
        new {type = typeof(double), value = "12,34"},
        new {type = typeof(bool), value = "true"},
        new {type= typeof(DateTime), value = "12.10.2010"},
        new {type = typeof(Guid), value = Guid.NewGuid().ToString()},
        new {type = typeof(TimeSpan), value = "12:11"}
      })
      {
        try
        {
          Console.WriteLine(Convert.ChangeType(pair.value, pair.type));
        }
        catch (Exception exc)
        {
          Console.WriteLine("error");
        }
      }

x
123
error
12,34
True
12.10.2010 0:00:00
error
error




G>В итоге 5 строк кода + лукап таблица + 4-5 строк для инициализации.


в реальности там ближе к строкам 100, если поддержать все нюансы.
но согласен, решение будет именно таким.

но есть следующие моменты:
1. сгенерить текстовый sql заняло бы меньше кода
2. вся проверки валидности выражения будут все равно на этапе runtime-а (так же как и для текстового sql), а не компиляции (хотя на этапе компиляции неизвестен только какой конкретно тип поля будет, но при этом известно множество типов, которые должны быть поддержаны, и что тип свойства, операции и значения — должен биться и т.д.)
3. большой разрыв между обычным кодом, и кодом генеренным. достаточно сложно переходить от одного к другому и обратно, использовать совместно и т.д.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 20:22
Оценка:
Здравствуйте, DarkGray, Вы писали:

VD>>В нем ничего нового не будет. Такое же отображение.

VD>>Я же тебе не нанимался за тебя программы писать?

DG>позиционировалось, что немерле МП-задачи позволит решать за пару копеек.


Это не задача для МП. И пишется это решение за час-другой.
Макросы позволяют автоматизированно генерировать.
В прочем, я напрягся (хотя после работы устал очень) и сделал тебе полную реализацию
Автор: VladD2
Дата: 24.12.10
.
Без макросов правда, но зато пример демонстрирует комбинаторные возможности немерла. Думаю, не ты один не понимаешь, что подобное возможно. Так что будет хорошим примером для новичков. Да и C#-щикам полезным будет. На шарпе конечно не так лаконично получится, но на нем этот код так же можно повторить.

DG>преобразование фильтрующего-выражение из текстовой формы в код, это копеечная задача.

DG>и это именно МП: есть программа в текстовом виде, есть программа в виде C# — одну программу надо преобразовать в другую.

Как видишь я справился без МП. И скажу больше МП здесь не даст особых преимуществ. Разве что ли позволит автоматизировать генерацию похожих вещей.

DG>при чем проблема, что основные временные затраты уходят на борьбу с кодом:

DG>то, что order-by выражется четырьмя методами.

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

Наличие OrderBy и ThenBy конечно несколько неудобно в таком сценарии использования, но совершенно не критично. Как раз чтобы скрыть эти неудобства и можно было бы использовать макры.

DG>то что для конвертации из строки в объект — для каждого типа необходимо вызвать разные методы,

DG>одна и та же операция, но для разных типов — это тоже разные методы
DG>и т.д.

Ну, ежу понятно. Еще нужна ассоциация между полем и типом (в строках то этой информации нет), и описание доступных операторов для каждого типа (а то и для каждого из полей). Но все это решаемые вопросы если ты хорошо владеешь простым приемом комбинирования функций.

ЗЫ

Я уже запасся покровном и готов с увлечением смотреть как ты будешь выкручиваться на этот раз!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 20:27
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Что будет делать средний рсдновец, если указал на факт, но люди усомнились? Напишет тест, по результатам либо извинится, что ляпнул глупость либо докажет свою правоту в этом вопросе. Но DarkGray не из таких.


Справидливости ради надо заметить, что есть ряд завсегдатых РСДН-а которые ни при каких условиях не признают свою неправоту. Я раньше тоже таким был, но понял, что это глупо. Если доводы оппонента корректы и они ломают твою логику, значит у тебя не верные посылки. И их нужно менять. Иначе можно верить в разные мифы.

Но таких людей много. От того и возникают вопросы вроде "дотнет тормоз", "в немерле ничего нет" и т.п.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 20:42
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


Я не вижу связи между твоим утверждением и моими словами, но на вопрос охотно отвечу.

1. Я против любой генерации кода, если на это нет разумных доводов.
2. Если есть решение проблемы без МП (метапрограммирования), и оно не уступает по значимым для нас характеристикам МП-решению, то я однозначно выберу решение без МП. МП создает дополнительный уровень абстракции, а абстракция хороша только там где она помогает решать проблемы. Влепливание уровня абстракции без особой нужды — это усложнение проекта без получения от этого бенефитов.
3. Я считаю, что если если есть выбор между МП во время компиляции/разработки или МП в рантайме, то лучшим выбором будет МП времени компиляции, так как это позволит избежать излишней динамики, а значит раньше выявлять ошибки, переложить массу вычислений на время компиляции и т.п. Скажу больше. Если нет возможности использовать МП времени компиляции, то зачастую остается возможность использовать МП времени развертывания. Это так же лучше чем МП в рантайме. Ну, и если не остается ничего друго, то допустимо и МП в рантайме. Но при этом нужно быть уверенным, что все другие методы хуже по тем или иным причинам.


G>То есть ты за компайл-тайм генерацию, но против рантайм генерации? Ты сам проявляешь блабнутость по полной программе.


Я предпочитаю первое второму. Практика показывает, что при правильной постановки задачи, почти все задачи удается свести к МП времени компиляции. Иначе я бы и не занимался немерлом. В прочем, Немерл не ограничен времени компиляции. Компилятор немерла является компонентом и его легко можно запускать в рантайме. Деревья выражений и другую технику тоже никто не отменял, конечно же. Я рассматриваю их все, с учетом приоритетов озвученных ранее.

G>Кстати я для решения задачи не предлагал заниматься кодогенерацией вообще. Я предлагал использовать System.Linq.Expression и говорил про еще одно полезное применение.


В некоторых случая — да. Но если задача решается применением комбинаторов
Автор: VladD2
Дата: 24.12.10
и такое решение не имеет нежелательных побочных эффектов, то я предпочту комбинаторы.

VD>>Заметь, ты против макросов, но сам предлагаешь решение основанное на мета-программировнии, что по сути те же макросы только в профиль. И это при том, что есть более простое решение без макросов.

G>А я тебе говорил что я против макросов?

Да, не раз. Но если ты изменил мнение, то наши позиции сближаются.

G>Я все время говорил что

G>а)"это из пушки по воробъям" (с) ты сам признал это выше

Ссылку в студию.

G>б)требуется изучение нового фреймворка с AST компилятора, заместо уже известного мне System.Linq.Expression, а у меня тупо нет времени


System.Linq.Expression и рядом по мощности не стоял. К тому же имеет исходный недостаток. Работает только в рантайме.

VD>>>>Задача которую ты оценил в 1000 долларов решается на коленке за пол часа
Автор: VladD2
Дата: 24.12.10
. Никаких страшных конвертеров для этого писать не надо. Ты просто выбрал неверную реализацию. Я за время пока с тобой разговраиваю, еще успел баг в другом приложении пофиксить.

G>>>Ну ладно, достанем линейки. Я успел два проекта закрыть за время этого обсуждения и че?
VD>>Чё, разоряешься?
G> Нет, НГ на носу, все хотят закрыть хвосты и я некоторый "бонус" себе получил.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.12.10 20:48
Оценка:
VD>Убил еще час времени чтобы создать полный рабочий вариант воспроизводящий твое т.з.

стоило тогда еще сделать группы or/and

VD>Интересно как ты теперь будешь выкручиваться? Просто сделаешь вид, что не заметил ответ или найдешь фатальный недостаток?


тем, что я считаю, что это должно делаться за 10 минут
по крайней мере псевдокод под эту задачу пишется минуты за 3
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 20:50
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>позиционировалось, что немерле МП-задачи позволит решать за пару копеек.


Кстати — это очередная лож. МП позволят решать сложные задачи. Даже задачи которые не решаются традиционными методами. Но я никогда не говорил, что МП — это просто. Если бы это было так, то мы имели бы совсем другой уровень разработки ПО, на сегодня.

Я утверждал, только лишь, что использование макросов уровня макросов немерла значительно упрощает использование МП. Кроме того оно снимает многие проблемы использования делая использование готовых МП-решений прикладными программистами очень простым. Но использовать мета-код != писать мета-код.

Мета-программа — это такая же программа как и любая другая (и даже сложнее). В ней могут использоваться сложные алгоритмы, хитные подходы и просто может быть много кода.

Наша же задача, как разработчиков языка и компилятора, упростить создание и использование МП настолько насколько это возможно.

Немерл 1.0 уже рвет все конкурирующие технологии как Тузик грелку. А, надеюсь, Немерл 2.0 будет еще мощнее, и при этом, проще в использовании.

Так что если тебе лично интересно МП, то лучше взглянул бы на нашу работу по пристальнее. А то и помог бы, не делом, так идеями, если таковые найдется.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 21:29
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>стоило тогда еще сделать группы or/and


Твой формат этого не позволяет. Да и делать там особо не чего. Пару строк подправить придется.
Но я тебе и так, по расчетам gandjustas, за сегодня на 1000 баксов кода наколотил.
Я на тебя работать не нанимался.
Плати и я тебе сделаю полноценное решение. Могу даже автоматическую генерацию (на макросах) этого дела для произвольно заданного типа тебе налабать. Берусь все это сделать за пару дней и ту же 1000 баксов (как gandjustas). Демпинг!

VD>>Интересно как ты теперь будешь выкручиваться? Просто сделаешь вид, что не заметил ответ или найдешь фатальный недостаток?


DG>тем, что я считаю, что это должно делаться за 10 минут


Ну, так являются твои слова о том, что "linq очень плохо помогает при условных запросах" ошибочными?
А слова — "даже изменение порядка сортировки делается очень геморройно"? Не уж то 13 строк кода помещенные в метод — это такой нестерпимый геморрой?

DG>по крайней мере псевдокод под эту задачу пишется минуты за 3


Я тебе и написал прототип решения за 10 минут. А за 3 минуты ты даже это сообщение не напишешь. Это очередной треп с твоей стороны.

ЗЫ

Синклер совершенно прав, что статическое решение лучше хотя бы тем, что компилятор будет ловить тебя за руку, если изменение некоторых частей проекта сделает твой код некорректным. Так что возможно, что конкатенация строк и может оказаться быстрее в разработке, но она создаст такую массу проблем, что на более-менее объемном проекте ты очень быстро получишь задницу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.10 01:48
Оценка:
Здравствуйте, DarkGray, Вы писали:

G>>
G>>var prop = Expression.Property(p, name)
G>>


DG>в общем виде — лучше PropertyOrField


DG>>>преобразовать строку в значение типа данного поля,

G>>Одна строка
G>>
G>>var value = Expression.Constant(Convert.ChangeType(s, p.Type));
G>>


DG>

DG>      foreach (var pair in new[] 
DG>      {
DG>       //основные типы используемые при хранении данных
DG>        new {type = typeof(string), value = "x"},
DG>        new {type = typeof(int), value = "123"},
DG>        new {type = typeof(double), value = "12.34"},
DG>        new {type = typeof(double), value = "12,34"},
DG>        new {type = typeof(bool), value = "true"},
DG>        new {type= typeof(DateTime), value = "12.10.2010"},
DG>        new {type = typeof(Guid), value = Guid.NewGuid().ToString()},
DG>        new {type = typeof(TimeSpan), value = "12:11"}
DG>      })
DG>      {
DG>        try
DG>        {
DG>          Console.WriteLine(Convert.ChangeType(pair.value, pair.type));
DG>        }
DG>        catch (Exception exc)
DG>        {
DG>          Console.WriteLine("error");
DG>        }
DG>      }

DG>

DG>
DG>x
DG>123
DG>error
DG>12,34
DG>True
DG>12.10.2010 0:00:00
DG>error
DG>error
DG>

Вместо Convert.ChangeType будет еще один лукап с методами конвертирования.


G>>В итоге 5 строк кода + лукап таблица + 4-5 строк для инициализации.


DG>в реальности там ближе к строкам 100, если поддержать все нюансы.

DG>но согласен, решение будет именно таким.
Это много? Два часа работы если с нуля писать.

DG>но есть следующие моменты:

DG>1. сгенерить текстовый sql заняло бы меньше кода
Linq позволяет генерить запросы многими другими способами, руками рукопашной генерацией sql такого не сделаешь. Я уверен что тае в твоем приложении, из которого пример, linq для запросов к базе применяется гораздо шире, чем ты тут описал.

DG>2. вся проверки валидности выражения будут все равно на этапе runtime-а (так же как и для текстового sql), а не компиляции (хотя на этапе компиляции неизвестен только какой конкретно тип поля будет, но при этом известно множество типов, которые должны быть поддержаны, и что тип свойства, операции и значения — должен биться и т.д.)

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

DG>3. большой разрыв между обычным кодом, и кодом генеренным. достаточно сложно переходить от одного к другому и обратно, использовать совместно и т.д.

Это ты что имеешь ввиду? Обычно ручное собирание expression прячется внутри функций, которые потом типизировано вызываются и отдают типизированный результат.
Re[32]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 25.12.10 05:23
Оценка:
Здравствуйте, DarkGray, Вы писали:

Z>> Они бедные над удобным синтаксисом распараллеливания бьются-бьются. Можно оказывается забить и писать как синхронный, который потом сам заработает асинхронно.


DG>с преобразованием синхронного кода в cps никакой проблемы нет.

DG>идея решения даже в вики про cps написана.

DG>развернутое описание как синхронный код отображается в cps я показывал в диалоге с Sinclair-ем в одной из соседних веток

DG>http://www.rsdn.ru/forum/philosophy/4006735.flat.aspx
Автор: naf2000
Дата: 21.10.10


Просмотрел большой тред, ничего не нашел. Неужели трудно дать ссылку на пост в котором ты это показал?

DG>зы

DG>C#-ные yield-ы — это кстати преобразование синхронного кода в примитивный cps

Это очевидно. Я этот момент для себя открыл довольно давно
Автор: MishaSt
Дата: 25.07.08
. От этого факта, до автоматического распараллеливания как до луны пешком.
Re[21]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 25.12.10 05:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Справидливости ради надо заметить, что есть ряд завсегдатых РСДН-а которые ни при каких условиях не признают свою неправоту. Я раньше тоже таким был, но понял, что это глупо. Если доводы оппонента корректы и они ломают твою логику, значит у тебя не верные посылки. И их нужно менять. Иначе можно верить в разные мифы.


Совершенно верно, единственный полезный выхлоп от флеймового форума — это чистка собственных заблуждений. Они есть у любого человека. Я расстаюсь с ними по десятку в год.

Доказать свою точку зрения лишь приятно, не более, практической пользы от этого ноль или меньше, ибо убедив кого-то в чем то ты несешь отвественность за то, что он натворит следуя твоим убеждениям.
Re[33]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 25.12.10 11:53
Оценка:
Z>Это очевидно. Я этот момент для себя открыл довольно давно
Автор: MishaSt
Дата: 25.07.08
. От этого факта, до автоматического распараллеливания как до луны пешком.


что самое интересное — утверждение про автоматическое распараллеливание ты сам придумал
я этого не говорил.

зы
вернее, говорил, но совсем по другому поводу.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 25.12.10 13:39
Оценка:
Z>Пора признать, что ляп имел место быть. Оба утверждения на проверку оказались дезой.

ляп с неточностью формулировки могут признать, со смыслом нет.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.12.10 14:27
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Совершенно верно, единственный полезный выхлоп от флеймового форума — это чистка собственных заблуждений. Они есть у любого человека. Я расстаюсь с ними по десятку в год.


Z>Доказать свою точку зрения лишь приятно, не более, практической пользы от этого ноль или меньше, ибо убедив кого-то в чем то ты несешь отвественность за то, что он натворит следуя твоим убеждениям.



Это не совсем так, на мой взгляд. Во-первых, здесь частенько проскакивает интересная информация (о которой я не знал ранее). Во-вторых, корректное (с точки зрения логики) отстаивание своей позиции оттачивает аргументацию и делает ее более ясной.

А та, да, согласен.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.10 16:22
Оценка:
Здравствуйте, DarkGray, Вы писали:

G>> Это много? Два часа работы если с нуля писать.

DG>много
Это переиспользуемый код. Достаточно будет поменять лукапные таблицы для другой задачи.


DG>одним из индикаторов выразительности языка является:

DG>кол-во требуемых для изменения бит(символов) в коде на кол-во измененных бит информации в исходной постановке задачи.
DG>см. пример ниже

DG>>>3. большой разрыв между обычным кодом, и кодом генеренным. достаточно сложно переходить от одного к другому и обратно, использовать совместно и т.д.

G>>Это ты что имеешь ввиду? Обычно ручное собирание expression прячется внутри функций, которые потом типизировано вызываются и отдают типизированный результат.

DG>был исходный сложный запрос

DG>
DG>var items = db.Items.Join(..).Where(pair.Item.Name == name && bla-bla || bla-bla-bla).ToArray();
DG>


DG>дальше в ТЗ добавилось изменение:

DG>пользователь может указать, что сравнение может быть не полное, а по начальному совпадению (starts)
DG>и вот теперь чтобы встроить условную замену '==' на 'starts' — необходимо достаточно много перелопатить.

DG>а в идеале это хотелось записать как:

DG>
DG>var op = bla-bla ? == : starts;
DG>var items = db.Items.Join(..).Where(pair.Item.Name op name && bla-bla || bla-bla-bla).ToArray();
DG>

DG>с привлечением может доп. синтаксиса, но смысл именно такой.

http://gandjustas.blogspot.com/2010/06/expression-tree.html
Теперь переделывать не надо будет ничего. И никакого дополнительного синтаксиса, пара вызовов функций и все.
Re[20]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.10 09:11
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>тем, что я считаю, что это должно делаться за 10 минут

DG>по крайней мере псевдокод под эту задачу пишется минуты за 3

Я тебе привел вполне рабочий код. Давай как теперь ты приведешь свой вариант написанный за 10 минут.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.10 09:12
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>конечно. чем хороши 13 строк, если тоже самое при улучшенном яп можно сделать за полстроки?


Приведи свое решение, сравним.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.12.10 04:39
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Четко видно, что linq (а может быть и RDBMS тоже) тратит время на компиляцию запроса. В первом вызове, вероятно, дополнительное время отжирается на загрузку метаданных.


Похоже именно SQL-сервер тормозит. Столько времени на роботу с ЕТ тратить не реально. Ну, а то что использование параметра дает ускорение говорит, что используется старый план. Linq2Sql же во всех случая здесь создает запрос по новой.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.12.10 12:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>У меня вопрос к Синклеру за что ты на этот набор букв оценку поставил?

За описание проблем и решений.
Один-в-один описаны штуки, которые мы обсуждали в курилках годы назад — в качестве несбыточных мечт.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[32]: Веб и динамика? Веб и статика+метапрограммирование.
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.12.10 13:03
Оценка:
Здравствуйте, Sinclair, Вы писали:

VD>>У меня вопрос к Синклеру за что ты на этот набор букв оценку поставил?

S>За описание проблем и решений.

Где ты там решения то увидел? Вот у нас как раз почти все перечисленное решено. А он только мечтает.

S>Один-в-один описаны штуки, которые мы обсуждали в курилках годы назад — в качестве несбыточных мечт.


Ну, если будете и дальше на Майкрософт ровняться, то так и будете долгие годы мечтать и курить. По-моему, пора уже начать действовать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 27.12.10 15:07
Оценка:
G>А приложи-ка к этому trace с SQL Server.

если будет время, то посмотрю

G> Ты меряешь время выполнения всего запроса, без учета компиляции запроса на SQL Server, считывания данных с диска итп.


если это в sql-е сервере, то почему при перезапуске примера — времена ровно те же самые: первые запросы — 25-50мс, последующие — 3мс?

план запроса в сервере кэшится именно на соединение?

зы
кстати, как в .net-программе проще всего явно рубануть реальное соединение с базой?
Re[34]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ziaw Россия  
Дата: 27.12.10 18:19
Оценка:
Здравствуйте, DarkGray, Вы писали:


Z>>Это очевидно. Я этот момент для себя открыл довольно давно
Автор: MishaSt
Дата: 25.07.08
. От этого факта, до автоматического распараллеливания как до луны пешком.


DG>что самое интересное — утверждение про автоматическое распараллеливание ты сам придумал

DG>я этого не говорил.

Ок, cps, допустим поверил. В каком формате твоя система принимает входной файл с императивным кодом и какой формат получается на выходе? Обрабатываемый язык, платформа, ограничения?
Re[35]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 27.12.10 21:07
Оценка:
Z>Ок, cps, допустим поверил. В каком формате твоя система принимает входной файл с императивным кодом и какой формат получается на выходе? Обрабатываемый язык, платформа, ограничения?

внедренное решение чем-то похоже на твой пример (только enum там конечно лишний).
в итоге получается, .net->.net, платформа .net. ограничения равны ограничениям yield-ов

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

текущий исследовательский проект
свой язык -> свой язык, .net + js, ограничения — хз
Re[23]: Веб и динамика? Веб и статика+метапрограммирование.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 28.12.10 09:48
Оценка:
Здравствуйте, DarkGray, Вы писали:

G>>А приложи-ка к этому trace с SQL Server.

DG>если будет время, то посмотрю
С этого и надо начинать.

G>> Ты меряешь время выполнения всего запроса, без учета компиляции запроса на SQL Server, считывания данных с диска итп.

DG>если это в sql-е сервере, то почему при перезапуске примера — времена ровно те же самые: первые запросы — 25-50мс, последующие — 3мс?
DG>план запроса в сервере кэшится именно на соединение?
Обычно на запрос, но it depends.

DG>зы

DG>кстати, как в .net-программе проще всего явно рубануть реальное соединение с базой?
Что значит "рубануть"? DbConnection.Close не пойдет?
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 28.12.10 10:07
Оценка:
G>Что значит "рубануть"? DbConnection.Close не пойдет?

afaik, это закрывает виртуальное соединение.
реальное соединение после этого уходит в пул-соединений, и ждет следующего DbConnection.Open
Re[33]: Веб и динамика? Веб и статика+метапрограммирование.
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.12.10 12:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Где ты там решения то увидел?

Ну, вообще-то весь пост построен в формате "проблема:решение".

VD>Ну, если будете и дальше на Майкрософт ровняться, то так и будете долгие годы мечтать и курить. По-моему, пора уже начать действовать.

Ты меня с кем-то путаешь.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[24]: Веб и динамика? Веб и статика+метапрограммирование.
От: Кэр  
Дата: 29.12.10 18:22
Оценка:
Для тех, с кем было интересно тут общаться — пожил я несколько дней "RSDN deprived" и переключил внимание на другие технические ресурсы. Результат получился далеко не в пользу RSDN в его текущем виде. "Философия программирования" — был последним оплотом, где появлялись интересные мне темы. И система оценок позволяла выделять те топики, которые стоило прочитать и игнорировать все остальные. Однако Секта Свидетелей Немерле с их яростным и безаргументным напором на любую критику и натиранием рейтинга друг другу испортила это правило и в целом уронила уровень это форума. Так что — я пока отойду на неопределенное время, посмотрим как оно будет дальше Еще увидимся, где-нибудь, когда-нибудь

Для тех, с кем не было интересно общаться — голосом Бендера: so long, suckers!
Re[25]: Веб и динамика? Веб и статика+метапрограммирование.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.12.10 18:04
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>Для тех, с кем было интересно тут общаться — пожил я несколько дней "RSDN deprived" и переключил внимание на другие технические ресурсы. Результат получился далеко не в пользу RSDN в его текущем виде. "Философия программирования" — был последним оплотом, где появлялись интересные мне темы. И система оценок позволяла выделять те топики, которые стоило прочитать и игнорировать все остальные.


И как, помогало это ? Я вот смотрю, последние 5 лет на RSDN от системы оценок толку никакого, как её использовать —

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


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

Как получить топовые ответы по конкретной тематике ?

Как получить топовых людей которые давали ответы по определенной тематике ?

Избранное також нисколько не помогает.

Мне, например, относительно просто, потому как я здесь почти 10 лет и помню многих авторов, их тематику и тд. А если кто новый приходит — нахрен ему геморрой этот ?

Очень часто ответы, которые оценены сильнее всего, по 100 и выше баллов, абсолютно бесполезны. И часто при этом ответы на которые просто много любых оценок очень полезны.

Кроме того, мне кажется самые полезные оценки это красный + и синий -. Как их использовать — не ясно.

Итого по РСДН ("не работает" — в смысле как инструмент)

— теги не работают
— оценки не просто не работают, а вводят в заблуждение
— поиск не работает
— избранное не работает
— интересные форумы вроде Исходники загнулись

Короче, я тебе сильно завидую. У меня RSDN deprived больше суток не получается выдержать
Re[33]: Веб и динамика? Веб и статика+метапрограммирование.
От: Gaperton http://gaperton.livejournal.com
Дата: 22.01.11 03:45
Оценка:
Здравствуйте, VladD2, Вы писали:

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


M>>Есть process dictionary, который является key-value хранилищем в текущем процессе, и который можно использовать.


VD>Это и есть изменяемые переменные. Без них язык будет мертв, потому как чистая математика и без компьютера отлично работает.


Нет, это не есть изменяемые переменные. Это есть обычные для строгих языков вызовы функций с побочными эффектами. Кроме process dictionary, есть аналогичные по эффекту таблицы ets (в памяти), и dets (на диске). И если бы их не было, их можно было бы реализовать на посылках сообщений, которые есть также побочный эффект.

А изменяемых переменных в Эрланге нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.