On 05/15/2016 02:13 PM, Ola Fosheim Grøstad wrote: > > Well, you can, but it won't bring improvements to the language down the > line.
Maybe you don't know the actual problem of the current interpreter? I leaks memory like hell b/c it allocates new AST nodes for almost every expression evaluation. Even an interpreter that is as slow as ruby will fly during compile time in comparision to the current one. Let me illustrate the point. --- import std.algorithm, std.array, std.random, std.range; enum count = 2 ^^ 10; enum sorted = { auto gen = Random(123); return generate!(() => uniform(byte.min, byte.max, gen)).take(count).array.sort().release; }(); pragma(msg, sorted.length); --- count = 2 ** 10 nums = Enumerator.new do |yielder| prng = Random.new(123) loop do yielder.yield prng.rand(-128 .. 127) end end.take(count).sort print nums.length --- N | CTFE | Ruby | Time | Mem | Time | Mem -------|-------|------|-------|------ 2^^10 | 0.16s | 82M | 0.11s | 9.3M 2^^11 | 0.22s | 110M | 0.12s | 9.3M 2^^12 | 0.4s | 190M | 0.12s | 9.4M 2^^13 | 0.7s | 450M | 0.12s | 9.5M 2^^14 | 1.5s | 1.4G | 0.12s | 9.7M 2^^15 | 3.7s | 4.8G | 0.13s | 10.0M 2^^16 | 5:30m | 15G | 0.13s | 10.8M D's CTFE grows O(N^2) b/c it leaks for almost every operation. We don't currently need a superfast interpreter, even the simplest possible interpreter will allow so much more that we're more likely limited by the lack of I/O before we need a faster interpreter.