OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 17 Ноябрь, 2017 22:20

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 233 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11, 12  След.
Автор Сообщение
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Вторник, 28 Октябрь, 2008 15:55 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1522
Откуда: Беларусь, Минск
AVC писал(а):
Valery Solovey писал(а):
Во-первых, результат, передаваемый функцией, всё равно должен где-то храниться. Поэтому, использование явной переменной не приносит дополнительных расходов.
Как правило, функция возвращает результат в определённом регистре, так что дополнительной переменной не требуется.
Тем более в Обероне, где функции возвращают только значения скалярных типов.
Нет проблем связать единственную переменную, содержащую результат функции, не с адресом в памяти, а с регистром. Или есть проблемы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Вторник, 28 Октябрь, 2008 16:05 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1522
Откуда: Беларусь, Минск
AVC писал(а):
...И вот теперь Вирт вдруг принимает обратное решение, без нового обоснования (всё это обсуждалось и раньше). Причём выбранное слово CONST, IMHO, неудачно, т.к. константы и read-only переменные разные сущности.
Лично у меня сложилось впечатление, что Вирт просто не любит Оберон-2 и избавляется от сходных с ним черт в новом Обероне. В т.ч. от удачных. :(
Приглядевшись по-внимательнее, я понял, что всё логично: CONST и VAR. Если вместо CONST использовать "-", тогда надо и VAR заменить на "*".

CONST и VAR используются для объявления переменных внутри области, а "-" и "*" - для фиксации характеристик объекта вне пределов области. И значение "-" для параметра процедуры не очень логичное : ).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Вторник, 28 Октябрь, 2008 19:08 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7712
Откуда: Троицк, Москва
Vlad писал(а):
А зря. Лучше один раз увидеть. Или боитесь, что там окажется все намного проще, чем вы думаете? :)

Нет, я просто вспомнил анекдот про выдающегося математика И.М.Гельфанда:
Читал он лекцию.
Рассказал доказательство какой-то теоремы.
Повернулся к аудитории: "Ну что, понято?"
В ответ молчание.
Тогда он со вздохом: "Ну, значит, не дадено."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Вторник, 28 Октябрь, 2008 19:28 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Info21 писал(а):
Тогда он со вздохом: "Ну, значит, не дадено."


Да, не всем выдающимся математикам дадена еще и педагогика...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Вторник, 28 Октябрь, 2008 20:41 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2284
Откуда: Россия, Санкт-Петербург
Vlad писал(а):
Info21 писал(а):
Тогда он со вздохом: "Ну, значит, не дадено."
Да, не всем выдающимся математикам дадена еще и педагогика...
А-а-а! Так вот за счёт чего вы число отправленных сообщений набираете! А я-то придумываю какие-то аргументации, идеи пытаюсь генерировать, обогащать форум невысказанными наблюдениями. Оказывается, проще надо быть... : )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Вторник, 28 Октябрь, 2008 20:56 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Александр Ильин писал(а):
А-а-а! Так вот за счёт чего вы число отправленных сообщений набираете! А я-то придумываю какие-то аргументации, идеи пытаюсь генерировать, обогащать форум невысказанными наблюдениями. Оказывается, проще надо быть... : )


Ну извините, просто inf21 окончательно утомил своими замечаниями не по теме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Вторник, 28 Октябрь, 2008 21:23 
Аватара пользователя

Зарегистрирован: Суббота, 15 Март, 2008 20:00
Сообщения: 293
Откуда: Київ, Україна
Vlad писал(а):
Ну извините, просто inf21 окончательно утомил своими замечаниями не по теме.


Сегодня начал пробовать использовать Оберон-07. Ни каких затруднений описаных выше не ощутил.
С типами - все нормально.
"Проблемы с циклами" - вырезал бы все сообщения выше :twisted: .

Люди добрые - это специализированный язык! Не нужно раздувать вселенскую проблему!!!
Он тупоориентирован на микроконтроллеры(если кто то соблаговолит посмотреть исходники, то сразу согласится).
Не нужно с пеною у рта доказывать прописные истины, что 2х2=4;

Я скажу прямо, тут теории = НЕТ. Главное практика!

Если у вас генерится "плохой" код, то грош-цена компиллеру! Потому, что это микроконтроллеры!!!
Т.к. вы тут не только по байтам можете "не вписаться" но и по тикам и фиг вам typeguard поможет ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 29 Октябрь, 2008 08:05 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
bohdant писал(а):
Не нужно с пеною у рта доказывать прописные истины, что 2х2=4;
Верно, как сказал старик Лао: "Знающий не доказывает, доказывающий не знает." Эта фраза заставила меня пересмотреть некоторые мои жизненные позиции... :mrgreen:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 29 Октябрь, 2008 23:01 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Valery Solovey писал(а):
CONST и VAR используются для объявления переменных внутри области, а "-" и "*" - для фиксации характеристик объекта вне пределов области. И значение "-" для параметра процедуры не очень логичное : ).
Как раз логичное: параметр "экспортируется" в процедуру. :)
Впрочем, минус (как и квалификатор CONST) в принципе лишний, вводится только для удобства однопроходного компилятора.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 06:38 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2284
Откуда: Россия, Санкт-Петербург
AVC писал(а):
Как раз логичное: параметр "экспортируется" в процедуру. :)
Импортируется что-либо внутрь, а экспортируется - наружу. Зачем же инвертировать понятия?
AVC писал(а):
Впрочем, минус (как и квалификатор CONST) в принципе лишний, вводится только для удобства однопроходного компилятора.
Вы ещё скажите, что любой экспорт только для чтения (из модулей, записей) делается для удобства однопроходного компилятора. При реализации процедуры я точно так же хочу, чтобы мне компилятор напомнил, если я случайно изменю то, что ранее решил оставить неизменным (например, передавая в другую процедуру как VAR то, что получил как CONST).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 11:55 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Александр Ильин писал(а):
Импортируется что-либо внутрь, а экспортируется - наружу. Зачем же инвертировать понятия?
C точки зрения импортёра - внутрь, с точки зрения экспортёра - наружу. А на самом деле - это два взгляда на одно и то же явление. :)

Александр Ильин писал(а):
AVC писал(а):
Впрочем, минус (как и квалификатор CONST) в принципе лишний, вводится только для удобства однопроходного компилятора.
Вы ещё скажите, что любой экспорт только для чтения (из модулей, записей) делается для удобства однопроходного компилятора. При реализации процедуры я точно так же хочу, чтобы мне компилятор напомнил, если я случайно изменю то, что ранее решил оставить неизменным (например, передавая в другую процедуру как VAR то, что получил как CONST).

Если Вы не хотите передавать переменную по ссылке (VAR), в Обероне есть возможность передать её по значению.
Давайте рассмотрим, как компилятор Оберона (обычно) реализует передачу по значению аргумента структурного типа.
При вызове процедуры этот аргумент передаётся по ссылке, а затем при необходимости копируется в стек вызываемой процедурой.
Если этот аргумент используется только для чтения, то второй шаг (копирование) является лишним и просто исключается оптимизирующим компилятором. Т.е. это вопрос оптимизации.
Единственная проблема - как осуществить эту оптимизацию с помощью однопроходного компилятора. Вот и изобретаем всякие разновидности "подмигивания" компилятору: аргументы с минусом или ключевым словом CONST.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 12:57 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 969
А давайте поставим вопрос по-дугому. С какой стати разрешать изменение параметра, переданного по значению?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 13:08 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Trurl писал(а):
А давайте поставим вопрос по-дугому. С какой стати разрешать изменение параметра, переданного по значению?
А почему бы и нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 13:48 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 481
Откуда: Киев
Trurl писал(а):
А давайте поставим вопрос по-дугому. С какой стати разрешать изменение параметра, переданного по значению?


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 13:52 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
AVC писал(а):
Trurl писал(а):
А давайте поставим вопрос по-дугому. С какой стати разрешать изменение параметра, переданного по значению?
А почему бы и нет?
Я отталкиваюсь от примера из Differences between Oberon-07 and Oberon (pdf):
Код:
PROCEDURE F(x, y: INTEGER): INTEGER;
BEGIN
    IF x < y THEN x := y – x
    ELSE x := x – y
    END ;
RETURN x END F
Но идея запретить (без всяких "-" и CONST) изменять аргумент, переданный по значению, интересна. Может быть, так и надо сделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 15:55 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
AVC писал(а):
Но идея запретить (без всяких "-" и CONST) изменять аргумент, переданный по значению, интересна.


Подкину еще один аргумент в пользу запрета: постусловие (в виде ASSERT), зависящее от аргументов, будет более читабельным, если есть уверенность, что аргументы неизменны.

P.S. В своей практике всячески избегаю изменения аргументов. Но везде писать "const" - лишний мусор. Предпочел бы иметь такое поведение по умолчанию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 16:28 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8861
Откуда: Россия, Орёл
Я вообще не представляю, для чего может понадобиться изменение аргументов-копий. Запретить - и точка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 16:30 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Я вообще не представляю, для чего может понадобиться изменение аргументов-копий. Запретить - и точка.


Есть тут оптимизаторы, которых парит количество локальных переменных ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 30 Октябрь, 2008 17:11 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Илья Ермаков писал(а):
Я вообще не представляю, для чего может понадобиться изменение аргументов-копий. Запретить - и точка.
Всё же стоит подумать.
Мне кажется, для аргументов неструктурных (базовых) типов изменения вполне допустимы.
Вот (глупый) пример:
Код:
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);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Пятница, 31 Октябрь, 2008 12:32 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
По поводу передачи по значению записей я, может быть, погорячился. :oops:
По меньшей мере, при этом пропадает информация о расширении типа.
В XDS просто происходит проекция (т.е. копирование :) ) расширенного типа на тип аргумента.
А в КП, кажется, передача по значению расширяемых (EXTENSIBLE) записей вообще невозможна...
В таких обстоятельствах модификатор CONST, возможно, вполне разумен.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 233 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11, 12  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB