OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 13:44

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




Начать новую тему Ответить на тему  [ Сообщений: 234 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 12  След.
Автор Сообщение
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 21 Ноябрь, 2007 18:57 

Зарегистрирован: Среда, 29 Август, 2007 11:04
Сообщения: 91
Борис Рюмшин писал(а):
А что делать в случае:
Код:
PROCEDURE Check(IN rec: Record): INTEGER;
BEGIN
  IF cond0 THEN RESULT := res0
  ELSIF cond1 THEN RESULT := res1
  ELSIF cond2 THEN RESULT := res2
  END
END Check;

:?:

Это ошибка, о которой должен сообщить компилятор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 21 Ноябрь, 2007 19:03 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Дмитрий Сурков писал(а):
Это ошибка, о которой должен сообщить компилятор.

Понятное дело, что ошибка... вот только отслеживать такое в компиляторе невозможно. Как определить, что условие может быть таким, что ни один вариант не подойдёт (у меня, возможно, склероз, но мы где-то здесь это уже обсуждали)? Формально - процедура корректна.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 21 Ноябрь, 2007 19:05 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
На всякий случай: ELSE не является обязательным и делать его таковым не рентабельно. :)


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

Зарегистрирован: Среда, 29 Август, 2007 11:04
Сообщения: 91
Борис Рюмшин писал(а):
Дмитрий Сурков писал(а):
Это ошибка, о которой должен сообщить компилятор.

Понятное дело, что ошибка... вот только отслеживать такое в компиляторе невозможно. Как определить, что условие может быть таким, что ни один вариант не подойдёт (у меня, возможно, склероз, но мы где-то здесь это уже обсуждали)? Формально - процедура корректна.

Формально оператор IF..THEN корректен, а некорректна процедура. Компилятор сообщит не об отсутствии блока ELSE, а о возможной ситуации, когда значение RESULT неопределено. Это легко отслеживается и ничем не отличается от проверки инициализации OUT-параметров.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 21 Ноябрь, 2007 19:51 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Хорошо, чем с точки зрения компилятора отличаются эти два варианта:
Код:
PROCEDURE Check(IN rec: Record): INTEGER;
BEGIN
  IF cond0 THEN RESULT := res0
  ELSIF cond1 THEN RESULT := res1
  ELSIF cond2 THEN RESULT := res2
  END
END Check;

и
Код:
PROCEDURE Check(IN rec: Record): INTEGER;
BEGIN
  IF cond0 THEN RESULT := res0
  ELSIF cond1 THEN RESULT := res1
  ELSE RESULT := res2
  END
END Check;
:?:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 21 Ноябрь, 2007 19:56 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Это, кстати, к вопросу об оптимизации и усложнении компилятора. Для подробного анализа подобных выкрутасов потребуется несколько проходов, и не исключено, что в результате ошибок при конструировании такого компилятора, возникнут нетривиальные побочные эффекты с синтаксическими конструкциями.


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

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


Да я не про тесты. Я про то, что результат, как правило, получается не в результате каких-то инкрементальных действий над одной переменной, а как комбинация результатов промежуточных вычислений. Поэтому проверяется, как правило, результаты промежуточных вычислений. И RETURN этому никак не мешает.

Valery Solovey писал(а):
А как насчёт того факта, что признаком дурного тона при программировании на Си считается объявлять переменные где-либо не в начале подпрограммы?


Не знаю как на С, а на С++ объявление по месту - это как раз признак хорошего тона. Подозреваю, что ты наслушался советов старого паскалиста :)

Valery Solovey писал(а):
К тому же, объявления переменных, распределённые по всей подпрограмме, тоже создают проблемы.


Какие?

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


Внешняя процедура будет иметь один RETURN и проверку постусловий (и больше ничего). Внутренняя - множество RETURN. Какая еще динамика?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 21 Ноябрь, 2007 20:01 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
В Оберон-07 (пора его вспомнить в его ветке :)) RETURN будет зажат в виде такой конструкции:

ProcedureBody = DeclarationSequence ["BEGIN" StatementSequence] ["RETURN" expression] "END"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 21 Ноябрь, 2007 20:38 

