RFC in Comparison between Rust, D and Go
    Ola Fosheim Grøstad via Digitalmars-d 
    digitalmars-d at puremagic.com
       
    Sat Nov 14 01:58:16 PST 2015
    
    
  
On Saturday, 14 November 2015 at 08:28:08 UTC, Walter Bright 
wrote:
> If your new language doesn't have the C preprocessor in it, 
> then you must set it aside. If it does have a C preprocessor in 
> it, then it really isn't a new language at all, it's just a C 
> permutation.
But you can do code gen with standard macro invocations present, 
without the compiler having the actual macro definitions (just a 
representation of the semantics for the standard headers).
> That's all very fine until the that C compiler evaluates 
> expressions in a different way than the one you debugged it 
> with, and your language fails on your customer's machine with 
> your customer's C compiler, and fails in weird ways.
IIRC C99 defines sequencing points. Granted Microsoft does not 
support C99, but I'd say C99 is the standard to aim for these 
days.
> BTW, although C compilers exist for all kinds of weird 
> machines, the weirder the machine is, the worse (i.e. more 
> limited and buggier) the C compiler is for it (as a general 
> rule).
Sure enough, there are weird C compilers for DSP chips that have 
32 bit integers with 24 bit ALU operations over it.
But changing the backend to emit different C for weird targets is 
less work than changing a full backend...
> Good luck porting your language to a C compiler that has 10 bit 
> bytes in it, or one with 32 bit bytes. Yes, those compilers 
> exist. Yes, those are C standard conforming variations. Nope, 
> none of your "portable" C code will work on it.
Modern C has headers with exact bit representations though.
> It always is once your project exceeds trivial size. Remember, 
> my experience is a factor of 4x slower. And you cannot fix it.
Is the fastest non-optimizing C compiler is 4x slower than D?
Compiling to C is actually a very nice thing to have, it keeps 
languages alive and limits lockin. Thanks to that we have access 
to classic languages like Simula or interesting niche languages 
like Mercury on a wide range of platforms. And you can make it 
work (with a little effort) even if the compiler is old.
http://folk.uio.no/simula67/cim.shtml
http://www.mercurylang.org/backends.html
I could probably make these languages run as asm.js. Having a C 
generating backend is an enabler.
    
    
More information about the Digitalmars-d
mailing list