DG>>Может все-таки стоило остановить только для данного самолета в данное время один единственный модуль, который рассчитывает расход горючего?
SYG>Что же Вы о создателях Оберон систем так плохо думаете?
Я думаю плохо не об Обероне, а о Вашей позиции "в случае ошибки необходимо останавливать всю программу".
SYG> Разумеется будет остановлена работа только того модуля, который выполнил недопустимую операцию. Модуль будет динамически выгружен из системы. Когда другие модули запросят доступ к нему, он автоматически загрузится в память обратно. Так сказать — горячая перезагрузка — на лету. Вместо этого модуля, если угодно, может быть загружен модуль от другого производителя. Или, гипотетически, этот модуль будет "на лету" перекомпилирован заново, ошибка в нем исправлена, а его новый скомпилированный вариант динамически загружен в память.
На словах все отлично.
Но непонятно, что в этом случае будет с модулями, которые использовали/вызывали данные модули? Они тоже будут выгружены? Или они получать сообщение об ошибке? Другими словами получат исключение?
Что будет с ресурсами, модулями и т.д., которые использовал выгружаемый модуль?
Что будет с ходом выполнения программы? Выполнение остановится? продолжится с какого-то места? еще что-то?
SYG>Ну как, можно считать вопрос на этом исчерпанным?
пока есть только лозунг "оберон — это круто, а, ну, все быстро пользуйтесь обероном", но нет ни одного конкретного описания или примера, как в обероне решаются затронутые в данной теме проблемы.
Здравствуйте, Sir Wiz, Вы писали:
SW>Здравствуйте, S.Yu.Gubanov, Вы писали:
SYG>>Ну это быстренько можно "подпортить", и "рульность" С++ поубавится SYG>>1) Пусть a,b,c — это очень большие объекты, так что на стеке втроем им места не хватит... SYG>>2) Пусть a,b,c — это не объекты, а полиморфные переменные. В терминологии С++ статический тип a,b,c — пусть будет указатели на объекты "абстрактных классов". Так как в стандартном С++ есть только блок try catch, а FINALLY — нету, то жизнь сразу усложняется. Придется использовать классы обертки — "умные указатели", а это уже из другой оперы. SW>Ответ на оба вопроса — Master Pointers ("ведушие указатели", Джеф Элджер, например). Нет никакой "другой оперы".
Это как раз и есть та самая "другая опера". "Другая опера" связа с тем как в С++ появляются эти самые умные, ведущие и прочие указатели. Они возможны в силу того что в С++ есть шаблоны. То что шаблоны — это точно "другая опера" Вы согласны? В свою очередь, шаблоны столь эффективны благодаря тому, что есть перегрузка операторов. То что перегрузка операторов — это точно "другая опера" Вы согласны? Вы вот, сможете без шаблонов и перегруженных операторов создать реализацию обертки указателя? Ответ — нет, не сможете. Для того чтобы всего лишь навсего эмулировать действие FINALLY Вам понадобится использовать грандиознейший по своему размаху механизм под названием "шаблоны"+"перегрузка операторов"+"автоматический вызов деструкторов для стековых объектов". Безусловно это уже другая опера. А вот в Delphi для этого просто ввели одно дополнительное словечко — FINALLY и проблемы не стало.
Здравствуйте, S.Yu.Gubanov, Вы писали:
SW>>Ответ на оба вопроса — Master Pointers ("ведушие указатели", Джеф Элджер, например). Нет никакой "другой оперы".
SYG>Это как раз и есть та самая "другая опера". "Другая опера" связа с тем как в С++ появляются эти самые умные, ведущие и прочие указатели. Они возможны в силу того что в С++ есть шаблоны. То что шаблоны — это точно "другая опера" Вы согласны? В свою очередь, шаблоны столь эффективны благодаря тому, что есть перегрузка операторов. То что перегрузка операторов — это точно "другая опера" Вы согласны? Вы вот, сможете без шаблонов и перегруженных операторов создать реализацию обертки указателя? Ответ — нет, не сможете.
Право, я вас уверяю, это не "другая опера", это язык С++. Это штатные средства языка С++. Что в этом плохого, как вы считаете?
SYG>Для того чтобы всего лишь навсего эмулировать действие FINALLY Вам понадобится использовать грандиознейший по своему размаху механизм под названием "шаблоны"+"перегрузка операторов"+"автоматический вызов деструкторов для стековых объектов". Безусловно это уже другая опера. А вот в Delphi для этого просто ввели одно дополнительное словечко — FINALLY и проблемы не стало.
О, ничего грандиозного, всё очень просто. И не для эмуляции действия FINALLY это делается. Сама мысль о эмуляции того-чего-не-нужно в С++ странна. Master Pointers это идиома и уповать на то, что такие идиомы не встроены в язык странно. Поскольку С++ в некотором роде является языком для описания идиом и писания идиомами. В этом гибкость и красота. Я могу воспользоваться другой идиомой. А Delphi — ссылки на объекты и только.
Здравствуйте, DarkGray, Вы писали:
DG>Я думаю плохо не об Обероне, а о Вашей позиции "в случае ошибки необходимо останавливать всю программу".
Мы просто под словом "ошибка" понимали разные вещи. Я под "ошибкой" понимал "недопустимую операцию", а Вы под "ошибкой" понимали все что угодно вплоть до отказа загрузки/сохранения файла. Кроме того я, по недосмотру, допустил вольность употребив слово Программа имея ввиду выполняемый модуль, а Вы не зная специфики работы многомодульных программ предположили что я собираюсь остановить работу всей ОС.
DG>Но непонятно, что в этом случае будет с модулями, которые использовали/вызывали данные модули? Они тоже будут выгружены? Или они получать сообщение об ошибке? Другими словами получат исключение? DG>Что будет с ресурсами, модулями и т.д., которые использовал выгружаемый модуль? DG>Что будет с ходом выполнения программы? Выполнение остановится? продолжится с какого-то места? еще что-то?
Точно не отвечу. Система BlackBox (эмулятор ОС Оберон под Виндос), кажется, переходит к выполнению следующей итерации своего главного цикла. Если есть исходный код модуля, то выскакиевает диалоговое окно со списком стека вызовов последних нескольких процедур со всеми значениями локальных переменных. Каждый элемент этого списка является гиперссылкой на соответсвующую позицию в исходном коде программы. С ресурсами ничего страшного не происходит — всем управляет единый сборщик мусора. Как конкретно обстоят дела в нативной ОС Оберон и ее многочисленных клонах я не знаю. Кроме того, есть еще парралельные системы, например, Blue Bottle на Active Oberon — там парралельность интегрирована в сам язык. Как там все внутрях устроено я еще тоже не знаю.
SYG>>Ну как, можно считать вопрос на этом исчерпанным? DG>пока есть только лозунг "оберон — это круто, а, ну, все быстро пользуйтесь обероном", но нет ни одного конкретного описания или примера, как в обероне решаются затронутые в данной теме проблемы.
Какие проблемы-то? Я позволил себе сказать, что в Оберонах нет механизма "исключительных ситуаций" и объяснил почему он там излишен. Если Вы видите проблему, то объясните в чем состоит ее суть?
Здравствуйте, S.Yu.Gubanov, Вы писали:
SYG>Что же Вы о создателях Оберон систем так плохо думаете? Разумеется будет остановлена работа только того модуля, который выполнил недопустимую операцию. Модуль будет динамически выгружен из системы. Когда другие модули запросят доступ к нему, он автоматически загрузится в память обратно. Так сказать — горячая перезагрузка — на лету. Вместо этого модуля, если угодно, может быть загружен модуль от другого производителя. Или, гипотетически, этот модуль будет "на лету" перекомпилирован заново, ошибка в нем исправлена, а его новый скомпилированный вариант динамически загружен в память. Что может быть устойчивее и надежнее? Вы бы, извините конечно, прежде чем глупые фантазии излагать вспомнили бы в каких областях Обероны используются: для случаев требующих особой безопасности — космос, электростанции, беспилотные летательные (военные) аппараты.
А почему нужно выгружать именно модуль (в том значении этого слова, в котором ты его понимаешь)? Почему не группу модулей? Или наоборот — один только класс из "модуля"? Или Метод? Или, даже, секцию кода внутри метода (расположенную в блоке try)?
И (DarkGray про это уже рядом сказал), как мне описать процедуру выгрузки (в смысле разрешения конфликтов с другими модулями), чтобы указать что вот этот вот модуль нужно перечитать, а вот эти не трогать, а вместо этого, в случае чего, можно взять вон тот и т.п.? Для этого нужно какой-то параллельный код держать (в котором, кстати, в свою очередь, тоже возможны ошибки) и постоянно следить за его релевантностью.
И вообще, почему обязательно "выгружать"? Может программисту в данных обстоятельствах проще только прервать выполнение проблемной секции, для чего (в частности) собственно и существуют эти самые исключения...
... << RSDN@Home 1.1.3 stable >>
Re[17]: Недопустимая операция = Исключительная ситуация
Здравствуйте, DarkGray, Вы писали:
SYG>>Тем не менее, ни в одном из приведенных Вами примеров не было по настоящему "исключительной ситуации", то есть такой когда программа выполняет некоторое действие другими словами называемое "недопустимая операция". Нельзя вычислить квадратный корень из отрицательного числа, нельзя разделить на ноль, нельзя работать с чужой памятью, но при этом, сколько угодно раз можно отказать в сохранении или открытии файла — это не является "недопустимой операцией". Разницу понимаете?
DG>Нет, не понимаю. DG>Я не вижу разницу между операциями "Деление на ноль", "Взять неберущийся интеграл", "Открыть файл, которого нет на диске", "Открыть файл, который не доступен".
Файлы бывают не доступными, а еще файлы могут вообще отсутствовать на диске. Вы это знаете и программа Ваша тоже должна это знать. И для нее не должно быть сюрпризом то что файла нету. Это обычная штатная ситуация. Иногда файлы на диске есть, а иногда их нет. Иногда их можно прочитать/записать, а иногда бывает нельзя. Все это совершенно обычно. А вот разделить на ноль нельзя никогда, даже после дождичка в четверг и то нельзя разделить на ноль, даже если долго упрашивать компьтер и танцевать с бубном, все равно нельзя — это недопустимая операция была есть и будет вечно. По чужому адресу нельзя писать и читать ни сегодня ни завтра ни через сто лет — это недопустимая операция. Нелья вычислить значение квадратного корня из отрицательного числа ни сегодня ни завтра ни через сто лет — это недопустимая операция. Такую разницу понимаете?
DG>Вопрос на засыпку: DG>если мы несколько модулей объединили вместе, то какой "элемент" мы получили в итоге? сразу программу?
А если мы сделаем DLL-ку размером 1 гигабайт, то это все равно будет DLL-ка или это уже будет что-то другое? Утрированное понятие модуля — это самая обычная DLL-ка, динамически загружаемая единица исполнения.
DG>Возьмем, например, Word. DG>Встроенный в Word граф. редактор диаграмм — на Ваш взгляд — это модуль, программа или класс?
Word — это приложение работающее под OS Windows. Виндос не является модульной ОС и не обладает единым сборщиком мусора. Под Виндос нельзя писать полноценные многомодульные программы. Виндозные DLL-ки не обслуживаются никаким единым Виндозным сборщиком мусора. Я упоминал про BlackBox — это эмуляция ОС Оберон под Виндос. Микрософт сейчас ляпает платформу .NET — для того чтобы можно было писать многомодульные программы.
DG>Мы с Вами очень подробно подискутировали о терминах, но по существу какие-то возражения будут? DG>Или в целом, Вы согласны с моими доводами?
Доводами о чем?
Здравствуйте, Sir Wiz, Вы писали:
SW>О, ничего грандиозного, всё очень просто. И не для эмуляции действия FINALLY это делается. Сама мысль о эмуляции того-чего-не-нужно в С++ странна. Master Pointers это идиома и уповать на то, что такие идиомы не встроены в язык странно. Поскольку С++ в некотором роде является языком для описания идиом и писания идиомами. В этом гибкость и красота. Я могу воспользоваться другой идиомой. А Delphi — ссылки на объекты и только.
Ну и чего вот Вы этим самым сказали? Кто Вас за язык-то тянул? Вы самолично только что расписались в том, что используя язык С++ для решения какой-либо (быть может очень сложной) задачи предметной области, Вы обрекаете самого себя еще и на решение (быть может не менее сложных) задач присущих самому языку С++ без относительно к задаче предметной области. То есть вынуждены будете напрягаться больше чем необходимо. И все это в топике "Серьезный код", в котором уже не раз подразумевалось, что серьезный код должен быть на столько простым на сколько это вообще возможно.
Re[18]: Недопустимая операция = Исключительная ситуация
SYG>Файлы бывают не доступными, а еще файлы могут вообще отсутствовать на диске. Вы это знаете и программа Ваша тоже должна это знать. И для нее не должно быть сюрпризом то что файла нету. Это обычная штатная ситуация. Иногда файлы на диске есть, а иногда их нет. Иногда их можно прочитать/записать, а иногда бывает нельзя. Все это совершенно обычно. А вот разделить на ноль нельзя никогда, даже после дождичка в четверг и то нельзя разделить на ноль, даже если долго упрашивать компьтер и танцевать с бубном, все равно нельзя — это недопустимая операция была есть и будет вечно. По чужому адресу нельзя писать и читать ни сегодня ни завтра ни через сто лет — это недопустимая операция. Нелья вычислить значение квадратного корня из отрицательного числа ни сегодня ни завтра ни через сто лет — это недопустимая операция. Такую разницу понимаете?
не понимаю, Вы опять передергиваете.
Потому что операцию деления на ноль — вы воспринимаете, как деление на константу 0, а не как деление на переменную, которая иногда принимает в том числе и значение 0.
В этом случае, мы получаем все тоже самое, что и с файлами: что иногда мы делить на данную переменную можем, а иногда не можем.
Даже повторю Ваши слова "и для программы не должно быть сюрпризом, что иногда на данную переменную делить нельзя, а иногда можно."
Могу даже довести ситуацию с файлами к ситуации с делением на ноль.
Например, файл с именем ":" создать никогда нельзя, даже после дождика в четверг, но по Вашему получается, что это все равно не исключительная ситуация.
DG>>Вопрос на засыпку: DG>>если мы несколько модулей объединили вместе, то какой "элемент" мы получили в итоге? сразу программу?
SYG>А если мы сделаем DLL-ку размером 1 гигабайт, то это все равно будет DLL-ка или это уже будет что-то другое? Утрированное понятие модуля — это самая обычная DLL-ка, динамически загружаемая единица исполнения.
Фиг с ними с Dll-ками, Вы так и не ответили, что такое модуль?
DG>>Возьмем, например, Word. DG>>Встроенный в Word граф. редактор диаграмм — на Ваш взгляд — это модуль, программа или класс? SYG>Word — это приложение работающее под OS Windows. Виндос не является модульной ОС и не обладает единым сборщиком мусора. Под Виндос нельзя писать полноценные многомодульные программы. Виндозные DLL-ки не обслуживаются никаким единым Виндозным сборщиком мусора. Я упоминал про BlackBox — это эмуляция ОС Оберон под Виндос. Микрософт сейчас ляпает платформу .NET — для того чтобы можно было писать многомодульные программы.
хм, т.е. я, правильно, понял что "истинные модули" есть только в обероне, а во всех остальных языках — это так, одно название?
Здравствуйте, S.Yu.Gubanov, Вы писали:
SYG>Все это совершенно обычно. А вот разделить на ноль нельзя никогда, даже после дождичка в четверг и то нельзя разделить на ноль, даже если долго упрашивать компьтер и танцевать с бубном, все равно нельзя — это недопустимая операция была есть и будет вечно.
Вот пример:
oo — это "+бесконечность", очень удобная константа. я её использовал в качстве границы для свой функции вычиления пределов.
Очень лаконичный и прозрачный код при этом получался
SYG> По чужому адресу нельзя писать и читать ни сегодня ни завтра ни через сто лет — это недопустимая операция.
В досе можно. Кстати, что считать "чужим" адресом. Для ОС и её расширений вся память — своя. И во всяком случае, попытка записи в чужой адрес ещё не повод останавливать процесс. всякое бывает...
SYG> Нелья вычислить значение квадратного корня из отрицательного числа ни сегодня ни завтра ни через сто лет — это недопустимая операция.
Хм, уж вам, как кандидату физико-математических наук, говорить это должно быть стыдно А мнимые числа?
SYG>А если мы сделаем DLL-ку размером 1 гигабайт, то это все равно будет DLL-ка или это уже будет что-то другое? Утрированное понятие модуля — это самая обычная DLL-ка, динамически загружаемая единица исполнения. SYG>Word — это приложение работающее под OS Windows. Виндос не является модульной ОС и не обладает единым сборщиком мусора. Под Виндос нельзя писать полноценные многомодульные программы. Виндозные DLL-ки не обслуживаются никаким единым Виндозным сборщиком мусора. Я упоминал про BlackBox — это эмуляция ОС Оберон под Виндос. Микрософт сейчас ляпает платформу .NET — для того чтобы можно было писать многомодульные программы.
Ну правильно, сначала за уши притягиваем аналогию между модулями Оберона и DLL-ками виндов, а потом мастерски доказываем, что виндовые модули, по сравнению с обероновскими ни на что не годятся
... << RSDN@Home 1.1.3 stable >>
Re[19]: Недопустимая операция = Исключительная ситуация
Здравствуйте, DarkGray, Вы писали:
DG>Даже повторю Ваши слова "и для программы не должно быть сюрпризом, что иногда на данную переменную делить нельзя, а иногда можно." DG>Могу даже довести ситуацию с файлами к ситуации с делением на ноль. DG>Например, файл с именем ":" создать никогда нельзя, даже после дождика в четверг, но по Вашему получается, что это все равно не исключительная ситуация.
Мне что теперь, каждую свою фразу окружать сонмищем оговорок, в которых описывать все варианты ее истинности и толкования? Разумеется мы делим на переменную, и чтобы не совершить недопустимую операцию нам надо сначала проверять ее на неравенство нулю. А перед тем как создавать файл надо разумеется проверить его имя на допустимость. Но разница между этими двумя случаями состоит в том, даже не знаю как и объяснить-то, компьютер так что ли устроен, что делить на ноль он не может ну никак, а вот файл с недопустимым именем создает не компьютер, а программа, и она увидев недопустимое имя, просто не будет создавать такой файл и все, ничего страшного и исключительного не произойдет. Я не знаю как еще объяснить. Мне для этого компьютерной грамотности не хватает.
DG>Фиг с ними с Dll-ками, Вы так и не ответили, что такое модуль? DG>хм, т.е. я, правильно, понял что "истинные модули" есть только в обероне, а во всех остальных языках — это так, одно название?
Да, Вы правильно поняли. Вот например Дельфийский UNIT — это не модуль. Он хоть и является единицей инкапсуляции и компиляции, но вот динамически загружаемой/выгружаемой единицей исполнения не является.
Попробую собрать в одном месте все что я говорил о модулях.
Модуль — это:
во-первых, абстракция языка программирования являющаяся единицей инкапсуляции и компиляции (весь исходный код программы находится в модулях)
во-вторых, являющаяся единицей исполнения. Во время выполнения программы модули динамически загружаются/выгружаются (позднее связывание).
в-третьих, на саму систему (в которой эти модули работают) налагается ограничение — обязательно должен быть единый сборщик мусора (это для того чтобы модули могли безбоязненно создавать внутри себя объекты и передавать их другим модулям, а те третьим и т.д.).
Система построенная по такому принципу очень легко расширяется, модифицируется и т.д. Ведь каждый модуль можно в любой момент времени заменить на аналогичный модуль, но от другого производителя.
Re[20]: Недопустимая операция = Исключительная ситуация
SYG>Мне что теперь, каждую свою фразу окружать сонмищем оговорок, в которых описывать все варианты ее истинности и толкования? Разумеется мы делим на переменную, и чтобы не совершить недопустимую операцию нам надо сначала проверять ее на неравенство нулю. А перед тем как создавать файл надо разумеется проверить его имя на допустимость. Но разница между этими двумя случаями состоит в том, даже не знаю как и объяснить-то, компьютер так что ли устроен, что делить на ноль он не может ну никак, а вот файл с недопустимым именем создает не компьютер, а программа, и она увидев недопустимое имя, просто не будет создавать такой файл и все, ничего страшного и исключительного не произойдет. Я не знаю как еще объяснить. Мне для этого компьютерной грамотности не хватает.
С вашим подходом код будет примерно следующий:
Нам надо открыть файл, это вовлекает вызов цепочки функций.
SYG>Вот уж кто в таких случаях на самом деле по взрослому рулит, так это (компилируемый) язык со сборщиком мусора и без "исключительных ситуаций", например, Component Pascal (http://www.inr.ac.ru/~info21/cpascal/cp_report_1.4_rus.htm)
Какие серьезные продукты созданы на базе этого языка ?
Душа обязана трудиться! (с) Н.Заболоцкий.
Re[18]: Недопустимая операция = Исключительная ситуация
S.Yu.Gubanov -> "Re[17]: Недопустимая операция = Исключительная ситуация" :
SG> это совершенно обычно. А вот разделить на ноль нельзя SG> никогда, даже после дождичка в четверг и то нельзя разделить SG> на ноль, даже если долго упрашивать компьтер и танцевать с бубном, SG> все равно нельзя — это недопустимая операция была есть и будет
Хм... остатки знаний из инсттиута подсказывают, что при делении на ноль у
нас получится бесконечность и некоторые языки это поддерживают. Правда будет
ли в этом конкретный практический смысл — не ясно
SG> вечно. По чужому адресу нельзя писать и читать ни сегодня ни завтра SG> ни через сто лет — это недопустимая операция. Нелья вычислить
Ну вот, а как же данные шарить между процессами?
SG> значение квадратного корня из отрицательного числа ни сегодня ни SG> завтра ни через сто лет — это недопустимая операция. Такую SG> разницу понимаете?
Ну да. Математики — враги народа — напридумывали всяких комплексных числел
Вон, DSP шники мучаются с преобразованиями Фурье
SYG> Но разница между этими двумя случаями состоит в том, даже не знаю как и объяснить-то, компьютер так что ли устроен, что делить на ноль он не может ну никак, а вот файл с недопустимым именем создает не компьютер, а программа, и она увидев недопустимое имя, просто не будет создавать такой файл и все, ничего страшного и исключительного не произойдет. Я не знаю как еще объяснить. Мне для этого компьютерной грамотности не хватает.
Дык, процессор — это такая же программа, но только выполненная в железе. Она также может увидеть недопустимый делитель, и ничего не делать.
Вот только непонятно, что это такое "ничего не делать" и в том, и вдругом случае?
т.е. что все-таки должен сделать код, который вдруг увидел недопустимое имя файла?
SYG>Попробую собрать в одном месте все что я говорил о модулях.
SYG>Модуль — это: SYG>во-первых, абстракция языка программирования являющаяся единицей инкапсуляции и компиляции (весь исходный код программы находится в модулях) SYG>во-вторых, являющаяся единицей исполнения. Во время выполнения программы модули динамически загружаются/выгружаются (позднее связывание). SYG>в-третьих, на саму систему (в которой эти модули работают) налагается ограничение — обязательно должен быть единый сборщик мусора (это для того чтобы модули могли безбоязненно создавать внутри себя объекты и передавать их другим модулям, а те третьим и т.д.).
SYG>Система построенная по такому принципу очень легко расширяется, модифицируется и т.д. Ведь каждый модуль можно в любой момент времени заменить на аналогичный модуль, но от другого производителя.
Под такое определение подходят, например, Java, .Net, SmallTalk, почти все скриптовые языки, системы построеные на основе COM/DCOM и т.д.
Здравствуйте, _Obelisk_, Вы писали:
_O_>Здравствуйте, S.Yu.Gubanov, Вы писали:
SYG>>Вот уж кто в таких случаях на самом деле по взрослому рулит, так это (компилируемый) язык со сборщиком мусора и без "исключительных ситуаций", например, Component Pascal (http://www.inr.ac.ru/~info21/cpascal/cp_report_1.4_rus.htm)
_O_>Какие серьезные продукты созданы на базе этого языка ?
Здравствуйте, DarkGray, Вы писали:
DG>т.е. что все-таки должен сделать код, который вдруг увидел недопустимое имя файла?
Это философский вопрос или как?
Отсечка неправильных данных должна произойти на входе данных в систему. То есть, пользователь ввел неправильные данные, а они раз, и не ввелись, а выскочило диалоговое окно — "Введенные данные не правильные." Внутри системы неправильных данных быть не должно.
SYG>Точно не отвечу. Система BlackBox (эмулятор ОС Оберон под Виндос), кажется, переходит к выполнению следующей итерации своего главного цикла. Если есть исходный код модуля, то выскакиевает диалоговое окно со списком стека вызовов последних нескольких процедур со всеми значениями локальных переменных. Каждый элемент этого списка является гиперссылкой на соответсвующую позицию в исходном коде программы. С ресурсами ничего страшного не происходит — всем управляет единый сборщик мусора. Как конкретно обстоят дела в нативной ОС Оберон и ее многочисленных клонах я не знаю. Кроме того, есть еще парралельные системы, например, Blue Bottle на Active Oberon — там парралельность интегрирована в сам язык. Как там все внутрях устроено я еще тоже не знаю.
Но здесь опять же возникает вопрос, а как система узнает о том, что произошла ошибка? Получает некий сигнал? Чем этот сигнал отличается от исключения из "стандартных" языков программирования?
Здравствуйте, DarkGray, Вы писали:
DG>Но здесь опять же возникает вопрос, а как система узнает о том, что произошла ошибка? Получает некий сигнал? Чем этот сигнал отличается от исключения из "стандартных" языков программирования?
Может и ни чем.
Просто программисту запрещено возбуждать свои собственные псевдоисключительные ситуации.