Вышла новая версия компилятора FreePascal

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Mikhail писал(а):
Дож писал(а):Хоть тут нет технических утечек, на практике это имеет такие же неприятные последствия, т.е. внезапное OutOfMemory, которого вроде бы быть не должно

Это ошибка в плохо спроектированном программном модуле.

Этого мы не узнаем, пока не спросим написавшего модуль (или не прочтём документацию на модуль). Возможно, что он просто забыл об освобождении.

Опять же, например, если алгоритм предполагает сначала загрузку в память всех данных, а потом их полную обработку, а данных слишком много и получишь OutOfMemory это что утечка?

Это не утечка, потому что программист ожидает и осознаёт, что он грузит в память большой участок данных. Он не «забыл что-то освободить». Между утечками и загрузкой большого блока в память, повторюсь, огромная и принципиальная разница, гораздо бо́льшая, чем между технической утечкой указателя и логической утечкой в Java.

Если временные данные не влезли в ОЗУ это утечка?

Это очень сильно зависит от характера использования временных данных, может быть и так, и так. Если в каком-то алгоритме есть условные моменты «захвата памяти под временные данные» и «освобождения этой памяти» (после которой, согласно алгоритму, эта память не нужна), но в реальной программе, реализующей этот алгоритм, выходит так, что память под временные данные систематически не освобождается и не освободится, то это почти наверняка утечка, а не «программист так и задумывал».
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

Дож писал(а):Это не утечка, потому что программист ожидает и осознаёт, что он грузит в память большой участок данных.

Ну он просто вызывает подпрограмму и ничего не осознает, а разработчик неявно предполагал, что данные поместятся в ОЗУ. Разумеется, предполагается что данные можно обрабатывать и целиком и порционно.
Дож писал(а):программист так и задумывал

Он об этом ничего не думал, ему сказали, что GC все решит. :mrgreen:
kazalex
постоялец
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Сообщение kazalex »

Mikhail писал(а):В интернете много чего можно нагуглить и что из этого?

Похоже, мы присутствуем при явлении носителя истины народу...

Mikhail писал(а):Не все что написано на заборе есть истина.

Забор забору рознь. Вот, например, что написано на заборе майкрософт:
Definition of memory leak
A memory leak occurs when memory is allocated in a program and is never returned to the operating system, even though the program does not use the memory any longer. The following are the four basic types of memory leaks:

In a manually managed memory environment: Memory is dynamically allocated and referenced by a pointer. The pointer is erased before the memory is freed. After the pointer is erased, the memory can no longer be accessed and therefore cannot be freed.
In a dynamically managed memory environment: Memory is disposed of but never collected, because a reference to the object is still active. Because a reference to the object is still active, the garbage collector never collects that memory. This can occur with a reference that is set by the system or the program.
In a dynamically managed memory environment: The garbage collector can collect and free the memory but never returns it to the operating system. This occurs when the garbage collector cannot move the objects that are still in use to one portion of the memory and free the rest.
In any memory environment: Poor memory management can result when many large objects are declared and never permitted to leave scope. As a result, memory is used and never freed.


Mikhail писал(а):А еще можно отладчик запустить и поправить ссылку

А можно просто не выдумывать терминологию.
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

kazalex писал(а):Забор забору рознь. Вот, например, что написано на заборе майкрософт:

Это лишь частное мнение микрософт, не более. :mrgreen:
kazalex
постоялец
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Сообщение kazalex »

Mikhail писал(а):Это лишь частное мнение микрософт, не более

Я так и думал. Он, таки, явился. :pray:
perlpunk
новенький
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

Сообщение perlpunk »

както запилили замыкания в rust и swift
без GC

еще есть такое http://www.elementscompiler.com/element ... guage.aspx

вообще замыкания и вот
http://www.elementscompiler.com/element ... arallelism
такая фишка очень востребованна сейчас
особенно в GUI

а разработка компонентов как предлагается сейчас она странная - имеем класс с очень много полей и методов. расширение только черезз наследование -> городим кучу ненужной ииерархии.
хеллперы классов может както изменят ситуацию. будет декомпозиция и переиспользование отдельных частей в компоентах. тоесть возвращаемся к истокам где есть структура - объект и есть функкции привязанные к объекту (оберон, GOlang)
perlpunk
новенький
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

Сообщение perlpunk »

а во freepascal есть такое ?

http://newpascal.org/assets/modern_pasc ... d_routines

локальные переменные родительской функции доступны во вложенных функциях (т.е. без передачи из как аргументов).
почти как замыкания только статические.
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Есть такое во всех уважающих себя паскалях.

В fpc даже можно объявить «is nested» тип для таких «статических замыканий»:
http://svn.freepascal.org/svn/fpc/trunk ... param3d.pp
perlpunk
новенький
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

Сообщение perlpunk »

честно говоря пример по ссылке не понял. там какие то типы дополнительные передаются и непонятный значек @

но вложенные функции попробую тогда.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

perlpunk писал(а): непонятный значек @

Значок @ означает передачу адреса, существует в языке с незапамятных времен.
Ответить