[Gambas-user] Replacing the JIT component
Benoît Minisini
g4mba5 at gmail.com
Sun May 6 21:43:12 CEST 2018
Hi,
This is just an idea in the fly. There is nothing concrete at the moment.
As you may know, there is a JIT component in Gambas (not made by me)
based on LLVM. Alas it does not work with recent versions of LLVM,
because apparently this huge project is not able to keep backward
compatibility between minor versions. (Worse than GTK+, I couldn't
imagine it was possible!)
What to do now?
1) Rewriting the JIT compiler for newer versions of LLVM. Alas the
original author does not give any news, and I have no knowledge about
LLVM, and its C++ interface looks horrible to me.
2) gcc has now a JIT library, but it is an alpha version with a big
warning that everything may change between releases, even if it is
apparently relatively stable. Moreover, no idea about how many bugs the
library has.
3) Writing a Gambas -> C translator.
My idea is that the compiler, or maybe an external program eventually
written in Gambas, takes a class/module source code, and transform it
into a C source file.
That C source file will call the interpreter functions when needed
through a dedicated interpreter API.
Then the C source file will be transform into a shared library loaded at
runtime by the interpreter (calling the C compiler that hence must be
installed).
The advantages are:
- C syntax is thousand times more stable than a JIT compiler library
that changes at each version.
- Maybe better optimizations.
The disadvantages are:
- You need the compiler. But the JIT library needs most of it too, so...
- Compiling is slower than calling a JIT library.
- JIT library can compile at the function level. This is not practical
with a compiler (we won't make a shared library for each JIT function!).
One shared library for each class, or even one for the entire project
may be the solution.
Now I'm waiting for your comments!
Regards,
--
Benoît Minisini
More information about the User
mailing list