Re[13]: Недостатки Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.07.12 23:38
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>Аноним вот написал про какие-то метасвязки, интересно бы узнать, что это такое.

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

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

А появляются подобные заблуждения из-за того, что макросы рассматриваются как подпорки для ЯОН (языка общего назнанчения), а не как средство разработки ДСЛ-ей.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Недостатки Nemerle
От: VoidEx  
Дата: 13.07.12 09:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


VE>>Лучше макросов всё, что может быть использовано вместо них. Так что вопрос стоило бы поставить иначе "что хуже макросов", потому что хуже ничего нет, но иногда без них не обойтись. И вот это "иногда" надо изолировать и делать наименее необходимым за счёт улучшения основного языка.

WH>Макросы это и есть улучшение основного языка.

Очевидно, если я говорю "макросы плохо, лучше улучшать основной язык", то под улучшением я имею в виду явно не макросы, потому что я только что сказал, что макросы — плохо.
А ты либо специально не читаешь собеседника, либо правда не понимаешь, но тогда это тревожный сигнал.
Re[14]: Недостатки Nemerle
От: VoidEx  
Дата: 13.07.12 10:02
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Еще можно вот это прочесть
Автор: VladD2
Дата: 13.07.12
.


Что тут читать. Я бы мог вспомнить про правила перезаписи, или про то, что какая-нибудь Agda, имея на руках
proof : ∀{f g} → map f ∘ map g ≡ map (f ∘ g)

могла бы проводить оптимизации (те же правила перезаписи, только с док-вом корректности), но ты же это макросами сейчас обзовёшь.
Re[15]: Недостатки Nemerle
От: WolfHound  
Дата: 13.07.12 10:36
Оценка: 1 (1)
Здравствуйте, VoidEx, Вы писали:

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

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

А все другие средства это создание фичей общего назначения для зыка общего назначения.
И это не работает.
Автор: hi_octane
Дата: 10.07.12

И работать не может.

А самое забавное в том, что все эти фичи общего назначения потом используются для создания ДСЛ.
Кривых. Тормозных. С хреновой диагностикой ошибок. ДСЛ.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: Недостатки Nemerle
От: VoidEx  
Дата: 13.07.12 10:56
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Я понял, что у тебя макрофобия.

WH>Фобии нужно лечить.
WH>А для этого нужно понять, что такое макросы.

А есть какой-то критерий, как понять, понял я макросы или нет? Ну кроме очевидного "в восторге от них — значит понял".
Re[12]: Недостатки Nemerle
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 13.07.12 11:02
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>Ты что-то путаешь. Евангелисты — это в Майрософт и т.п. Им за это деньги платят. Я всего лишь говорю, то что знаю сам.


Ты точно так же как и они агитируешь, отвечаешь вопросами на вопрос и уклоняешься от сложных вопросов. Пример
http://rsdn.ru/forum/nemerle/4812833.1.aspx
Автор: hi_octane
Дата: 10.07.12
— вот внятный ответ на конкретный вопрос
http://rsdn.ru/forum/nemerle/4811663.1.aspx
Автор: VladD2
Дата: 09.07.12
— а это евангелизм который уже лет пять назад набил оскомину
Так что не вижу разницы между тобой и другими евангелистами, ну разве что в качестве результата

VD>А отвечать и объяснять можно только тем кто стремится понять и узнать. Ты же ясно пришел не слушать или спрашивать, а с какими-то другими целями.


Все твои объяснения сводятся к формуле "А ты сам как-нить попробуй на досуге", кроме этой формулы и примеров про калькулятор у тебя ничего не было, нет и не будет.

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


Я был бы тебе благодарен если бы ты вообще игнорировал мои сообщения.
Re[15]: Недостатки Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.07.12 11:32
Оценка: :)
Здравствуйте, VoidEx, Вы писали:

VE>Что тут читать. Я бы мог вспомнить про правила перезаписи, или про то, что какая-нибудь Agda, имея на руках

VE>
VE>proof : ∀{f g} → map f ∘ map g ≡ map (f ∘ g)
VE>

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

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

А ты можешь облизываться даже на них и продолжать использовать беззубый язык вроде С++ или Java, попутно философствуя тему "макросы не нужны".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Недостатки Nemerle
От: WolfHound  
Дата: 13.07.12 13:08
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>А есть какой-то критерий, как понять, понял я макросы или нет? Ну кроме очевидного "в восторге от них — значит понял".

Re[13]: Недостатки Nemerle
Автор: WolfHound
Дата: 12.07.12

Того что написано по ссылке ты очевидно не понимаешь.
В следующем сообщении я объяснил все ещё подробнее.
Но отвечать по существу ты, похоже, не намерен.
И как обычно сваливаешь разговор во флуд.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: Недостатки Nemerle
От: Ziaw Россия  
Дата: 13.07.12 13:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VE>>
VE>>proof : ∀{f g} → map f ∘ map g ≡ map (f ∘ g)
VE>>

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

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


Не согласен. Это было бы верно, если бы данная фича делалась макросами проще. Но макросами ее реализовать довольно сложно. Впрочем в .net от нее толку мало.
Re[18]: Недостатки Nemerle
От: VoidEx  
Дата: 13.07.12 13:29
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Но отвечать по существу ты, похоже, не намерен.

WH>И как обычно сваливаешь разговор во флуд.

По какому такому существу? Твои фразы о том, что "ты ничего не понял", "ты боишься макросов" и "макросы позволяют сделать всё круто, а по-другому никак" извини, достойны только таких же ответов "нет, понял", "нет, не боюсь" и "нифига не позволяют и иначе можно тоже".
Re[16]: Недостатки Nemerle
От: VoidEx  
Дата: 13.07.12 13:36
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VE>>Что тут читать. Я бы мог вспомнить про правила перезаписи, или про то, что какая-нибудь Agda, имея на руках

VE>>
VE>>proof : ∀{f g} → map f ∘ map g ≡ map (f ∘ g)
VE>>

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

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


Понимаешь ли, if-else\for\while, например, могут быть реализованы на макросах, но сами по себе не макросы. И вот с этой штукой такая же ерунда. Это не макросы. Это вообще просто значение.
Ты же, надеюсь, строку кода эту понял? Это, если что, просто декларация значения определённого типа, такая же, как
some :: ∀{a} → maybe a
some = nothing

Или, может, это тоже макросы для бедных, простейший их подвид?
Re[17]: Недостатки Nemerle
От: hi_octane Беларусь  
Дата: 13.07.12 15:24
Оценка: 1 (1) +2 :)
VE>А есть какой-то критерий, как понять, понял я макросы или нет? Ну кроме очевидного "в восторге от них — значит понял".

Каждый раз когда применяется какой-то макрос, язык становится немного более DSL.

Наверное WolfHound хочет сказать что в случае достаточно годного DSL никакого технического кода, который к предметной области отношения не имеет, должно вовсе не остаться. Даже using namespace наверное не надо. Макросы сами подключат что нужно. Возможно и классы не нужны, если предметная область никаким боком не пересекается с ООП. Т.е. программа делится на две части — реализации DSL, и решение задачи на этом DSL. Всё то к чему мы привыкли, типа там паттернов, описания иерархий, и т.п., даже само понятие "именованная переменная" — может быть спрятано за DSL, если это удобно. Вот например если стоит задача выборки данных — LINQ годный DSL для основных случаев. В типичном запросе даже не упоминается то что там внутри какие-то IEnumerable или IQueryable, не указаны типы, в общем чистая выборка данных. Макрос ?? — подходящий DSL для типичного случая проверки на null и последующего присваивания, макрос .? — соотвественно для типичного случая проверки на null и последующего доступа.

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

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

ЗЫ: Телепате моде OFF
Re[17]: Недостатки Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.07.12 20:26
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Не согласен. Это было бы верно, если бы данная фича делалась макросами проще. Но макросами ее реализовать довольно сложно. Впрочем в .net от нее толку мало.


Данная фича делается на макросах. Макросы вещь более универсальная. Естественно, что чтобы повторить фишку некоторого языка придется напрячься. Но халявы никто и не обещал.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Недостатки Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.07.12 20:40
Оценка:
Здравствуйте, VoidEx, Вы писали:

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


Ты палишся. Тебе никто не говорил "ты боишься". Это ты сам уже из своего подсознания извлек. И "макросы позволяют сделать всё круто, а по-другому никак" тоже никто не говорил.

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

Что до "нифига не позволяют и иначе можно тоже", то заблуждаешься — позволяют. Иначе конечно можно. Но зачастую иначе получается хуже. Можешь молиться на исследования в области разработки ЯОН (вроде Агды), но они никогда не смогут сделать код максимально эффективным и одновременно максимально высокоуровеневым просто потому, что ЯОН ничего не знают о прикладной задаче. Конечно, какие-то общие случаи могут реализоываться на них не плохо. Прогресс в этом деле идет. Паттерн-матчинг и АлгТД, замыкания и лябды, классы и события, зависимые типы и прочий "матан"... — это хорошо. Но у макросов есть неоспоримое преимущество. Они позволяют взять конкретную задачу, описать ее решение так как нужно и потом генерировать по описанию такой код какой нужен. Все! Приехали. Никакой матан это сделать не позволит. Ну, разве что искусственный интеллект изобретут и он все сам сделает.

Так что чтобы кокурировать с макросами нужно иметь две фишки — 1) возможность описывать задачу в терминах предметной области; 2) возможность сгенерировать код по описанию полученному в пункте 1.

Конечно это можно будет не называть макросами, но сути это не изменит.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Недостатки Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.07.12 21:01
Оценка: 16 (1)
Здравствуйте, VoidEx, Вы писали:

VE>А есть какой-то критерий, как понять, понял я макросы или нет? Ну кроме очевидного "в восторге от них — значит понял".


Встречный вопрос. Есть ли критерии по которым можно понять, что ты знаешь С++ или F#?

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

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

Вот только сегодня гугль принес ссылку на новый проект на немерле. Это какая-то студенческая работа из Италии. В ней не было бы ничего интересного кроме того, что по ней можно четко скзать, что человек создавший этот проект использовал Немерл как C#++. Фактически это добротный код C#-код с синтаксисом немерла и использованием готовых макросов (в частности, самый мощный C#-парсер созданный с использованием макроса Nemerle.Peg.

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

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

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

Все наши конкуренты идут похожим путем. И все сильно проигрывают в функциональности и/или производительности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Недостатки Nemerle
От: fddima  
Дата: 13.07.12 21:09
Оценка:
Здравствуйте, VladD2, Вы писали:

Тут ты забыл упомянуть один очень важный фактор, который как правило перекрывает все теоретические выкладки. Фактор этот называется "здесь и сейчас". Макросы в N — доступны уже здесь и сейчас, и под конкретную достаточно распространённую платформу, и они работают.
Re[18]: Недостатки Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.07.12 21:22
Оценка:
Здравствуйте, hi_octane, Вы писали:

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


Именно так.

_>Вот например если стоит задача выборки данных — LINQ годный DSL для основных случаев.


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

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

_> В типичном запросе даже не упоминается то что там внутри какие-то IEnumerable или IQueryable, не указаны типы, в общем чистая выборка данных. Макрос ?? — подходящий DSL для типичного случая проверки на null и последующего присваивания, макрос .? — соотвественно для типичного случая проверки на null и последующего доступа.


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

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


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

_>А "понял макросы" — это наверное когда научился соблюдать баланс между кодом на языке общего назначения и DSL.


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

_>Но WolfHound радикал, так что "понял макросы по WolfHound" — это видимо решил задачу на настолько развитом DSL, что остался полностью в терминах предметной области.


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

Как-то так.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Недостатки Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.07.12 21:36
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Ты точно так же как и они агитируешь, отвечаешь вопросами на вопрос и уклоняешься от сложных вопросов. Пример

I>http://rsdn.ru/forum/nemerle/4812833.1.aspx
Автор: hi_octane
Дата: 10.07.12
— вот внятный ответ на конкретный вопрос

I>http://rsdn.ru/forum/nemerle/4811663.1.aspx
Автор: VladD2
Дата: 09.07.12
— а это евангелизм который уже лет пять назад набил оскомину

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

Ну, да. Ребята на пути понимания макросов. Ты на этот пут только пытаешься ступить. Понять их тебе проще. Мы же с тобой разговариваем на разных языках. Лично для меня аргумент — возможность изменить генерацию кода для своего ДЛС-я вообще не меняя прикладной логики. И возможность описания задачи на максимально высокоуровневом языке — это железные аргументы которые невозможно не понять. Для тебя это, похоже, пока что, пустые слова. Зато мелкая автоматизация вроде генерация диспозов тебе понятна. Вот тебе и кажется, что тебе что-то там внушают.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Недостатки Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.07.12 21:47
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>>>
VE>>>proof : ∀{f g} → map f ∘ map g ≡ map (f ∘ g)
VE>>>

VE>>>могла бы проводить оптимизации (те же правила перезаписи, только с док-вом корректности), но ты же это

VE>Понимаешь ли, if-else\for\while, например, могут быть реализованы на макросах, но сами по себе не макросы.


Смотря где. В немерле — макросы.


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

Не уверен. Уловил, что скорее всего речь идет о трасформации кода. До ≡ идет паттерн распознающий некое выражение, а после ≡ идет паттерн формирующий переписанное выражение. При этом f и g это аналоги сплайсов в квази-цитатах, т.е. на их месте может быть произвольный код (или произвольная функция, что несколько более примитивно).

Короче на лицо описание трансформации кода.

VE> Это, если что, просто декларация значения определённого типа, такая же, как

VE>
VE>some :: ∀{a} → maybe a
VE>some = nothing
VE>


Да ну? А где же ≡ ? Ой обманываешь ты меня, явно.

VE>Или, может, это тоже макросы для бедных, простейший их подвид?


Думаю, что все дело в "≡". Без него это будет обычный тип. С ним не обычный.

В любом случае реализовать подобную фишку на макросах можно. А вот наоборот — нет. Так что можно называть это ка угодно, но это частная фича конкретного языка мало дающая с точки зрения повышения уровня абстракции и позволяющая решить отдельные проблемы, а не любые. Короче, не универсальное средство.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Недостатки Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.07.12 22:14
Оценка:
Здравствуйте, fddima, Вы писали:

F>Тут ты забыл упомянуть один очень важный фактор, который как правило перекрывает все теоретические выкладки. Фактор этот называется "здесь и сейчас". Макросы в N — доступны уже здесь и сейчас, и под конкретную достаточно распространённую платформу, и они работают.


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