Jai compiles 80,000 lines of code in under a second
Petar
Petar
Fri Sep 21 09:21:34 UTC 2018
On Thursday, 20 September 2018 at 23:13:38 UTC, aliak wrote:
> Alo!
>
I have been watching Jonathan Blow's Jai for a while myself.
There are many interesting ideas there, and many of them are what
made me like D so much in the first place. It's very important to
note that the speed claims he has been making are all a matter of
developer discipline. You can have an infinite loop executed at
compile-time in both D and Jai. There's nothing magical Jai can
do about that - the infinite loop is not going to finish faster
;) You can optimize the speed of compile-time computation just
like you can optimize for run-time speed.
What your observing with D is that right now many libraries
including Phobos have tried to see how much they can push the
language (to make for more expressive code or faster run-time)
and not as much time has been spent on optimizing compile-time.
If you take a code-base written in Java-like subset of the
language, I can grantee you that DMD is going to very competitive
to other languages like C++, Go, Java or C#. And that's
considering that there are many places that could be optimized
internally in DMD. But overall most of the time spent compiling D
programs is: a) crazy template / CTFE meta-programming and b)
inefficient build process (no parallel compilation for
non-separate compilation, no wide-spread use of incremental
compilation, etc.). AFAIR, there were several projects for a
caching D compiler and that can go a long way to improve things.
With а build system like reggae[0] written in the same language
as the one being compiled, the line between compile-time vs
run-time becomes quite blurred. If the build system part of your
project compiles fast enough, ultimately it doesn't matter if it
runs at compile-time vs run-time. The only important part is
whether the build system is pleasant to work with - e.g. having a
concise declarative syntax that covers 80% of the cases while
also exposing a procedural interface for the difficult parts that
don't fit in the nice model. And all nice declarative
abstractions have a procedural implementations that one needs
write first.
On the other hand, there are things that are much better done at
compile-time, rather than run-time like traditional
meta-programming. My biggest gripe with D is that currently you
only have tools for declaration-level meta-programming (version,
static if, static foreach, mixin template), but nothing else than
plain strings for statement-level meta-programming. CTFE is
great, but why re-implement the compiler in CTFE code, while the
actual compiler is sitting right there compiling your whole
program ;)
P.S.
Jai:
loadExecutableIcon(myIcon, exeLocation)
D:
static immutable ubyte[] icon = import("image.png).decodePng;
(In D you have read-only access to the file-system at
compile-time using the -J flag.)
[0]: https://github.com/atilaneves/reggae
More information about the Digitalmars-d
mailing list