OberonCore https://forum.oberoncore.ru/ |
|
Оберон-07 https://forum.oberoncore.ru/viewtopic.php?f=115&t=615 |
Страница 8 из 12 |
Автор: | Valery Solovey [ Вторник, 28 Октябрь, 2008 15:55 ] |
Заголовок сообщения: | Re: Оберон-07 |
AVC писал(а): Valery Solovey писал(а): Во-первых, результат, передаваемый функцией, всё равно должен где-то храниться. Поэтому, использование явной переменной не приносит дополнительных расходов. Как правило, функция возвращает результат в определённом регистре, так что дополнительной переменной не требуется.Тем более в Обероне, где функции возвращают только значения скалярных типов. |
Автор: | Valery Solovey [ Вторник, 28 Октябрь, 2008 16:05 ] |
Заголовок сообщения: | Re: Оберон-07 |
AVC писал(а): ...И вот теперь Вирт вдруг принимает обратное решение, без нового обоснования (всё это обсуждалось и раньше). Причём выбранное слово CONST, IMHO, неудачно, т.к. константы и read-only переменные разные сущности. Приглядевшись по-внимательнее, я понял, что всё логично: CONST и VAR. Если вместо CONST использовать "-", тогда надо и VAR заменить на "*".Лично у меня сложилось впечатление, что Вирт просто не любит Оберон-2 и избавляется от сходных с ним черт в новом Обероне. В т.ч. от удачных. CONST и VAR используются для объявления переменных внутри области, а "-" и "*" - для фиксации характеристик объекта вне пределов области. И значение "-" для параметра процедуры не очень логичное : ). |
Автор: | Info21 [ Вторник, 28 Октябрь, 2008 19:08 ] |
Заголовок сообщения: | Re: Оберон-07 |
Vlad писал(а): А зря. Лучше один раз увидеть. Или боитесь, что там окажется все намного проще, чем вы думаете? Нет, я просто вспомнил анекдот про выдающегося математика И.М.Гельфанда: Читал он лекцию. Рассказал доказательство какой-то теоремы. Повернулся к аудитории: "Ну что, понято?" В ответ молчание. Тогда он со вздохом: "Ну, значит, не дадено." |
Автор: | Vlad [ Вторник, 28 Октябрь, 2008 19:28 ] |
Заголовок сообщения: | Re: Оберон-07 |
Info21 писал(а): Тогда он со вздохом: "Ну, значит, не дадено." Да, не всем выдающимся математикам дадена еще и педагогика... |
Автор: | Александр Ильин [ Вторник, 28 Октябрь, 2008 20:41 ] |
Заголовок сообщения: | Re: Оберон-07 |
Vlad писал(а): Info21 писал(а): Тогда он со вздохом: "Ну, значит, не дадено." Да, не всем выдающимся математикам дадена еще и педагогика... |
Автор: | Vlad [ Вторник, 28 Октябрь, 2008 20:56 ] |
Заголовок сообщения: | Re: Оберон-07 |
Александр Ильин писал(а): А-а-а! Так вот за счёт чего вы число отправленных сообщений набираете! А я-то придумываю какие-то аргументации, идеи пытаюсь генерировать, обогащать форум невысказанными наблюдениями. Оказывается, проще надо быть... : ) Ну извините, просто inf21 окончательно утомил своими замечаниями не по теме. |
Автор: | bohdant [ Вторник, 28 Октябрь, 2008 21:23 ] |
Заголовок сообщения: | Re: Оберон-07 |
Vlad писал(а): Ну извините, просто inf21 окончательно утомил своими замечаниями не по теме. Сегодня начал пробовать использовать Оберон-07. Ни каких затруднений описаных выше не ощутил. С типами - все нормально. "Проблемы с циклами" - вырезал бы все сообщения выше . Люди добрые - это специализированный язык! Не нужно раздувать вселенскую проблему!!! Он тупоориентирован на микроконтроллеры(если кто то соблаговолит посмотреть исходники, то сразу согласится). Не нужно с пеною у рта доказывать прописные истины, что 2х2=4; Я скажу прямо, тут теории = НЕТ. Главное практика! Если у вас генерится "плохой" код, то грош-цена компиллеру! Потому, что это микроконтроллеры!!! Т.к. вы тут не только по байтам можете "не вписаться" но и по тикам и фиг вам typeguard поможет |
Автор: | Geniepro [ Среда, 29 Октябрь, 2008 08:05 ] |
Заголовок сообщения: | Re: Оберон-07 |
bohdant писал(а): Не нужно с пеною у рта доказывать прописные истины, что 2х2=4; Верно, как сказал старик Лао: "Знающий не доказывает, доказывающий не знает." Эта фраза заставила меня пересмотреть некоторые мои жизненные позиции...
|
Автор: | AVC [ Среда, 29 Октябрь, 2008 23:01 ] |
Заголовок сообщения: | Re: Оберон-07 |
Valery Solovey писал(а): CONST и VAR используются для объявления переменных внутри области, а "-" и "*" - для фиксации характеристик объекта вне пределов области. И значение "-" для параметра процедуры не очень логичное : ). Как раз логичное: параметр "экспортируется" в процедуру. Впрочем, минус (как и квалификатор CONST) в принципе лишний, вводится только для удобства однопроходного компилятора. |
Автор: | Александр Ильин [ Четверг, 30 Октябрь, 2008 06:38 ] |
Заголовок сообщения: | Re: Оберон-07 |
AVC писал(а): Как раз логичное: параметр "экспортируется" в процедуру. :) Импортируется что-либо внутрь, а экспортируется - наружу. Зачем же инвертировать понятия?AVC писал(а): Впрочем, минус (как и квалификатор CONST) в принципе лишний, вводится только для удобства однопроходного компилятора. Вы ещё скажите, что любой экспорт только для чтения (из модулей, записей) делается для удобства однопроходного компилятора. При реализации процедуры я точно так же хочу, чтобы мне компилятор напомнил, если я случайно изменю то, что ранее решил оставить неизменным (например, передавая в другую процедуру как VAR то, что получил как CONST).
|
Автор: | AVC [ Четверг, 30 Октябрь, 2008 11:55 ] |
Заголовок сообщения: | Re: Оберон-07 |
Александр Ильин писал(а): Импортируется что-либо внутрь, а экспортируется - наружу. Зачем же инвертировать понятия? C точки зрения импортёра - внутрь, с точки зрения экспортёра - наружу. А на самом деле - это два взгляда на одно и то же явление. Александр Ильин писал(а): AVC писал(а): Впрочем, минус (как и квалификатор CONST) в принципе лишний, вводится только для удобства однопроходного компилятора. Вы ещё скажите, что любой экспорт только для чтения (из модулей, записей) делается для удобства однопроходного компилятора. При реализации процедуры я точно так же хочу, чтобы мне компилятор напомнил, если я случайно изменю то, что ранее решил оставить неизменным (например, передавая в другую процедуру как VAR то, что получил как CONST).Если Вы не хотите передавать переменную по ссылке (VAR), в Обероне есть возможность передать её по значению. Давайте рассмотрим, как компилятор Оберона (обычно) реализует передачу по значению аргумента структурного типа. При вызове процедуры этот аргумент передаётся по ссылке, а затем при необходимости копируется в стек вызываемой процедурой. Если этот аргумент используется только для чтения, то второй шаг (копирование) является лишним и просто исключается оптимизирующим компилятором. Т.е. это вопрос оптимизации. Единственная проблема - как осуществить эту оптимизацию с помощью однопроходного компилятора. Вот и изобретаем всякие разновидности "подмигивания" компилятору: аргументы с минусом или ключевым словом CONST. |
Автор: | Trurl [ Четверг, 30 Октябрь, 2008 12:57 ] |
Заголовок сообщения: | Re: Оберон-07 |
А давайте поставим вопрос по-дугому. С какой стати разрешать изменение параметра, переданного по значению? |
Автор: | AVC [ Четверг, 30 Октябрь, 2008 13:08 ] |
Заголовок сообщения: | Re: Оберон-07 |
Trurl писал(а): А давайте поставим вопрос по-дугому. С какой стати разрешать изменение параметра, переданного по значению? А почему бы и нет?
|
Автор: | Comdiv [ Четверг, 30 Октябрь, 2008 13:48 ] |
Заголовок сообщения: | Re: Оберон-07 |
Trurl писал(а): А давайте поставим вопрос по-дугому. С какой стати разрешать изменение параметра, переданного по значению? Меня это тоже всегда удивляло. На мой взгляд, более логичным был бы подход явного копирования в локальную переменную при необходимости. |
Автор: | AVC [ Четверг, 30 Октябрь, 2008 13:52 ] |
Заголовок сообщения: | Re: Оберон-07 |
AVC писал(а): Trurl писал(а): А давайте поставим вопрос по-дугому. С какой стати разрешать изменение параметра, переданного по значению? А почему бы и нет?Код: PROCEDURE F(x, y: INTEGER): INTEGER; Но идея запретить (без всяких "-" и CONST) изменять аргумент, переданный по значению, интересна. Может быть, так и надо сделать.
BEGIN IF x < y THEN x := y – x ELSE x := x – y END ; RETURN x END F |
Автор: | Vlad [ Четверг, 30 Октябрь, 2008 15:55 ] |
Заголовок сообщения: | Re: Оберон-07 |
AVC писал(а): Но идея запретить (без всяких "-" и CONST) изменять аргумент, переданный по значению, интересна. Подкину еще один аргумент в пользу запрета: постусловие (в виде ASSERT), зависящее от аргументов, будет более читабельным, если есть уверенность, что аргументы неизменны. P.S. В своей практике всячески избегаю изменения аргументов. Но везде писать "const" - лишний мусор. Предпочел бы иметь такое поведение по умолчанию. |
Автор: | Илья Ермаков [ Четверг, 30 Октябрь, 2008 16:28 ] |
Заголовок сообщения: | Re: Оберон-07 |
Я вообще не представляю, для чего может понадобиться изменение аргументов-копий. Запретить - и точка. |
Автор: | Vlad [ Четверг, 30 Октябрь, 2008 16:30 ] |
Заголовок сообщения: | Re: Оберон-07 |
Илья Ермаков писал(а): Я вообще не представляю, для чего может понадобиться изменение аргументов-копий. Запретить - и точка. Есть тут оптимизаторы, которых парит количество локальных переменных |
Автор: | AVC [ Четверг, 30 Октябрь, 2008 17:11 ] |
Заголовок сообщения: | Re: Оберон-07 |
Илья Ермаков писал(а): Я вообще не представляю, для чего может понадобиться изменение аргументов-копий. Запретить - и точка. Всё же стоит подумать.Мне кажется, для аргументов неструктурных (базовых) типов изменения вполне допустимы. Вот (глупый) пример: Код: PROCEDURE RepeatSomething(times: INTEGER); Неструктурные аргументы располагаются в стеке или в регистре; если мы их изменим, ничего не испортим.BEGIN WHILE times > 0 DO DoSomething; DEC(times) END END Times; А вот со структурными иначе. К тому же, переданные по значению, они вообще имеют право быть расположеными в памяти "только для чтения". Как поступать с переданными по значению указателями? Их можно использовать для указания объекта (в Обероне-1 это основной способ): Код: TYPE
Object = POINTER TO ObjectDesc; ... PROCEDURE handle(me: Object; VAR msg: Message); ... object.handle(object, message); |
Автор: | AVC [ Пятница, 31 Октябрь, 2008 12:32 ] |
Заголовок сообщения: | Re: Оберон-07 |
По поводу передачи по значению записей я, может быть, погорячился. По меньшей мере, при этом пропадает информация о расширении типа. В XDS просто происходит проекция (т.е. копирование ) расширенного типа на тип аргумента. А в КП, кажется, передача по значению расширяемых (EXTENSIBLE) записей вообще невозможна... В таких обстоятельствах модификатор CONST, возможно, вполне разумен. |
Страница 8 из 12 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |