gifts2017

Кольцевые ссылки в скриптах 1С

Опубликовал Михаил Ражиков (tango) в раздел Программирование - Практика программирования

старое, неправильное, название публикации "Перем Форма Экспорт;"

Памяти много не бывает. Для того, чтобы памяти все-таки хватало, «взрослые» программисты, такие как разработчики среды программирования (платформы), обычно заботятся о так называемых «сборщиках мусора» - механизмах, освобождающих оперативку от отработавших кусков кода. Ну, они должны это делать… Ну, по крайней мере, они нам говорят, что делают это. К сожалению, это у них не всегда получается одинаково хорошо. А кто совершенен?

Внимание! Нападки автора на Экспорт вызваны необъяснимой невнимательностью при исследовании казуса. К правильному пониманию явления подвигают комменты  (поставил все-таки минус :))

 

Предлагаемая обработка иллюстрирует тезис. Просто отройте её и закройте.

Рис.1 

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

Рис.2

Конечно, чтобы всё-таки избавиться от формы, придётся закрыть платформу (каламбурчик!), но перезагружать виндовс не надо.

 

Казус возникает, если экспортной переменной модуля (формы или объекта, все равно) присвоить значение самой формы. потому, что разработчики не стали решать существующую во "взрослых" средах проблему чистки мусора, а просто переложили ее на плечи скриптописателей.

 

Обнаруженные эффекты:

 

  1. если вызвать контекстное меню на кнопке окна предприятия в панели окон виндовса, форма затаится

Рис. 3

, но если не закрыть окно, продолжит виртуально быть.

 

  1. если открыть/закрыть форму еще раз, они будут в памяти обе две

Рис. 4

Можно было бы еще поковыряться, пофантазировать о полезном использовании фичи (или бага?), но с отличной от нуля вероятностью «взрослые дяди» могут подрихтовать свою продукцию, так что в сухом остатке публикации – только бесплатный совет:

Постарайтесь как можно меньше использовать в своей работе ключевое слово Экспорт.

Или убивайте их нах, чисто не там, где убирает 1с, а там, где не мусорят 1сники.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
РоскошныйГлюк.epf
.epf 6,28Kb
28.12.09
53
.epf 6,28Kb 53 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Рытов (Арчибальд) 28.12.09 09:54
Вообще-то оставление "висячих ссылок" всегда считалось у программистов моветоном. К сожалению, зачастую сейчас смешиваются понятия программиста и пользователя программной платформы...
2. Михаил Ражиков (tango) 28.12.09 10:03
Арчи, одно дело, когда "висячая ссылка" - "в никуда", точнее - туда, где уже совсем другое, другое - когда и ссылки-то уже нет (попробуй ка подцепить незавершившийся процесс "закрытой" формы) а кусок кода - живет и здравствует, мало того - не только память занимает, но и процессор грузит в забытом цикле...
Вот, думается, не потому ли конфигуратор время от времени схлопывается, что 1сина так же грязно работает и в этом режиме?
3. Александр Рытов (Арчибальд) 28.12.09 10:17
(2) Я это и имел в виду. Не просто убить ссылку, но сначала убить то, на что она ссылается. Помню, была в Эльбрусе процедурка с двусмысленным именем ВернутьПамЯть :D
4. Михаил Ражиков (tango) 28.12.09 10:25
А как?
Сделаем в ПриЗакрытии
Фрм = "";
Допустим (не факт), это убъет ее циклы и даже созданные в ней локальные переменные.
Сама-то она останется в памяти как пустая строка (или нет?)!
Если же обращение к такой форме происходит достаточно часто (в большом цикле), то ссылки даже на пустую строку в конце концов забьют сколь угодно большой, но конечный, объем.
5. steban (steban) 28.12.09 10:46
1С использует подсчет ссылок (reference counting) а не сборку мусора. Так что надеяться на уничтожение объектов, на которые не осталось внешних ссылок, не стОит. При достаточной изворотливости можно наделать циклических ссылок и утечек памяти.
antonio22; artbear; Арчибальд; +3 Ответить 2
6. Александр Рытов (Арчибальд) 28.12.09 10:53
(4) "Как" - вопрос другой. Подозреваю, что ответ на него может варьироваться в зависимости от всяких сопутствующих факторов. Вон, лисповцы только и делают, что совершенствуют сбор мусора.
Важно то, что разработчик должен учитывать возможность появления мусора. А предупрежден - значит, вооружен.
7. Михаил Ражиков (tango) 28.12.09 11:36
(5) значит ли это, что 1с в обозримом будущем от сабжа не избавится, и это фича, а не баг, и можно смотреть на полезное использование?
8. Михаил Ражиков (tango) 28.12.09 11:40
Определение: reference counting

Подсчёт ссылок. Алгоритм сборки мусора, ведущий для каждого объекта программы подсчёт текущего числа других объектов, которые на него ссылаются. Если это число становится равным нулю, память соответствующего объекта можно безопасно освободить, а общее число ссылок каждого из ссылающихся на него других объектов уменьшить на единицу. У этого алгоритма возникают проблемы с объектами, ссылающимися друг на друга по кольцу, так как у них число ссылок никогда не бывает меньше 1.

http://www.pcmag.ru/encyclopedia/term.php?ID=4091
9. Михаил Ражиков (tango) 28.12.09 11:43
Для понимания того, как Python находит значение некоторой переменной, необходимо ввести понятие блока кода. В Python блоком кода является то, что исполняется как единое целое, например, тело определения функции, класса или модуля.

Локальные имена - имена, которым присвоено значение в данном блоке кода. Глобальные имена - имена, определяемые на уровне блока кода определения модуля или те, которые явно заданы в операторе global. Встроенные имена - имена из специального словаря __builtins__.

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

Так как переменную можно связать с объектом в любом месте блока, важно, чтобы это произошло до ее использования, иначе будет возбуждено исключение NameError. Связывание имен со значениями происходит в операторах присваивания, for, import, в формальных аргументах функций, при определении функции или класса, во втором параметре части except оператора try-except.

С областями видимости и связыванием имен есть много нюансов, которые хорошо описаны в документации. Желательно, чтобы программы не зависели от таких нюансов, а для этого достаточно придерживаться следующих правил:

Всегда следует связывать переменную со значением (текстуально) до ее использования.
Необходимо избегать глобальных переменных и передавать все в качестве параметров. Глобальными на уровне модуля должны остаться только имена-константы, имена классов и функций.
Никогда не следует использовать from модуль import * - это может привести к затенению имен из других модулей, а внутри определения функции просто запрещено.
Предпочтительнее переделать код, нежели использовать глобальную переменную. Конечно, для программ, состоящих из одного модуля, это не так важно: ведь все определенные на уровне модуля переменные глобальны.

Убрать связь имени с объектом можно с помощью оператора del. В этом случае, если объект не имеет других ссылок на него, он будет удален. Для управления памятью в Python используется подсчет ссылок (reference counting), для удаления наборов объектов с зацикленными ссылками - сборка мусора (garbage collection).
http://www.intuit.ru/department/pl/python/1/7.html
10. Михаил Ражиков (tango) 28.12.09 11:45
Главное достоинство подсчета ссылок перед отслеживающими сборщиками мусора в том, что объекты удаляются сразу как только на них нельзя сослаться, и в инкрементальной манере, без долгих пауз для циклов сборки и с ясно определенным временем жизни каждого объекта.
http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D1%91%D1%82_%D1%81%D­1%81%D1%8B%D0%BB%D0%BE%D0%BA
11. Михаил Ражиков (tango) 28.12.09 11:46
Основные понятия сборки мусора. Для системы управления памятью работа приложения может быть представлена как последовательность обращений к памяти. Связанная совокупность данных, создаваемая в результате размещения объектов, назначения и модификации указателей, может рассматриваться как направленный граф достижимости, узлами которого являются используемые объекты в куче, а связями – указатели. Исходное множество ссылок (root set), задается набором ячеек памяти, хранящихся вне области кучи и содержащих указатели на объекты в куче. Root set может состоять из статических переменных, объектов системных классов, локальных переменных процедур, регистров и т.д.

