DIP: Tail call optimization

Dietrich Daroch via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sun Jul 10 08:32:00 PDT 2016


On Sunday, 10 July 2016 at 12:01:54 UTC, Andrew Godfrey wrote:
> On Sunday, 10 July 2016 at 05:03:46 UTC, Dietrich Daroch wrote:
>> Hi everyone (=
>>
>> I've just added a new proposal to add a new attribute to 
>> ensure TCO is applied.
>>
>> The proposal is really simple, but I'm clueless on how to 
>> implement it and also interested on getting feedback on it.
>>
>>
>> The proposal it's ready for merge on the new [DIPs 
>> repo](https://github.com/dlang/DIPs/pull/6)
>>
>> --
>> Dietrich
>
> I'll chime in to give a counterpoint to the ... I'll say 
> "immature" discussion this generated.
>
> Just my opinion:
>
> Yes, an attribute to express something you expect the compiler 
> to do, has value. (Clearly some people on here don't have 
> experience with a codebase that is maintained by thousands of 
> people).
>
> Even if compilers aren't required to implement TCO, it could 
> work (compilers which didn't, would always give an error if you 
> used the attribute). But it would then feel weird to me to use 
> this attribute, knowing that some compilers would pass it and 
> some would fail it.
>
> And compilers which always fail it, would feel pressure to do 
> better. Whether this is good depends on your outlook. D does 
> think of itself as "multi-paradigm", so maybe it should push on 
> this.
>
> Personally I could see myself making use of this, but not being 
> very sad if it didn't happen.
>
> I do prefer your more verbose proposals over "@tco" - a short 
> abbreviation doesn't feel appropriate.

If you look at it as trying to make the build fail, then it's 
definitely weird, but I think the point is to be able to state 
your expectations and get feedback from the compiler on those, 
the same as we already do with static typing.


I feel the same about the multi-paradigm thing, D supports 
functional programming, so it definitely needs to ensure 
executions are efficient for people coming from functional 
languages.
Probably recursion is more natural to them than manually 
unrolling to avoid a problem that did not existed in their 
previous language.


I personally prefeer longer names, but I felt that @tco followed 
@nogc.  We should consider what other languages have this kind of 
annotation to get a reasonable name for newcomers.
Scala has @tailrec and it seeks the same goal as this DIP, 
finding wrong assumptions and seeking to ensure having a bounded 
call stack.


More information about the Digitalmars-d-announce mailing list