gpt4 book ai didi

compiler-construction - 将 LLVM/CLANG 用于自定义字节码 VM 的程序的大小是多少?

转载 作者:行者123 更新时间:2023-12-04 00:15:30 24 4
gpt4 key购买 nike

我正在评估自定义 VM 的不同可能性,而我在另一个问题中忽略了 LLVM。由于我仍在评估嵌入式语言 VM,因此我现在无法自己测试/检查。我想了解以下有关 LLVM/CLANG 的信息:

  • 它在 Windows 上支持良好吗?还是索拉里斯? (跨平台对我来说是一个加分项)
  • 如果我想用类似 C 的语言编写自己的/自定义 VM,我需要在项目中包含什么? (LLVM/CLANG 部分或组件等)
  • 出于显而易见的原因(不编写解释器),我会将编译器与 VM 分开。所需组件的尺寸是多少?我可以在程序中构建它们而不是动态链接到它们吗?
  • 我可以避免 JIT 吗?我想要一个不一定转换为 native 代码的字节码 VM。这在平台不支持 JIT 时会有所帮助(例如,具有不允许 wx/rwx 内存映射的限制性内存权限的系统)。

  • 例如,我知道 clamav 防病毒软件使用由 LLVM/clang 支持的字节码来支持动态/运行时签名。但是,我不知道是否存在实现此功能的工具和/或指导您完成此操作的教程或文档。

    谢谢! :)

    最佳答案

    Clang 是包括 C++ 在内的类 C 语言的解析器。如果您的语言足够像 C 语言(即 Java 不是),那么您可以将您的语言支持添加到 clang,它知道如何生成 LLVM IR。

    LLVM 不需要 JIT,并且通常是静态链接的。 LLVM 提供了执行 LLVM IR 优化和代码生成的库。 JIT 只是将代码生成到内存而不是磁盘上。 Clang+LLVM 的普通用法是作为 GCC 的替代品,将代码生成到 .o 文件。

    它有多大取决于你需要什么。你想要所有的优化吗?您是否想要所有目标(与 GCC 不同,LLVM 可以根据需要在一个二进制文件中使用任意数量的后端构建)。既然你提到了嵌入式,一个例子是在手机上使用 LLVM 的 Android:http://android-developers.blogspot.com/2011/02/introducing-renderscript.html

    Windows 得到了很好的支持,您可以使用我们的 CMake 构建系统或 mingw32 使用 MSVC++ 构建 LLVM。 Solaris 支持更加不确定,我们经常使用补丁来修复它,但我有一段时间没有看到任何补丁了。

    最后,您可能想阅读 http://llvm.org/docs/tutorial 上的教程。 .这记录了 JITted REPL 语言的构建,但静态编译语言的基础是相同的。您不使用 llvm::JIT 对象,而是调用 Target.addPassesToEmitFile 并将其传递给要写入的输出流。请参阅 llvm/tools/llc/llc.cpp 以获得完整的示例(它很长;如果您不想支持 llc 所做的所有选项,则只需要其中的一小部分)。

    关于compiler-construction - 将 LLVM/CLANG 用于自定义字节码 VM 的程序的大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5280659/

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