Существующие методы сборки мусора делятся на трассирующие и использующие счетчики ссылок.

Трассирующие методы сборки мусора основаны на определении полного графа достижимости. Сборка начинается со сканирования исходного набора указателей, далее происходит обход графа с обработкой достижимых объектов. В конце обхода, когда все достижимые объекты определены, память, занятая недостижимыми объектами, считается свободной. Достижимые объекты считаются живыми, а недостижимые относят к множеству свободных.

Основной идеей сборщиков с подсчетом ссылок является отслеживание числа указателей на каждый объект в куче. Если в некоторый момент выполнения приложения счетчик ссылок объекта стал равным нулю, это означает, что такой объект больше не нужен приложению (на него не ссылается ни один другой), и место в памяти, которое он занимал, может быть отнесено к множеству свободных блоков. Основным недостатком такой схемы управления памятью является невозможность обработки циклических структур, какими, например, являются двусвязные списки, так как в таких структурах на каждый объект всегда существует хотя бы одна ссылка.

http://www.swsys.ru/index.php?page=article&id=963
12. Михаил Ражиков (tango) 28.12.09 11:49
(10) vs (5)
если 1с - это подсчет ссылок (5), то, по определению (10), на неудалившуюся, но закрытую форму должна быть возможность сослаться.
Вопрос - как?
13. Вячеслав Кадацкий (marsohod) 28.12.09 11:55
(0) :o :o :o
(6)
предупрежден - значит, вооружен
как это верно...
14. steban (steban) 28.12.09 12:05
(12)
по определению (10), на неудалившуюся, но закрытую форму должна быть возможность сослаться.
из (10) не следует возможность сослаться на неудаленный объект, на который нет внешних ссылок
15. steban (steban) 28.12.09 12:10
+(14) то, что я назвал "внешними ссылками", в (11) описано как rootset
16. Михаил Ражиков (tango) 28.12.09 12:15
т.е., назначив форме обработчик ожидания, мы создали кольцо взаимных "внутренних" ссылок?
17. steban (steban) 28.12.09 12:26
(16)нет.
вот эта строка приводит к созданию циклических ссылок:
Фрм = ПолучитьФорму("Форма")
Если ее убрать, то "роскошный глюк" таковым быть перестанет
18. steban (steban) 28.12.09 12:38
значит ли это, что 1с в обозримом будущем от сабжа не избавится, и это фича, а не баг
скорее всего - да
19. Михаил Ражиков (tango) 28.12.09 12:48
(17) если Фрм не назначать Экспорт, то Фрм = ПолучитьФорму("Форма") не дает сабжа.
Наверное, кольца ссылок все-таки нет, есть некая "внутренняя", которая порождается Экспротом
**
и не очищается при закрытии формы
20. steban (steban) 28.12.09 12:52
если Фрм не назначать Экспорт, то Фрм = ПолучитьФорму("Форма") не дает сабжа
убрал Экспорт. Форма не умерла.
Движок 8.1.14
21. steban (steban) 28.12.09 12:55
При внимательном чтении описания метода "ПолучитьФорму" в синтакс-помощнике, можно сделать вывод, что Фрм=ПолучитьФорму("Форма") эквивалентно Фрм=ЭтаФорма
22. Михаил Ражиков (tango) 28.12.09 12:58
(20) упс... сейчас посмотрю, умиралажже
23. steban (steban) 28.12.09 13:00
Фрм = ПолучитьФорму("Форма",,3)

возвращается новая форма, циклических ссылок нет, все умирают.
24. steban (steban) 28.12.09 13:03
Создай новую внешнюю обработку, в ее модуле напиши
Перем Т;

Т=Новый ТаблицаЗначений();
Т.Колонки.Добавить("т");
Для Сч=1 По 1000000 Цикл
	Стр=Т.Добавить();
	Стр.Т=Т;
КонецЦикла; 
...Показать Скрыть

При каждом открытии обработки количество памяти, используемой процессом 1с, будет расти. Это является косвенным подтверждением того, что в 1с именно "подсчет ссылок", а не "сборка мусора"
25. Михаил Ражиков (tango) 28.12.09 13:03
Вот Ой! так Ой!
правда, не умирает.
стало быть, фрм=ЭтаФорма...
26. Михаил Ражиков (tango) 28.12.09 13:07
(24) ок, верю, что так и будет. Однакож, здесь-то где закольцованная ссылка? Т в Т? и, получается, собственно форма как таковая не важна?
27. steban (steban) 28.12.09 13:12
Однакож, здесь-то где закольцованная ссылка? Т в Т?

после окончания цикла счетчик ссылок на Т будет равен 1000001 (переменная модуля ссылается на Т + миллион ссылок внутри самой Т).
При разрушении объекта обработки счетчик ссылок на Т будет уменьшен на 1, и т.к. он все еще положителен, то Т уничтожена не будет
28. steban (steban) 28.12.09 13:13
1. "взрослые дяди" оказались обруганы ни за что,
2.
Постарайтесь как можно меньше использовать в своей работе ключевое слово Экспорт

сомнительная рекомендация, основанная на ложных выводах
3. "Роскошный глюк" оказался ожидаемым поведением
29. Михаил Ражиков (tango) 28.12.09 13:14
Ок, я сообразил, почему на Экспорт погрешил: эксперементировал, когда Фрм была в модуле объекта.
30. Михаил Ражиков (tango) 28.12.09 13:15
(28) текст публикации уже поправил, см. первый абзац
31. Михаил Ражиков (tango) 28.12.09 13:16
сабж, тем не менее, остается в силе, так или иначе, 1снику надо следить за спиной
32. steban (steban) 28.12.09 13:18
(31) рекомендация использовать голову никогда лишней не будет ;)
DMSDeveloper; Арчибальд; +2 Ответить
33. Михаил Ражиков (tango) 28.12.09 13:18
блин, сними минус, steban, поправилж
38. Михаил Ражиков (tango) 28.12.09 14:38
Имхо, фи к "взрослым" так же остаются в силе.
1. Программеры камней (базовый ввод-вывод)
2. Программеры ОС (виндовс, люникс, etc)
3. Программеры "взрослых" языков (си, паскаль, ява,..)
4. Программеры прикладных пакетов (1с,..)
5. Программеры скриптов (веб-дизайнеры, 1сники,...)
Очевидно, проблема циклических ссылок органично существует на 3. уровне (может быть, и на 1.,2.)).
Но не менее очевидно, что на уровнях 3.-4. эта проблема ДОЛЖНА быть решена уже и НЕ транслироваться на уровень 5.
39. dushelov (Душелов) 28.12.09 14:49
(38) В C# при возникновении бесконечного цикла срабатывает исключение.
40. steban (steban) 28.12.09 15:26
(38)
Очевидно, проблема циклических ссылок органично существует на 3. уровне (может быть, и на 1.,2.))
Но не менее очевидно, что на уровнях 3.-4. эта проблема ДОЛЖНА быть решена

Я бы не сказал, что она ДОЛЖНА быть решена.
Выбор между RC и GC - это выбор между накладными расходами на сборку мусора или возможными утечками памяти (которых можно избежать). Те, кто проектировал 1С, сделали свой выбор в пользу "возможных утечек".
41. steban (steban) 28.12.09 15:29
рискуем скатиться в холивар C++ vs С# :)
42. Михаил Ражиков (tango) 28.12.09 15:30
Свой выбор они сделали. Однако в мануалах написать об этом забыли.
43. Михаил Ражиков (tango) 28.12.09 15:31
(41) вот, вот. 1сниковское ли это дело?
44. steban (steban) 28.12.09 15:42
(42)
Свой выбор они сделали. Однако в мануалах написать об этом забыли.

Диск ИТС.
Методическая поддержка 1С:Предприятия 8.1 -> Методические рекомендации по конфигурированию -> Встроенный язык -> Особенности хранения значений в переменных модулей объектов и форм
В платформе 1С:Предприятие 8 используется стратегия управления временем жизни объектов, основанная на подсчете ссылок на объекты - reference counting. Данная стратегия заключается в следующем. Каждый объект платформы содержит счетчик ссылок. При появлении ссылки на объект (объект присваивается какой-либо переменной) происходит увеличение счетчика на единицу, при уничтожении подобной ссылки -
значение счетчика на единицу уменьшается. Объект автоматически уничтожается, и память, занимаемая им, освобождается в момент, когда счетчик ссылок объекта становится равен нулю.

Особенностью подсчета ссылок на объекты является возможность организации "циклической ссылки". Циклическая ссылка возникает, когда объекты начинают ссылаться друг на друга. Это приводит к ситуации, при которой ни один из объектов, участвующих в циклической ссылке, не будет уничтожен. В свою очередь это является причиной возникновения утечек памяти (memory leaks).

Необходимо, по возможности, избегать появления циклических ссылок. Соблюдение достаточно простых правил при разработке конфигураций позволит избежать проблем связанных с циклическими ссылками. В случае появления подобной ссылки необходимо определить момент для ее разрыва, чтобы объекты могли быть уничтожены нормальным образом.

Полный перечень случаев возникновения циклической ссылки привести невозможно, приведем лишь некоторые примеры:
1 хранение в переменной модуля объекта (набора записей, формы) ссылки на данный объект (набор записей, форму) - ситуация приводит к появлению циклической ссылки - объект (набор записей, форма) никогда не будет уничтожен;
2 хранение ссылки на владеемый объект в объекте-владельце и ссылки на объект-владелец во владеемом объекте - оба объекта никогда не будут уничтожены.

Следует обратить внимание, что, помимо переменных модулей, ссылки на объекты могут образовываться при передаче их в методы встроенного языка. Например, добавление в список значений нового значения - этого же списка значений, приведет к появлению циклической ссылки.
JohnyDeath; +1 Ответить 2
45. Михаил Ражиков (tango) 28.12.09 16:02
(44) ок, дурак, ваше благородие :)
46. Михаил Ражиков (tango) 28.12.09 16:08
хм. Выходит, если ты купил 1с, но не подписался на итс, можешь никогда и не узнать всю правду о том, что купил?
47. steban (steban) 28.12.09 16:33
Написал бы лучше практический рецепт по нахождению утечек при помощи технологического журнала вместо нападок на разработчиков платформы.
48. Михаил Ражиков (tango) 28.12.09 16:49
Технологических журналов в кадетском корпусе не проходили.
Собственно разработчики (типа коллеги) как бы вне критики, ответственность за косяки несут потребители нераспределенной прибыли от продажи продукта ("правообладатели", если можно так выразиться). А уж разработчиков пусть пинают те самые потребители, работа у них такая.
49. Михаил Ражиков (tango) 29.12.09 09:12
(28) Нет, это НЕ ожидаемое поведение. Ожидаемое - это закрыли, значит закрыли.
И то, что нам задним числом, за отдельную плату, объяснили (44), чего они НЕ сделали, дела не меняет.
50. Михаил Ражиков (tango) 29.12.09 10:04
51. Артур Аюханов (artbear) 30.12.09 10:12
Для выравнивания ситуации также минусану.
Давным-давно известная проблема, со времен 7.7 ничего не изменилось :(
Как уже steban написал, 1С выбрала наиболее простой, определенный и быстрый метод.
52. Артур Аюханов (artbear) 30.12.09 10:15
Последние абзацы в описании вообще не понятны - кого убивать-то?
53. Дмитрий К. (Dementor) 30.12.09 11:09
(46) Не купил, а украл. Практически со всеми конфами (типовыми так точно) идет подписка ИТС на 6 месяцев. Но даже если платформа идет не совсем законным путем, то что мешает "от туда" взять и образ ИТС?

За напоминание про циклические ссылки - спасибо.
54. steban (steban) 30.12.09 11:38
2tango
Расскажи мне, пожалуйста, почему выставление минуса публикации ты посчитал личным оскорблением и решил ответить личным оскорблением в описании публикации?
55. Денис Яковлев (iceflash) 30.12.09 16:23
Странный "спор". В данном контексте - то, как отрабатывает 1с все верно с точки зрения подсчета ссылок И сборщика мусора.
Всегда поражало, то свойство большинства программистов под платформу 1с незнание основы основ, это печально. Нужно лишь знать мат часть.
Слава богу,что в свое время начинал с низкоуровневых языков, и использую 1с только для разработки решений в силу популярности платформы и соответственно монетизации. Не сочтите никто за оскорбление, просто мнение сформированное на фактах.
DMSDeveloper; Abadonna; +2 Ответить 1
56. steban (steban) 13.01.10 11:51
57. Михаил Ражиков (tango) 17.02.10 18:09
(54, 56) да ну, какие мелочи между друзьями!
58. Михаил Ражиков (tango) 17.02.10 18:14
(55) ты непоследователен. либо 1с подобна тому, с чего ты "начинал", и тогда "отрабатывает 1с все верно", либо это облочка для 1снегов, и тогда закрытие формы должно убивать всё в/из этой формы, есть там где-то какие-то ссылки или нет.

разработчики не стали (поленились, недопёрли) этого сделать. это плохо. в смысле - недостаток оболочки для 1снегов.
62. Артур Аюханов (artbear) 18.02.10 09:41
(0) Имей уважение к оппонентам.
Пиши имени/ники оппонентов правильно, а не как тебе хочется.

Некоторые твои сообщения скрыты из-за нарушения п.3 и п.4. правил
63. Михаил Ражиков (tango) 18.02.10 10:19
ок, исправлю в публикации своё фырканье в адрес оппонента. тем более, что он фактически соавтор оной :)
64. Сергей Данилов (pencroff) 11.03.10 15:01
Здесь все обсуждают то что могут быть кольцевые ссылки и утечки памяти. Подскажите как бороться с этими самыми утечками памяти в скрещенной конфигурации. Скрестили так что месячный документооборот при перепроведени = 1Gb оперативки. Как работать с технологическим журналом? Кто сталкивался с такими вопросами?
66. Алекс Ю (AlexO) 27.09.12 13:11
Не знаю, что тут такого сложного, но если на форму есть ссылка (её владелец еще не "отпустил") - она будет "жива".
Соответственно, разработчики пошли по простейшему пути (что не удивительно для разработчиков 1С) и сделали подсчет ссылок "до победного" (пока таковых не останется вовсе - вот тогда объект и уничтожится).
Кто сможет так извернуться, что и владелец не "закроется", д еще и ссылки в цикле начнут плодится от него - ну, молодец значит, такое просто так не сделаешь, значит, так и задумывал изначально.
67. Михаил Ражиков (tango) 27.09.12 13:27
(66) AlexO,
такое просто так не сделаешь

