28 comments

[ 2.6 ms ] story [ 73.9 ms ] thread
Doesn't say it in the README, but has anyone checked to see if they implemented enough of C to be self-hosting?
Tried it when it was posted last time. It couldn't run it's own source files.

I was wondering if anyone had tried to use cling in any project? It uses llvm's own parser/jit.

I've used it a tiny bit as part of ROOT (and its predecessor cint a bit more). It pretty much works as advertised, there's not a whole lot to get excited about IMHO. It certainly doesn't make ROOT any less miserable to use.
Hi, I'm the author of picoc. It's not self-hosting, no. It's meant to be small rather than a feature-complete implementation of C so it's unlikely it will ever be self-hosting.
was 1873 days ago I think it is okay to post this and not be told it was done already.
> not be told it was done already.

It doesn't sound like they were rebuking you. It's pretty common to link to a previous discussion for people interested, especially if the current one doesn't take off or if the previous one contains some information worth repeating or avoiding.

I've used it before and it's pretty cool. Unfortunately, still a bit too big for some embedded systems (I was using it with an Arduino).
Author here. I tried to make it small enough to run on tiny microcontrollers like the arduino but unfortunately C seems just a bit too complicated for that.
Either way, awesome work.

I actually was working on my own sub-sub-subset of C for a tiny scripting language (for the aforementioned project) and I was often referring back to how you wrote picoc.

or use tcc with JIT compilation
TCC isn't a JIT-compiler, the script-option compiles all and then runs it on the fly. This allows C-files to be executable by themselves with a shebang-line.
I guess in some sense that could also be described as "just in time," i.e. just before you need to run it.
I've heard the phrase "just-before-time" (or JBT) for this, i.e. compiling on the target machine.
It's also usable as a dynamic load library. It's still not a JIT, but a program can use it to run code directly without having to fork/exec/spawn anything.
Maybe it's a weird fetish of mine, but I always enjoy a good embeddable, scripting engine. It kind of brings me joy and hope. Can't say why. The more engines, the merrier.
I feel the same way. If you haven't seen it already, take a look at mine: https://munificent.github.io/wren/
Props to you and parent poster. I'm with you both. And thanks for the pointer to Wren. I didn't know about it.
As a student interested in language design and VM programming, this is wonderful. Clean, easy to read code, as well as what seems to be a really well-thought out language. Thanks for this!
what problem does this solve that is not already solved by the n scripting engines that are already out there? When would I use this in lieu of Rhino / JS on the JVM, for example?

Pet peeve of mine: people publish projects and don't position what they've built in the universe of existing things. Readers without context won't know what to do with it. A simple FAQ would be really helpful.

I originally wrote it as a scripting language for a UAV controller I was making, and also as an exercise in keeping a language small and neat.
Used it when testing some PCMCIA CAM hardware for my day job. Good tool.
Tangentially related: What is the smallest self-hosted interpreter? What about the most efficient one?

This isn't it (among other things, it isn't self-hosted).