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

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #15 : Март 28, 2013, 04:29:02 pm »

UB это всегда плата за эффективность.
Вы судите мерками С языков.. Оберон понятие "эффективность" и \эффективность реализации, в частности - НЕ ОПРЕДЕЛЯЕТ...

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #16 : Март 28, 2013, 04:30:59 pm »

Кстати, да, выход за границу индексов массива это еще один UB в Обероне :-)
наоборот..  это одна из немногих вещей которые он ТРЕБУЕТ от реализации не определяя ( другая такая вещь GC)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Undefined behavior & Co.
« Ответ #17 : Март 28, 2013, 04:32:57 pm »

Кстати, да, выход за границу индексов массива это еще один UB в Обероне :-)
наоборот..  это одна из немногих вещей которые он ТРЕБУЕТ от реализации не определяя ( другая такая вещь GC)

Да? Ткни пожалуйста носом в пункт этого документа, где он требует GC и проверки выхода за границы массива: http://www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.Report.pdf
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #18 : Март 28, 2013, 04:36:24 pm »

Кстати, да, выход за границу индексов массива это еще один UB в Обероне :-)
наоборот..  это одна из немногих вещей которые он ТРЕБУЕТ от реализации не определяя ( другая такая вещь GC)

Да? Ткни пожалуйста носом в пункт этого документа, где он требует GC и проверки выхода за границы массива: http://www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.Report.pdf
я имею ввиду нормальный Оберон, а не кастрированный. лень искать но припоминаю нечто вроде.."реализация без GC - не может считаться Обероном".

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Undefined behavior & Co.
« Ответ #19 : Март 28, 2013, 04:39:34 pm »

Кстати, да, выход за границу индексов массива это еще один UB в Обероне :-)
наоборот..  это одна из немногих вещей которые он ТРЕБУЕТ от реализации не определяя ( другая такая вещь GC)

Да? Ткни пожалуйста носом в пункт этого документа, где он требует GC и проверки выхода за границы массива: http://www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.Report.pdf
я имею ввиду нормальный Оберон, а не кастрированный. лень искать но припоминаю нечто вроде.."реализация без GC - не может считаться Обероном".
Вот не кастрированный, оригинальный, от 1990 года: http://www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon.Report.pdf

Попробуй найти там.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #20 : Март 28, 2013, 04:55:13 pm »
нашел в КП
Приложение D: Обязательные требования к среде выполнения
Определение Компонентного Паскаля опирается на три фундаментальных предположения.
1)Во время исполнения программ доступна информация, позволяющая проверять динами­чес­кий тип объекта. Это нужно для реализации проверок типов и охраны типов.
2)Отсутствует процедура DISPOSE <освобождение памяти, занятой более не исполь­зу­е­мы­ми объектами>. Память не может быть освобождена по явной инс­трукции программиста, поскольку это создало бы проблемы безопасности, связанные с утечками памяти [memory leaks] и с висячими указателями [dangling pointers]. За исключением таких встроенных систем, где не используется динамическое управление памятью, или где ее можно разместить только однажды и никогда не нужно освобождать, требуется автоматический сбор мусора.
3)Модули и по крайней мере их экспортированные процедуры (команды) и экспортирован­ные типы должны быть доступны динамически. В случае необходимости это может вызывать загрузку модулей. Программный интерфейс, используемый для загрузки модулей или для доступа к указанной мета-информации, не определяется языком, но компилятор должен сохранять эту информацию при генерации кода.
За исключением полностью слинкованных приложений, в которых при исполнения не нужно загружать никакие модули, для модулей требуется динамический загрузчик. Встроенные системы являются важными примерами приложений, которые могут быть полностью слинкованы.
Реализация, которая не удовлетворяет этим требованиям к компилятору и среде выпол­нения, не считается удовлетворяющей определению Компонентного Паскаля.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Undefined behavior & Co.
« Ответ #21 : Март 28, 2013, 05:03:32 pm »
нашел в КП
...
Реализация, которая не удовлетворяет этим требованиям к компилятору и среде выпол­нения, не считается удовлетворяющей определению Компонентного Паскаля.
А при чем тут Оберон? Я ведь про Оберон говорил, если б я говорил про какое-то ответвление от Оберона (ну, там про Зоннон, или КП, или про Object Oberon), я бы прямо об этом сказал.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #22 : Март 28, 2013, 05:18:28 pm »
нашел в КП
...
Реализация, которая не удовлетворяет этим требованиям к компилятору и среде выпол­нения, не считается удовлетворяющей определению Компонентного Паскаля.
А при чем тут Оберон? Я ведь про Оберон говорил, если б я говорил про какое-то ответвление от Оберона (ну, там про Зоннон, или КП, или про Object Oberon), я бы прямо об этом сказал.
  в данной модификации Оберона это прописано в явном виде(память не обманула... хотя читал я это года 4 назад)... а если в других  модификациях O7, O ,...- этого нет.. значит это субьект  Implementation defined (ну если не поддерживает железо реализацию динамически распределяемую память.. какая там может быть GC...)- но отнюдь не UB

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #23 : Март 28, 2013, 05:26:25 pm »
точнее .. я ошибся приписав свойства CP  Оберону... но суть вопроса, имхо это не меняет.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Undefined behavior & Co.
« Ответ #24 : Март 28, 2013, 05:26:54 pm »
нашел в КП
...
Реализация, которая не удовлетворяет этим требованиям к компилятору и среде выпол­нения, не считается удовлетворяющей определению Компонентного Паскаля.
А при чем тут Оберон? Я ведь про Оберон говорил, если б я говорил про какое-то ответвление от Оберона (ну, там про Зоннон, или КП, или про Object Oberon), я бы прямо об этом сказал.
  в данной модификации Оберона это прописано в явном виде(память не обманула... хотя читал я это года 4 назад)... а если в других  модификациях O7, O ,...- этого нет.. значит это субьект  Implementation defined (ну если не поддерживает железо реализацию динамически распределяемую память.. какая там может быть GC...)- но отнюдь не UB
