4 ms·
I think Anton is replying to me in that LWN article IIRC. I personally didn't know C only had tail calls that late and learnt something new there! On the other
by kenjin4096 2mo ago
I think Anton is replying to me in that LWN article IIRC. I personally didn't know C only had tail calls that late and learnt something new there!
On the other hand, I am pretty new to the compiler space myself, and I count early 2000s as a pretty long time ago, though again it is not that far back considering how long other language implementations had tail calls like in ML or variants since 1980-90s.
- pjmlp 2mo agoIt still doesn't, this is a compiler specific language extension. You won't find anything on ISO/IEC 9899:2024 about tail calls, like it happens on Scheme. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf Section 3.5 of R7RS. https://standards.scheme.org/official/r7rs.pdf https://standards.scheme.org/official/r7rs.pdf
- wahern 2mo agoA formal technical specification (TS) extension is already being drafted: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3582.pdf https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3582.pdf That's a step up from the usual proposals. I'm not sure what criteria is used to decide whether to first create a TS vs just incorporating a change into the working draft of the next standard.[1] _Defer also seems to be taking the TS route.[2] 1. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3886.pdf https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3886.pdf 2. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3928.pdf https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3928.pdf
- pjmlp 2mo agoWell, even if that lands on the official standard, that means C29 as probable release year for C2y, plus adoption of the exact form across compilers to be able to rely on it being available.
- Someone 2mo agoPlus the fact that an implementation that recognizes the new syntax and produces an error whenever it encounters it will be conforming. On such an implementation, the feature is available but useless.
- leoc 2mo agoThere's some discussion of how C29 defer ended up in a TS at https://thephd.dev/c2y-the-defer-technical-specification-its-time-go-go-go#build-wait-are-you-just-making-this-up-entirely-from-scratch https://thephd.dev/c2y-the-defer-technical-specification-its... .
- kenjin4096 2mo agoWoops, I meant to write tail call optimization not tail calls. Shouldn't have used the term interchangeably. Yeah I'm aware that C doesn't have proper tail calls. Thanks for the correction though.
- cryptonector 2mo agoI think Anton is wrong. Since C89 and before C23 calling an `int f();` function with arguments not matching the definition's actuals is UB. In C23 `int f();` became the same as `int f(void);`, so calling that function with any arguments is a compile-time error. For variadic functions, if you use `va_start()`/`va_arg()`/`va_end()` to consume all the arguments, and leave no `va_list` alive, then the compiler can correctly generate a tail call from such functions.