要做本科毕设了,现在想的主题是基于 LLVM 的(因为实习做的事也跟 LLVM 有关),但是像讨论寄存器分配这样的东西弄出来好像到最后也只能成一篇文献综述,不讨老师喜欢工作量也不大。
然后想到,既然几乎所有语言都能编译到 LLVM IR,那么要是有一个基于 LLVM IR 的包管理器,不是件很有意思的事情?
第一个想到的问题是,像 C++ 或者其他编译型语言,都是有 Name Mangling 机制的。如果要求编译出来的符号能相互链接,写代码的时候还得自己把 extern
这样的关键字加上。不过在这一层,可以要求用户在一个配置文件里指定导出符号的名字和签名,好像还是个好事。
第二个问题是,这些代码会不会存在跨平台上的障碍。虽然 LLVM IR 通常来说的确可以跨平台,但是不同平台(架构 /操作系统)的编译器前端生成的 IR 会不会不一样,以及会不会产生一些平台相关的代码现在都不太清楚,得再去看看。
第三个问题是,多数语言的可执行文件最后都需要依赖 Runtime 来运行。所以假设要做包管理器的话,是不是得要求这些 IR 都不能依赖各自语言的 Runtime ?好像到这样的话,就跟普通的 FFI 差不多了,就剩下 LLVM IR 比汇编层次高点这个优势了……
各位熟悉 LLVM 的大佬们对这个 Idea 有什么建议吗?或者有什么我没想到的跟 LLVM 有关的课题也可以告诉我,多谢!
1
x1596357 2019-03-02 16:29:49 +08:00
ehh, 参考使用 IL 的 java 或者 c#。
|