OberonCore
https://forum.oberoncore.ru/

Перегрузка операций и псевдомодули
https://forum.oberoncore.ru/viewtopic.php?f=61&t=1100
Страница 1 из 1

Автор:  QWERTYProgrammer [ Воскресенье, 20 Июль, 2008 19:38 ]
Заголовок сообщения:  Перегрузка операций и псевдомодули

Илья Ермаков писал(а):
Эх, попёр Гуткнехт со товарищи спорным путём введения этих самых перегрузок...


Можно пояснить подробнее, в чем именно заключается спорность?

Автор:  Илья Ермаков [ Воскресенье, 20 Июль, 2008 21:20 ]
Заголовок сообщения:  Re: Генерация Дракон => Active Oberon

"Организьм ослабляется алкоголем, никотином... излишествами нехорошими" (С)
(Шутка. Не надо накидываться с обвинениями в "фанатичном аскетизме". :-) )

А если серьёзно...
Хотим ввести некоторое неочевидное (по крайней мере, только для частного класса задач выгодное) удобство... Смотрим - может быть оно ничего не стоит? Ан нет - оно цепляет принципиальные вещи: принцип явной квалификации импортированных сущностей (т.к. по классич. законам Оберона надо бы писать Module."+" - но ясное дело, что тогда этот "+" никому нафиг не сдался) и правилам видимости (непонятно, как и по каким правилам включать в область видимости внешние операторы, как разрешать перегрузки и т.п.).

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

Я думаю, что Гуткнехт, будучи специалистом экстра-класса, легко сбалансировал в реализации этой перегрузки операторов. Технически сбалансировал. Но концептуальная язвинка остаётся... В следующий раз захотим ввести что-то ещё - ещё компромиссы в языке - а потом проблемы... Какие?

Почитайте следующие книжки, где подробно разобрана система модульности и типизации Ады (казалось бы, более мощная) и Модулы-2 - и в итоге не в пользу Ады, где открываются тонкие дырки:
Янг "Алгоритмические языки реального времени",
Кауфман "Языки программирования" (ВМиК МГУ)
(см. обе здесь viewtopic.php?f=6&t=1090&p=17330).

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

Автор:  QWERTYProgrammer [ Вторник, 22 Июль, 2008 22:09 ]
Заголовок сообщения:  Re: Генерация Дракон => Active Oberon

Спасибо, понятно.

Хотя есть, конечно, случаи, например, матричные операции или комплексные числа, где переопределение математических операций очень естественно. И наоборот, если его нет получается какое-то уродство - достаточно посмотреть на реализацию комплексных чисел в Lib-е.

С другой стороны, можно было бы просто ввести комплексные числа в язык, не вводя при этом operator overloading. Вроде когда-то для OpenVMS так и делали.

Автор:  Vlad [ Вторник, 22 Июль, 2008 22:15 ]
Заголовок сообщения:  Re: Генерация Дракон => Active Oberon

Илья Ермаков писал(а):
А если серьёзно...
Хотим ввести некоторое неочевидное (по крайней мере, только для частного класса задач выгодное) удобство... Смотрим - может быть оно ничего не стоит? Ан нет - оно цепляет принципиальные вещи: принцип явной квалификации импортированных сущностей (т.к. по классич. законам Оберона надо бы писать Module."+" - но ясное дело, что тогда этот "+" никому нафиг не сдался) и правилам видимости (непонятно, как и по каким правилам включать в область видимости внешние операторы, как разрешать перегрузки и т.п.).


Достаточно ввести понятие "функция-член" ;) Ну или "связанная процедура" ;) И сказать, что перегруженный оператор может быть только таким.

Автор:  Илья Ермаков [ Вторник, 22 Июль, 2008 22:17 ]
Заголовок сообщения:  Re: Генерация Дракон => Active Oberon

Вообще, тут интересно копнуть в сторону модульности компилятора... Т.е. возможности для нек. спектра задач относительно легко достроить компилятор. Чтоб использовалось по типу IMPORT COM в Блэкбоксе.

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

Автор:  QWERTYProgrammer [ Суббота, 26 Июль, 2008 13:50 ]
Заголовок сообщения:  Re: Генерация Дракон => Active Oberon

Т.е. компилятор тоже может расширяться за счет импорта доп. модулей?
Скажем, после IMPORT Complex могли бы стать доступными новые базовые типы (COMPLEX) и операции с ними?

Автор:  Илья Ермаков [ Суббота, 26 Июль, 2008 13:58 ]
Заголовок сообщения:  Re: Генерация Дракон => Active Oberon

Ну, это не импорт модулей, а так называемых псевдомодулей.
В Блэкбоксе, например, таковых два - SYSTEM (машинные средства) и COM (Direct-To-COM Compiler).

Это типа директивы компилятору.
Проработанной архитектуры для красивого расширения пока нет. Т.е. просто внутри модулей компилятора BlackBox где-то стоят IF SYSTEM_указан THEN дополнительно_понимаем_и_умеем_то_то... А хорошо бы это проработать...

Автор:  QWERTYProgrammer [ Суббота, 26 Июль, 2008 17:42 ]
Заголовок сообщения:  Re: Генерация Дракон => Active Oberon

Интересно, и в каком модуле стоят такие IF SYSTEM_указан THEN ...?
Вроде в DevCompiler на первый взгляд такого нет.

Автор:  Илья Ермаков [ Суббота, 26 Июль, 2008 17:58 ]
Заголовок сообщения:  Re: Генерация Дракон => Active Oberon

Начиная от DevCPT.Import и вглубь вплоть до кодогенератора...

Автор:  QWERTYProgrammer [ Воскресенье, 27 Июль, 2008 19:12 ]
Заголовок сообщения:  Re: Генерация Дракон => Active Oberon

Спасибо! Как говорится, лучше один раз увидеть...
Правда в Dev-подсистему я бы даже для такого несложного расширения, как COMPLEX, наверное бы не полез.

Кстати, там же есть еще один ELSIF name = "JAVA". Это что тоже псевдомодуль??

Автор:  Илья Ермаков [ Воскресенье, 27 Июль, 2008 19:17 ]
Заголовок сообщения:  Re: Генерация Дракон => Active Oberon

В публичной версии BlackBox его как бы нет (недокументирован и неизвестно, может ли функционировать или нет...).

У Ominc имеется генератор в Яву и какие-то среды для совместного исполнения КП и Явы. Скорее всего, всё это ушло под мобильную ОС JBed их дочерней компании Esmertec (esmertec.com).

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