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/ |