OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 17 Апрель, 2024 00:23

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 178 ]  На страницу 1, 2, 3, 4, 5 ... 9  След.
Автор Сообщение
СообщениеДобавлено: Воскресенье, 19 Октябрь, 2008 15:06 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
В Си++ активно используются конструкторы/деструкторы вместе с исключениями.
В Обероне нет утечек памяти, как в Си/Си++, но есть другие ресурсы, за своевременным возвращением которых системе можно было бы следить с помощью какого-либо аналога деструкторов.
Как вы считаете, было бы полезным ввести в Оберон/КП аналог (возможно, по другому реализованный) деструкторов (прежде всего)?
Напомню, что обероны не совсем чужды этим вопросам: секция инициализации (а в КП и секция завершения) модуля, регистрируемые процедуры FINALIZE (?) в КП.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Октябрь, 2008 17:19 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
AVC писал(а):
.. Как вы считаете, было бы полезным ввести в Оберон/КП аналог (возможно, по другому реализованный) деструкторов (прежде всего)?

.. секция инициализации (а в КП и секция завершения) модуля, регистрируемые процедуры FINALIZE (?) в КП.


Так чего не хватает в FINALIZE? Закроем файлы, то да сё. А еще что?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Октябрь, 2008 18:27 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
AVC писал(а):
.. Как вы считаете, было бы полезным ввести в Оберон/КП аналог (возможно, по другому реализованный) деструкторов (прежде всего)?

.. секция инициализации (а в КП и секция завершения) модуля, регистрируемые процедуры FINALIZE (?) в КП.


Так чего не хватает в FINALIZE? Закроем файлы, то да сё. А еще что?
Вопрос в том, когда мы это сделаем.
FINALIZE вызывается сборщиком мусора, а тот может сработать в неопределенное время.
Краткое сопоставление финализатора и деструктора:
http://ru.wikipedia.org/wiki/Финализатор


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Октябрь, 2008 20:05 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
AVC писал(а):
Info21 писал(а):
Так чего не хватает в FINALIZE? ...
Вопрос в том, когда мы это сделаем.
FINALIZE вызывается сборщиком мусора, а тот может сработать в неопределенное время.

Так можно его заставить: Services.Collect.

А если микросекунды важны, то всё равно надо особый механизм сочинять.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Октябрь, 2008 22:45 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
А если микросекунды важны, то всё равно надо особый механизм сочинять.
В том и вопрос: нужен ли такой механизм?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Октябрь, 2008 23:39 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
AVC писал(а):
Info21 писал(а):
А если микросекунды важны, то всё равно надо особый механизм сочинять.
В том и вопрос: нужен ли такой механизм?

Я имел в виду, что нужно просто делать уже имеющимися средствами в зависимости от задачи. Какой может быть общий механизм, если речь о микросекундах?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Октябрь, 2008 03:21 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
AVC писал(а):
Вопрос в том, когда мы это сделаем.

Ещё в какой последовательности. ББ вызывает финализаторы в неочевидном порядке


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Октябрь, 2008 10:07 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Горячев писал(а):
AVC писал(а):
Вопрос в том, когда мы это сделаем.

Ещё в какой последовательности. ББ вызывает финализаторы в неочевидном порядке

Это решается: если есть какой-то нужный порядок, то соотв. объекты должны быть как-то повязаны друг с другом и координироваться между собой, чтобы обеспечить нужный порядок вызовов каких-то реальных процедур финализации. Тогда FINALIZE -- некий фасад, приемник сигнала о начале сбора мусора. А принимает, по сути, -- вся координированная общность объектов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Октябрь, 2008 13:39 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Хотел спросить пишущих на до-диезе (если такие есть; кажется, Сергей Губанов одно время писал на нем): что это за паттерн dispose?
Пользуетесь ли вы им?
Применим ли он в каком-нибудь виде к BlackBox?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Октябрь, 2008 14:02 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
AVC писал(а):
Info21 писал(а):
А если микросекунды важны, то всё равно надо особый механизм сочинять.
В том и вопрос: нужен ли такой механизм?

Я имел в виду, что нужно просто делать уже имеющимися средствами в зависимости от задачи. Какой может быть общий механизм, если речь о микросекундах?
Существует известный паттерн RAII, родившийся в языке Си++.
http://ru.wikipedia.org/wiki/Получение_ресурса_есть_инициализация
В языках с GC использованию этого паттерна мешает неопределенность времени вызова финализатора (т.е. ресурсы освобождаются не сразу).
Но есть какие-то подпорки вроде паттерна dispose в C#.
Впрочем, я согласен, что цель не в изменении языка, а в решении проблемы. Если есть способ удобно ее решить, не трогая языка, имеет смысл так и поступить.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Октябрь, 2008 14:42 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Собственно, весь паттерн-то состоит в наследовании от единого интерфейса с единым методом.

