On 8/26/2016 9:53 PM, Bill Hicks wrote:
On Wednesday, 24 August 2016 at 15:30:34 UTC, Martin Nowak wrote:
 we want memory safe code w/o the GC.


Rust has had that since day one.  Funny how not too long ago D core was mocking

We've never mocked Rust's safety features, although I have posted that they are too complex for D and desire a simpler system.

but now they're trying to be more like it.

We've had proposals for more safety annotation in D for at least 10 years (from Bartosz Milewski), but they've always been more complex than I wanted. DIP1000 is a much simpler scheme.

I bet in a few years we'll see hygienic macro system in D.

I seriously doubt it (they've been proposed many times). I haven't studied Rust's macro system, but others I've seen (expression templates, user defined syntax, CPP, macro assemblers, etc.) are very powerful, but ultimately off-putting because it makes code very hard to understand.

For example, Microsoft put a very powerful macro system in their assembler, MASM. Programmers went to town with it, each programmer essentially inventing their own language that was undocumented and unreadable to anyone else. A Microsoft programmer related to me that once he was given the job of updating a large assembler program that someone no longer there had written in their own invented macro language.

He got it updated and fixed in short order. Surprised, his manager asked him how he figured out how it worked, as everyone else who tried had failed. My friend said he didn't even attempt to figure it out. He assembled it, and ran the result through a disassembler (our very own OBJ2ASM) which made it nice, readable, and fixable.

An earlier incarnation of myself had also succumbed to the siren song of inventing my own assembler language via macros. Over time, I gradually stopped using it and reverted to writing vanilla, understandable assembler.

I've seen the story repeated with CPP macros and expression templates, and I've heard similar accounts about other macro systems.

Making macros hygienic doesn't fix it.

P.S. I still from time to time use OBJ2ASM to figure out what someone's wretched ASM file is doing, like I'll run CPP by itself to see what some miserable CPP abuse is actually generating. I've also been gradually removing all CPP use from my own C++ code (the dmd back end).

A macro system is like putting a 2000 HP motor in a car. It's sure exciting, but ultimately you just don't want it in a daily driver, or anyplace other than the track, because it'll kill you.

Reply via email to