如果你使用F#编写编译器,发出CIL肯定听起来是个好决定,因为你将能够使用CodeDOM等所有内置功能。
或者,您可以设计自己的输出格式并编写在.NET内部运行的VM,如果这样做会使输出更容易(因为它是更合适的架构)。这可能更容易调试 - 当然,这意味着也要编写VM :)
你有没有考虑过针对x86汇编进行编程?我几年前自己做了一个Tiger编译器,尽管很难写,但汇编发射器是整个项目中最有成就感的事情之一。在C语言中编写自己的小型虚拟机也是一个好主意(如果不是更好的话)。
如果你正在创建一个生产语言,那么针对现有虚拟机是务实的,但会从练习中删除许多学习机会。
如果我是你,在项目后期会更加关注不同的优化技术。