Автор Тема: Oberon & GCless modules  (Прочитано 24620 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #45 : Август 10, 2012, 05:54:38 pm »
Отличие же от GC не только в том, что память освобождается разом для всех объектов, созданных в ней.
Обычно GC собирает мусор, когда при очередном запросе на выделение памяти под объект обнаруживается потенциальный дефицит памяти в ближайшем будущем.

Автоматическое освобождение региона вообще никак не связано с запросами на создание нового объекта.
Можно сократить объяснение: GC-ленивый (ленивые вычисления, да), а регионы энергичны.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Oberon & GCless modules
« Ответ #46 : Август 10, 2012, 06:00:09 pm »
Автоматическое освобождение региона вообще никак не связано с запросами на создание нового объекта. Компилятор, проанализировав текст программы, определяет, где нужно освободить регион, то есть освобождение памяти в регионе является статическим, а не динамическим как у GC.
Это похоже на распределение переменных в стеке -- при вызове подпрограммы в стеке выделяется память под её локальные переменные, при завершении подпрограммы эта память автоматически освобождается. Никакой сборщик мусора тут не нужен...
Каким образом это возможно если скажем создание региона поместить в ветку условного оператора выполняющуюся в зависимости от динамического условия?

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #47 : Август 10, 2012, 06:06:27 pm »
Каким образом это возможно если скажем создание региона поместить в ветку условного оператора выполняющуюся в зависимости от динамического условия?
А в чём проблема? Этот регион явно завершит своё существование, когда закончится тело той ветки IF, в которой он был создан...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: Oberon & GCless modules
« Ответ #48 : Август 10, 2012, 06:10:34 pm »
наверное в том, что он может вообще не создаваться на практике...

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #49 : Август 10, 2012, 07:00:00 pm »
наверное в том, что он может вообще не создаваться на практике...
Ну так тем более: нет региона -- нет проблемы!
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: Oberon & GCless modules
« Ответ #50 : Август 10, 2012, 07:05:49 pm »
наверное в том, что он может вообще не создаваться на практике...
Ну так тем более: нет региона -- нет проблемы!
:) точно МММ-нет проблем!

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #51 : Август 10, 2012, 08:23:56 pm »
Кстати, по сути в erlang'e память тоже регионами управляется, а в рамках каждого региона имеется сборщик мусора :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #52 : Август 10, 2012, 08:30:35 pm »
Если серьёзно, то на использование регионов надо накладывать ограничение -- объекты, в нём созданные, могут быть присвоены лишь тем переменным, область и время жизни которых не больше, чем у этого региона. Если программист попытается присвоить этот объект переменной, глобальной для этого региона, он получит по рукам от компилятора.

В этом случае принятие решения о месте и времени уничтожения региона становится тривиальным...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: Oberon & GCless modules
« Ответ #53 : Август 10, 2012, 09:47:07 pm »
Если серьёзно, то на использование регионов надо накладывать ограничение -- объекты, в нём созданные, могут быть присвоены лишь тем переменным, область и время жизни которых не больше, чем у этого региона. Если программист попытается присвоить этот объект переменной, глобальной для этого региона, он получит по рукам от компилятора.

В этом случае принятие решения о месте и времени уничтожения региона становится тривиальным...
некомильфо в общем случае, ограничение  на использование динамической памяти коверкающее алгоритмику .

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #54 : Август 11, 2012, 12:50:41 pm »
В Аде есть access types (что-то типа ссылочных типов), их можно представить как регионы -- когда действие программы выходит за область видимости таких типов, то все объекты этих типов тут же уничтожаются.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #55 : Август 12, 2012, 05:19:14 pm »
Я слабо представляю как можно NEW отделить от языка - это не типичная процедура и/или функция. Средствами языка нельзя реализовать процедуру NEW.

Кстати, в ББ можно описать её как PROCEDURE NEW (OUT p: SYSTEM.PTR). PTR-у можно присваивать любое указательное значение. Т.е. это нетипизированный GC-шный указатель. Недокументированная вещь. Просто для информации :)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #56 : Август 12, 2012, 06:54:29 pm »
Я слабо представляю как можно NEW отделить от языка - это не типичная процедура и/или функция. Средствами языка нельзя реализовать процедуру NEW.

Кстати, в ББ можно описать её как PROCEDURE NEW (OUT p: SYSTEM.PTR). PTR-у можно присваивать любое указательное значение. Т.е. это нетипизированный GC-шный указатель. Недокументированная вещь. Просто для информации :)
Объявить то можно, а вот реализовать уже нет. Но все равно спасибо.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #57 : Август 12, 2012, 09:09:52 pm »
В каком смысле нельзя реализовать? В ББ NEW заменяется на вызов Kernel.NewRec.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #58 : Август 12, 2012, 09:14:46 pm »
В каком смысле нельзя реализовать? В ББ NEW заменяется на вызов Kernel.NewRec.
В прямом. Возможно я чего-то не понимаю, но NEW кроме указателя по ссылке (то есть куда записать)  нужно ведь знать и тип этого указателя (а по типу нужно иметь возможность узнать размер записи). Насколько я понимаю, указатели даже в ББ это не тэгированные типы, соответственно в рантайме информации о типе нет. Следовательно мы не знаем сколько памяти нужно выделять.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Oberon & GCless modules
« Ответ #59 : Август 12, 2012, 09:17:19 pm »
Да, всё верно, Алексей. Упустил.

Вот сделать процедуру, которая будет работать так:
VAR r: RECORD ptr: MyObject END;;
New(r)
- можно.