Ога, ога, а D это модификация Алгола-68.

КП это другой язык, не Оберон и не его развитие. Он принадлежит к ветке языков с общим предком под названием Object Oberon.

implementation-defined behavior - это все же когда конкретная РЕАЛИЗАЦИЯ языка (то есть конкетный компилятор) вносит какую-то свою специфику и возможность возникновение таковой специфики предусмотрено описанием (спецификацией) языка.

А то что мы имеем тут - это куст разных СПЕЦИФИКАЦИЙ языков, языки родственные, но это не один и тот же язык. Про их реализации вообще речи не идет.

Так что извини, но тут у тебя логика хромает на обе ноги.

PS. Кстати, даже в описании КП я не нашел места где было бы сказано, что конструкция a := b[j]; вызывала бы run-time error в случае если j выходит за диапазон. Да, тут b является массивов произвольных сущностей (рекордов каких-то или же integer'ов, не важно).
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #25 : Март 28, 2013, 05:28:00 pm »
нашел в КП
...
Реализация, которая не удовлетворяет этим требованиям к компилятору и среде выпол­нения, не считается удовлетворяющей определению Компонентного Паскаля.
А при чем тут Оберон? Я ведь про Оберон говорил, если б я говорил про какое-то ответвление от Оберона (ну, там про Зоннон, или КП, или про Object Oberon), я бы прямо об этом сказал.
  в данной модификации Оберона это прописано в явном виде(память не обманула... хотя читал я это года 4 назад)... а если в других  модификациях O7, O ,...- этого нет.. значит это субьект  Implementation defined (ну если не поддерживает железо реализацию динамически распределяемую память.. какая там может быть GC...)- но отнюдь не UB
Ога, ога, а D это модификация Алгола-68.

КП это другой язык, не Оберон и не его развитие. Он принадлежит к ветке языков с общим предком под названием Object Oberon.

implementation-defined behavior - это все же когда конкретная РЕАЛИЗАЦИЯ языка (то есть конкетный компилятор) вносит какую-то свою специфику и возможность возникновение таковой специфики предусмотрено описанием (спецификацией) языка.

А то что мы имеем тут - это куст разных СПЕЦИФИКАЦИЙ языков, языки родственные, но это не один и тот же язык. Про их реализации вообще речи не идет.

Так что извини, но тут у тебя логика хромает на обе ноги.

PS. Кстати, даже в описании КП я не нашел места где было бы сказано, что конструкция a := b[j]; вызывала бы run-time error в случае если j выходит за диапазон. Да, тут b является массивов произвольных сущностей (рекордов каких-то или же integer'ов, не важно).
  см комментарий ВЫШЕ  :)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Undefined behavior & Co.
« Ответ #26 : Март 28, 2013, 05:29:26 pm »
см комментарий ВЫШЕ  :)
Если уж на то пошло, то какое-то упоминание про GC появилось в Обероне-2 (это тоже ответвление от основного ствола оберонов и КП является потомком Оберона-2).
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #27 : Март 28, 2013, 05:32:17 pm »
 еще раз, я могу понять, когда язык спроектирован (описан) недостаточно полно... то есть допускает неоднозначную реализацию ..  но когда САМИ СОЗДАТЕЛИ ЯП  - определяют понятие UB это хрен знает что...

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Undefined behavior & Co.
« Ответ #28 : Март 28, 2013, 05:36:04 pm »
еще раз, я могу понять, когда язык спроектирован (описан) недостаточно полно... то есть допускает неоднозначную реализацию ..  но когда САМИ СОЗДАТЕЛИ ЯП  - определяют понятие UB это хрен знает что...
Рискну предположить, что это просто напросто ум и опытность :-)

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

В случае валидных программ, по определению, UB не бывает.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Undefined behavior & Co.
« Ответ #29 : Март 28, 2013, 05:39:57 pm »

Рискну предположить, что это просто напросто ум и опытность :-)

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

В случае валидных программ, по определению, UB не бывает.
рискуйте.. на здоровье, но я не вижу смысла в этом определении... один хер.. ЛЮБОЙ компилятор имеет на этот счет СВОЕ КОНКРЕТНОЕ мнение...