OberonCore https://forum.oberoncore.ru/ |
|
Нужны ли Оберону конструкторы, деструкторы и исключения? https://forum.oberoncore.ru/viewtopic.php?f=29&t=1206 |
Страница 1 из 9 |
Автор: | AVC [ Воскресенье, 19 Октябрь, 2008 15:06 ] |
Заголовок сообщения: | Нужны ли Оберону конструкторы, деструкторы и исключения? |
В Си++ активно используются конструкторы/деструкторы вместе с исключениями. В Обероне нет утечек памяти, как в Си/Си++, но есть другие ресурсы, за своевременным возвращением которых системе можно было бы следить с помощью какого-либо аналога деструкторов. Как вы считаете, было бы полезным ввести в Оберон/КП аналог (возможно, по другому реализованный) деструкторов (прежде всего)? Напомню, что обероны не совсем чужды этим вопросам: секция инициализации (а в КП и секция завершения) модуля, регистрируемые процедуры FINALIZE (?) в КП. |
Автор: | Info21 [ Воскресенье, 19 Октябрь, 2008 17:19 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
AVC писал(а): .. Как вы считаете, было бы полезным ввести в Оберон/КП аналог (возможно, по другому реализованный) деструкторов (прежде всего)? .. секция инициализации (а в КП и секция завершения) модуля, регистрируемые процедуры FINALIZE (?) в КП. Так чего не хватает в FINALIZE? Закроем файлы, то да сё. А еще что? |
Автор: | AVC [ Воскресенье, 19 Октябрь, 2008 18:27 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Info21 писал(а): AVC писал(а): .. Как вы считаете, было бы полезным ввести в Оберон/КП аналог (возможно, по другому реализованный) деструкторов (прежде всего)? .. секция инициализации (а в КП и секция завершения) модуля, регистрируемые процедуры FINALIZE (?) в КП. Так чего не хватает в FINALIZE? Закроем файлы, то да сё. А еще что? FINALIZE вызывается сборщиком мусора, а тот может сработать в неопределенное время. Краткое сопоставление финализатора и деструктора: http://ru.wikipedia.org/wiki/Финализатор |
Автор: | Info21 [ Воскресенье, 19 Октябрь, 2008 20:05 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
AVC писал(а): Info21 писал(а): Так чего не хватает в FINALIZE? ... Вопрос в том, когда мы это сделаем.FINALIZE вызывается сборщиком мусора, а тот может сработать в неопределенное время. Так можно его заставить: Services.Collect. А если микросекунды важны, то всё равно надо особый механизм сочинять. |
Автор: | AVC [ Воскресенье, 19 Октябрь, 2008 22:45 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Info21 писал(а): А если микросекунды важны, то всё равно надо особый механизм сочинять. В том и вопрос: нужен ли такой механизм?
|
Автор: | Info21 [ Воскресенье, 19 Октябрь, 2008 23:39 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
AVC писал(а): Info21 писал(а): А если микросекунды важны, то всё равно надо особый механизм сочинять. В том и вопрос: нужен ли такой механизм?Я имел в виду, что нужно просто делать уже имеющимися средствами в зависимости от задачи. Какой может быть общий механизм, если речь о микросекундах? |
Автор: | Иван Горячев [ Понедельник, 20 Октябрь, 2008 03:21 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
AVC писал(а): Вопрос в том, когда мы это сделаем. Ещё в какой последовательности. ББ вызывает финализаторы в неочевидном порядке |
Автор: | Info21 [ Понедельник, 20 Октябрь, 2008 10:07 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Иван Горячев писал(а): AVC писал(а): Вопрос в том, когда мы это сделаем. Ещё в какой последовательности. ББ вызывает финализаторы в неочевидном порядке Это решается: если есть какой-то нужный порядок, то соотв. объекты должны быть как-то повязаны друг с другом и координироваться между собой, чтобы обеспечить нужный порядок вызовов каких-то реальных процедур финализации. Тогда FINALIZE -- некий фасад, приемник сигнала о начале сбора мусора. А принимает, по сути, -- вся координированная общность объектов. |
Автор: | AVC [ Понедельник, 20 Октябрь, 2008 13:39 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Хотел спросить пишущих на до-диезе (если такие есть; кажется, Сергей Губанов одно время писал на нем): что это за паттерн dispose? Пользуетесь ли вы им? Применим ли он в каком-нибудь виде к BlackBox? |
Автор: | AVC [ Понедельник, 20 Октябрь, 2008 14:02 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Info21 писал(а): AVC писал(а): Info21 писал(а): А если микросекунды важны, то всё равно надо особый механизм сочинять. В том и вопрос: нужен ли такой механизм?Я имел в виду, что нужно просто делать уже имеющимися средствами в зависимости от задачи. Какой может быть общий механизм, если речь о микросекундах? http://ru.wikipedia.org/wiki/Получение_ресурса_есть_инициализация В языках с GC использованию этого паттерна мешает неопределенность времени вызова финализатора (т.е. ресурсы освобождаются не сразу). Но есть какие-то подпорки вроде паттерна dispose в C#. Впрочем, я согласен, что цель не в изменении языка, а в решении проблемы. Если есть способ удобно ее решить, не трогая языка, имеет смысл так и поступить. |
Автор: | Илья Ермаков [ Понедельник, 20 Октябрь, 2008 14:42 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Собственно, весь паттерн-то состоит в наследовании от единого интерфейса с единым методом. А так в ББ для таких случаев и применяется спец. метод Close (если не вызвали его явно, тогда уже добивает финализатор). Files.File. SqlDB. И т.п. |
Автор: | Valery Solovey [ Понедельник, 20 Октябрь, 2008 16:18 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Насколько я понял, это был пример проекта, где использование такого-то инструмента не потребовалось. Чтобы не возникало вопросов "применимо ли это к моему случаю". Просто, описание, возможно, чуть затянулось... |
Автор: | Vlad [ Понедельник, 20 Октябрь, 2008 16:30 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
AVC писал(а): В Си++ активно используются конструкторы/деструкторы вместе с исключениями. В Обероне нет утечек памяти, как в Си/Си++, но есть другие ресурсы, за своевременным возвращением которых системе можно было бы следить с помощью какого-либо аналога деструкторов. Как вы считаете, было бы полезным ввести в Оберон/КП аналог (возможно, по другому реализованный) деструкторов (прежде всего)? Ну пока в обероне нет исключений, то можно как-то жить и без деструкторов. При наличии исключений - да, совсем грустно. Можно попробовать пообсуждать возможные решения ![]() 1) Связываем с записью процедуру-деструктор. Для определенности назовем такую запись по аналогии с C# - disposable. 2) Деструктор вызывается при выходе disposable-записи из области видимости. 3) disposable-запись можно передавать "вниз" (как параметр процедуры) и "вверх" как результат функции. 4) Если disposable-запись была возвращена как результат, то деструктор для нее в текущей процедуре не вызывается. 5) В вызывающей процедуре disposable-запись "принимается" "инициализацией по месту" локальной переменной. 6) disposable-запись, переданную как аргумент, нельзя вернуть (можно попробовать разрулить это чисто синтаксически, сделав несовместимыми тип аргумента и тип возвращаемого значения). 7) disposable-запись может быть только локальной переменной или полем агрегирующей disposable-записи. |
Автор: | Vlad [ Понедельник, 20 Октябрь, 2008 16:44 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Vlad писал(а): 6) disposable-запись, переданную как аргумент, нельзя вернуть (можно попробовать разрулить это чисто синтаксически, сделав несовместимыми тип аргумента и тип возвращаемого значения). Например так: Тип аргумента будет "VAR <тип>" (ссылка), тип возвращаемого значения - просто "<тип>" (значение). Значение может быть приведено к ссылке, но не наоборот. |
Автор: | Geniepro [ Вторник, 21 Октябрь, 2008 07:50 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Valery Solovey писал(а): Насколько я понял, это был пример проекта, где использование такого-то инструмента не потребовалось. Чтобы не возникало вопросов "применимо ли это к моему случаю". Просто, описание, возможно, чуть затянулось... Вкратце -- большой нужды в Dispose не возникло, использовался на всякий случай в связи с неродными для managed-среды ресурсами... Если есть выбор -- иметь Dispose или не иметь, то лучше иметь (имхо). Но это противоречит духу оберонов, где ответ -- раз не является жизненно важным, то не иметь... |
Автор: | Сергей Губанов [ Вторник, 21 Октябрь, 2008 09:58 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
AVC писал(а): паттерн dispose Это не паттерн. Это синтаксический сахар языка C#. Позволяет вместо текста:Код: //... писать более кратко:{ X x = null; try { x = new X(); // use x... } finally { if (x != null) { x.Dispose(); } } } //... Код: //... Для этого нужно чтобы тип X реализовывал интерфейс System.IDisposableusing (X x = new X()) { // use x... } //... Код: public interface IDisposable { void Dispose (); } К этой же самой разновидности синтаксического сахара относится и lock: Код: lock (obj) разворачивается компилятором в{ // use obj } Код: System.Threading.Monitor.Enter(obj);
try { // use obj } finally { System.Threading.Monitor.Exit(obj); } |
Автор: | Илья Ермаков [ Вторник, 21 Октябрь, 2008 10:03 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Какое отношение имеет наличие Dispose (введение принудительного освобождения для конкретного вида ресурсов) к принципу минимализма? Это всё равно, что сказать: "раз не является жизненно важным, то луче не синего цвета". Касательно того, вводить или не вводить - всё сильно зависит от конкретного случая. Например, допустим ли риск, что один компонент, закрыв разделяемый ресурс, нарушит этим работу остальных. Я уже сказал, что явное освобождение ресурсов (метод Close) используется в ряде модулей среды). |
Автор: | Info21 [ Вторник, 21 Октябрь, 2008 11:09 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Geniepro писал(а): Но это противоречит духу оберонов, где ответ -- раз не является жизненно важным, то не иметь... "Дух оберонов" заключается в признании того, что программеры склонны делать ошибки, и нужно уже на уровне проектирования языка уменьшить эту вероятность. Минимализм языка -- следствие этого. Исключение ручного управления памятью -- ровно из этой категории. Но ручное управление можно организовать средствами SYSTEM, что просто позволяет четко контролировать использование небезопасных средств в коде. Так что опять Geniepro продемонстрировал свою фирменную поверхностность -- и неудержимую страсть к клеветам. |
Автор: | Geniepro [ Вторник, 21 Октябрь, 2008 11:35 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Info21 писал(а): Geniepro писал(а): Но это противоречит духу оберонов, где ответ -- раз не является жизненно важным, то не иметь... "Дух оберонов" заключается в признании того, что программеры склонны делать ошибки, и нужно уже на уровне проектирования языка уменьшить эту вероятность. Минимализм языка -- следствие этого. Хорошо бы ещё добавить for each, ибо куда без него... Info21 писал(а): Так что опять Geniepro продемонстрировал свою фирменную поверхностность -- и неудержимую страсть к клеветам. В свою очередь info21 продемонстрировал свою фирменную и неудержимую страсть к переходам на личности. Всё правильно... ![]() |
Автор: | AVC [ Вторник, 21 Октябрь, 2008 11:50 ] |
Заголовок сообщения: | Re: Нужны ли Оберону конструкторы, деструкторы и исключения? |
Сергей Губанов писал(а): AVC писал(а): паттерн dispose Это не паттерн. Это синтаксический сахар языка C#. Позволяет <...>Я примерно так и думал, но не знал наверняка. |
Страница 1 из 9 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |