是否可以在编译程序时使用 GHC API 来修改程序?
我想通过搭载 GHC 编译过程并更改其核心表示来测试编译器优化的实现。这个想法是这样的:
runGhc (Just libdir) $ do
...
c <- compileToCoreModule targetFile
compileCoreToObj False (modify c)
...
其中 modify
接受 Core 表示并返回修改后的版本。但是,此代码失败(即使修改根本不执行任何操作),并显示不太有用的消息:
expectJust mkStubPaths
有关如何使此工作的任何想法,或者甚至可以通过这种方式实现代码转换吗?
I want to test the implementation a compiler optimization by piggybacking into the GHC compilation process and altering its Core representation. The idea would be to have something like:
runGhc (Just libdir) $ do
...
c <- compileToCoreModule targetFile
compileCoreToObj False (modify c)
...
where modify
takes the Core representation and returns the modified version. This code, however, fails (even when modify does nothing at all) with the not very helpful message:
expectJust mkStubPaths
Any ideas on how to make this work, or if it's even possible to implement a code transformation this way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对我来说,这听起来像是
compileCoreToObj
中的一个错误。请举报。That sounds like a bug in
compileCoreToObj
to me. Please report it.GHC 现在支持插件,这似乎完全符合您的要求。
GHC has support for plugins now, which appear to do exactly what you want.