I'm writing a simple functional language with automatic memory management. Go's simplicity seems it could be a good target for transpilation: garbage collection, decent concurrency paradigm, generally simple/flexible, errors as values. I already know Go quite well, but I have no idea about IR formats (LLVM, etc) To be clear, using Go as a compiler backend would be a hidden implementation detail and there would be no user-level interop features. I'd like to bundle the Go compiler in my own compiler to save end-user headaches, but not sure how feasible this is. Once my language is stable enough for self-hosting, I'd roll my own backend (likely using Cranelift) **Pros** - Can focus on my language, and defer learning about compiler backends - In particular, I wouldn't have to figure out automatic memory management - Could easily wrap Go's decent standard library, saving me from a lot of implementation grunt work - Would likely borrow a lot of the concurrency paradigm for my own language - Go's compiler is pretty speedy **Cons** - Seems like an unconventional approach - Perception issues (thinking of Elm and it's kernel code controversy) - Reduce runtime performance tuneability (not to concerned about this TBH) - Runtime panics would leak the Go backend - Potential headaches from bundling the Go compiler (both technical and legal) - Not idea how tricky it would be to re-implement the concurreny stuff in my own backend So, am I crazy for considering Go as compiler backend while I get my language off the ground?

13
3