если что-то может быть сделано, кто-нибудь это сделает
68. Алексей Новоселов (a-novoselov) 22.03.13 15:47
Сбор мусора, коллеги, это прошлый век!))
Посмотрите Win8 (специальные приложения на новом API) или Android - там память очищается всегда автоматически. Если не нужна программа, или форма программе, да и фиг с ней - пометили как не нужную и система сама заменит новыми данными, когда память нужна станет. И даже после закрытия программы, данные этой программы остаются в оперативной памяти. Зато при повторном запуске мгновенно открывается на том же месте, где закрыл. Сбор мусора - очень дорогостоящая и ни кому не нужная операция. Тем более сейчас даже на мобилках по 2 Гб оперативной памяти ставят, не говоря уж про десктопы. Мне кажется лет через пять программисты вообще забудут о том, что такое сборщик мусора, как о страшном сне. Так же, как когда-то забыли о необходимости встраивать драйвера для всех видео- и звуковых карт в свои приложения, когда вышел DirectX и OpenGL. А вы что думаете по этому поводу?
69. Алекс Ю (AlexO) 22.03.13 16:16
(68) a-novoselov,
пометили как не нужную и система сама заменит новыми данными

скажите об этом разработчикам 1С с их бесконечными утечками памяти.
И даже после закрытия программы она остается в оперативной памяти

После закрытия максимум, что останется от "программы" в ОП - это мусор, помеченный "на удаление".
Зато при повторном запуске мгновенно открывается на том же месте, где закрыл.

Вы имеете весьма и весьма отдаленное представление о работе копмьютера, ОС, программ и 1С.
В данном случае - перепутали очистку памяти (сборку мусора) с кэшированием/загрузкой памяти.
Мне кажется лет через пять программисты вообще забудут о том, что такое сборщик мусора

Среди повсеместной деградации все равно останутся люди, которые будут писать встроенные уборщики, чтобы те "не светились" и делали свое дело в "гаджетах, ОС, мобилках.."
Так же, как когда-то забыли о необходимости писать драйвера под все видео- и звуковые карты, когда вышел DirectX и OpenGL
без драйвера до сих пор и во веки, пока не сменится архитектура компьютера и логический принцип его построения, - не будет работать ни одна видео-звуко- и прочая "карта".
DirectX и OpenGL - это бибилиотеки API, к работе и взаимодействию самого устройства внутри/с другими устройствами (за что отвечает драйвер) отношения не имеющие. Названные графические API - отвечают за обработку изображения, и призваны унифицировать написание различнейших графических приложений.
А драйвера пишут те, кто занает, что это такое. Другое дело - многие драйвера все больше и больше встраиваются в ОС, а устройства - все больше унифицируются между собой в логике своей внутренней работы.
70. Алекс Ю (AlexO) 22.03.13 16:18
(68) a-novoselov,
Android - там память в принципе не очищается.

архивируется и самовоспроизводится в кремниевых кристаллах?
71. Алексей Новоселов (a-novoselov) 22.03.13 16:33
(70) Что за привычка к словам цепляться...

Имелось ввиду память не очищается приложением, а очищается самой системой.
Так же как в Java память очищается средой исполнения а не конечной программой. И 1С сама память очищает, за редким исключением)

(69) А про OpenGL имелось ввиду не разработка драйверов в принципе, а то что их не нужно стало включать в каждую игру. Помните под ДОСом чтобы что-то запустить сперва конфигурируешь настройки встроенных драйверов через setup.exe... Прописываешь IRQ и DMA каналы для звуковой карты и т.д. Я не про производителей оборудования говорил, что им не нужно будет драйвера писать, а про разработчиков конечных приложений для пользователей.
72. Алекс Ю (AlexO) 22.03.13 16:58
(71) a-novoselov,
а то что их не нужно стало включать в каждую игру.

Так это и есть применение унификации через API, а не встройка драйверов устройств - в игры. Вы же пишите про драйвера к устройствам, а не к играм.
Прописываешь IRQ и DMA каналы для звуковой карты

Только лишь потому, что плата не предоставляла такую информацию драйверу, и приходилось их размещать вручную. Сейчас - предоставляет, и драйвер настраивается на "все те же прерывания" автоматически.
а про разработчиков конечных приложений для пользователей.

