将我自己的编程语言翻译成另一种语言并编译它是一种好的做法吗?
Is translating my own programming language to another language and compiling it a good practice?
我已经准备好语法并在 Antlr4 中进行了测试
实际上我想让我的语言源文件变得可执行并且足够快
所以我想我有这些解决方案:
- LLVM
- JVM
- 正在用另一种语言生成源代码,然后编译生成的文件
我的问题是关于解决方案编号 3
你有什么看法?
这是一种不好的做法吗?
挑战是什么?和负分?
这里有什么提示或建议吗?关于目标语言、优化、任何阅读来源等
谢谢
为了快速获得最小可行产品(原型,版本 0.01),我会做第三个。例如翻译成 C。我在某处读到,创建一个好的编译器最难的部分是 return 好的错误消息并针对预期的 CPU 或 VM 进行良好的优化。如果您选择第三种选择,您将免费获得(一些)优化。如果编译器证明值得改进,那么 LLVM and/or JVM and/or 直接编译为 binary/assembly。如果你有世界上所有的时间。我想什么是最好的还取决于您创建的语言类型。首先,我会检查您是否有其他语言没有的独特且有用的东西。如果不是,在已经很长的列表中添加另一种语言有什么意义?
使用另一种基于文本的语言作为您的语言的后端的一个巨大缺点是会丢失精确的调试信息——变量、位置等。
如果您使用的是一种具有丰富元数据的语言,例如 LLVM IR(是的,无论如何它的级别都不会比 C 低多少),您可以塞入所有您想要的调试信息。以 LLVM 为目标几乎和以 C 为目标一样容易。
另一种选择,如果您想从非常高级的语言功能中受益并在此基础上构建您的新语言,则使用可扩展语言作为您的基础——例如,将您的语言实现为 Racket 之上的语法扩展或Common Lisp.
我已经准备好语法并在 Antlr4 中进行了测试 实际上我想让我的语言源文件变得可执行并且足够快 所以我想我有这些解决方案:
- LLVM
- JVM
- 正在用另一种语言生成源代码,然后编译生成的文件
我的问题是关于解决方案编号 3
你有什么看法? 这是一种不好的做法吗? 挑战是什么?和负分? 这里有什么提示或建议吗?关于目标语言、优化、任何阅读来源等
谢谢
为了快速获得最小可行产品(原型,版本 0.01),我会做第三个。例如翻译成 C。我在某处读到,创建一个好的编译器最难的部分是 return 好的错误消息并针对预期的 CPU 或 VM 进行良好的优化。如果您选择第三种选择,您将免费获得(一些)优化。如果编译器证明值得改进,那么 LLVM and/or JVM and/or 直接编译为 binary/assembly。如果你有世界上所有的时间。我想什么是最好的还取决于您创建的语言类型。首先,我会检查您是否有其他语言没有的独特且有用的东西。如果不是,在已经很长的列表中添加另一种语言有什么意义?
使用另一种基于文本的语言作为您的语言的后端的一个巨大缺点是会丢失精确的调试信息——变量、位置等。
如果您使用的是一种具有丰富元数据的语言,例如 LLVM IR(是的,无论如何它的级别都不会比 C 低多少),您可以塞入所有您想要的调试信息。以 LLVM 为目标几乎和以 C 为目标一样容易。
另一种选择,如果您想从非常高级的语言功能中受益并在此基础上构建您的新语言,则使用可扩展语言作为您的基础——例如,将您的语言实现为 Racket 之上的语法扩展或Common Lisp.