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 писал(а):
А если микросекунды важны, то всё равно надо особый механизм сочинять.
В том и вопрос: нужен ли такой механизм?

Я имел в виду, что нужно просто делать уже имеющимися средствами в зависимости от задачи. Какой может быть общий механизм, если речь о микросекундах?
Существует известный паттерн RAII, родившийся в языке Си++.
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();
    }
  }
}
//...
писать более кратко:
Код:
//...
using (X x = new X())
{
  // use x...
}
//...
Для этого нужно чтобы тип X реализовывал интерфейс System.IDisposable
Код:
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 писал(а):
Но это противоречит духу оберонов, где ответ -- раз не является жизненно важным, то не иметь...

"Дух оберонов" заключается в признании того, что программеры склонны делать ошибки, и нужно уже на уровне проектирования языка уменьшить эту вероятность.
Минимализм языка -- следствие этого.
Ну в этом случае в обероны таки следует добавить систему интерфейсов (так как ручное манипулирование метаинформацией чревато ошибками), добавить интерфейс IDisposable и синтаксическую конструкцию using, которая и впрямь очень удобна и повышает безопасность.
Хорошо бы ещё добавить for each, ибо куда без него...
Info21 писал(а):
Так что опять Geniepro продемонстрировал свою фирменную поверхностность -- и неудержимую страсть к клеветам.
В свою очередь info21 продемонстрировал свою фирменную и неудержимую страсть к переходам на личности. Всё правильно... :lol:

Автор:  AVC [ Вторник, 21 Октябрь, 2008 11:50 ]
Заголовок сообщения:  Re: Нужны ли Оберону конструкторы, деструкторы и исключения?

Сергей Губанов писал(а):
AVC писал(а):
паттерн dispose
Это не паттерн. Это синтаксический сахар языка C#. Позволяет <...>
Спасибо!
Я примерно так и думал, но не знал наверняка.

Страница 1 из 9 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/