Re: Xcode 5 & Obj-C++
Re: Xcode 5 & Obj-C++
- Subject: Re: Xcode 5 & Obj-C++
- From: Eric Wing <email@hidden>
- Date: Wed, 29 Jan 2014 16:28:10 -0800
On 1/29/14, Uli Kusterer <email@hidden> wrote:
> On 30 Jan 2014, at 00:16, Rui Pacheco <email@hidden> wrote:
>> To those of you doing Objective-C++ apps, is there a difference in terms
>> of performance or memory usage?
>>
>> I've noticed that TextMate 2, which is done in Objective-C++, consumes
>> less memory than the Chocolat editor which seems to be done exclusively in
>> Cocoa.
>
> Give the nature of C++, it's not surprising that performance can often be
> better. They generally tend to put a higher emphasis on performance than on
> programmer comfort, maintainability etc. Also, C++ can do a lot of mean
> tricks due to the more static nature of the language. E.g. their method
> dispatch is not easy to keep binary stable across releases, so is really
> badly suited for API design in dylibs or frameworks, but probably only needs
> two pointer dereferences and one addition to resolve a method, while ObjC
> actually has to perform the look-up at runtime, but therefore works much
> better as a library API.
>
> I don't usually have to drop down to C++ unless:
>
> 1) I'm in very performance-critical code, like device drivers, video
> decoders etc.
> 2) I need my code to be cross-platform, because C++ is really the most
> reliably available OO-language everywhere from Android to Windows to iOS.
>
> Unless you're in one of those situations, I wouldn't drop down to C++ just
> because it "is probably faster". It helps nobody if your app crashes faster
> because all that code you rewrote that you'd get for free in ObjC or C# or
> the ADK is buggy. The more people use a piece of code, the more likely it is
> one of them found a bug got it fixed. Tested code is always better than new,
> "fast" code.
>
> Cheers,
> -- Uli Kusterer
> "The Witnesses of TeachText are everywhere..."
> http://zathras.de
>
>
- Additionally, C++ will typically increase your compile and link times.
- Binary compatibility (already mentioned) is a pain, so libraries
need to be extremely careful. Additionally, use of templates often
leads to lots more symbols and larger binary size (dynamic libraries
can't really be stripped for unused symbols).
- Often when comparing Obj-C vs. C++, method dispatch is one of the
main culprits for the performance difference. But don't forget, Obj-C
is a pure superset of C and you can always use good old C to get the
same performance benefits if you don't need/want the Obj-C features.
Other really high performance situations deal with cache and memory
layout and it turns out that much of the C++ standard library is not
well suited for dealing with this and going back to POD types and
essentially C (if not assembly) is often better for performance.
-Eric
--
Beginning iPhone Games Development
http://playcontrol.net/iphonegamebook/
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden