gpt4 book ai didi

haskell - 使用 Haskell 包 'plugins' 时如何减少二进制占用?

转载 作者:行者123 更新时间:2023-12-03 22:45:30 25 4
gpt4 key购买 nike

我已经为我的 Main.hs 模块的 haskell 插件实现了一个简单的加载器。我现在使用的唯一函数是load来自 this site

查看我编译的应用程序大小,可以看到在 x86 架构上的可执行文件超过 53 MB。我知道 GHC 的大部分是链接的(由于 haskell-source-to-binary-plugin 功能),但这对于我的目的来说是多余的。

有没有官方认可的方式来去除额外的功能,只保留 (dyn-)load ?

最佳答案

取决于“官方认可”的含义。 plugins (以前称为 hs-plugins )旨在成为一个包罗万象的解决方案,具有代码生成和动态加载功能。它的目标不是最小化。

一个不太复杂的包以 direct-plugins 的名称提供。 ,它专注于插件的动态加载。此包读取 Haskell 接口(interface) (.hi) 文件以获取符号的实际类型,因此类型安全是可能的,但也提供了不安全的变体。不幸的是 direct-plugins被比特腐烂了,不能与 GHC v7.6 一起工作(a.t.m.)。

在频谱的最低端有​​ unix提供 dlopen 的软件包/dlsym类似机制来获取从共享库中导出的符号。还提供了一个便利层,用于在处理结束后自动关闭打开的库。然而,这些符号是作为 FFI Ptr 获得的。 s 并且不是 Haskell 可调用的。

通过搜索互联网,我发现了一个似乎在中间地带运行的废弃包:

  • 提供了使用 Haskell 调用约定加载符号
  • 可以声明依赖项和包/模块层次结构
  • 依赖环境以线程安全的方式管理。

  • 原始包由 Hampus Ram 编写。我只为最新发布的 GHC 准备了它,并做了一些非常浅显的测试。这是存储库:

    https://github.com/ggreif/dynamic-loader



    唯一缺少的部分是类型安全的符号访问(通过可能的可配置机制)。
    欢迎评论和补丁。

    关于haskell - 使用 Haskell 包 'plugins' 时如何减少二进制占用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11405275/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com