SEARCH ALL TABLE-ENTRY
AT END PERFORM NOENTRY
WHEN KEY-1 (INDX-1) = VALUE-1 AND
KEY-2 (INDX-1) = VALUE-2 AND
KEY-3 (INDX-1) = VALUE-3
MOVE PART-1 (INDX-1) TO OUTPUT-AREA
END-SEARCH
https://www.ibm.com/docs/en/cobol-zos/6.1?topic=all-example-...Also I physically shuddered when I saw the word template. Did no one learn from C++ mistakes?
While we might disagree on a lot of semantical things on this, I'd argue that D very much learned from those mistakes. There's a strong argument for D's templates to be "templates done right" (which C++'s most certainly aren't).
So I encourage you to read more into this topic. To me, this question seems just about as uninformed as someone complaining about a LISP tutorial on macros, asking "did no one learn from the mistake that is the C preprocessor?".
If/where there are other models better suited for metaprogramming would be another (interesting) discussion (full of tradeoffs, I'm sure), but the notion of proper (hygienic?) templates not being adequate anywhere can certainly not be inferred from C++'s implementation alone.
D was designed by Walter Bright (who played a large role in inflicting C++ on the world) and Andrei Alexandrescu so you could say that...
When it comes to metaprogramming, it's excellent, but it is a double edged sword, it can be useful, but if abused it'll tank your build speed, so one must find a proper balance to avoid pain later
One of the few languages that offers its own backend! (LLVM/GCC backends are also available)
I love this level of independence, a real labor of love, one of the best better C, i'd even say this is the evolution C needed
Yes, people always chime in about how you can disable D's garbage collector, but then you're stuck with an awkward language that lacks support for basic things like exceptions, closures, strings, slices, and a host of other features not to mention pretty much any third party library.
If you are willing to accept a GC then D might be a good choice, if you find it fun then by all means go for it, but it's no longer so clear cut at that point given the wealth of GC'd programming languages available.
You can ignore the GC or totally suppress it with @nogc or even not even link it with -betterC flag
Having the GC optional is nice since you no longer need to use a scripting language to do your cli tools or utilities, it's there and well integrated
If you are a proper developer who care about speed and fast code, you'll want to develop your own STL anyways, just like C/C++ are already doing, just like Rust people are also doing to get faster compile speed, D gives C/C++ interop as well as full C11 compiler
So it's the perfect evolution of C, since it can compile and consume its ecosystem
You can even consume python and rust libraries, wgpu works great with D
int[5] a = [1,2,3,4,5];
writeln(a.length); // 5It feels a lot like a mix between C# and JS, but at the low level access of C++.
It has a lot of unique features but the "killer feature" by far for me is Contract Programming and Invariants
https://tour.dlang.org/tour/en/gems/contract-programming
Invariants changed my life, so much so that I built a GCC plugin to add them to C++
It used to be the case that the developer tooling wasn't very good, but the "code-d" VS Code plugin has matured greatly in the last few years and has some features you won't find even in bigger languages
(Like the ability to colorize source code lines with GC profiling info or test coverage status)
---
Another useful bit of info is that AddressSanitizer and tools like LLVM libFuzzer work with the LDC compiler
I want to add profile/coverage info in emacs now :)
D is a strange point in PL landscape, it's been here for ages, never took off (for some value of taking off) even though it seems there's a lot to like.
From my point of view in systems programming, experience with Oberon back in the day and such, I would really like that we would be talking more about D and less about Rust and Go, but unfortunately it isn't how things went.
https://news.ycombinator.com/item?id=34211482
D has no (FAANG) corporate sponsor and it does all things well/has no particular speciality, these two things make it hard to compete with marketing of other languages I think
There's a small but dedicated and active community