Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему автоматический подсчет ссылок работает только в компиляторах для IOS? / 25 сообщений из 28, страница 1 из 2
24.02.2019, 17:58
    #39778463
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Почему автоматический подсчет ссылок в Delphi XE работает только в компиляторах для IOS? То есть, такой код приведет к утечке памяти:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
function func(): TStrings;
begin
	result := TStringList.create();
end;

procedure proc(value: TStrings);
begin
	...
end;

...

	proc(func());



Нужно сначала заносить результат работы "func" в переменную, эту переменную передавать в "proc" и затем удалять объект. Сплошные неудобства. Почему разработчики Delphi так ненавидят меня?
...
Рейтинг: 0 / 0
24.02.2019, 18:07
    #39778465
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
amadeusПочему разработчики Delphi так ненавидят меня?
...
Рейтинг: 0 / 0
24.02.2019, 18:13
    #39778467
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Фэйтл Эра,
Кому то не нравится подсчет ссылок :)
...
Рейтинг: 0 / 0
24.02.2019, 18:33
    #39778473
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
amadeusПочему разработчики Delphi так ненавидят меня?

Потому что ты не в состоянии понять разницу между классами и интерфейсами, очевидно. У
Дельфи изначально предполагался низкий порог вхождения, но всё же не под плинтусом. Так
что меняй ориентацию, Ява - твоё всё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2019, 19:08
    #39778490
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
авторПотому что ты не в состоянии понять разницу между классами и интерфейсами, очевидно.

То есть, они ненавидят всех, кто не в состоянии понять эту разницу?
...
Рейтинг: 0 / 0
24.02.2019, 19:22
    #39778492
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
amadeusТо есть, они ненавидят всех, кто не в состоянии понять эту разницу?

Нет, об этом уже позаботилась природа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2019, 19:22
    #39778493
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
amadeusавторПотому что ты не в состоянии понять разницу между классами и интерфейсами, очевидно.

То есть, они ненавидят всех, кто не в состоянии понять эту разницу?
это ты ненавидишь всех, кто знает, в чём разница
...
Рейтинг: 0 / 0
24.02.2019, 19:28
    #39778496
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
amadeusТо есть, они ненавидят всех, кто не в состоянии понять эту разницу?
Это не они, просто натура абхорэт вакуум.
...
Рейтинг: 0 / 0
24.02.2019, 19:30
    #39778497
asviridenkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Dimitry Sibiryakov,

Однако, нельзя сказать, что соединение интерфейсов и подсчета ссылок это хорошее архитектурное решение. Это независимые понятия, и в такой реализации видится явная кривизна.
...
Рейтинг: 0 / 0
24.02.2019, 19:31
    #39778498
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
asviridenkovнельзя сказать, что соединение интерфейсов и подсчета ссылок это хорошее архитектурное решение
Как бы и да, но - "вот так сделали", и ничего тут не поделать.
...
Рейтинг: 0 / 0
24.02.2019, 19:35
    #39778500
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
asviridenkovв такой реализации видится явная кривизна.

Ну да, ставить знак равенства между COM и IUnknown было реально плохой идеей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2019, 19:58
    #39778506
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
asviridenkovDimitry Sibiryakov,

Однако, нельзя сказать, что соединение интерфейсов и подсчета ссылок это хорошее архитектурное решение. Это независимые понятия, и в такой реализации видится явная кривизна.
Не хотите, так не считайте. К слову говоря, реализация интерфейсов в делфи реализована отлично. Потом идет .net и далее си++.
...
Рейтинг: 0 / 0
24.02.2019, 20:01
    #39778508
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Dimitry Sibiryakovasviridenkovв такой реализации видится явная кривизна.

Ну да, ставить знак равенства между COM и IUnknown было реально плохой идеей.

Так знак равенства между COM и IUnknown в делфи не стоит. Можно легко реализовать IUnknown без системной реализации COM и реализация будет работать с кодом на .net и си++. А за счет виртуальных интрефейсов можно прикрутить любой код.
...
Рейтинг: 0 / 0
24.02.2019, 20:07
    #39778509
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Нельзя реализовать COM без IUnknown. Кусок с отрицательным смещением у классов мешается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2019, 20:19
    #39778510
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Может быть, можно поставить какую-нибудь галочку, чтобы механизм заработал, и объекты удалялись автоматически, как в iOs? Возможно, директиву компилятора...
...
Рейтинг: 0 / 0
24.02.2019, 20:22
    #39778512
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Нет.
...
Рейтинг: 0 / 0
24.02.2019, 20:53
    #39778530
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Dimitry SibiryakovНельзя реализовать COM без IUnknown. Кусок с отрицательным смещением у классов мешается.

Понятное дело. Нигде нельзя. Я о том, что IUnknown можно реализовать без COM
...
Рейтинг: 0 / 0
24.02.2019, 22:21
    #39778553
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
ziv-2014Понятное дело. Нигде нельзя.

Вообще-то - можно. Причём практически везде. Но не в Дельфи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.02.2019, 09:12
    #39778630
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Dimitry Sibiryakovziv-2014Понятное дело. Нигде нельзя.

Вообще-то - можно. Причём практически везде. Но не в Дельфи.

Везде - это где? Назови хотя бы один? В си++ и си# это так, это технология COM. В основе COM лежит реализация IUnknown. В любой интерфейс наследуется от IUnknown. Если не видно реализации IUnknown, значит эта реализация засунута в внутрь.
Давай код выкладывай, где реализация COM реализована без реализации IUnknown.
...
Рейтинг: 0 / 0
25.02.2019, 14:55
    #39778828
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
ziv-2014Везде - это где? Назови хотя бы один? В си++ и си# это так, это технология COM. В основе
COM лежит реализация IUnknown.

COM это всего лишь стандарт на двоичную раскладку абстрактного класса и его VMT. Над ним -
IUnknown (COM+/OLE), который резервирует первые три слота VMT под функции поддержки
factory вообще и CoCreateInstance в частности, ещё выше - IDispatch (OLE Automation).

В FPC без проблем создаются СОМ-совместимые Corba-классы у которых IUnknown и близко не лежал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.02.2019, 17:55
    #39778949
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Dimitry Sibiryakovziv-2014Везде - это где? Назови хотя бы один? В си++ и си# это так, это технология COM. В основе
COM лежит реализация IUnknown.

COM это всего лишь стандарт на двоичную раскладку абстрактного класса и его VMT. Над ним -
IUnknown (COM+/OLE), который резервирует первые три слота VMT под функции поддержки
factory вообще и CoCreateInstance в частности, ещё выше - IDispatch (OLE Automation).

В FPC без проблем создаются СОМ-совместимые Corba-классы у которых IUnknown и близко не лежал.

Ты ошибаешься. Сам же пишешь, чтобы класс был COM совместимым для него необходимо VMT и указатели на функции. Соответственно IUnknown будет реализован внутри. Вызови QueryInterface(IUnknown, unk) и получишь указатель на IUnknown. Иначе класс не будет COM-совместимым.
...
Рейтинг: 0 / 0
25.02.2019, 18:04
    #39778952
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
amadeus,

Но вообще то в Delphi под Windows разрешена адресная арифметика и всякие там pointer --> integer --> pointer преобразования. Вся VCL построена на этом. И становится понятно, что сборщик мусора сделать (в Delphi под Windows) не реально.
...
Рейтинг: 0 / 0
25.02.2019, 18:40
    #39778963
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
ziv-2014Соответственно IUnknown будет реализован внутри.

С чего бы вдруг? AddRef, Release и QueryInterface это обычные методы, ничем не лучше и не
хуже других, точно так же лежащих в VMT. Выкинь их и СОМ останется, а вся иерархия
IUnknown исчезнет как страшный сон.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.02.2019, 18:56
    #39778966
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Кроик Семёнamadeus,

Но вообще то в Delphi под Windows разрешена адресная арифметика и всякие там pointer --> integer --> pointer преобразования. Вся VCL построена на этом. И становится понятно, что сборщик мусора сделать (в Delphi под Windows) не реально.Реально, если делать самому.

Я вот в одном из проектов сделал классический эрзац гарбаж коллектор.

Иначе из-за специфики было трудно ловить освобождаются объекты.

Просто все нужные мне классы рождались от специального моего типа TCountable, внутри которого была реализована работа по ведению списка этих самых объектов по типам и удаления их когда они уже не нужны.
...
Рейтинг: 0 / 0
25.02.2019, 18:58
    #39778967
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему автоматический подсчет ссылок работает только в компиляторах для IOS?
Я там даже сделал что было видно в каком юните отслеживаемый объект был создан. :)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему автоматический подсчет ссылок работает только в компиляторах для IOS? / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]