Автор Тема: Undefined behavior & Co.  (Прочитано 24055 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Undefined behavior & Co.
« Ответ #45 : Март 28, 2013, 07:24:02 pm »
Да? Ткни пожалуйста носом в пункт этого документа, где он требует GC и проверки выхода за границы массива: http://www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.Report.pdf

Ну как бэ...
Цитировать
The elements of the array are designated by indices, which are integers between 0 and the length minus 1.

Мне думается что нужно различать UB в языке и в самом компиляторе.

Если компилятор позволяет обращаться по индексу за пределами массива, так это говорит о кривости компилятора, а не наличии UB в языке.
А ничего, что это задача о останове? То есть компилятор на этапе компиляции, в общем случае, не сможет это проверить в принципе (в рамках Оберона).
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #46 : Март 28, 2013, 07:26:49 pm »
Да? Ткни пожалуйста носом в пункт этого документа, где он требует GC и проверки выхода за границы массива: http://www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.Report.pdf

Ну как бэ...
Цитировать
The elements of the array are designated by indices, which are integers between 0 and the length minus 1.

Мне думается что нужно различать UB в языке и в самом компиляторе.

Если компилятор позволяет обращаться по индексу за пределами массива, так это говорит о кривости компилятора, а не наличии UB в языке.
  имхо лучше не использовать вообще это понятие, без необходимости (я проталкиваю эту мыслю  :), ну пытаюсь.. ради развлечения  )... а проверка на выход имеет мало общего с тем на что вы указали.. ибо может выбивать на неправильных введенных данных ... при правильной логике программы(в общем случае это субьект времени выполнения)
« Последнее редактирование: Март 28, 2013, 07:28:24 pm от DddIzer »

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Undefined behavior & Co.
« Ответ #47 : Март 28, 2013, 07:28:04 pm »
А ничего, что это задача о останове? То есть компилятор на этапе компиляции, в общем случае, не сможет это проверить в принципе (в рамках Оберона).
Ну тык исключение времени выполнения еще есть  :)

ps Это херово... да. Но так уж определено в языке

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #48 : Март 28, 2013, 07:31:45 pm »
А ничего, что это задача о останове? То есть компилятор на этапе компиляции, в общем случае, не сможет это проверить в принципе (в рамках Оберона).
Ну тык исключение времени выполнения еще есть  :)

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

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Undefined behavior & Co.
« Ответ #49 : Март 28, 2013, 07:33:59 pm »
Я клоню к тому, что если так рассуждать то весь язык можно UB назвать.
1. Не определена операция сложения указателей? UB!
2. Не определен выстрел себе в голову из кольта? UB!
3. И т.д.  :D

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Undefined behavior & Co.
« Ответ #50 : Март 28, 2013, 07:36:47 pm »
А ничего, что это задача о останове? То есть компилятор на этапе компиляции, в общем случае, не сможет это проверить в принципе (в рамках Оберона).
Ну тык исключение времени выполнения еще есть  :)

ps Это херово... да. Но так уж определено в языке
Что такое "исключение" в рамках ЯП Оберон?
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Undefined behavior & Co.
« Ответ #51 : Март 28, 2013, 07:40:02 pm »
тык в том то и дело , что это либо субьект доопределения  компилятором (например невозможность отключения рантайм проверки)... либо просто отдается на откуп системе и железу.
Я всегда считал, что используя всякие шаловливые ключики компилятора, кодер должен полностью отдавать себе отчет в том, что он сим действием забил хер на язык.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Undefined behavior & Co.
« Ответ #52 : Март 28, 2013, 07:42:41 pm »
Я клоню к тому, что если так рассуждать то весь язык можно UB назвать.
1. Не определена операция сложения указателей? UB!
В репорте четко сказано, что плюсик бывает только для численных типов (и тогда он вот такой) и для множеств (и тогда он вот такой). Все остальное - не валидно. То есть это ошибка времени компиляции (типы проверяются на этапе компиляции).

А вот с описанием рантайма, и рантаймовых ошибок у Вирта полный тухляк. То есть какие они бывают, как их обрабатывать, когда возникают и так далее.

Мне представляется, что текущий Оберон-репорт нужно обозвать Core language, а для embedded, desktop/server и так далее, добивать конкретику Annex'ами.

А доопределять это дело конкретными компиляторами - это дело последнее и не правильное. Ибо язык будет бесконечно дробиться на диалекты (одна реализация - один диалект).
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Undefined behavior & Co.
« Ответ #53 : Март 28, 2013, 07:44:58 pm »
Что такое "исключение" в рамках ЯП Оберон?
Ну определение самопальное конечно  :D

"Остановка выполнения программы в месте возникновения ошибки"

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

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Undefined behavior & Co.
« Ответ #54 : Март 28, 2013, 07:49:19 pm »
Я клоню к тому, что если так рассуждать то весь язык можно UB назвать.
1. Не определена операция сложения указателей? UB!
В репорте четко сказано, что плюсик бывает только для численных типов (и тогда он вот такой) и для множеств (и тогда он вот такой). Все остальное - не валидно.
Ну тык точно также четко определен диапазон индексов для массивов. Я же привел цитату.
То есть это ошибка времени компиляции (типы проверяются на этапе компиляции).
А по-твоему язык определяет только время компиляции?

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #55 : Март 28, 2013, 07:49:58 pm »
тык в том то и дело , что это либо субьект доопределения  компилятором (например невозможность отключения рантайм проверки)... либо просто отдается на откуп системе и железу.
Я всегда считал, что используя всякие шаловливые ключики компилятора, кодер должен полностью отдавать себе отчет в том, что он сим действием забил хер на язык.
если язык говно (поведение ни прямо ни косвенно не прописано)... точнее - воспользовался особенностями конкретной реализации... но ведь есть еще и левые диагностические ключики- глючики... подчеркивающие интеллектуальность компилятора.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Undefined behavior & Co.
« Ответ #56 : Март 28, 2013, 07:50:57 pm »
Что такое "исключение" в рамках ЯП Оберон?
Ну определение самопальное конечно  :D

"Остановка выполнения программы в месте возникновения ошибки"

Т.е. в идеале либо на этапе компиляции, либо во время выполнения процесс должен быть прерван в тот момент когда программа выходит за рамки дозволенного в языке.
А как быть, скажем с многопоточностью? Рушить все остальные 100500 параллельно выполняющиеся потоки? :-)

Короче, без Annex'ов не обойтись :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Undefined behavior & Co.
« Ответ #57 : Март 28, 2013, 07:55:11 pm »
Возможно Вирту следовало в начале репорта написать:
"Что не определено явно, то запрещено"  ;)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Undefined behavior & Co.
« Ответ #58 : Март 28, 2013, 07:56:56 pm »
А как быть, скажем с многопоточностью? Рушить все остальные 100500 параллельно выполняющиеся потоки? :-)
А Вирт умный... у него нет многопоточности  :P

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #59 : Март 28, 2013, 08:00:56 pm »
А как быть, скажем с многопоточностью? Рушить все остальные 100500 параллельно выполняющиеся потоки? :-)
А Вирт умный... у него нет многопоточности  :P
вот по этому он и не написал  - Что не определено явно, то запрещено  :D... что бы заведомо не ограничивать возможную реализацию