Re[12]: Являются ли макросы свидетельством недостаточной выр
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 13.09.07 10:46
Оценка:
Здравствуйте, cl-user, Вы писали:

CU>Разрешите встрять?


Буду только рад.

L>>Зачем делать на макросах то, что проще делается без них и для чего они не предназначены?


CU>1. Хаскелевская работа с типами (по пути обобщения а не по пути сужения) ещё более "специфична", нежели генерация кода макрами — её (систему типов) в любой язык не вопрёшь.


+1, но мы говорим о техниках вообще, а не о языках. Макросов вот тоже не везде есть.

CU>2. Макры просто генерят код. Не только для наложения ограничений на типы. Т.е. менее ограничены (не привязаны к типам, хотя есть языки, где макры могут типами пользоваться )


Ну да, макросы же более универсальны.

CU>3. Если данную конкретную задачу в данном языке проще решить без макр — да, макры не нужны. Но мы же не будем из данного утверждения делать необоснованные обобщения?


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

CU>Ещё раз: макры нужны для генерации кода вкупе с использованием всех возможностей базового языка. Если вам это не надо — макры вам не нужны. Но о чём тогда спор? О том, что отдельные задачи проще решать специально заточенным для этого инструментом? Да, но, к сожалению, пока ещё нет инструментов для всех задач (тем более для ещё неизвестных задач). Да и язык, который будет обладать всеми такими инструментами (и средствами для их дальнейшего построения) — но не макрами , трудно себе представить.


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

L>>Если же задача стоит делать это именно компайл-тайм, то почему макросы здесь подходят лучше, чем зависимые типы (вернее, очень близкие к ним)?


CU>Макры "здесь" никак не подходят, ибо их нет в Хаскеле (стандартном).


Ну, это же философия, мы тут "вообще" говорим

CU>Это очень "частная" задача по сравнению с ничем неограниченным количеством задач, которые можно успешно решать с помощью кодогенерации.


Да, но я же не могу приводить примеры всех задач?

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


Ни с одним утверждением не могу поспорить, но речь не о всех частных задачах. Мы говорили о статье. Влад привёл эту задачу, как пример, который надо решать на макросах. Остальные средства он назвал автогенами.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[29]: Являются ли макросы свидетельством недостаточной выр
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 13.09.07 10:53
Оценка:
Здравствуйте, VladD2, Вы писали:

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

L>>По большому счёту это ФВП — с помощью набора комбинаторов мы создаём одну длинную функцию — это и есть парсер.

VD>По любому счету ФВП есть почти в любом языке. Так что не надо разводить софистику. Монады — это черная магия непонятная никому кроме тех кто влюблен в Хаскель. И аргументировать хаками с монадами отсуствие необходимости в прямых и понятных средствах, на мой взгляд, просто бессмысленно. Если достаточно ФВП и там скажем замыканий, то флаг вам в руки. Покажите примеры на C# 3.0, скажем, или на Скале.


Примеры чего? Парсека? Зачем мне его показывать на шарпе не пойму — чтобы доказать, что монады в парсеке не нужны? Или что? Ты чего хочешь понять/узнать/прояснить?

L>>Монады тут совершенно не важны — они служат лишь для удобной связки этих комбинаторов.


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


VD>Это товарищи господа — обычная предвзятость.


Согласен.

Трехэтажная ахинея на системе типов — плохо
Загадочные манадные навороты приводящие к тормозам и тратам памяти — плохо
прямое и понятно решение на маросах — хорошо

С другой стороны

Грамотно спроектированное решение на системе типов — хорошо
Прозрачные монадные решения, не приводящие к тормозам и тратам памяти — хорошо
Кривое и невнятное решение на макросах — плохо

Как с тобой нелегко — ты говоришь, говоришь, вроде всё понятно, и спорить то не о чём, а что сказать то хотел — непонятно. Остаётся только пожать плечами.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Являются ли макросы свидетельством недостаточной выр
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 13.09.07 10:53
Оценка:
Здравствуйте, VladD2, Вы писали:

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


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

VD>Да считай все что угодно.


Симметрично.

VD>Только не надо на базе своего мнения какие-то выводы делать, и темболее, такие-то теории обосновывать (вроде сабжевой).


А то что?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[30]: Являются ли макросы свидетельством недостаточной выр
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.09.07 10:58
Оценка: 4 (1)
Здравствуйте, lomeo, Вы писали:

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


VD>>По любому счету ФВП есть почти в любом языке. Так что не надо разводить софистику. Монады — это черная магия непонятная никому кроме тех кто влюблен в Хаскель. И аргументировать хаками с монадами отсуствие необходимости в прямых и понятных средствах, на мой взгляд, просто бессмысленно. Если достаточно ФВП и там скажем замыканий, то флаг вам в руки. Покажите примеры на C# 3.0, скажем, или на Скале.


L>Примеры чего? Парсека? Зачем мне его показывать на шарпе не пойму — чтобы доказать, что монады в парсеке не нужны? Или что? Ты чего хочешь понять/узнать/прояснить?


Кстати, вот Mirrorer кинул тут на днях ссылку — не совсем парсек, конечно, но рядом с этим (и на шарпе).
Re[31]: Являются ли макросы свидетельством недостаточной выр
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 13.09.07 11:18
Оценка: :))
Здравствуйте, Курилка, Вы писали:

К>Кстати, вот Mirrorer кинул тут на днях ссылку — не совсем парсек, конечно, но рядом с этим (и на шарпе).


Угу, решение аналогичное парсеку.

Да я в последнее время вообще мало читаю, поэтому ссылку не видел — сейчас просто увидел, что на рсдн мне кто то ответил — и понеслась

Ссылка прикольная, только там линк (читай монады) используется, это для Влада чёрная магия
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Являются ли макросы свидетельством недостаточной выр
От: cl-user  
Дата: 13.09.07 11:36
Оценка: +2
Здравствуйте, lomeo, Вы писали:

L>М-м-м. Кажется я понял, в чём у нас недопонимание. Для меня сабж — "является ли использование макросов для такой то задачи маркером того, что язык не обладает для этой задачи достаточно выразительными средствами", а не "является ли наличие макросов в языке свидетельством недостаточной выразительности этого языка вообще".


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

L>В Хаскеле, например, макросы есть, только их очень мало используют. Я не скажу, что я сторонник этой гипотезы, например, для кодогенерации средства лучше не найдёшь. Но я и не противник — а может быть в каком нибудь языке и не нужна эта кодогенерация (пример с gmap).


Кодогенерация "не нужна" не в языке, а для определённых задач (или нужна для определённых задач). А в Хаскеле макры мало используют скорее всего потому, что он сам по себе довольно лаконичен и "засахарен", и макры таки в нём "сбоку", а не "внутри".
Re[15]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.07 12:05
Оценка: -1
Здравствуйте, lomeo, Вы писали:

L>Более мощная система типов позволяет вынести больше ошибок из рантайма в компиляцию.


Это домыслы. А вто то, что с ее помощью можно сделать больше ошибок — это факт.

L> Что в этом ужасного, если она для этого и предназначается?


Ужасно использование вещей не по назначению. Система типов предназначена для описания типов. А молоток для забивания гвоздей.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Являются ли макросы свидетельством недостаточной выр
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 13.09.07 12:21
Оценка:
Здравствуйте, VladD2, Вы писали:

L>>Более мощная система типов позволяет вынести больше ошибок из рантайма в компиляцию.


VD>Это домыслы. А вто то, что с ее помощью можно сделать больше ошибок — это факт.


И чем ты можешь этот факт подтвердить?
Я вот смои домыслы могу подвердить отсылкой к dependent types, предназначенных именно для уже неоднократно перечисленных мной примеров.

L>> Что в этом ужасного, если она для этого и предназначается?


VD>Ужасно использование вещей не по назначению. Система типов предназначена для описания типов. А молоток для забивания гвоздей.


