Hey @tankf33der, would you like to explain what was the issue with pil before pil21 and why it couldn’t enter Debian and Ubuntu? Something about the PIE/PIC format and how the assembly worked? How does this LLVM version solve it? How is it written and why could it now be included in Debian?
Different versions of Picolisp is already around distros. In general you dont need package manager(s) and you must have the power to type just several commands.
Prev. version of PicoLisp (we call it pil64) has its own assembler inside with backend to several popular platforms. LLVM brings portability and its already possible to run PicoLisp on MacOS and Solaris (SPARC), RISC-V is near too.
Summary:
One year development from idea to initial public release;
Works in LLVM7+;
Self bootstrap out of box (you dont need prev. versions of picolisp to generate LLVM-IR code);
Tests covered 95% of 370 builtin primitives;
All ecosystem and features inside works. picolisp.com already on pil21;
I find it particularly interesting that the bootstrap implementation language is LLVM-IR. What ships in the repo as bootstrap is some .ll files, and the built binary can compile the corresponding .l (PicoLisp) files into the .ll files.
Did I miss some file, or does this mean that there is:
no CPU-specific asm at all in the project
no asm that doesn’t ultimately come from PiL code? It’s PiL turtles all the way down?
Is porting to e.g. RISC-V a noop and you’re just waiting for LLVM to mature, or is there something more you need to do?
Also if I remember correctly earlier PiL didn’t have any compilation at all, just an asm runtime an then AST interpretation from there on. Did this change in pil21? Does it actually compile my code via LLVM-IR, or is this just a special mode that exists for the sake of the bootstrap?
Wow, their commits are … idiosyncratic.
I mean their git commits and messages.
That’s because this isn’t an official git repo. The upstream is just a daily tarball.
At least it’s not quite as bad as e.g. Bash, but yeah…
Nothing special, just special PicoLisp with LLVM-IR as raw backend.
What kind of performance is there to be had with all the ultra modern lisps?
Considering Fennel, Gerbil Scheme, Janet, Joker, and PicoLisp LLVM, what’s the performance story like? Who’s winning?
Feel free to implement something on your selected language and I will use PicoLisp. In general PicoLisp is fast.
Care to just throw some numbers up someplace for people to see?
I’m not really motivated to put together a bunch of benchmarks like that, I was just curious.
Numbers? Sure.
Compilation benchmark.
The same speed than vlang in 54MB of RAM.
And LLVM-IR version is faster than assembler implementation (pil64) in 30%, of course I know the reverse case.
Very very impressive!
I might have to consider PicoLisp for my next side project.
Hey @tankf33der, would you like to explain what was the issue with pil before pil21 and why it couldn’t enter Debian and Ubuntu? Something about the PIE/PIC format and how the assembly worked? How does this LLVM version solve it? How is it written and why could it now be included in Debian?
Different versions of Picolisp is already around distros. In general you dont need package manager(s) and you must have the power to type just several commands.
Prev. version of PicoLisp (we call it pil64) has its own assembler inside with backend to several popular platforms. LLVM brings portability and its already possible to run PicoLisp on MacOS and Solaris (SPARC), RISC-V is near too.
Summary:
Happy coding.
Thanks!
I find it particularly interesting that the bootstrap implementation language is LLVM-IR. What ships in the repo as bootstrap is some .ll files, and the built binary can compile the corresponding .l (PicoLisp) files into the .ll files.
Did I miss some file, or does this mean that there is:
Is porting to e.g. RISC-V a noop and you’re just waiting for LLVM to mature, or is there something more you need to do?
No asm, llvm-ir only.
Also if I remember correctly earlier PiL didn’t have any compilation at all, just an asm runtime an then AST interpretation from there on. Did this change in pil21? Does it actually compile my code via LLVM-IR, or is this just a special mode that exists for the sake of the bootstrap?