Source download: https://code.call-cc.org/
#include
int main() {
int c;
printf("#include \nint main() {\nchar a[30000] = {0}; char *p = a;\n");
while((c = getc(stdin)) != EOF) {
switch(c) {
case '>': printf("++p;\n"); break;
case '<': printf("--p;\n"); break;
case '+': printf("++*p;\n"); break;
case '-': printf("--*p;\n"); break;
case '.': printf("putchar(*p);\n"); break;
case ',': printf("*p = getchar();\n"); break;
case '[': printf("while (*p) {\n"); break;
case ']': printf("}\n"); break;
}
}
printf("return 0;}\n");
return 0;
}
(Though sorry to any BF fans if I've missed something in the implementation) ;-)
I am currently making a r7rs scheme derivative that compiles to C. The lofty goal is parallel fibers.
It's in extreme early stages, and I don't expect anyone will use it other than me, but I already like it. The compiler has been self hosted for a few months now. It has a cool FFI that you can see in use in the demos folder. Working on adding header generation to the module system.
While Chicken Scheme is cool, I don't think it'll be parallel, and not in the way I want it to be, and I am willing to make a lot of compromises Chicken isn't to get there. As mentioned, I am willing to settle with fibers for parallelism, and heavily eschewing side effects, making changes from r7rs to get there. For example, there will be no dynamic-wind provided and parameter objects will have different, thread friendlier, semantics.
----
My main reason for choosing C as a transpile is that it's easier to lean on gcc and C11 than it is to write my own codegen, and LLVM is too unstable for me to handle. I started writing this in June 2022, and since then LLVM has had 3 backwards compatibility breaking major release and millions of lines of code changed.