А так в ББ для таких случаев и применяется спец. метод Close (если не вызвали его явно, тогда уже добивает финализатор). Files.File. SqlDB. И т.п.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Октябрь, 2008 16:18 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Насколько я понял, это был пример проекта, где использование такого-то инструмента не потребовалось. Чтобы не возникало вопросов "применимо ли это к моему случаю". Просто, описание, возможно, чуть затянулось...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Октябрь, 2008 16:30 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
AVC писал(а):
В Си++ активно используются конструкторы/деструкторы вместе с исключениями.
В Обероне нет утечек памяти, как в Си/Си++, но есть другие ресурсы, за своевременным возвращением которых системе можно было бы следить с помощью какого-либо аналога деструкторов.
Как вы считаете, было бы полезным ввести в Оберон/КП аналог (возможно, по другому реализованный) деструкторов (прежде всего)?


Ну пока в обероне нет исключений, то можно как-то жить и без деструкторов. При наличии исключений - да, совсем грустно. Можно попробовать пообсуждать возможные решения :) Например:
1) Связываем с записью процедуру-деструктор. Для определенности назовем такую запись по аналогии с C# - disposable.
2) Деструктор вызывается при выходе disposable-записи из области видимости.
3) disposable-запись можно передавать "вниз" (как параметр процедуры) и "вверх" как результат функции.
4) Если disposable-запись была возвращена как результат, то деструктор для нее в текущей процедуре не вызывается.
5) В вызывающей процедуре disposable-запись "принимается" "инициализацией по месту" локальной переменной.
6) disposable-запись, переданную как аргумент, нельзя вернуть (можно попробовать разрулить это чисто синтаксически, сделав несовместимыми тип аргумента и тип возвращаемого значения).
7) disposable-запись может быть только локальной переменной или полем агрегирующей disposable-записи.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Октябрь, 2008 16:44 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Vlad писал(а):
6) disposable-запись, переданную как аргумент, нельзя вернуть (можно попробовать разрулить это чисто
синтаксически, сделав несовместимыми тип аргумента и тип возвращаемого значения).


Например так:
Тип аргумента будет "VAR <тип>" (ссылка), тип возвращаемого значения - просто "<тип>" (значение). Значение может быть приведено к ссылке, но не наоборот.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Октябрь, 2008 07:50 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Valery Solovey писал(а):
Насколько я понял, это был пример проекта, где использование такого-то инструмента не потребовалось. Чтобы не возникало вопросов "применимо ли это к моему случаю". Просто, описание, возможно, чуть затянулось...

Вкратце -- большой нужды в Dispose не возникло, использовался на всякий случай в связи с неродными для managed-среды ресурсами...

Если есть выбор -- иметь Dispose или не иметь, то лучше иметь (имхо).
Но это противоречит духу оберонов, где ответ -- раз не является жизненно важным, то не иметь...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Октябрь, 2008 09:58 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
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 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Какое отношение имеет наличие Dispose (введение принудительного освобождения для конкретного вида ресурсов) к принципу минимализма?
Это всё равно, что сказать: "раз не является жизненно важным, то луче не синего цвета".
Касательно того, вводить или не вводить - всё сильно зависит от конкретного случая. Например, допустим ли риск, что один компонент, закрыв разделяемый ресурс, нарушит этим работу остальных.

Я уже сказал, что явное освобождение ресурсов (метод Close) используется в ряде модулей среды).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Октябрь, 2008 11:09 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Geniepro писал(а):
Но это противоречит духу оберонов, где ответ -- раз не является жизненно важным, то не иметь...

"Дух оберонов" заключается в признании того, что программеры склонны делать ошибки, и нужно уже на уровне проектирования языка уменьшить эту вероятность.
Минимализм языка -- следствие этого.

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

Так что опять Geniepro продемонстрировал свою фирменную поверхностность -- и неудержимую страсть к клеветам.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Октябрь, 2008 11:35 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Info21 писал(а):
Geniepro писал(а):
Но это противоречит духу оберонов, где ответ -- раз не является жизненно важным, то не иметь...

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Октябрь, 2008 11:50 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 178 ]  На страницу 1, 2, 3, 4, 5 ... 9  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB