OberonCore
https://forum.oberoncore.ru/

О парадоксе Блаба и макросах
https://forum.oberoncore.ru/viewtopic.php?f=61&t=1914
Страница 4 из 8

Автор:  Илья Ермаков [ Пятница, 02 Октябрь, 2009 10:30 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Речь о том, что при некотором наборе инструментария макросы становятся реализуемой библиотечно частностью. Зачем их впаивать в язык и компилятор?

Теперь я поставлю задачу агитаторам за макросы. Хочу, чтобы макрос был не текстовым, а графическим. Прямо в программу вставлять визуальные схемы, по которым макропроцессор генерирует текст. Ваше решение? С Немерлями, Лиспами, чем угодно? Я в ББ - на раз.

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

Автор:  Info21 [ Пятница, 02 Октябрь, 2009 10:33 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Евгений Темиргалеев писал(а):
Предложенный Ермаковым вариант решения на ББ/КП:
* преобразовать мат. выражение в текст процедуры-функции на КП (и завернуть в модуль ест-но)
* передать текст штаному компилятору (получаем кодовый файл модуля)
* штаными средствами вызвать функцию из этого модуля

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

Разумеется, все делается типобезопасным образом.

У Ильи Евгеньевича всё время руки чешутся позаковыристей -- что здесь Meta вылезла, что с Черепашкой...
Ух, молодёжь, ужо вам! 8)

Автор:  Info21 [ Пятница, 02 Октябрь, 2009 10:34 ]
Заголовок сообщения:  Re: О парадоксе Блаба

Валерий Лаптев писал(а):
А в программировании зарождается "интегральное исчисление".
Поверю, когда увижу.
Библиотеки не предлагать :)

Автор:  Geniepro [ Пятница, 02 Октябрь, 2009 10:54 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Илья Ермаков писал(а):
Теперь я поставлю задачу агитаторам за макросы. Хочу, чтобы макрос был не текстовым, а графическим. Прямо в программу вставлять визуальные схемы, по которым макропроцессор генерирует текст. Ваше решение? С Немерлями, Лиспами, чем угодно? Я в ББ - на раз.
И как у Вас эта схема будет представлена? В растровом, векторном формате? Или всё же в виде некоего внутреннего кода (AST, например), который просто визуализируется какой-то библиотекой? В этом случае макро-программистам тоже понадобится написать аналогичную библиотеку, как и Вам (Вы ведь её не с потолка взяли, а делали. В 16 страницах никаких упоминаний о Драконе нет...).

Автор:  Илья Ермаков [ Пятница, 02 Октябрь, 2009 11:33 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

У меня она будет представлена в стандартном документном формате среды. Каким образом я отделю модель от вьюшки (что будет в модели и т.п.) - по ситуации. А инструмент - будет распространяться как компонент к этой среде.

Пример же текстовых макросов - Рефал-0. Полноценный пример.

Всё время какая-то дурацкая частная "аргументация", против базиса, работающего везде.

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

Автор:  Peter Almazov [ Пятница, 02 Октябрь, 2009 12:57 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Должен заметить, что у защитников макросов есть один логический изъян. Дело обстоит так: сначала создается язык, расширяемый макросами. Затем адепты (с полными на то основанием!) утверждают: "Макросы – это наше все, с помошью макросов мы можем сделать кучу полезных вещей". Но при этом вопрос, не был ли ошибочным сам путь – создание языка, расширяемого макросами - остается открытым.

У макросов есть фундаментальный недостаток – они создают еще один слой, дополнительную сложность, еще один источник ошибок, весьма специфических и, часто, неожиданных. Причем традиционные методы верификации программ здесь не работают. Только не надо говорить мне "Надо все делать правильно, тогда у вас не будет никаких ошибок!" Во-первых, так можно сказать о любой деятельности. Во-вторых, речь и идет о том, что появляется лишний или, скажем так, дополнительный слой, в котором надо все делать правильно.
Аргументы в пользу макросов сводятся к тому, что их достоинства с лихвой перевешивают этот недостаток. Но о цене этих достоинств я уже сказал выше.

Автор:  Иван Кузьмицкий [ Пятница, 02 Октябрь, 2009 13:06 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Peter Almazov писал(а):
У макросов есть фундаментальный недостаток – они создают еще один слой, дополнительную сложность, еще один источник ошибок, весьма специфических и, часто, неожиданных.


Вот-вот. Как сейчас помню - написание своих шаблонов в Clarion было приличной головной болью.

Автор:  Geniepro [ Пятница, 02 Октябрь, 2009 13:29 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Peter Almazov писал(а):
Должен заметить, что у защитников макросов есть один логический изъян. Дело обстоит так: сначала создается язык, расширяемый макросами. Затем адепты (с полными на то основанием!) утверждают: "Макросы – это наше все, с помошью макросов мы можем сделать кучу полезных вещей". Но при этом вопрос, не был ли ошибочным сам путь – создание языка, расширяемого макросами - остается открытым.
Вообще-то это главный принцип работы лисперов -- построить (с помощью макросов) на Лиспе язык предметной области и решать задачу уже на этом языке. Для лисперов этот вопрос является по определению закрытым, так как это и есть их путь...

Peter Almazov писал(а):
У макросов есть фундаментальный недостаток – они создают еще один слой, дополнительную сложность, еще один источник ошибок, весьма специфических и, часто, неожиданных.
У Вас есть опыт работы с макросами лиспа или хотя бы немерле?
Чем ошибки макросов так принципиально отличаются от ошибок в библиотеках?

Пол Грэм где-то писал, что макросы следует создавать в том и только том случае, если они уменьшают код раз в двадцать, не меньше.

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

Автор:  Валерий Лаптев [ Пятница, 02 Октябрь, 2009 14:17 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

И еще раз повторю.
ББ-шники почему-то упорно сворачивают к текстовым макросам. А речь-то идет о вещах, подобных смешанным вычитслениям Ершова, что не есть текстовые макросы.
И Genirpro верно написал:
Цитата:
Вообще-то это главный принцип работы лисперов -- построить (с помощью макросов) на Лиспе язык предметной области и решать задачу уже на этом языке.

Пару-тройку последних лет Мартин Фаулер пишет о DSL - Domain чего-то там Language - язык предметной области.
Эти самые макросы (НЕ ТЕКСТОВЫЕ!) позволяют этот самый DSL построить в рамках языка.

Автор:  Geniepro [ Пятница, 02 Октябрь, 2009 14:48 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Валерий Лаптев писал(а):
Пару-тройку последних лет Мартин Фаулер пишет о DSL - Domain чего-то там Language - язык предметной области.
domain-specific language

Автор:  Valery Solovey [ Пятница, 02 Октябрь, 2009 14:58 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

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

Автор:  Info21 [ Пятница, 02 Октябрь, 2009 15:02 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

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

Автор:  Geniepro [ Пятница, 02 Октябрь, 2009 15:25 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Valery Solovey писал(а):
Достоинство макрокоманд - не требуется безусловных переходов (и сохранения регистров в "некоторых архитектурах").

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

Автор:  Валерий Лаптев [ Пятница, 02 Октябрь, 2009 15:33 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

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

Нет. Это тот же подход, что и у оберонщиков (надо - напишем). Только не в рамках среды, а в рамках языка. Нет в немерле встроенной операции AND - сейчас напишем. Если нужна. А если не нужна - и не будем писать. Обойдемся стандартной операцией языка match (сопоставление с образцом).

Автор:  Algo [ Пятница, 02 Октябрь, 2009 17:10 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Валерий Лаптев писал(а):
...Нет в немерле встроенной операции AND - сейчас напишем. Если нужна. А если не нужна - и не будем писать. Обойдемся стандартной операцией языка match (сопоставление с образцом).

Посмотрел макросы Немерле - красиво. Когда-то, курсе эдак на 2-м, думал о чем-то подобном, разумеется, более примитивном. А потом эти думы потихоньку отпали.
Не отпускает ощущение, что макросы это инструмент для создания/модификации инструментов, или даже инструмент для создания инструментов для создания инструментов. Причём формализм не слабый.
А надо ли? Надо ли иметь фабрику, напичканную прецизионными станками с ЧПУ, для модификации молотка под особые гвозди, вместо того, что бы пойти и забить их, возможно слегка напрягшись, стандартным? Конечно, такая фабрика может обоснованно понадобиться, например, при постройке звездолёта. Но тогда эта фабрика будет плодом серьёзнейшей и централизованной разработки, специально заточенной под "звёздные молотки" (новой версией языка или специализированным языком).
Если же идти по дороге макросов, можно и мета-макросы придумать, и мета-мета-типы, ведь они крайне необходимы для упрощения работы с макросами и мета-типами.
Илья Ермаков показал, как можно решить одну из задач. Я изъянов не заметил, и просто и работает. Так и с другими можно расправиться. Всё-таки, компактный компилятор, всё время находящийся под мышкой - вещь! Которая как раз и позволяет выйти за рамки языка простым способом.

Автор:  kreol [ Пятница, 02 Октябрь, 2009 18:11 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Цитата:
Илья Ермаков показал, как можно решить одну из задач. Я изъянов не заметил, и просто и работает.

Вирт показал, как можно написать быструю сортировку через итерации. Я изъянов не заметил, и просто, и работатет.
И зачем только нужна рекурсия?
Рекурсия, кстати, как понятие гораздо сложнее, чем макросы.

Извините, не сдержался. Вечером подробно отвечу на посты выше.

Автор:  Algo [ Пятница, 02 Октябрь, 2009 18:44 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

kreol писал(а):
Вирт показал, как можно написать быструю сортировку через итерации. Я изъянов не заметил, и просто, и работатет.
И зачем только нужна рекурсия?
Рекурсия, кстати, как понятие гораздо сложнее, чем макросы.

Извините, не сдержался. Вечером подробно отвечу на посты выше.

Рекурсия сложнее? Не согласен. Что может быть проще рекурсии. Только итерация.
Да и в компиляторе её просто реализовать, почти ни чего делать для этого не надо.

Не смотрел реализации Вирта, не знаю. Но недавно как раз читал о способах улучшения качества быстрой сортировки. Рекомендуют одну ветвь рекурсии убрать в цикл, а рекурсивно сортировать только меньшую часть массива. В результате глубина стека не будет превышать log2(N), поэтому достаточно простую и максимально быструю реализацию со стеком фиксированного размера, сделать можно.
Не подумайте, что я против рекурсии. Очень элегантное средство, от Бога :). Но считаю, что аналогия не корректная, рекурсия это действительно очень просто :-).

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

P.S. Всё-таки, очень жаль, что нельзя (или очень сложно) провести всеобъемлющие объективные эксперименты, с результатами которых будут вынуждены согласиться все.
Эксперименты на тему: кто, в среднем, быстрее И качестве пишет хорошо (в смысле скорости) работающие программы? Кто использует макросы, дженерики, исключительные ситуации, ФП, ИП, да те же breakи и множественные return или нет? (Шёпотом: я за дженерики).
А пока всё это очень нечётко. Утверждать точно, можно лишь, что языки, в лучшем случае, эквивалентны машине Тьюринга, а время написания программ - конечно :-).

Автор:  Galkov [ Пятница, 02 Октябрь, 2009 19:11 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Евгений Темиргалеев писал(а):
Предложенный Ермаковым вариант решения на ББ/КП:
.........
Мне понятен код, предложенный Ильей. Вопрос у меня не в этом.
Где взять компилятор, даже и не в синтаксисе КП, или генерация ДКА по регулярному выражению (или еще фиг его знает чего) - не вопрос.
Считаем априори, что оно есть (а если нет, напишем - делов-то)
Вопрос в том, что с какого такого перепугу пользователь модуля вдруг начнет применять его неким хитромудрым способом.
Не начнет, если не он автор модуля.


Algo писал(а):
Илья Ермаков показал, как можно решить одну из задач. Я изъянов не заметил, и просто и работает
А я заметил
Илья покусился на святое: на суверенное право пользователя модуля, данное ему при рождении - НЕ ЗНАТЬ внутренних заморочек модуля.
А знать лишь интерфейс.
Если уж это называется надежное программирование....

На тебе - при стечении каких-то обстоятельств (никто, кроме автора модуля, этих обстоятельств не знает) лучше делать не так, а вот эдак: не запускать чего-то в Run-Time, но дополнительно запустить чего-то у разработчика, и добавить результаты этого запуска в Target, рассчитывая при этом на некоторую результирующую экономию/эффективность

Автор:  Algo [ Пятница, 02 Октябрь, 2009 20:15 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Galkov писал(а):
А я заметил
Илья покусился на святое: на суверенное право пользователя модуля, данное ему при рождении - НЕ ЗНАТЬ внутренних заморочек модуля.
А знать лишь интерфейс.
Если уж это называется надежное программирование....

О каких внутренностях модуля ему придётся знать? У него будут две процедуры CompileExpr и CalcExpr с в меняемыми параметрами. Вы имели ввиду, что перед компиляцией надо кликнуть коммандер, чтобы выполнить макрос? Мда, это проблема. Но насколько это действительно сложно, и насколько часто это придётся делать? Вы что, хотите, чтобы всё было как у героя амер. фильмов - сумасшедшего учёного? Чтобы на кухне сразу под рукой оказывалась ложка, после небольшого толчка расстанавливались тарелки и чашки, запускался процесс кипячения и манипулятор бросал еду коту? Уверен, что вы напрягаетесь это сделать сами: подвигать руками, достать из ящика. Ибо это проще, дешевле и предсказуемее.

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

Как обычно, столкновение разных философских позиций.

Автор:  Евгений Темиргалеев [ Пятница, 02 Октябрь, 2009 20:36 ]
Заголовок сообщения:  Re: О парадоксе Блаба и макросах

Galkov писал(а):
Евгений Темиргалеев писал(а):
Предложенный Ермаковым вариант решения на ББ/КП:
.........
Мне понятен код, предложенный Ильей. Вопрос у меня не в этом.
...Не начнет, если не он автор модуля....
А знать лишь интерфейс...
В том решении, которое приведено указанных Вами проблем нет. Но не могу утверждать, что понял Вашу задачу правильно. Опишите её поточнее и приведите пример использования Вашего решения.

Страница 4 из 8 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/