Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

more importantly, though, zig deliberately doesnt implement a whole TON of things that D does.

sometimes parsimony is called for. zig is basically c--+ where the + is the constexpr stuff.



It keeps adding D features anyway, like constexpr.


the constexpr stuff has been around since the beginning[0]. concretely, what other thing from D do you claim zig has added since?

[0] minimally 2019, 3 years in:

https://youtu.be/Gv2I7qTux7g?si=p0kVhtB56GvVLLNr


D had compile time execution of functions in 2007.

Order-independent top level declarations.

Underscores embedded in integer literals. (I stole this idea from Ada, which had been forgotten. Soon after D popularized it, it became standard in other languages.)

Continue or break to labeled loop.

Fixed sizes for ints, longs, etc.

Of course, I don't know if there's a straight line here, and Zig is welcome to use any features from D that they like. But it's just interesting that things innovated in D pop up in subsequent designs.


> Underscores embedded in integer literals.

Perl had this years before D even existed [1]. Given its earlier age and higher reach, it's likely that Perl did more to popularize the idea as well.

> Continue or break to labeled loop.

Also a feature that Perl had years before D's existence [2].

These two are the ones I immediately recognized because of my familiarity with Perl, but given the trend, I'm doubtful of the other claims as well now.

[1] https://perldoc.perl.org/5.005/perldata [2] https://perldoc.perl.org/5.005/perlsyn#Loop-Control


I did not know Metaware and Perl did this, as I've never used either. I know that my inspiration for it came from Ada.

I accept that Metaware and Perl did this before D. But I still claim that adoption of it in other languages came shortly after I popularized it in D, as I included it in many presentations about it.


Metaware High-C version 1.2 (Nov 1985) had underscores in floating point and integer literals. Possibly it had that even earlier.

Possibly also taken from Ada, as other text in that section of the manual reference Ada.

See A.3 pg 169 (and 58+) of 235 in: https://bitsavers.org/pdf/metaware/High_C_Language_Reference...


I did not know that. Thanks for pointing it out.


mind, it is also possible that they took that from Algol 68, and 'adjusted it':

  $ a68g --strict -e '(INT a = 1 000; print((a,newline)) )'
        +1000
As Algol 68 allows spaces within numbers, as well as within identifiers.


> Order-independent top level declarations.

Javascript has had this for functions since 1995. This has been part of zig from the start, not added later.

> Fixed sizes for ints, longs, etc.

this has existed in stdint.h since C99. It doesn't take a genius, only years of pain with C/C++, to realize this is the better way to do things. And also, this was in zig from the start, not added later.

> Underscores embedded in integer literals

Also in zig from the start, not added later. Others have commented on the provenance.

I could be convinced that continue/break to labels was inspired by D.


>> Continue or break to labeled loop.

Hasn't Java had that since the beginning?

rummaging around in my grammar folder...

BreakStatement ::= "break" [ IDENTIFIER ] ';'

ContinueStatement ::= "continue" [ IDENTIFIER ] ';'


And so it does. I had forgotten. Thanks for the reminder!


Parsimony? more like thankful for learning from other language experiments and research work

Zig is young, and far from 1.0, and many long promised features still not implemented


> many long promised features still not implemented

name one that isn't async / sane recursion (which is also async)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: