On Saturday, 9 January 2016 at 10:41:23 UTC, Rikki Cattermole
wrote:
I've been looking into this issue for web routing.
Over all its definitely more performant.
But:
- You need some way to generate code
- ABI compatibility
- Host binary compatibility (not the same as ABI)
- Front end for the "language" to specify what to generate
I'm either going sljit way or my own.
ATM I'm looking at building a c frontend to help with porting
of sljit and for the future AOT generation of binaries.
Most of the work to get x86 done for sljit has been done, about
2-3k left.
https://github.com/rikkimax/sljitd
Regarding if CPU's allow for JIT'ing code, yup they do allow it
still.
If they didn't, that CPU would be next to useless.
However, an OS is not required to expose this. But if you're
dealing with Windows and *nix. Don't worry about it.
If you're interested in working on helping to port sljit please
do.
Just note that it isn't a very optimized JIT but it is fairly
small and easy to use. Important to me is that it can be fully
ported to D without much worries unlike LLVM, which is a pain
to compile anyway.
Well, I wasn't thinking of interpreted/JIT code but native.
I suppose D could possibly do it with CTFE? (Create the CTFE to
keep track of the the addresses, if possible, of where the
variables are at in memory, so they can be updated).
e.g.,
DoSomething(Settings!"Width"); // Somehow puts in a dummy
variable and keeps track of it's address
x = Settings!Width; // similar but different behavior. Basically
turn an complex call(dictionary look up or something similar) to
a mov x, const instruction, etc..
Mainly I'm thinking about switches like
If (Settings["FastCode"])
{
}
but want to remove the lookup.
Hence maybe something like
if (volatile bool x = TRUE) { }
But then somehow capture x's address(not sure if we could
accomplish that in D?) which we easily change it's value outside
the time critical code when needed.
Sorry, I can't help with sljit... have way to many things on my
plate, at some point I might if stuff changes. I'll look into it
a little though.
Thanks