Re[12]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка: -1
Здравствуйте, Gaperton, Вы писали:

G>В выражении a = b + c + d, где переменные — матрицы, надо, чтобы все это свернулось в единственный двойной цикл с этой формулой внутри. На плюсах это делается без макросов — через темплейтное метапрограммирование, и выглядит страшно. На макросах, мне думается, реализация выглядела бы проще. Хотя — честно скажу, пока на макросах реализации не видел. Все только говорят, говорят о великих и ужасных макросах — и все .


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

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

Собственно практически тоже самое делает макрос $ в Немерле. Он берет строку вида $"Просто текст $(вычисляемое + выржение) и еще просто текст." и преобразует его в вызов вида:
string.Concat("Просто текст ", (вычисляемое + выржение).ToString(), " и еще просто текст.");

что в результате дает максимально эффективный код.

Собственно — это есть отличный пример встраеваемого микро-DSL-я. И как видишь уже второй который ты можешь приводить в качестве примера .
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка: -1 :)))
Здравствуйте, lomeo, Вы писали:

L>Подозреваю, ... За исключением...По идее...Не знаю, сработает ли здесь.


Что я могу скзать? Может в этом и состоит разница? Вот я, например, не сомневаюсь, что все тоже самое с соблюдением синтаксиса можно залудить средствами макросов Немерла и при этом плучить настолько оптимальный код насколько его вообще можно получить на Немерле (т.е. не отличающийся от оптимального рукописного кода). А ты сомневашся. И сомнения твои вызваны неполноценностью средства, сложностю и тормознутостью самого языка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка:
Здравствуйте, deniok, Вы писали:

D>Кстати здорово — задача оптимизации решается прямым указанием оптимизатору! Rewrite Rules rulez


А в чем разница между ними и макросами? И почему тогда "макросы сакс", а "Rewrite Rules rulez", а?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка: +1
Здравствуйте, Gaperton, Вы писали:

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


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

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


Хватит, или сможешь решать задачи компактнее, быстрее и порождая более производительный код? Если говорить о "хватит" в общем-то С для любой задачи хватит. Вот только паттерны от этого не исчезнут. Они просто будут строиться на базе ФВП и паттернматчинга.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Для лексера необходимости в макросах нет. Погляди Parsec.


Кстати, хорошее предложение. Предлагаю пенисомерию. Сравниваем Parsec с лексером konsoletyper-а.

На входе небольшой проект C#, на выходе количество токенов каждого типа в его файлах.

Как предложение?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка:
Здравствуйте, lomeo, Вы писали:

K>>Уже давно глядел. Не понравилось.


L> Давай не будем это считать аргументом.


Ну, почему же?

K>>Во-первых, все эти <###> смотрятся коряво, а хотелось бы человеческого EBNF-образного синтаксиса.


L>Синтаксис очень близок к EBNF вплоть до переименования.


Тебе не кажется, что "очень близок" на практике означет "непохож"?
Понимаеш ли в чем дело?... На макросах можно получить как раз тот синтаксис что тебе требуется. И делается это проще.

