假如要实现一个基于 LLVM IR 的包管理器,有什么坑或者硬伤吗?

2019-03-02 15:34:13 +08:00
 ecnelises

背景

要做本科毕设了,现在想的主题是基于 LLVM 的(因为实习做的事也跟 LLVM 有关),但是像讨论寄存器分配这样的东西弄出来好像到最后也只能成一篇文献综述,不讨老师喜欢工作量也不大。

然后想到,既然几乎所有语言都能编译到 LLVM IR,那么要是有一个基于 LLVM IR 的包管理器,不是件很有意思的事情?

问题

第一个想到的问题是,像 C++ 或者其他编译型语言,都是有 Name Mangling 机制的。如果要求编译出来的符号能相互链接,写代码的时候还得自己把 extern 这样的关键字加上。不过在这一层,可以要求用户在一个配置文件里指定导出符号的名字和签名,好像还是个好事。

第二个问题是,这些代码会不会存在跨平台上的障碍。虽然 LLVM IR 通常来说的确可以跨平台,但是不同平台(架构 /操作系统)的编译器前端生成的 IR 会不会不一样,以及会不会产生一些平台相关的代码现在都不太清楚,得再去看看。

第三个问题是,多数语言的可执行文件最后都需要依赖 Runtime 来运行。所以假设要做包管理器的话,是不是得要求这些 IR 都不能依赖各自语言的 Runtime ?好像到这样的话,就跟普通的 FFI 差不多了,就剩下 LLVM IR 比汇编层次高点这个优势了……

求助

各位熟悉 LLVM 的大佬们对这个 Idea 有什么建议吗?或者有什么我没想到的跟 LLVM 有关的课题也可以告诉我,多谢!

679 次点击
所在节点    问与答
1 条回复
x1596357
2019-03-02 16:29:49 +08:00
ehh, 参考使用 IL 的 java 或者 c#。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/540335

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX