Adding Java and C++ to the MQTT benchmarks or: How I Learned to Stop Worrying and Love the Garbage Collector

Ola Fosheim Grøstad" <ola.fosheim.grostad+dlang at gmail.com> Ola Fosheim Grøstad" <ola.fosheim.grostad+dlang at gmail.com>
Thu Jan 9 14:02:46 PST 2014


On Thursday, 9 January 2014 at 19:16:10 UTC, Paulo Pinto wrote:
> Every time I see such discussions, it reminds me when I started 
> coding in the mid-80s and the heresy of using languages like 
> Pascal and C dialects for microcomputers, instead of coding 
> everything in Assembly or Forth

If you insist on bringing up heresy...

Motorola 680xx is pretty nice compared to x86, although the 
AMD64bit mode is better than it was. 680xx feels almost like C, 
just better ;9, I think only MIPS is close in programmer 
friendlieness.  Forth is nice too, very minimalistic and quite 
powerful for the simplistic implementation. I had a Forth64 
module for my C64 to dabble with, a bit hard to create more than 
toy programs in Forth... Postscript is pretty close actually, and 
clean. But Forth is dense, so dense that you don't edit text 
files, you edit text screens...  But don't diss assembly, try to 
get more than 8 sprites and move sprites into the screen border 
without assembly, can't be done! High level languages, my ass, 
BASIC can't do that!

But hey, I am not arguing in favour of Forth and C (although I 
would argue in favour of 680xx and MIPS). I am arguing in favour 
of smart compilers that allow you to go low level at the top of 
the call stack where it matters (inner loops) without having to 
resort to a different language. D is close to that, so it is a 
promising candidate.

And... I actually think D is too lax in some areas. I don't think 
you should be allowed to call C/C++ without nailing down the 
pre/postconditions, basically describing what happens in terms of 
optimization constraints. I also want the programmer to be able 
to assert facts that the compiler fail to prove so that it can be 
used for optimization. Basically the ability to guide the 
optimizer so you don't have to resort to low level coding. I also 
think giving access to malloc is a bad idea. :-P

And well, I am not new to GC, I have actually used Simula quite a 
bit in classes/teaching newbies. Simula incidentally has exactly 
the same Garbage Collector that D has AFAIK.  I remember we had a 
1970s internal memo describing the garbage collector of Simula on 
the curriculum of the compiler course... So that is veeeery old 
news.

Actually Simula kinda has the same kind of string type 
representation that D has too. And OO. And it has coroutines… 
While it doesn't have templates, it does actually have name 
parameters that has textual substitution semantics (in addition 
to ref and value). Now I also kinda like that it has ":-" for 
reference assignment and ":=" for value assignment, but I didn't 
like it back then.

45 years later D merge Simula semantics with C (and some more 
stuff). And that is an interesting thing, of course.

But hey, no point in pretending that other people don't know what 
programming a GC high level language entails. If I want low 
latency, I go to C/C++ and hopefully D. If I want high level 
productivity I use whatever fits the bill… all GC languages. But 
I don't think D should be the first option in any non-speed area 
yet, so the GC is of limited use for now IMO. (In clusters you 
might want that though, speed+convenience but no need for low 
latency.)

I think D could pick up more good stuff from Python, like the 
array closures that allows you to succinctly transform arrays. 
Makes large portions of Python's standard library pointless.

What I really like about D is that the front end code appears to 
be quite readable. Take a look at clang and you will see the 
difference. So, I guess anyone with C++ knowledge has the 
opportunity to tune both syntax and semantics to their own liking 
and share it with others. That's pretty sweet (I'd like to try 
that one day).


More information about the Digitalmars-d mailing list