crsib
Спасибо
Да тему создал давно, а время только сейчас появилось чтобы отписаться :(
Не подскажите еще такую штуку с "С" вроде как все нормально, а вот попытался в свободное время описать класс ну скажем вида:
#ifndef __CFOO_H__ #define __CFOO_H__ class CFoo { public: CFoo(){} ~CFoo( ){} }; #endif /*__CFOO_H__*/
Но XCode как я понял не понял что ему подсунули и ругнулся error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CFoo'... Как грится первый блин комам….
Может подскажите что XCode(у) не нравиться и как это дело все исправить?
Расширение у файла какое?
Пробовал и *.mm( для C++ ) и *.m (для C) и на крайняк *.cpp и одна и та же ерунда даже не знаю в чем косяк
crsib
> не считая imp кэширования, но оно ппц страшное и используется если уж совсем
> сильно приперло
разве последний найденный метод ( или несколько последних ) не автоматический кешируются ?
видимо, он у тебя ругается на неизвестный атрибут, который включился до 'CFoo'
innuendo
> разве последний найденный метод ( или несколько последних ) не автоматический
> кешируются ?
Apple, конечно, утверждает, что это так. Но на практике overhead на вызов все равно дикий. А вот когда приперает, то используется ручками какая-нибудь гадость типо method_getImplementation, результат выполнения которой позволяет снизить оверхед до вызова обычной С функций (reinterpret_cast'ом кастим к функции с нужной сигнатурой ("сигнатура" селектора + 2 доп параметра). Причем ровно эта же C функция будет вызвана откуда-то из недр objc_msgSend. И "кэширование" рантаймом лишь позволит снизить время, которое objc_msgSend затратит на попытку найти селектор у класса, его суперкласса, суперкласса суперкласса и так до самого NSObject)) И да, в данном случае это может серьезно ударить по производительности и да, я наблюдал такие "удары" (дабы сразу убрать твою строку про "атцов, которые негодуют").
crsib
> И "кэширование" рантаймом лишь позволит снизить время, которое objc_msgSend
> затратит на попытку найти селектор у класса, его суперкласса, суперкласса
> суперкласса и так до самого NSObject))
ну да, кешируется несколько последних найденных реализаций методов
> (дабы сразу убрать твою строку про "атцов, которые негодуют").
NEXTStep писали на ObjC - естественно time-critical на чистом С :)
а никак reflection не позволяет как-то ускорить через perform или типа того ?
innuendo
> ну да, кешируется несколько последних найденных реализаций методов
Считаем вызовы __imp_objc_msgSend (от него можно избавиться, но это не всегда просто) -> objc_msgSend -> (сheсking cache -> hit) -> вызов IMP метода -> PROFIT!!1.
innuendo
> а никак reflection не позволяет как-то ускорить через perform или типа того ?
Я тебе написал как. Есть ряд методов, позволяющих получить от рантайма IMP селектора. IMP - указатель на С функцию с сигнатурой return_val (NSObject* self, SEL selector, ....). Вместо .... надо подставить сигнатуру селектора. Тогда получается нечто более адекватное в плане call stack: вызов IMP метода -> PROFIT!!1. Но это нифига не удобно. Гораздо проще отказаться от Objective-C. При этом получить вподарок плюшку ввиде, например, inline'овых функций. Кстати рантайм языка настолько суров, что я у произвольного класса могу поменять реализацию произвольного селектора на свою.
innuendo
> NEXTStep писали на ObjC
[холивар_мод]
Я очень рад за NEXTStep, OpenStep, GNUStep и OSX. Имел честь общаться только с последним зверем. Единственный шанс комфортно работать с ситемой - 8+ гб памяти и отключение свопа. При этом есть риск, что система уйдет в kernel panic (микроядро, ага) если 8+ гб памяти таки кончатся. Зато исппользование свопа значительно повышает шанс, что система залочится. В данном случае это не вина ObjC. Но уже сам выбор ядра для системы и то, что его за 8 лет так и научили работать, уже намекает на то, что каг бе компания не всегда делает правильный выбор и никогда не готова признать того, что она сделала неправильный.
[/холивар_мод]
crsib
> Имел честь общаться только с последним зверем. Единственный шанс комфортно
> работать с ситемой - 8+ гб памяти и отключение свопа. При этом есть риск, что
> система уйдет в kernel panic (микроядро, ага) если 8+ гб памяти таки кончатся.
> Зато исппользование свопа значительно повышает шанс, что система залочится.
какая версия ?
innuendo
> какая версия ?
C 10.4.10 по 10.6.6. Выбирай любую. Вариации железа так же обширны.
crsib
> > какая версия ?
> C 10.4.10 по 10.6.6. Выбирай любую. Вариации железа так же обширны.
ну не знаю - знакомый артовик на маке работает, не жаловался :)
Сори что опять так поздно отписываюсь, но время появляется только на выходных.
Проблема из поста #0 решается следующим образом:
Выбираем файлы с расширением *.m, *.mm, *.c, *.cpp так сказать те в которых юзается С++ декларация, далее заходим в свойства файла и в File Type: выбираем sourcecode.cpp.objcpp вместо sourcecode.c.objc и все компилируется без проблем т.к. уже используется g++ вместо gcc
Почему не подхватывалось при смене расширения файла сказать не могу. Но предположения есть, то что юзается хакинтош, а у его странностей много… ( как обстоят дела под маками не знаю, может быть там таких траблов и нет)
crsib
> Сode sense работает только в зависимости от фазы луны, средства для
> рефакторинга минамальные, только для obj-c, и не всегда работают. Разобраться в
> адекватном конфиге проекта в 3-ем можно только крепко накурившись, некоторые
> решения в дизайне принимались явно под тем самым крепким накуром. 4-ка чуть
> получше, но пока preview и умеет по прежнему мало и плохо. Отдельную
> благодарности соит выразить instruments, которые в ряде случаев жрут столько
> памяти, что iOS убивает анализируемое приложение.
какой иос и инструмаенты? дебажить чтоле на айфоне? про эмуляторы слышал?
а с чего ты взял что простой программистдолжен колупаца в настройках проекта? ты говоришь что там не разобраться, а отец тебе скажет что они настройки всеобъемлющи=)
и где тебе интелисенс не работает? да не сишарп канеш но у меня нареканий нет. хотя правка: нарекание есть. не видно типа возвращаемого значения у метода :)
странные твои слова и мне нифига не понятны. точка.
а с селекторами- можно просто метод по имени получать кстате. прям рефлексия
ALTAIR
> и где тебе интелисенс не работает
В 4-ом он вроде заработал. Но я пока мало общался с релизом 4-ки, так что не могу утверждать. В 3-м XCode он, во первых, не учитывает контекста, во вторых забивает вообще на почти все методы.
ALTAIR
> про эмуляторы слышал?
Я да, Apple нет.
ALTAIR
> какой иос и инструмаенты?
Ой, а ты не профайлишь код? BTW, instruments в симуляторе, по очевидным причинам, не работает. Хотя бы потому что x86 это не Arm.
ALTAIR
> а с чего ты взял что простой программистдолжен колупаца в настройках проекта?
> ты говоришь что там не разобраться, а отец тебе скажет что они настройки
> всеобъемлющи=)
Толсто, очень толсто. Жирнота зашкаливает...
ALTAIR
> а с селекторами- можно просто метод по имени получать кстате. прям рефлексия
А еще можно менять реализацию любого метода, и что?
Я чето не осознал, это был толстый тролинг или просто с пятницы алтаира еще плющит...
shcoder
> Почему не подхватывалось при смене расширения файла сказать не могу.
Вот с чем только проблем не было, но тип файла всегда адекватно определялся по расширению. В том числе и на хакинтоше...
Тема в архиве.