Actually, i was typing by habit and included == instead of = by mistake.

So, while you answered the question, you may have answered the wrong question.

The question is not for

if ( self == [super init])

It's 

if ( self =  [super init])

How does that change your answer?

On May 30, 2015, at 6:08 PM, Michael David Crawford wrote:

> While in principle machine code implementations of subroutines can
> return from several different places, in practice they don't.  Rather
> the compiler's code generator emits a branch instruction to the end of
> the subroutine, there there is an "epilog".
> 
> There are many good reasons for returning from the middle in certain
> specific cases; what if the only epilog you need is an "rts"?
> Branching to the epilog could cause a cache miss.
> 
> I expect the compiler developers know all about this but don't
> typically avail themselves of it because writing compilers is
> difficult.
> 
> To be clear, the following source code:
> 
> - (id) init
> {
>   if ( self == [super init] ) return nil;
> 
>   // lots of code goes here
> 
>   return self;
> }
> 
> ... is implemented as something like this, but in machine code:
> 
> - (id) init
> {
>   id result;
>   if ( self == [super init] ){
>     result = nil;
>     goto epilog;
>   }
> 
>   // lots of code goes here
>   result = self;
> 
> epilog:
>   return result;
> }
> Michael David Crawford, Consulting Software Engineer
> mdcrawf...@gmail.com
> http://www.warplife.com/mdc/
> 
>   Available for Software Development in the Portland, Oregon Metropolitan
> Area.
> 
> 
> On Fri, May 29, 2015 at 6:25 PM, Graham Cox <graham....@bigpond.com> wrote:
>> 
>>> On 30 May 2015, at 3:22 am, Alex Zavatone <z...@mac.com> wrote:
>>> 
>>> // We don't care if this gets long.
>> 
>> 
>> My take is that you're rewriting a well-recognised idiom to solve a 
>> non-existent problem.
>> 
>> The well-recognised idiom makes it easy to verify it's correct. Hiding a 
>> different construct inside a macro obscures that, making it harder to verify 
>> the code. It's not "wrong" exactly, just harder to see at a glance that it's 
>> right.
>> 
>> The non-existent problem you're trying to solve is that the gap between a 
>> pair of braces could get large. So what? Early returns can be another source 
>> of bugs, so structural purists would tell you that you shouldn't do that. 
>> Sometimes I think it's justified, but not usually worthwhile. Another 
>> religious issue is whether matching braces should line up or not. Personally 
>> I prefer that they do, at the cost of an extra line. Because you aren't 
>> doing that, your long distance between braces is bothering you, because 
>> you're losing track of where it started (I assume that's why it's bothering 
>> you). If you line up the braces that is much less of an issue.
>> 
>> Source code is for humans, so it should be as readable as you can possibly 
>> make it. Macros often hinder that. Unaligned braces hinder that. Multiple 
>> statements per line hinder that.
>> 
>> Factoring code helps, so I'd suggest that's the better way to solve this. 
>> (and it's also beneficial when it comes to making sure that -initWithCoder: 
>> and other initializers that don't correctly follow the designated 
>> initializer rule can get access to your common initialization. While this is 
>> rarely a problem, I did notice that the recent change to encourage the use 
>> of -initWithCoder: for unpacking NSViews from a nib breaks this 
>> long-standing rule and so a common init method that both can call is a 
>> simple workaround).
>> 
>> --Graham
>> 
>> 
>> 
>> _______________________________________________
>> 
>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>> 
>> 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:
>> https://lists.apple.com/mailman/options/cocoa-dev/mdcrawford%40gmail.com
>> 
>> This email sent to mdcrawf...@gmail.com
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> 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:
> https://lists.apple.com/mailman/options/cocoa-dev/zav%40mac.com
> 
> This email sent to z...@mac.com


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to