L>Вместо "|" здесь "<|>", вместо +/* — many1/many, вместо '(' — char '(', "abc" — string "abc".


Да, да... Вот только в лексере konsoletyper-а вместо "|" используется (ты не поверишь) "|" и т.д.

K>>Кроме того, мнее вообще непонятно, как это всё работает.


L>Это тоже вряд ли сойдёт за аргумент


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

L>Поверь, для этого не надо вкуривать монады. Достаточно понять, что парсер это функция, дальше всё просто.


Мне показалось он говорит о реализации.

L>Да и вообще — у тебя уже есть готовый DSL. Зачем тебе знать на чём он построен — на макросах или монадах?


Очевидно, чтобы написать свои собственные DSL-и. Мы же вроде бы об этом, а не о готовых решения. Ведь на свете уже давно существуют Яки и Антлр-ы. Их можно вкурить не только без знания монад, но и без знания о существовании Хаскеля.

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


Макросы не надо эмулировать. Это правда. Они мощьнее чем вырктасы шаблонного МП в С++ и куда монад в Хаскеле. Они прямое средство переписывания кода так как надо программисту. И нихрена в этой области с ними не сравнится.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Без проблем! Меняем названия на EBNF-ные.


На EBNF есть ISO-стандарт. Вот кода вы на Хаскеле его повторить сможете (ну, процентов так на 99 хотя бы), тогда можено будет поговорить. А пока тебе прийдется признать, что решение на Хаскеле не полноценно.

L>Нужны мозги, готовые писать декларативно.


Хм. Решение на макросах получается короче и понятнее, но оно не декларативно? Забавные выводы.

L>Если хочешь, я объясню на пальцах строение Parsec. Знание монад вряд ли тебе понадобится.


L>На самом деле, когда я с Лиспа перешёл на Хаскель, я тоже недоумевал, как же так? А где макросы? Поработав через некоторое время я почувствовал, что для большинства вещей они там не нужны. Макросы в Лиспе большей частью нужны были для подслащивания: реализации ленивости (эта часть выполняется только если...), более удобной записи вызовов (вместо всех этих lambda что то вроде карринга), и прочей кодогенерации (скажем куча определений вместо одного) и т.д.

L>Всё это есть в Хаскель задаром. Последнее делается разве что немного по другому.

Ну, так не бери для сравнения Лисп. Старичку все же уже 50 лет! Возми Немерле. Он в большинстве случаев не уступает Хаскелю в выразительности сам по себе и при этом еще содержит макросы. В прочем все эти ТемлэйтХаскели и РеврайтРулезы ни что иное как маросы. Так что ты лучше обясни как решить конфликт между наличием этих фич и утверждением о том, что макросы не нужны. Это будет куда интереснее.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Я к тому, что в ФП функция рассматривает несколько по другому нежели в "обычных языках". Это первоклассная сущность.


Сори, а на кого направлен этот балшит? Может еще разведем балшит по повоту продвинутости структурного программирования в сравнении с ассемблерами?

Насколько я помню на свете есть очень мало языков в которых макросы достигли своего апогея. Все эти языки, как один, являются фунциональными (Лисп, Темлэйт Хаскель, Немерле). Так зачем нас грузить ФП?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка:
Здравствуйте, lomeo, Вы писали:

L>

L>The library is fast, parsing thousands of lines a second on today's machines


L>Но тысячи в секунду, это как то маловато, если честно.


Ага. Я тоже сполз под стол читая эту цитату.

L> Даже для 2001. Очень-очень сомневаюсь, что это связано с тем, что реализация не на макросах. Надо с Happy сравнить. Полагаю, проблема всё таки в строках Haskell-а, которые как известно, медленные. Можно попробовать подключить binary string и померить.


Предлагаю запенисометрировать.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Я воспользуюсь flex, или любой подобной тулзой. По ним хотя-бы документация есть, и мой код все поймут, а в велисипеде на макросах еще рабираться надо будет стороннему программеру. Недостатка в генераторах лексеров и парсеров нет ни для какого языка. Буквально для любого языка есть выбор.


Ты бы попробовал, а потом обсудили бы. А то как-то не смешно. Я вот попробовал и готов потратить время на изучение, чтобы не испытывать тех проблем, что есть с тулзами вроде flex-а.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка:
Здравствуйте, Константин Л., Вы писали:

K>>Я могу так же взять C#, как всем известный язык. Но начать юзать для него вместо .NET Framework библиотеки, написанные неизвестно кем (хотя бы даже свои). И знаешь, инженер, который будет править баги, будет материться не меньше.


КЛ>Зато отладка макросов это очень неприятное занятие.


Это не свойство самих макросов. Это свойство реализации. Для макросов можно сделать полноценную отладку. Это чисто техническая проблема. Хотя в том же Немерле она пока что не решена до коца. Это факт.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Являются ли макросы свидетельством недостаточной выра
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.07 00:45
Оценка:
Здравствуйте, lomeo, Вы писали:

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


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


L>Почему априори считается, что МП — это обязательно макросы?


А я так не считаю. Я просто считаю, что макросы (правильно приготовленные) — это лучшее на сегодня средство для преготовления МП.

L>Что касается встраивания в язык DSL, то на Haskell это получается замечательно.


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

L> Просто там другой подход, и, разумеется, есть отличия от подхода с макросами.


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

L> Вот в этой статье, например сказано, что именно Haskell не умеет делать, в отличие от макросов, а что умеет. Но делает это по своему, и не выглядит неестественным.


Дык если что-то не умеет, начи уже менее мощьный. При этом еще и более сложный.

Что имеем в итоге?
1. Большую сложность реализации.
2. Меньшие возможности.
3. Меньшую скорость результирующего кода.
4. Все (гипотетические, так как на мой взгляд это домыслы) недостатки МП.

Ну, и где здесь приемущества? Отсутсвие слова "макросы"? Ахринеть (с)!
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Являются ли макросы свидетельством недостаточной выра
От: FR  
Дата: 11.07.07 02:04
Оценка: +4
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Andrei N.Sobchuck, Вы писали:


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


ANS>>Белая гарячка


VD>у вас, маньяков? Несомненно. Вы же даже возразить аргументированно не умеете.


Влад ты на самом деле бредишь, возражать на это бессмысленно.
Re[14]: Являются ли макросы свидетельством недостаточной выр
От: FR  
Дата: 11.07.07 02:05
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>На C++ шаблонах такое пишется без проблем, используются ленивые вычиления, то есть выражение собирается в operator= скорость не уступает сишной.


VD>Решение конечно на шаблонах с применением Буста?


На шаблонах без буста. Я такой велосипед писал когда про буст еще не слышал.
Re[12]: Являются ли макросы свидетельством недостаточной выр
От: Курилка Россия http://kirya.narod.ru/
Дата: 11.07.07 04:50
Оценка: 18 (3)
Здравствуйте, VladD2, Вы писали:

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


VD>>>Любой DSL.


К>>Ммм, значит DSL на хаскеле или скале "не считаются"?


VD>Считается. Но они получаются слишком ограниченные в сравнении с прмыми решениями. В прочем, причем тут Скала вообще не ясно. Там система типов мало чем не отличается от Ява/Шарпа.


Т.е. DSL рассматриваются только в свете системы типов, остальные возможности языка выкидываем? Интересно...
А по поводу скалы, вот простенький пример отсюда :

val res = db.executeStatement {
select fields ("name" of characterVarying(50)) from "person"
}


Подход, принятый тут (называемый авторами “zygotictype-directed growth”), описан здесь
Re[13]: Являются ли макросы свидетельством недостаточной выр
От: FR  
Дата: 11.07.07 05:14
Оценка:
Здравствуйте, Курилка, Вы писали:


К>Подход, принятый тут (называемый авторами “zygotictype-directed growth”), описан здесь


Кстати на D это также можно сделать.
Вообще для подобных мелких DSL вполне достаточно чтобы в языке были ленивые вычисления (тот же lazy в D или блоки кода типа Смаллтаковских).
Re[14]: Являются ли макросы свидетельством недостаточной выр
От: Курилка Россия http://kirya.narod.ru/
Дата: 11.07.07 05:41
Оценка:
Здравствуйте, FR, Вы писали:

FR>Вообще для подобных мелких DSL вполне достаточно чтобы в языке были ленивые вычисления (тот же lazy в D или блоки кода типа Смаллтаковских).


А в скале вродь как без ленивости обошлись. А блоки кода в смолтолке по сути же лямбды или лямбды мы уже за "отложенные вычисления" считаем?
Re[16]: Являются ли макросы свидетельством недостаточной выр
От: Gaperton http://gaperton.livejournal.com
Дата: 11.07.07 05:52
Оценка:
Здравствуйте, WolfHound, Вы писали:

G>>какая разница, тьюринг-полный он или нет. Ровным счетом никакой. Рассмотри любой пример, когда тебе надо в рантайме подцеплять и интерпретировать описание на специальном языке. Например — веб-браузер. И все — макросы — до свидания.

WH>А если не надо? А случаев когда не надо гораздо больше.
Вопрос — пример когда макросы сосут? Тебе я дал ответ — когда надо в рантайме подцеплять. Ты сначала сказал "а если язык не тьюринг-полный, то ведь все не так", а потом с ленинским прищуром спросил — "а если не надо?"

WH>Так что попытка обосновать не нужнось макросов наличием жабаскрипта идет лесом.

Лесом идут такие аргументы вместе с автором. То есть тобой. С пионерами в таком ключе спорь.

WH>Болие того я спокойно могу на лету скомпилить код на томже немерле... с макросами...

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

G>>Это я вообще не понял. Что за выхлоп, почему проще без lex-yacc, почему геморройно с генераторами парсеров, чем без них. Странно как-то то все звучит.

WH>То и значит.
Слушай, когда изъясняться понятно начнешь, по-нормальному, без выхлопов, тогда и поговорим.

WH>Лексаяки рулят если нужно написать компилятор на тупом языке типа C/C++/C# но если в языке есть алгебраические типы, сравнение с образцом, ФВП, макросы итп то от лексаяков пользы нет.


Угу.
Re[3]: Являются ли макросы свидетельством недостаточной выра
От: Gaperton http://gaperton.livejournal.com
Дата: 11.07.07 06:05
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>Система типов не может заменить наличия метапрограммирования (МП). Она, при использовании в своем исходном предназначении, не может решать задач метапрограммирования. А когда система типов превращается в средство для нелегальной реализации МП, то мы получам те же макросы, только, как я уже упомянул, "через жопу... автогеном".


Я говорил не о замене метапрограммирования чем-то там, а о повседневной необходимости в нем. Разницу чувствуешь? Объясняю. Где-то придется для "паттерна" конечного автомата заводить макрос, чтоб красиво было. А кое-где — это совершенно обычная задача, не требующая ни выверта, ни паттерна. Смотри:

switch_state( State, Message ) -> State( Message ).

state1( msg1 ) -> ...;
state1( msg2 ) -> ...;

И все. Никаких "через жопу автогеном".

VD>И твой тезис о том, что макросы что-то там нехорошее высвечивают сразу же бьет по Хаскелям и С++ с вдвойной силой. Бо это уже не только макросистемы, но еще и кривые и неудобные макросистемы.


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

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


VD>Дык, макросы и нужны для языковых расширений. 90% применения в прикладном коде для макросов, на мой взгляд, — это DSL-и. Остальные 10% — это допиливание языка напильником для применения в конкретной сфере. Это допиливание легко ложится в библиотеки и может просто пополнять язык (делая его удобнее для конкретных областей применения).


Вот видишь — наступил наконец редкий случай, когда мы с тобой согласны. Ну, почти .
Re[15]: Являются ли макросы свидетельством недостаточной выр
От: FR  
Дата: 11.07.07 06:08
Оценка:
Здравствуйте, Курилка, Вы писали:

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


FR>>Вообще для подобных мелких DSL вполне достаточно чтобы в языке были ленивые вычисления (тот же lazy в D или блоки кода типа Смаллтаковских).


К>А в скале вродь как без ленивости обошлись. А блоки кода в смолтолке по сути же лямбды или лямбды мы уже за "отложенные вычисления" считаем?


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