Зарегистрирован: Среда, 29 Август, 2007 11:04
Сообщения: 91
Борис Рюмшин писал(а):
Хорошо, чем с точки зрения компилятора отличаются эти два варианта:
Код:
PROCEDURE Check(IN rec: Record): INTEGER;
BEGIN
  IF cond0 THEN RESULT := res0
  ELSIF cond1 THEN RESULT := res1
  ELSIF cond2 THEN RESULT := res2
  END
END Check;

и
Код:
PROCEDURE Check(IN rec: Record): INTEGER;
BEGIN
  IF cond0 THEN RESULT := res0
  ELSIF cond1 THEN RESULT := res1
  ELSE RESULT := res2
  END
END Check;
:?:
Это, кстати, к вопросу об оптимизации и усложнении компилятора. Для подробного анализа подобных выкрутасов потребуется несколько проходов, и не исключено, что в результате ошибок при конструировании такого компилятора, возникнут нетривиальные побочные эффекты с синтаксическими конструкциями.

Нужно ли было Вирту усложнять компилятор, чтобы отказаться от упреждающего объявления указательных типов данных перед их использованием? Нужно ли усложнять компилятор для отслеживания обращений к неинициализированным переменным? Нужно ли усложнять компилятор для отслеживания неинициализированной переменной RESULT?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 21 Ноябрь, 2007 22:16 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Борис Рюмшин писал(а):
В Оберон-07 (пора его вспомнить в его ветке :)) RETURN будет зажат в виде такой конструкции:

ProcedureBody = DeclarationSequence ["BEGIN" StatementSequence] ["RETURN" expression] "END"


А, ну вот, значит я ошибался :) Здравый смысл все-таки проиграл :) Пришел лесник и всех разогнал :) Можно закрывать ветку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Среда, 21 Ноябрь, 2007 22:43 
Модератор
Аватара пользователя

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


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Дмитрий Сурков писал(а):
Это легко отслеживается и ничем не отличается от проверки инициализации OUT-параметров.

Я раньше тоже так думал, но это не так. Компилятор может лишь заподозрить отсутствие инициализации, но выяснить это точно можно лишь во время исполнения программы.

Трурль показал простой пример:

if (condition) outParameter = ...;
if (!condition) outParameter = ...;

здесь компилятор ругается на то, что outParameter может быть не инициализирован хотя он инициализирован.


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Vlad писал(а):
... Пришел лесник и всех разогнал.


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

Понятно, что тем, кого не спросили, обидно :)
Когнитивный диссонанс...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон-07
СообщениеДобавлено: Четверг, 22 Ноябрь, 2007 17:45 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
info21 писал(а):
Вирт сделал ревизию Оберона на основе предложений небольшой группы тех, кто на Оберонах неплохо преуспел. Так что эти изменения (LOOP на цикл Дейкстры, ужесточение RETURN) -- глас квалифицированного народа.


Гхм. Мне вот что непонятно. Очевидно, что тот "кто неплохо преуспел" если и пишет что-то на обероне, то на какой-то конкретной реализации. Причем эта реализация, скорее всего не виртовская, а того самого народа. Соответственно, чтобы внести изменения в язык "лесник" не нужен (ББ тому яркий пример).


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Кто термин "лесник" ввел, тому и разбираться.


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

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Есть ли какие-нибудь новости об Обероне-07 (или уже -08) ?


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

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
PGR писал(а):
Есть ли какие-нибудь новости об Обероне-07 (или уже -08) ?

Кажется описание Оберона-07 тем временем было тихо-мирно опубликовано:
http://www.inf.ethz.ch/personal/wirth/A ... onARM.html


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
PGR писал(а):
Есть ли какие-нибудь новости об Обероне-07 (или уже -08) ?

Насколько я понимаю, он будет аппендиксом в новом издании Compiler Construction, которое as of last Fall готовилось в печати.
Издательство Oldenbourg (Германия).


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

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Непонятно, WITH остался или нет?
В Summary сказано, что его выкинули, а в Oberon-07 Report он остался...


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

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Лучше бы FOR выкинули.

Объясните мне кто-нибудь, откуда взялись PACK с UNPK, и где они могут пригодиться.


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

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


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

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


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

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