A new C++ back end for ocamlc (github.com)

by glittershark 20 comments 237 points
Read article View on HN

20 comments

[−] QuadmasterXLII 44d ago
Brilliant stuff. A tip for writing long-running C++: bizzarely, the C++ interpreter completely lacks tail call optimization. As a result, most idiomatic C++ code implements and uses reverse, map, range, filter etc, which don’t blow the stack if you implement them like (forgive the pseudo-code)

  (defun fibreverse (i ret acc)
    (if acc
        (if (> i 0)
            (progn
              (setv call1 (fibreverse (- i 1) (cons (head acc) ret) (tail acc)))
              (setv ret1 (head call1))
              (setv acc1 (head (tail call1)))
              (if acc1
                  (fibreverse (- i 2) (cons (head acc1) ret1) (tail acc1))
                  (pair ret1 acc1)))
            (pair ret acc))
        (pair ret acc)))

  (defun reverse (list) (head (fibreverse 30 nil list)))
Whoever has to maintain your code after you are gone will apprrciate that you used the idiomatic, portable approach instrad of relying on command line flags.
[−] anitil 44d ago

> Using these more sophisticated data structures, g++ is able to compute the prime numbers below 10000 in only 8 seconds, using a modest 3.1 GiB of memory.

Finally, I can get some primes on my laptop!

[−] foltik 44d ago

> which produces primes.cpp, containing your program translated to idiomatic, readable C++ code:

As a C++ enjoyer I can confirm this is some excellent idiomatic, readable C++ code.

[−] sheepscreek 43d ago
Most of it yes, but what about:

    typedef I<((I<((n::val (p::val))>::val) != (I<0>::val))> res;
    };
There is some top class wizardry going on there! I don’t think I’ve ever used conditions in a type definition in C++ :)

Update:

Ah, alright - so that evaluation logic is part of the template, not the code that eventually compiles.

It’s basically offloading some of the higher level language compiler logic to the templating engine. Honestly might be a better time investment than spending more time writing this in the parser.

Now I’m sort of intrigued and inspired to use C++ as a lowering target for elevate (a compiler framework I’ve been working on).

[−] dnmc 44d ago
Is this the Stephen Dolan of "mov is Turing Complete" fame?
[−] zorobo 44d ago
This made my day, thank you!
[−] blanched 43d ago
My eyebrows raised at "C++ is a purely functional language", but I thought it was just a typo.

The rest is fantastic, and I'm glad it wasn't a typo.

[−] classified 43d ago

> C++ is a purely functional language, with no support for mutable state.

> To run a C++ program, you'll need a C++ interpreter.

I thought 1. April is already over?

[−] ajbt200128 44d ago
Wow Stephen Dolan never fails to impress
[−] Caum 44d ago
[flagged]
[−] hudsonhs 44d ago
She (Jane Street) is not gonna notice you, bro