Автор Тема: Как обходиться без сборщика мусора?  (Прочитано 14448 раз)

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Как обходиться без сборщика мусора?
« Ответ #15 : Февраль 14, 2012, 04:45:22 pm »
В обероне, имхо, без сборщика мусора не обойтись, так как сама система задумывалась как связка ОС-ЯП с интегрированным сборщиком. А, вот возможен ли какой-нибудь, скажем, полуавтоматический режим сборки мусора?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Как обходиться без сборщика мусора?
« Ответ #16 : Февраль 14, 2012, 05:05:39 pm »
В обероне, имхо, без сборщика мусора не обойтись, так как сама система задумывалась как связка ОС-ЯП с интегрированным сборщиком. А, вот возможен ли какой-нибудь, скажем, полуавтоматический режим сборки мусора?

Все, что "не автоматическое" низводит ЯП до уровня С :) Ну или дельфы (если речь о паскалеподобном). Так что сборка для современного ЯВУ должна быть автоматической по определению, а всякие ручки покрутить для более эффективной сборки - можно сколько угодно придумывать.

alexus

  • Гость
Re: Как обходиться без сборщика мусора?
« Ответ #17 : Февраль 14, 2012, 05:07:32 pm »
В том, что используются совершенно разные "охраняющие условия"... то есть, различные логические конструкции объединятся в одну только на том основании, что они выполнятся циклически. Разобраться и понять эту объединённую логику не всегда легко. Даже конечные автоматы с учётом множества состояний проще и понятнее писать без использования ЦД.
Возможно, это проблема неудобного синтаксиса.
Дело не синтаксисе... На любом языке ЦД остаётся ЦД.

Вот, например, хаскелл -- там нет циклов вообще и их имитировать приходится с помощью рекурсии.
Да, это т.н. "функциональный подход"... Не думаю, что отсутствие явных циклов - это правильно. Дело в том, что на языке программирования мы фактически записываем некую модель реальности. И чем ближе/точнее модель совпадает с реальностью, тем более адекватное описание получается. А в реальности многие процессы цикличны по своей сути. Циклически сменяются времена года, например. Но сказать, что зима вызывает весну?.. Это на любителя.

В результате часто получаются вполне нормальные функции, которые фактически являются реализацией цикла Дейкстры (с некоторым синтаксическим оверхедом на рекурсивный вызов).
Дело не в оверхеде... и не в рекурсии... дело в "охраняемых условиях". Логика у них разная...

Никаких проблем с такими логическими конструкциями нет совершенно, и, думаю, это благодаря более удобному синтаксическому оформлению кода (даже несмотря на тот оверхед)...
Это не имеет отношения к сути вопроса. С циклами тоже нет проблем... и от замены цикла на рекурсию (хотя для ЦД это допущение неверно!) ничего не меняется.
Почему неверно допущение...
Возьму определение ЦД из Википедиии
do
   P1 → S1,
     
   Pn → Sn
 od
Пусть функция, где выполняется этот ЦД называется LoopD, но в общем случае S1 <> S2 <> ... <> Sn <> LoopD. То есть, прямой рекурсии мы не получаем.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Как обходиться без сборщика мусора?
« Ответ #18 : Февраль 14, 2012, 05:48:46 pm »
В обероне, имхо, без сборщика мусора не обойтись, так как сама система задумывалась как связка ОС-ЯП с интегрированным сборщиком.
C чего бы вдруг? Оберон отлично обходится без сборщика мусора. См например тот же Astrobe или там Pow!. Без сборщика мусора скорее Haskell не сможет обойтись.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Как обходиться без сборщика мусора?
« Ответ #19 : Февраль 15, 2012, 09:42:09 am »
Точно также конструктор должен подтвердить расчётом, каждый болт (на срез, кручение, изгиб...), каждую заклёпку... Ничего хитрого, как видите.
То есть, это инструмент проектирования, абстракция, представляющая собо расчёты? Никакого графического воплощения у неё нет.

alexus

  • Гость
Re: Как обходиться без сборщика мусора?
« Ответ #20 : Февраль 15, 2012, 10:14:46 am »
Точно также конструктор должен подтвердить расчётом, каждый болт (на срез, кручение, изгиб...), каждую заклёпку... Ничего хитрого, как видите.
То есть, это инструмент проектирования, абстракция, представляющая собо расчёты? Никакого графического воплощения у неё нет.
Есть и графическое... карандашом... на бумаге... потом в каком-нибудь Draw из OpenOffice. Надо же не только для основного процесса нарисовать, но посмотреть, что получается при вызове разных справочных форм, в разных сочетаниях... А специального инструмента... нет, не делали. А зачем?.. На очередной стадии проектирования, прорисовали, приложили, сформировали константы типа MAX_N_CUSTOMERS = ...

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Как обходиться без сборщика мусора?
« Ответ #21 : Февраль 15, 2012, 10:39:43 am »
Нет, говоря про инструмент, я не имел в виду программу. Карандаш тоже подходит : ). А как оно на бумаге появляется? В виде графов? Для чего используются узлы, для чего стрелки...

Я так понимаю, что карта описывает не только статическое состояние системы, но и переходы между ними. Так? Например, начиная с какого-то момента нам больше не нужно столько памяти вот здесь. Мы её освобождаем, и появляется достаточно памяти для данных из БД.

alexus

  • Гость
Re: Как обходиться без сборщика мусора?
« Ответ #22 : Февраль 15, 2012, 10:55:55 am »
Нет, говоря про инструмент, я не имел в виду программу. Карандаш тоже подходит : ). А как оно на бумаге появляется? В виде графов? Для чего используются узлы, для чего стрелки...

Я так понимаю, что карта описывает не только статическое состояние системы, но и переходы между ними. Так? Например, начиная с какого-то момента нам больше не нужно столько памяти вот здесь. Мы её освобождаем, и появляется достаточно памяти для данных из БД.
Это простая матрица... Пусть в строках указываются элементы, которым нужна память (формы, пулы, например). Пусть в столбцах указываются состояния элементов... Внизу итоговая строка, максимум по которой и есть максимальный размер памяти, который требуется программе.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Как обходиться без сборщика мусора?
« Ответ #23 : Февраль 20, 2012, 06:13:53 am »
Дело не в оверхеде... и не в рекурсии... дело в "охраняемых условиях". Логика у них разная...
Просто надо использовать каждый инструмент по его назначению.
Например, сортировка 4 чисел или вычисление НОДа с помощью ЦД (классические примеры использования ЦД) -- нормально и понятно, логика каждого условия подходящая.
А вот поиск элемента в многомерном (двухмерном хотя бы) массиве с помощью ЦД выглядит неестественно, потому и кажется, что ЦД для этого не подходит...
to iterate is human, to recurse, divine

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

alexus

  • Гость
Re: Как обходиться без сборщика мусора?
« Ответ #24 : Февраль 20, 2012, 12:59:42 pm »
Дело не в оверхеде... и не в рекурсии... дело в "охраняемых условиях". Логика у них разная...
Просто надо использовать каждый инструмент по его назначению.
Золотые слова...

Например, сортировка 4 чисел или вычисление НОДа с помощью ЦД (классические примеры использования ЦД) -- нормально и понятно, логика каждого условия подходящая.
А вот поиск элемента в многомерном (двухмерном хотя бы) массиве с помощью ЦД выглядит неестественно, потому и кажется, что ЦД для этого не подходит...
Именно об этом и речь. Область применимости ЦД очень узка, и рекомендации по его "всеобщему применению" - излишне тенденциозны.