Что есть описание типов, как не расстановка ограничений на их значения? Если мы в функции, которая по сигнатуре должна приниматься тип A передаём тип B — компилятор бьёт нам по рукам. Или если в функции, которая должна принимать два списка одинаковой длины, принимает списки разной длины — компилятор тоже бьёт нам по рукам.

Чем одно ограничение отличается от другого? Почему первое можно, а второе нет?

Просто в некоторых системах можно задавать тип — "список длины n", "список длины m", "список длины n+m". А в некоторых — нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Являются ли макросы свидетельством недостаточной выр
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 13.09.07 13:25
Оценка: :))
Здравствуйте, VladD2, Вы писали:

L>>Более мощная система типов позволяет вынести больше ошибок из рантайма в компиляцию.


VD>Это домыслы. А вто то, что с ее помощью можно сделать больше ошибок — это факт.


Свершилось твоё превращение в сторонника динамической типизации?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[17]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.07 14:40
Оценка:
Здравствуйте, lomeo, Вы писали:

L>И чем ты можешь этот факт подтвердить?


А вот тут как раз есть форум по С++. Посмотри сколько траха с МП на шаблонах. Посмотри во что превратился Буст и т.п. А С++ действительно имеет более удобную для МП систему типов (допускающую целочисленные параметры в шаблонах).

L>Я вот смои домыслы могу подвердить отсылкой к dependent types, предназначенных именно для уже неоднократно перечисленных мной примеров.


Ты лучше сам этоти проповеди читай. Я как-то не проникаюсь.

VD>>Ужасно использование вещей не по назначению. Система типов предназначена для описания типов. А молоток для забивания гвоздей.


L>Что есть описание типов, как не расстановка ограничений на их значения? Если мы в функции, которая по сигнатуре должна приниматься тип A передаём тип B — компилятор бьёт нам по рукам. Или если в функции, которая должна принимать два списка одинаковой длины, принимает списки разной длины — компилятор тоже бьёт нам по рукам.


L>Чем одно ограничение отличается от другого? Почему первое можно, а второе нет?


L>Просто в некоторых системах можно задавать тип — "список длины n", "список длины m", "список длины n+m". А в некоторых — нет.


А причем тут это? Используй эти удивительные возможности по назначению и никто тебе ни слова не скажет. А вот когда ты начинашь на типах списки времени компиляции эмулировать и вывертывать фунции вроде MapAppend, то извини, но это уже не ограничение на типы, а исползование побочного эффекта. Ты перестаешь использовать систему типов для описания типов. Ты уже описываешь код на языке который родился как побочный эффект от усиления системы типов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.07 14:40
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Свершилось твоё превращение в сторонника динамической типизации?


Агащазблин. Читай внимательнее.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[56]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.07 14:40
Оценка:
Здравствуйте, AndrewVK, Вы писали:

.>> Для какого экземляра A будут вызываться Foo/Bar из Find?


AVK>У Foo и Bar надо дописать static.


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

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


Дык в чем проблема? Отключи макросы которые написали индусы.

IT>>Но по сути это же просто обыкновенная затычка. Теперь оказывается нужно не только компилятор запускать, но ещё перед ним не забыть запустить инспектор.

C>А ты не забываешь запустить компиляцию перед запуском приложения?

А, что, это возможно? Вот EDI возможно. Например, в ночной сборке...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[47]: Являются ли макросы свидетельством недостаточной выр
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.07 14:40
Оценка: +1 :)
Здравствуйте, ., Вы писали:

.>Никто не сможет удержать разработчика приводить всё к void*. И что?


Ну, почему же? Отсутствие в языке void* отлично защищает программиста от его использования.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Являются ли макросы свидетельством недостаточной выр
От: EvilChild Ниоткуда  
Дата: 13.09.07 15:03
Оценка:
Здравствуйте, cl-user, Вы писали:

CU>Ок, так конкретнее. Но даже в таком варианте всё зависит от характера задачи. И к тому-же в языках, имеющих встроенные макросистемы, различные "встроенные" инструкции создаются именно на макрах — ибо зачем для одного и того-же иметь два инструмента?

А реально имея относительно минимальный набор (АлТД, ФВП в общем то, что есть в Standard ML) в статически типизированном языке и макросы докурутить всё остальное — type classes, fundeps,...?
now playing: The Streets — It’s Too Late
Re[18]: Являются ли макросы свидетельством недостаточной выр
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 13.09.07 15:25
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>А вот тут как раз есть форум по С++. Посмотри сколько траха с МП на шаблонах. Посмотри во что превратился Буст и т.п. А С++ действительно имеет более удобную для МП систему типов (допускающую целочисленные параметры в шаблонах).


При чём тут С++?

Оффтопик: целочисленные параметры в шаблонах — это, конечно, здорово, а над этими параметрами можно проводить стандартные операции над целыми числами для генерации нового типа?

L>>Я вот смои домыслы могу подвердить отсылкой к dependent types, предназначенных именно для уже неоднократно перечисленных мной примеров.


VD>Ты лучше сам этоти проповеди читай. Я как-то не проникаюсь.


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

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

L>>Просто в некоторых системах можно задавать тип — "список длины n", "список длины m", "список длины n+m". А в некоторых — нет.


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


В некоторых системах для описания типов используется тот же язык, что и основной, т.е. мы можем, например, писать функции над типами. Например, MapAppend
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Являются ли макросы свидетельством недостаточной выр
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 13.09.07 15:25
Оценка:
Здравствуйте, EvilChild, Вы писали:

CU>>Ок, так конкретнее. Но даже в таком варианте всё зависит от характера задачи. И к тому-же в языках, имеющих встроенные макросистемы, различные "встроенные" инструкции создаются именно на макрах — ибо зачем для одного и того-же иметь два инструмента?


EC>А реально имея относительно минимальный набор (АлТД, ФВП в общем то, что есть в Standard ML) в статически типизированном языке и макросы докурутить всё остальное — type classes, fundeps,...?


С помощью макросов?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Являются ли макросы свидетельством недостаточной выр
От: EvilChild Ниоткуда  
Дата: 13.09.07 15:27
Оценка:
Здравствуйте, lomeo, Вы писали:

L>С помощью макросов?

Ага. Т.е. расширять систему типов.
now playing: Mathew Jonson — Stop
Re[19]: Являются ли макросы свидетельством недостаточной выр
От: jazzer Россия Skype: enerjazzer
Дата: 14.09.07 03:02
Оценка: 4 (1)
Здравствуйте, lomeo, Вы писали:

L>При чём тут С++?


L>Оффтопик: целочисленные параметры в шаблонах — это, конечно, здорово, а над этими параметрами можно проводить стандартные операции над целыми числами для генерации нового типа?


В смысле? поясни на примере, что ты хочешь получить. Но скорее всего ответ — можно.
Например, из того, что пришло в голову навскидку, вот как можно реализовать быструю конкатенацию двух массивов (скажем, буферов) в третий с контролем длины при компиляции:
template<class T, int n1, int n2>
void array_copy_cat(T (&dest)[n1+n2], const T (&s1)[n1], const T (&s2)[n2])
{
  memcpy(dest,    s1, n1);
  memcpy(dest+n1, s2, n2);
}

int main()
{
  const int asd[] = {1,2,3};
  const int qwer[] = {4,5,6,7};
  int asdqwer[] = {1,2,3,4,5,6,7};
  int asdqwe[] = {1,2,3,4,5,6}; // всего 6 элементов, а надо 7
  
  array_copy_cat(asdqwer, asd, qwer);
  array_copy_cat(asdqwe, asd, qwer); // не скомпилируется
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[19]: Являются ли макросы свидетельством недостаточной выр
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.09.07 03:06
Оценка: 4 (1)
Здравствуйте, lomeo, Вы писали:
L>Оффтопик: целочисленные параметры в шаблонах — это, конечно, здорово, а над этими параметрами можно проводить стандартные операции над целыми числами для генерации нового типа?
Ну конечно же можно. И проводят — только в путь.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.