Re[50]: Являются ли макросы свидетельством недостаточной выр
От: mkizub Литва http://symade.tigris.org
Дата: 10.08.07 08:55
Оценка: +1
Здравствуйте, cl-user, Вы писали:

CU>"Имя, сестра, имя!"


У тебя просто неконструктивная позиция. Тебе не интересно следующее поколение средств мета-программирования, что-бы ты об этом не декларировал. Не вижу смысла в дальнейшем обсуждении.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[28]: Являются ли макросы свидетельством недостаточной выр
От: Cyberax Марс  
Дата: 10.08.07 09:31
Оценка:
Здравствуйте, Andrei F., Вы писали:

C>>В Java для этого полно инструментов, в .NET знаю только: http://rail.dei.uc.pt/project_overview.htm

AF>http://rsdn.ru/Forum/message/2564849.1.aspx
Автор: AndreiF
Дата: 29.06.07

AF>еще можно использовать profiler API, чтобы модифицировать IL код перед выполнением JIT-a
Маловато будет, тут по большей части просто процессоры IL, Феникс вообще пока умер. Есть еще RAILS — но они тоже как-то присмерти.

В Java есть всякие: http://www.csg.is.titech.ac.jp/~chiba/javassist/
Sapienti sat!
Re[15]: Являются ли макросы свидетельством недостаточной выр
От: FR  
Дата: 10.08.07 09:52
Оценка:
Здравствуйте, mkizub, Вы писали:


FR>>"Интерпретор" у форта как ты наверно знаешь, имеет некторые особенности которые позволяют ему по скорости мало уступать тупым плохо оптимизирующим компиляторам (а явовские в мобилках именно такие), правда эти же особенности мешают построить хороший оптимизирующий компилятор. Но компиляторы у форта есть и посоревноватся с той же явой вполне могут.


M>Этого не может быть, потому, что этого не может быть никогда.


Угу пока не ознокомишся как форт система работает.

M>Любой, самый тупой из тупых компиляторов разворачивает байткод в последовательность комманд процессора, экономя на каждой комманде чтение опкода и джамп на хэндлер. У ARM эти две операции совмещены, но джамп занимает больше такта. У MIPS их надо делать отдельно, но он выполняет ещё одну инструкцию, в течении джампа. Итого — минимальная прибыль от компилятора, даже если он тупо работает со стеком и не занимается регистрами — 2-3 такта на инстукцию. Если он ещё регистры использует (даже без оптимизации) — то это ещё раза в 2 ускорение.


"Интерпретатор" прямого шитого кода в форте состоит всего из нескольких ассемблерных команд, суть его работы в том что выбирает адрес слова и делает косвенный call. То есть добавляется на один косвенный вызов больше чем при непосредственном вызове подпрограммы. Компиляторы просто заменяют этот косвенный вызов на прямой call и инлайнят низкоуровневые слова.

M>Фсё, я тему быстродействия больше в этом топике не обсуждаю. Если есть что-то конкретное в виде бенчмарков — можно обсудить в новом топике.


Дя бенчмарков я форт слишком давно в руках не держал.
Re[51]: Являются ли макросы свидетельством недостаточной выр
От: cl-user  
Дата: 10.08.07 12:01
Оценка: +1 :)
Здравствуйте, mkizub, Вы писали:

CU>>"Имя, сестра, имя!"


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


Из чего это следует? Хотя в одном ты прав — МП само по себе и "в собственном соку" меня не интересует, а как одно из "в одном флаконе" (наряду с ФП, СП, ПП, ООП, ДП и проч.) — очень даже.

Я и не собирался ничего обсуждать. Я хотел что-то увидеть, "уделывающее" лисп по МП, не не такое как N Ан нет — не существует.
Re[52]: Являются ли макросы свидетельством недостаточной выр
От: mkizub Литва http://symade.tigris.org
Дата: 10.08.07 12:44
Оценка: :)
Здравствуйте, cl-user, Вы писали:

CU> МП само по себе и "в собственном соку" меня не интересует, а как одно из "в одном флаконе" (наряду с ФП, СП, ПП, ООП, ДП и проч.) — очень даже.


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

CU>Я хотел что-то увидеть, "уделывающее" лисп по МП, не не такое как N Ан нет — не существует.


Опять ты путаешь слова. Оно есть, существует, но ты его не увидел. Нечем, видимо, было увидеть.
Никто, в здравом уме и памяти не станет считать себя умелым канатоходцем просто от того, что ему рассказали или он книжку прочитал — как ходить по канату.
Так же и парадигмы программирования, вроде ООП/ФП/логической/императивной и пр. — это не просто слова, которые достаточно прочитать. Это такой способ думать. И его надо осваивать так-же, как учиться ходить на канате. А пока ты это не попробовал (а ты даже для себя не сформулировал что ты ищешь) — ты не поймёшь, что такого особенного в SOP.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[53]: Являются ли макросы свидетельством недостаточной выр
От: cl-user  
Дата: 10.08.07 13:32
Оценка: +4
Здравствуйте, mkizub, Вы писали:

CU>> МП само по себе и "в собственном соку" меня не интересует, а как одно из "в одном флаконе" (наряду с ФП, СП, ПП, ООП, ДП и проч.) — очень даже.


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


CU>>Я хотел что-то увидеть, "уделывающее" лисп по МП, не не такое как N Ан нет — не существует.


M>Опять ты путаешь слова. Оно есть, существует, но ты его не увидел. Нечем, видимо, было увидеть.


Просто нечего увидеть. Недопарадигма без документации и спецификации. И недопрограмма "сама в себе", ограниченная VM, прямо сейчас ничего не дающая. DOC-файл, наполненный маркетологическим бредом и не содержащий ни малейшей структурной информации. Что увидеть?! В сад!

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


Но языком физики достаточно легко описать трудности/возможные решения. А на словах "возьми шест и маши" конечно ничего не опишешь!

M>Так же и парадигмы программирования, вроде ООП/ФП/логической/императивной и пр. — это не просто слова, которые достаточно прочитать. Это такой способ думать.


Бред сивой кобылы. (сорри) Все парадигмы ("настоящие") элементарно описываются обычным человеческим языком. "Неформализуемую" информацию оставьте сектантам.

M>И его надо осваивать так-же, как учиться ходить на канате. А пока ты это не попробовал (а ты даже для себя не сформулировал что ты ищешь) — ты не поймёшь, что такого особенного в SOP.


Опять бред. Не "попробовав" ФП/ООП трудно оценить эффективность парадигмы для определённых задач, но понять сами парадигмы по документации — элементарно.

P.S. А не против именно SOP — но я не увидел именно документации. А сопли "а вот раньше... большинство программистов... было невозможно... а теперь элементарно..." — оставьте маркетологам.

P.P.S. Можете банить — не считаю необходимым вести спор "в техническом русле" с оппонентами, шарахающимися тех. информации как чёрт ладана.

P.P.P.S. Все остальным — ещё раз "сорри"
Re[15]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.08.07 13:53
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Мне кажется именно это решение возможно на чистых ФВП и ПМ:...


Это где угодно можно делать. Толкьо это не эффектвно и не гибко.

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

В итоге мы имеем два решения. Одно для матиматиков (оно в Немерле тоже достпно). Второе для повседневной жизни. Быстрое, удобное и практичное.

L>Аналогично (строку не буду собирать)


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

L>К сожалению, побился indent, а как тут файл залить можно?


Входишь в своей профайл и там есть сслочка на твои файлы. Ну, а там кнопочка "Загрузить".

L>Поставить можно GHC:

L>http://haskell.org/ghc/download.html
L>Качаешь, ставишь.

ОК.

L>Настраиваешь пути


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

L>Э-э-э.. Что то я туплю с утра. Что увидеть?


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

Вопрос...

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

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


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

В том же дотнете (а занчит в любом поддерживающем его языке) подобные задачи можно решать с помощью рефлексии. Вот только я в реальной жизни выбрал генерацию кода в компайлатме на макросах. И сделал это не просто так. Дело в том, что я выбрал оптимальное (для моей задачи) решение. Мне ну нужны лишние вычисления в рантайме. Я не верю в нулевой оверхэд любой рантайм подсистемы использующей информацию о типах. К тому же делая выбор в пользу рантайма мы неменуемо откладываем мноиге проверки до рантайма. А это уже значит, что мы получаем менее надежное решение. Например, мое решение во время компиляции информировало программиста о том, что перменные типа Location обязательно должны быть изменямыми (объявлены с идентефикатором mutable). Если бы этого не было, то ошибка выявлялась бы толко в рантайме и только кода мой код начал бы модифицировать конкретное поле.

В общем, это разные решения хотя и решающие одну и ту же задачу. У них разные характеристики.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Являются ли макросы свидетельством недостаточной выр
От: BulatZiganshin  
Дата: 12.08.07 14:51
Оценка:
L>>Поставить можно GHC:
L>>http://haskell.org/ghc/download.html
L>>Качаешь, ставишь.

VD>ОК.


L>>Настраиваешь пути


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


для мартышек там есть автоматический инсталлятор

(не обижайся, Влад, сам таким пользуюсь)
Люди, я люблю вас! Будьте бдительны!!!
Re[29]: Generic programming
От: BulatZiganshin  
Дата: 12.08.07 15:34
Оценка:
VD>>Она мне нитересна, конечно. Но это только один вопрос. А их несколько. Вот в начале этого собщения мы говорим о логике постраителя парсера. Это мне тоже очень интересно. Потом интересна отладка. Да и просто поглядеть на то во что выльется грамматика интересно.

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

кстати, был ещё и парсер, основанный на arrows. благодаря сойствам Arrow этот парсер действительнор генерил LR-таблицы разбора; насколько я понимаю, их подход дейстивтельно соответствовал BNF-описанию грамматики в виде eDSL с последующей генерацией кода, даром что это была библиотека:
Sometimes it's useful to restrict what you can do. Duponcheel and
Swierstra wrote a parser library as an Arrow; because it forced you to
decide the parsing structure ahead of time, their library had enough
information to build LR-type parsing tables, and thus to do yacc-style
error correction. (Nobody found it useful enough to use, but it still
makes a nice demonstration of why plain Arrow is sometimes better.)

кстати, вот здесь — haskell.org/haskellwiki/Blog_articles/Monads собрано 42 введение в монады. не может быть, чтобы среди них не нашлось ни одного, которого тебе удастся наконец понять


что касается generic programming. SYB, который вы здесь обсуждаете — лишь один из возможных подходов. я их в своё время насчитал десяток, а ведь я в этой области совсем не специалист. из них три поставляются с самим GHC — SYB, Template Haskell, [1]. В [2] даётся краткое описание всех подходов

[1] Derivable type classes [http://research.microsoft.com/~simonpj/Papers/derive.ps.gz]
[2] Comparing Approaches to Generic Programming in Haskell [http://www.cs.uu.nl/~johanj/publications/ComparingGP.pdf]


теперь о том, каким образом *библиотека* может в *compile-time* сгенерить код, специализированный для данного конкретного типа. на самом деле ты знаешь ответ темплейты в C++ устроены похоже на type classes в хаскеле. когда ты даёшь темплейту аргумент определённого типа, он генерит код именно для данного конкретного типа. в хаскеле type inference позволяет вообще не писать типов данных и тем не менее гшенерить типо-специфичный код

далее, для каждого контейнерного типа пишется (или генерится) несколько стандартных процедур обхода — перечисление элементов (fold), генерация (unfold) и т.д. generic-процедуры программируются через эти операции, проверки, которые можнор разрешить в compile-time, превращаются в константные выражения, в результате темплейто-подобная кодогенерация плюс стандартная оптимизация генерит эффективную type-specific процедуру

впрочем, это только один из возможных подходов. он используется в syb4 Олега Киселёва [3]. syb0 проихзводит поверки в run-time, т.е. он аналогичен использованию RTTI в ООП языках. другие же подходы (GH, [1]) просто используют специаольный язык для описания generic процедур. это можно считать специализированным языком, позволяющим компилятору сгенерить type-speciifc код как в макросистемах или RTTI-based код. отличие от макросистем в том, что во всех случаях пользователь думает в терминах одноуровневого языка, а не двух отдельных систем — прецпроцессинга и собственно выполнения

[3] Ищи "[Haskell] Smash your boiler-plate without class and Typeable"
и "[Haskell] Smash along your boilerplate; how to traverse a non-existent term"
http://okmij.org/ftp/Haskell/syb4.hs
http://darcs.haskell.org/generics/comparison/SmashA/
Люди, я люблю вас! Будьте бдительны!!!
Re[20]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.08.07 19:58
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>для мартышек там есть автоматический инсталлятор


BZ>(не обижайся, Влад, сам таким пользуюсь)


Я и не обижаюсь. Просто неверная классификация. Только венец природы — половозрелый человек, может додуматься не делать лишней работы. А как раз мартышка с удовольствием полезет на дерево...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Generic programming
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.08.07 19:58
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

VD>>>Она мне нитересна, конечно. Но это только один вопрос. А их несколько. Вот в начале этого собщения мы говорим о логике постраителя парсера. Это мне тоже очень интересно. Потом интересна отладка. Да и просто поглядеть на то во что выльется грамматика интересно.


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


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

Макросы позволяют решать некоторые задачи (хорошим примером является построитель парсеров):
1. В компайлатайме.
2. С меньшими временными затратами в рантайме.
3. Обеспечивает большую гибкость (мы вольны вибирать алгоритмы и синтаксис не заморачиваясь на базовые фичи языка, ведь мы генерируем код).
4. Раньше выявлять ошибки.

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

L>Вообще должны, но поддерживаются не везде, насколько я знаю. GHC, например, поддерживает, но при выводе в stdout обрезает символ до последних 8 бит


Иначе и быть не может, так как большинство консолей воспринимает только 8 бит. Просто должен быть АПИ по управлению кодировками.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Generic programming
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.08.07 19:58
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>кстати, был ещё и парсер, основанный на arrows. благодаря сойствам Arrow этот парсер действительнор генерил LR-таблицы разбора; насколько я понимаю, их подход дейстивтельно соответствовал BNF-описанию грамматики в виде eDSL с последующей генерацией кода, даром что это была библиотека:

BZ>Sometimes it's useful to restrict what you can do. Duponcheel and
BZ>Swierstra wrote a parser library as an Arrow; because it forced you to
BZ>decide the parsing structure ahead of time, their library had enough
BZ>information to build LR-type parsing tables, and thus to do yacc-style
BZ>error correction. (Nobody found it useful enough to use, but it still
BZ>makes a nice demonstration of why plain Arrow is sometimes better.)


Здорово. Можно по продрбнее (на пальцах)?
Конкретно:
1. Что такое Arrow?
2. Как генерируется код? Т.е. какие средства МП используются?

BZ>кстати, вот здесь — haskell.org/haskellwiki/Blog_articles/Monads собрано 42 введение в монады. не может быть, чтобы среди них не нашлось ни одного, которого тебе удастся наконец понять


Пугает как раз то что их 42. Видимо это и есть то священное значение этого числа .

BZ>что касается generic programming. SYB, который вы здесь обсуждаете — лишь один из возможных подходов. я их в своё время насчитал десяток, а ведь я в этой области совсем не специалист. из них три поставляются с самим GHC — SYB, Template Haskell, [1]. В [2] даётся краткое описание всех подходов


Ты меня извини, но Template Haskell — это как раз в чистом виде макросы. Почти аналогичные Немерловым. Template Haskell было одним из прототипов Немерла.

BZ>теперь о том, каким образом *библиотека* может в *compile-time* сгенерить код, специализированный для данного конкретного типа. на самом деле ты знаешь ответ темплейты в C++ устроены похоже на type classes в хаскеле. когда ты даёшь темплейту аргумент определённого типа, он генерит код именно для данного конкретного типа. в хаскеле type inference позволяет вообще не писать типов данных и тем не менее гшенерить типо-специфичный код


BZ>далее, для каждого контейнерного типа пишется (или генерится) несколько стандартных процедур обхода — перечисление элементов (fold), генерация (unfold) и т.д. generic-процедуры программируются через эти операции, проверки, которые можнор разрешить в compile-time, превращаются в константные выражения, в результате темплейто-подобная кодогенерация плюс стандартная оптимизация генерит эффективную type-specific процедуру


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

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

BZ>впрочем, это только один из возможных подходов. он используется в syb4 Олега Киселёва [3]. syb0 проихзводит поверки в run-time, т.е. он аналогичен использованию RTTI в ООП языках. другие же подходы (GH, [1]) просто используют специаольный язык для описания generic процедур. это можно считать специализированным языком, позволяющим компилятору сгенерить type-speciifc код как в макросистемах или RTTI-based код. отличие от макросистем в том, что во всех случаях пользователь думает в терминах одноуровневого языка, а не двух отдельных систем — прецпроцессинга и собственно выполнения


Вот уже дудки. Или мы генерируем код и думаем в терминах двух программ: метапрограммы и конечной программы (код которой и генерируется). Или у нас "одноуровневый язык". Если под "одноуровневостью" понимается исползование того же языка, то макросы пишутся на точтно таком же языке. Просто там есть пара примитивов позволяющих явно отделить генерирующий код и генерируемый.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.08.07 19:58
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Короче, макросы и раные там навороченные шаблоны конечно крутая штука для шифрования исходного кода и чесания левой пяткой за правым ухом, только на практике не нужная. Думаете, почему в большинстве современных языков нет макросов? В 70-х годах вот были популярны развитые макросистемы. Сейчас — нет, потому что нафиг не нужны. Рынок, так сказать, голосует.


Единственный язык в кором в 70-ые были полноценные макросы (а не уроды как в С) — это Лисп. В нем макросы есть и по сей день. Так что доказательство основывается на ложных предпосылках. Вообще очень много ложных выводов о макросах делается по схеме: "в С макросы ужасны... значит все макросы ужасны... значит маросы зло!"
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.08.07 19:58
Оценка:
Здравствуйте, Gaperton, Вы писали:

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


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

G>1) У тебя там применяются атрибуты. Добавление кастомных атрибутов никак не меняет синтаксис языка, и не увеличивает indirection level языковых конструкций.


Ах вот даже так? Ну, тогда хочу отрыть одну забавную тайну. Один из видов макросво в том же Немерле — это метаатрибуты. Они точно так же не меняют синтаксис языка. Другой — это простые макросы. И они не меняют синтаксис (выглядят как вызов фунции).

Так что такие макросы допустимы?

Или, не уж то, рантайм-кодогенерация которую использует IT для реализации приведенной задачи, или стоэтажные навороты на монадах Хаскеля (с неминуемвм оверхэдом) лучше? Почему не применить прямые решения для решения задачи?

Вот в C# 3.0 VB.NET и 9.0 в язык ввели DSEL под хитрым потентованным названием. Не уж то это лучше нежели ввести в язык макросы и реализовать все это на них?

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


То есть ты голосуешь за атрибуты и против лучшего средства задания семантики для них? Зашибись!

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

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


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

G>2) Удобный биндинг к БД — это даже более ходовая и популярная задача, чем создание парсеров. И для ее решения, так же как ex/yacc, вполне оправдано сделать внешний макропроцессор, совсем не обязательно иметь поддержку макросов в языке.


А зачем? Да и на результаты посмотри? Лучши датабиндер до появления LINQ от MS был Кибернэйт. Но это же полная задница с точки зрения как удобства работы (описания во внешем ХМЛ), так и с точки зрения надежности (большая часть проверок в рантайме), да и быстродействие сильно хромает. LINQ тупо интегрируют в ЯП.

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

G> Насколько я понимаю, в твоем тулките, на который ты ссылаешься, так и сделано — макросисиема там не применяется. Этой же цели, кажется, служит явский hybernate? Опять, обошлись без макросистемы. Что имеем в сухом остатке? Индустрия подверждает мой тезис о макросах, не так ли?


Ага. Вот и спроси у IT зачем от занимается отладчиком для Nemerle, а не осваивает Кибернэйм или не допиливает свое решение.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.08.07 19:58
Оценка:
Здравствуйте, Gaperton, Вы писали:

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


Ну, так спор только о синтаксических макросах?
Это уже ральная сдвижка в позиции.

G>...так объясните еще раз — зачем нужны меняющие синтаксис макросы?


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

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


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

G>Индустрия имела макросы в далеких 70-х. И отказалась от них вместе с ассемблерами и языками-монстрами вроде PL/1 — с появлением простых и понятных языков высокого уровня.


Это не те макросы. Те были только в Лиспе. В нем они есть и по сей день.

ЗЫ

И вообще, забавно наблюдать как человек всего год-два пропагандировавший ОКамлоский препроцессор вдруг стал таким рьяным борцом с макросами.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.