Единственный серьезный overhead в ObjC, что кстати начинающие не особо себе представляют, - это механизм обработки сообщений объектами. Динамический язык и все такое, но из-за этого Apple настойчиво засовывает блоки в те места, где критична производительность, потому что посылки сообщений/вызов методов у объектов - вещь медленная.adb wrote:Мягко скажем оверхед на размер счетчика, да на каждый объект...
Переквалификация c#-> ??
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: Переквалификация c#-> ??
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Правильно, медленней чем C, за счет того, что фактически каждый вызов - это вызов виртуального метода. Но ведь это C. Если видишь, что какие-то методы критичны по скорости вызова, то просто выносишь их из интерфейса и имплементируешь как обычную Си функцию (включая возможность использования inline). Ведь полная прозрачность между Objective-C, C, C++.dotcom wrote:Единственный серьезный overhead в ObjC, что кстати начинающие не особо себе представляют, - это механизм обработки сообщений объектами. Динамический язык и все такое, но из-за этого Apple настойчиво засовывает блоки в те места, где критична производительность, потому что посылки сообщений/вызов методов у объектов - вещь медленная.adb wrote:Мягко скажем оверхед на размер счетчика, да на каждый объект...
Не только из-за этого. Блоки просто удобней в качестве каллбеков. Просто раньше блоков не было в Objective-C, это относительно новая фича языка. Хотя это даже не Objective-C фича, а Эппловское расширение для C.dotcom wrote:но из-за этого Apple настойчиво засовывает блоки в те места, где критична производительность
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: Переквалификация c#-> ??
Нет, вызовы в ObjC еще менее эффективны, чем вызов виртуального метода через vtbl. Посмотри на код в obj_msgSend. Я уверен, что у тебя там отладчик часто падал. Но все же. Каждое сообщение/метод - это строка. Ее надо схешировать, найти в lookup'е ссылку и вызывать. Хэш остается в кэше методов, но это, как ни крути, все равно медленно.Интеррапт wrote: Правильно, медленней чем C, за счет того, что фактически каждый вызов - это вызов виртуального метода.
Да, все правильно. Callback'и легко делаются как делегаты, т.е. ссылки на объект и его селектор. Т.е. концепция callback'а там была давно. Блоки - это еще и быстрый callback/closure и lambda в одном флаконе.Интеррапт wrote: Не только из-за этого. Блоки просто удобней в качестве каллбеков. Просто раньше блоков не было в Objective-C, это относительно новая фича языка. Хотя это даже не Objective-C фича, а Эппловское расширение для C.
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Чем-то мне это напоминает "клейсер - это клей" Ну так я же не спорю и не пытаюсь сравнивать Objective-C и C++ по эффективности вызовов. То, что я пытаюсь донести, что в большинстве случаев performance вызова методов в Objective-C очень даже на уровне, а там где нужно, метод всегда можно вынести как С функцию и спокойно вызывать ее из Objective-C кода. Благо, что не нужен никакой JNI, как в случае с джавой. Сишный (или C++) код спокойно вставляется прямо в исходник Objective-C файла. Это даже не считая того, что в LLVM 4.2 вроде как куча оптимизаций для вызова objective-c методов.dotcom wrote: Нет, вызовы в ObjC еще менее эффективны, чем вызов виртуального метода через vtbl. Посмотри на код в obj_msgSend. Я уверен, что у тебя там отладчик часто падал. Но все же. Каждое сообщение/метод - это строка. Ее надо схешировать, найти в lookup'е ссылку и вызывать. Хэш остается в кэше методов, но это, как ни крути, все равно медленно.
Ну елки, ес-но каллбеки были давно, через вызовы делегатов Что я говорю, что blocks - это коллбеки на уровне С, даже не Objective-C, с соответствующим почти нулевым оверхедом. Да и просто синтаксис удобней.dotcom wrote:Да, все правильно. Callback'и легко делаются как делегаты, т.е. ссылки на объект и его селектор. Т.е. концепция callback'а там была давно. Блоки - это еще и быстрый callback/closure и lambda в одном флаконе.
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Ну так я же не спорю и не пытаюсь сравнивать Objective-C и C++ по эффективности вызовов. То, что я пытаюсь донести, что в большинстве случаев performance вызова методов в Objective-C очень даже на уровне, а там где нужно, метод всегда можно вынести как С функцию и спокойно вызывать ее из Objective-C кода. Благо, что не нужен никакой JNI, как в случае с джавой. Сишный (или C++) код спокойно вставляется прямо в исходник Objective-C файла. Это даже не считая того, что в LLVM 4.2 вроде как куча оптимизаций для вызова objective-c методов.dotcom wrote: Нет, вызовы в ObjC еще менее эффективны, чем вызов виртуального метода через vtbl. Посмотри на код в obj_msgSend. Я уверен, что у тебя там отладчик часто падал. Но все же.
В большинстве случаев, метод, который уже вызывался - будет закеширован и выполнится с такой же скоростью как вызов virtual method (cache lookup - это inlined код). А если методы вызывался только один раз, кому интересно, что он вызвался медленней, чем virtual method.Интеррапт wrote:Каждое сообщение/метод - это строка. Ее надо схешировать, найти в lookup'е ссылку и вызывать. Хэш остается в кэше методов, но это, как ни крути, все равно медленно.
https://developer.apple.com/library/mac ... -CH104-SW2 (блин, в Привете длинные ссылки не работают)
To speed the messaging process, the runtime system caches the selectors and addresses of methods as they are used. There’s a separate cache for each class, and it can contain selectors for inherited methods as well as for methods defined in the class. Before searching the dispatch tables, the messaging routine first checks the cache of the receiving object’s class (on the theory that a method that was used once may likely be used again). If the method selector is in the cache, messaging is only slightly slower than a function call. Once a program has been running long enough to “warm up” its caches, almost all the messages it sends find a cached method. Caches grow dynamically to accommodate new messages as the program runs.
Ну елки, ес-но каллбеки были давно, через вызовы делегатов Что я говорю, что blocks - это коллбеки на уровне С, даже не Objective-C, с соответствующим почти нулевым оверхедом. Да и просто синтаксис удобней.dotcom wrote:Да, все правильно. Callback'и легко делаются как делегаты, т.е. ссылки на объект и его селектор. Т.е. концепция callback'а там была давно. Блоки - это еще и быстрый callback/closure и lambda в одном флаконе.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
Я так и не понял откуда у вас знания что на обьект нету ссылок в 20-и других местах, или например цикличных ссылок с которыми ARC не может справится.Интеррапт wrote:Что откуда? Потому что ARC упрощает подсчет ссылок, но это всегда можно сделать вручную. Можно вообще не пользоваться ARC и использовать retain/release для ручного менеджмента памяти. Можно использовать вообще гибридных подход. Но даже с ARC - программист всегда может точно сказать, когда его обьект удалится. Можно даже в любой посмотреть, вызвав метод retainCount, сколько активных references существует для данного обьекта.crypto5 wrote:Откуда?Интеррапт wrote:Я абсолютно точно знаю, когда и где удалится обьект в Objective-C.crypto5 wrote: Т.е. в отдельном участке кода вы не сильно знаете удалится обьект после выхода из области видимости или нет? Это к детерменизму.
Мне верить не обязательно, просто почитайте про memory management для Objective-C.
Как вам помогает retainCount? Как именно вы его используете? Вернул он число 5 в рантайме, и что дальше?
Ну и вопрос в сторону, у вас были реальные проблемы с паузами от джавовского GC?
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
В смысле? Если я создаю обьект и манипулирую им, то я точно знаю, когда этот обьект будет реально удален из памяти. А вы, используя Джаву этого знать точно не можете. А есть ссылки на обьект или нет, я так точно всегда знаю. Например, передавая обьект какому-то методу там или задокументировано, что будет создан дополнительный рефернс на обьект или я всегда могу проверить опытным путем, изменился ли ref counter у этого обьекта. Вы забываете, что в Objective-C полностью ручная модель управления памятью, которая ничем от C++ не отличается (если брать C++ с подсчетом ссылок), кроме того, что в Objective-C были добавлены системы автоматизации подсчета ссылок (ARC). Давайте проведем исследование, вы напишите любой код на Objective-C, а я вам в точности расскажу когда такой-то обьект будет удален из памяти. Включая даже с описанием, когда autorelease pool удаляется и соответственно вместе с ним удаляются все переменные. А затем вы напишите код на Джаве и обьясните мне, когда конкретно ваш обьект удалится.crypto5 wrote: Я так и не понял откуда у вас знания что на обьект нету ссылок в 20-и других местах, или например цикличных ссылок с которыми ARC не может справится.
И самое главное, что в Objective-C это особо и не нужно, все что нужно знать, что если ты создал обьект, то тебе ему нужно будет сделать release (если речь идет о коде без ARC, т.к. ARC это делает автоматом, когда обьект выходит из области видимости). И что когда удалятся все обьекты, у которых есть ссылки на твой обьект, тот тут же произойдет освобождение памяти твоего обьекта. И это все очень легко прогнозируемо. Т.е. выходит обьект из области видимости - счетчик уменьшается на 1. Уменьшился до нуля, тут же удалился, а не ждет, чтобы gc это сделал. Что же тут сложного понять?
Насчет цикличных ссылок, так в Objective-C специально для этого есть weak properties и все отлично Objective-C с этим справляется, не выдумывайте. Да и даже до появления weak properties все вполне работало с assign property или с обнулением ссылок в десктрукторе класса. Проблема была в том, что некоторые делегаты обьявлялись как retain и тогда их нужно было обнулять в деструкторе класса. Этого уже давно нет, с появляением weak типа.
В играх. В андроидовских. Вы думаете от хорошей жизни куча игровых движков на С++ под Андроид пишутся?crypto5 wrote:Ну и вопрос в сторону, у вас были реальные проблемы с паузами от джавовского GC?
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Вот вам пример:
так вот, под ARC - удаление памяти (и вызов деструктора dealloc) для обьекта obj произойдет ровно в тот момент, когда coolSelector закончит выполнение. Без ARC нужно будет написать
ну а собственно если передаешь этот обьект куда-то, например в NSArray, то в NSArray будет добавлен reference на этот обьект. Соответственно удален из памяти этот обьект при выходе из coolSelector не будет. Зато если будет удален NSArray, то тут же и будет удален ваш обьект obj, включая вызов деструктора и т.п. Все абсолютно на 100% прогнозируемо.
Вы действительно никогда не работали C++-ными shared_ptr, что задаете такие простые вопросы? А тут тот же самый shared_ptr, только на уровне компилятора (ну и помощнее в своей реализации).
Code: Select all
- (void)coolSelector
{
MyObject* obj = [[MyObject alloc] init];
...
}
Code: Select all
- (void)coolSelector
{
MyObject* obj = [[MyObject alloc] init];
...
[obj release];
}
Вы действительно никогда не работали C++-ными shared_ptr, что задаете такие простые вопросы? А тут тот же самый shared_ptr, только на уровне компилятора (ну и помощнее в своей реализации).
-
- Уже с Приветом
- Posts: 11999
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Переквалификация c#-> ??
То-ли Привет глючит, то ли я темой ошибся...
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Интеррапт wrote:В смысле? Если я создаю обьект и манипулирую им, то я точно знаю, когда этот обьект будет реально удален из памяти. А вы, используя Джаву этого знать точно не можете. А есть ссылки на обьект или нет, я так точно всегда знаю. Например, передавая обьект какому-то методу там или задокументировано, что будет создан дополнительный рефернс на обьект или я всегда могу проверить опытным путем, изменился ли ref counter у этого обьекта. Вы забываете, что в Objective-C полностью ручная модель управления памятью, которая ничем от C++ не отличается (если брать C++ с подсчетом ссылок), кроме того, что в Objective-C были добавлены системы автоматизации подсчета ссылок (ARC). Давайте проведем исследование, вы напишите любой код на Objective-C, а я вам в точности расскажу когда такой-то обьект будет удален из памяти. Включая даже с описанием, когда autorelease pool удаляется и соответственно вместе с ним удаляются все переменные. А затем вы напишите код на Джаве и обьясните мне, когда конкретно ваш обьект удалится.crypto5 wrote: Я так и не понял откуда у вас знания что на обьект нету ссылок в 20-и других местах, или например цикличных ссылок с которыми ARC не может справится.
И самое главное, что в Objective-C это особо и не нужно, все что нужно знать, что если ты создал обьект, то тебе ему нужно будет сделать release (если речь идет о коде без ARC, т.к. ARC это делает автоматом, когда обьект выходит из области видимости). И что когда удалятся все обьекты, у которых есть ссылки на твой обьект, тот тут же произойдет освобождение памяти твоего обьекта. И это все очень легко прогнозируемо. Т.е. выходит обьект из области видимости - счетчик уменьшается на 1. Уменьшился до нуля, тут же удалился, а не ждет, чтобы gc это сделал. Что же тут сложного понять?
Насчет цикличных ссылок, так в Objective-C специально для этого есть weak properties и все отлично Objective-C с этим справляется, не выдумывайте. Да и даже до появления weak properties все вполне работало с assign property или с обнулением ссылок в десктрукторе класса. Проблема была в том, что некоторые делегаты обьявлялись как retain и тогда их нужно было обнулять в деструкторе класса. Этого уже давно нет, с появляением weak типа.
В играх. В андроидовских. Вы думаете от хорошей жизни куча игровых движков на С++ под Андроид пишутся?crypto5 wrote:Ну и вопрос в сторону, у вас были реальные проблемы с паузами от джавовского GC?
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
В helloworld-e может бытьИнтеррапт wrote:В смысле? Если я создаю обьект и манипулирую им, то я точно знаю, когда этот обьект будет реально удален из памяти.crypto5 wrote: Я так и не понял откуда у вас знания что на обьект нету ссылок в 20-и других местах, или например цикличных ссылок с которыми ARC не может справится.
Это прекрассно. Вы работаете исключительно с кодом который документирует такие подробности? Вы проверяете refCount для каждого бренча выполнения программы?Например, передавая обьект какому-то методу там или задокументировано, что будет создан дополнительный рефернс на обьект или я всегда могу проверить опытным путем, изменился ли ref counter у этого обьекта.
https://github.com/robbiehanson/XMPPFra ... /XMPPJID.m строка 95, переменная preUser.Давайте проведем исследование, вы напишите любой код на Objective-C, а я вам в точности расскажу когда такой-то обьект будет удален из памяти.
Не нужно мне приписывать слов которых я не говорил, я не утверждал что в джаве детерменированный GCА затем вы напишите код на Джаве и обьясните мне, когда конкретно ваш обьект удалится.
С чего вы взяли что эти заурядности для меня сложны в плане понимания?И самое главное, что в Objective-C это особо и не нужно, все что нужно знать, что если ты создал обьект, то тебе ему нужно будет сделать release (если речь идет о коде без ARC, т.к. ARC это делает автоматом, когда обьект выходит из области видимости). И что когда удалятся все обьекты, у которых есть ссылки на твой обьект, тот тут же произойдет освобождение памяти твоего обьекта. И это все очень легко прогнозируемо. Т.е. выходит обьект из области видимости - счетчик уменьшается на 1. Уменьшился до нуля, тут же удалился, а не ждет, чтобы gc это сделал. Что же тут сложного понять?
ВЫ никогда не сталкивались с багами в программах?Насчет цикличных ссылок, так в Objective-C специально для этого есть weak properties и все отлично Objective-C с этим справляется, не выдумывайте. Да и даже до появления weak properties все вполне работало с assign property или с обнулением ссылок в десктрукторе класса.
И как вы определили что проблема была в GC? В интернетах пишут что concurrent mark останавливает приложение на 5мсВ играх. В андроидовских.crypto5 wrote:Ну и вопрос в сторону, у вас были реальные проблемы с паузами от джавовского GC?
Думаю что у Ц++ выше row производительность, особенно в сравнении с давликом, и он возможно имеет доступ к каким то экстра АПИВы думаете от хорошей жизни куча игровых движков на С++ под Андроид пишутся?
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
И к чему этот пример? Как я уже написал в этом случае джава с помощью escape analysis тоже с большой вероятностью выделит этот обьект на стеке и кильнет его при выходе из метода.Интеррапт wrote:Вот вам пример:
так вот, под ARC - удаление памяти (и вызов деструктора dealloc) для обьекта obj произойдет ровно в тот момент, когда coolSelector закончит выполнение. Без ARC нужно будет написатьCode: Select all
- (void)coolSelector { MyObject* obj = [[MyObject alloc] init]; ... }
ну а собственно если передаешь этот обьект куда-то, например в NSArray, то в NSArray будет добавлен reference на этот обьект. Соответственно удален из памяти этот обьект при выходе из coolSelector не будет. Зато если будет удален NSArray, то тут же и будет удален ваш обьект obj, включая вызов деструктора и т.п. Все абсолютно на 100% прогнозируемо.Code: Select all
- (void)coolSelector { MyObject* obj = [[MyObject alloc] init]; ... [obj release]; }
Вы действительно никогда не работали C++-ными shared_ptr, что задаете такие простые вопросы? А тут тот же самый shared_ptr, только на уровне компилятора (ну и помощнее в своей реализации).
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Нет, в любом приложении.crypto5 wrote: В helloworld-e может быть
Ну, preUser будет уничтожена после того, как выйдет из области видимости этого самого "parse" метода (в случае ARC, а без ARC - будет отложена в autorelease pool и уничтожена вместе с другими autorelease переменными при уничтожении autorelease pool, что произойдет к концу event loop). Мало того, даже без использования ARC я могу тело этого parse метода поместить в @autorelease блок и точно знать, что эта самая переменная preUser будет уничтожена при выходе из @autorelease блока, даже без завершения event loop. А к чему вы спрашиваете? Даже если предположить, что этот вызываемый в 95-й строке метод где-то скрывает какие-то хитрые функции, вроде как хранит собственную ссылку на возвращаемое значение (что может произойти, если LibIDN, например, возвращает какие-то кешируемые значения), то все равно, оно будет уничтожено сразу же как LibIDN выйдет из области видимости. И ведь самое главное, что я могу breakpoint поставить на эту перменную и посмотреть ее reference count. Все на 100% детерминировано.https://github.com/robbiehanson/XMPPFra ... /XMPPJID.m строка 95, переменная preUser.
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Escape analysis делает это для довольно простых случаев. А objective-c сделает это для любых случаев. Да и вот вы написали "с вероятностью", т.е. предугадать никогда не можете. А в случае с Objective-C я на 100% знаю, что произойдет с удалением обьекта и когда это произойдет. И в отладчике я вам всегда могу показать, что вот мол тут произойдет удаление обьекта. И оно произойдет. И деструктор класса вызовется именно в этот момент именно после этой строки.crypto5 wrote: И к чему этот пример? Как я уже написал в этом случае джава с помощью escape analysis тоже с большой вероятностью выделит этот обьект на стеке и кильнет его при выходе из метода.
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: Переквалификация c#-> ??
Вам же сверху написали про "прочитайте". Циклы, кстати, легко ловятся. А вот проблема с утеканием памяти асболютно такая же как и в JVM.crypto5 wrote:Я так и не понял откуда у вас знания что на обьект нету ссылок в 20-и других местах, или например цикличных ссылок с которыми ARC не может справится. Как вам помогает retainCount? Как именно вы его используете? Вернул он число 5 в рантайме, и что дальше?Интеррапт wrote: Мне верить не обязательно, просто почитайте про memory management для Objective-C.
Спросите на досуге ваших коллег незлой корпорации, почему Chrome для Андроида имеет свой менеджер памяти.crypto5 wrote:Ну и вопрос в сторону, у вас были реальные проблемы с паузами от джавовского GC?
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Только отлавливать и изолировать легче.dotcom wrote: А вот проблема с утеканием памяти асболютно такая же как и в JVM.
-
- Уже с Приветом
- Posts: 10708
- Joined: 22 Jul 2006 20:19
Re: Переквалификация c#-> ??
Дежавю. Это же Делфай, интерфейсед объекты.. Один в один.. Только на 15 лет раньше придумали.Интеррапт wrote:В смысле? Если я создаю обьект и манипулирую им, то я точно знаю, когда этот обьект будет реально удален из памяти. А вы, используя Джаву этого знать точно не можете. А есть ссылки на обьект или нет, я так точно всегда знаю. Например, передавая обьект какому-то методу там или задокументировано, что будет создан дополнительный рефернс на обьект или я всегда могу проверить опытным путем, изменился ли ref counter у этого обьекта. Вы забываете, что в Objective-C полностью ручная модель управления памятью, которая ничем от C++ не отличается (если брать C++ с подсчетом ссылок), кроме того, что в Objective-C были добавлены системы автоматизации подсчета ссылок (ARC). Давайте проведем исследование, вы напишите любой код на Objective-C, а я вам в точности расскажу когда такой-то обьект будет удален из памяти. Включая даже с описанием, когда autorelease pool удаляется и соответственно вместе с ним удаляются все переменные. А затем вы напишите код на Джаве и обьясните мне, когда конкретно ваш обьект удалится.crypto5 wrote: Я так и не понял откуда у вас знания что на обьект нету ссылок в 20-и других местах, или например цикличных ссылок с которыми ARC не может справится.
И самое главное, что в Objective-C это особо и не нужно, все что нужно знать, что если ты создал обьект, то тебе ему нужно будет сделать release (если речь идет о коде без ARC, т.к. ARC это делает автоматом, когда обьект выходит из области видимости). И что когда удалятся все обьекты, у которых есть ссылки на твой обьект, тот тут же произойдет освобождение памяти твоего обьекта. И это все очень легко прогнозируемо. Т.е. выходит обьект из области видимости - счетчик уменьшается на 1. Уменьшился до нуля, тут же удалился, а не ждет, чтобы gc это сделал. Что же тут сложного понять?
Насчет цикличных ссылок, так в Objective-C специально для этого есть weak properties и все отлично Objective-C с этим справляется, не выдумывайте. Да и даже до появления weak properties все вполне работало с assign property или с обнулением ссылок в десктрукторе класса. Проблема была в том, что некоторые делегаты обьявлялись как retain и тогда их нужно было обнулять в деструкторе класса. Этого уже давно нет, с появляением weak типа.
В играх. В андроидовских. Вы думаете от хорошей жизни куча игровых движков на С++ под Андроид пишутся?crypto5 wrote:Ну и вопрос в сторону, у вас были реальные проблемы с паузами от джавовского GC?
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Вы о чем конкретно? А то сам Objective-C как бы в 80-м году был создан. Ну а так да, Дельфи - продвинутый язык, кто бы сомневался.adda_ wrote: Дежавю. Это же Делфай, интерфейсед объекты.. Один в один.. Только на 15 лет раньше придумали.
(Кстати, если не сложно, чуть-чуть меньше оверквотинга).
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: Переквалификация c#-> ??
А разве тогда в нем были эти фичи автоматического освобождения памяти? Я, конечно, не специалист в вопросе, но мне казалось, что это добавили много позже...Интеррапт wrote:Вы о чем конкретно? А то сам Objective-C как бы в 80-м году был создан.adda_ wrote: Дежавю. Это же Делфай, интерфейсед объекты.. Один в один.. Только на 15 лет раньше придумали.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
А... нет. Это довольно новая вещь, я почему-то подумал именно о ref counting. Но я так понимаю, что ARC в Дельфи все-таки довольно лимитирован был, по сравнению с нынешним Objective-C, иначе не трубили бы сейчас такие победные реляции по поводу нового Дельфи компилятора:АццкоМото wrote:А разве тогда в нем были эти фичи автоматического освобождения памяти? Я, конечно, не специалист в вопросе, но мне казалось, что это добавили много позже...Интеррапт wrote:Вы о чем конкретно? А то сам Objective-C как бы в 80-м году был создан.adda_ wrote: Дежавю. Это же Делфай, интерфейсед объекты.. Один в один.. Только на 15 лет раньше придумали.
http://www.monien.net/delphi-xe-4-is-arc-for-everyone/
As mentioned previously, Delphi XE4 will come with a new memory management, which is supposed to release us from hunting for memory leaks: ARC – Automatic Reference Counting.
...
ARC will only work with Delphi’s new compiler (a.k.a NextGen compiler) which currently exclusively targets the iOS platform. So you will see ARC at work only within the iOS Simulator and on actual iPhones/iPads and iPod touches. On Windows will still have to use the “classic” Delphi compiler, which doesn’t know about ARC.
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: Переквалификация c#-> ??
Опять немного бесполезной тривии. Objective Pascal был отчасти "influenced by" Objective C много лет тому назад. Delphi, понятно, заимствовал синтаксис от Objective Pascal'я. Языки разные, конечно, но принцип легковесного ООП поверх процедурного языка остался.adda_ wrote: Дежавю. Это же Делфай, интерфейсед объекты.. Один в один.. Только на 15 лет раньше придумали.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
С чего это? Вы же не знаете работает ли LibIDN с каким то глобальным кешем?Интеррапт wrote:то все равно, оно будет уничтожено сразу же как LibIDN выйдет из области видимости.
Я у вас уже спрашивал, откуда у вас уверенность что вы своим отладчиком сможете просмотреть все бренчи выполнения программы?И ведь самое главное, что я могу breakpoint поставить на эту перменную и посмотреть ее reference count. Все на 100% детерминировано.
И еще один вопрос в сторону,как часто вы такое делаете?
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
Ну да, за счет оверхеда на подсчет ссылок.Интеррапт wrote:Escape analysis делает это для довольно простых случаев. А objective-c сделает это для любых случаев. Да и вот вы написали "с вероятностью", т.е. предугадать никогда не можете. А в случае с Objective-C я на 100% знаю, что произойдет с удалением обьекта и когда это произойдет. И в отладчике я вам всегда могу показать, что вот мол тут произойдет удаление обьекта. И оно произойдет. И деструктор класса вызовется именно в этот момент именно после этой строки.crypto5 wrote: И к чему этот пример? Как я уже написал в этом случае джава с помощью escape analysis тоже с большой вероятностью выделит этот обьект на стеке и кильнет его при выходе из метода.
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
ARC не ловит циклические референцы, почитайте ка сами.dotcom wrote:Вам же сверху написали про "прочитайте". Циклы, кстати, легко ловятся. А вот проблема с утеканием памяти асболютно такая же как и в JVM.crypto5 wrote:Я так и не понял откуда у вас знания что на обьект нету ссылок в 20-и других местах, или например цикличных ссылок с которыми ARC не может справится. Как вам помогает retainCount? Как именно вы его используете? Вернул он число 5 в рантайме, и что дальше?Интеррапт wrote: Мне верить не обязательно, просто почитайте про memory management для Objective-C.
Давайте ка если вы уже сами "почитали" и "спросили", приводите более конкретные аргументы, чего вы хотели сказать. Я уже по вашему велению безрезультатно ходил и в гугл и в википедию.Спросите на досуге ваших коллег незлой корпорации, почему Chrome для Андроида имеет свой менеджер памяти.crypto5 wrote:Ну и вопрос в сторону, у вас были реальные проблемы с паузами от джавовского GC?
In vino Veritas!
-
- Уже с Приветом
- Posts: 11999
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Переквалификация c#-> ??
А зачем их "ловить"? Из просто делать не надо. Один - strong. Остальные - weak.crypto5 wrote: ARC не ловит циклические референцы, почитайте ка сами.
И никакой ловли.
Мир Украине. Свободу России.