унификация работы драйверов с API ведет к унификации работы конечных приложений с этими API.
Т.е. ничего, по сути, не изменилось, а только приложения стали автоматически через API и драйвер устройства взаимодействовать с устройством и настраиваться.
Имелось ввиду память не очищается приложением, а очищается самой системой.

Посмотрите, что сами же и написали:
Посмотрите Win8 ... или Android - там память в принципе не очищается. Если не нужна программа, или форма программе, да и фиг с ней - пометили как не нужную и система сама заменит новыми данными, когда память нужна станет. И даже после закрытия программы она остается в оперативной памяти.
73. Алексей Новоселов (a-novoselov) 22.03.13 17:37
(72) Изменил сообщение, чтобы сложнее было к словам придираться... Так что же, все таки, думаете по сути вопроса? а не про глубину и широту ваших познаний в области архитектуры ПК перед моими... Нужна будет забота об очистке памяти разработчикам конечных приложений для пользователей?
74. Алекс Ю (AlexO) 22.03.13 17:40
(73) a-novoselov,
Нужна будет забота об очистке памяти

А как вы представляете без этого? :)
Самоочищающийся модуль памяти? Так еще не изобрели такого.
75. Михаил Ражиков (tango) 30.08.13 14:30
Ладно. Тема, похоже, бессмертна, как перенумератор.
76. Алекс Ю (AlexO) 17.10.13 11:21
(75) tango,
На самом деле, почему бы просто не написать:
- не пользуйте во внешних отчетах, обработках присвоение в переменной уровня модуля объекта - ссылки на какую-либо форму этой же обработки/отчета
Перем Форма; Форма = ПолучитьФорму("ДопФорма"); Форма.Открыть();
, т.е. не делать циклическую ссылку на сам объект (внешнюю обработку/отчет) через вызов формы как части этого объекта, а если есть в этом нужда - ПриЗакрытии явно очищать эту переменную Форма;
- не пользуйте во внешних отчетах, обработках присвоение переменной уровня модуля объекта/реквизиту объекта - установку ссылки на саму себя "любимую", тем более - в цикле а-ля пример из ( 24) (а для реквизита внешней обработки/отчета - избегать присвоение ему ссылки на него самого, как в коде, так и в задании Типданных "вручную" в "Свойствах").
Так как 1С не осилила разработать механизм разрешения ссылочных конфликтов и отследить, что ссылка закольцевалась на саму себя, и указатель в подсчете ссылок - создан ей же самой, и также подлежит стиранию, как и создавший этот указатель "родительский" объект, то все возложено на конечных программистов: либо избегать такой ссылочности, либо вовремя принудительно уничтожать объект, содержашщий "указатель" на себя самого, например, явным присвоением "Форма = Неопределено".
А то на ИТС это занимает целую страницу "мелким почерком", да еще и в разных местах, да еще и не все варинаты и неполное описание....
77. Михаил Ражиков (tango) 17.10.13 11:29
(76) AlexO, привет
почему бы просто ни написать

Потому что изначально - "доступно и всериоз"
Потому что до сих пор предмет гордости - прибыль на количество сотрудников
"пипл схавает"
**
да, еще: "Проблемы индейцев вендора не...". Ну то есть клиентами для флагмана являются франи, а не конечные юзеры
78. Алекс Ю (AlexO) 17.10.13 11:40
(77) tango,
у меня вообще подозрение, что внутри 1С в части разработки платформы, методологии и написания справок/ИТС все еще более запутанно и "не по уму" :)
Об этом в этом сообщении.
79. Михаил Ражиков (tango) 17.10.13 11:59
(78) AlexO, Что творится в кишках вендора, можно только строить предположения.
Мое предположение такое, что кирпичи пирамиды вендора ориентированы более на "чего изволите", нежели на качество продукта.
80. Алекс Ю (AlexO) 17.10.13 14:29
(79) tango,
Привет, конечно же :)
более на "чего изволите"

А кто вот предъявляет это "изволяю"?! Вот его и надо вывесить .... на всеобщее обозрение...
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа