代码之家  ›  专栏  ›  技术社区  ›  RedCrafter LP

Rust公共abi用于外语ffi

  •  0
  • RedCrafter LP  · 技术社区  · 2 年前

    我正在编写一种语言,希望它与rust、c++和其他一些语言二进制兼容。问题是我找不到关于rusts-abi的信息(名称篡改、结构布局、调用约定等)。

    我听说某个地方的rust还没有稳定的公共abi。但我找不到这句话的出处。如果可能的话,我想严格避免c abi。

    1 回复  |  直到 2 年前
        1
  •  0
  •   Chayim Friedman    2 年前

    Rust确实没有稳定的ABI,所以您无法与它兼容。

    来源:

    https://doc.rust-lang.org/stable/reference/type-layout.html#the-rust-representation ,关于类型布局:

    这个 Rust 代表

    ...

    此表示对数据布局没有其他保证。

    https://github.com/rust-lang/rfcs/issues/600#issuecomment-526033825

    目前也没有计划为一些新客户引入类似于批发稳定ABI的任何东西 repr(v1) repr(Rust) 而语言团队内部对此也存在着积极的反对意见。因此,我将结束这个超广泛的愿望清单问题。

    名称篡改实际上 已定义,虽然不是针对旧版本,但当前默认版本使用,而是针对 v0 (可与一起使用 -C symbol-mangling-version=v0 ). See here about it .

    有一种“稳定但比C ABI更高水平”的ABI的努力,目前称为 crabi ,其他语言也可能将其集成。然而,到目前为止,即使在Rust中,它甚至还没有在实验中实现,因此即使这个实验会成功,还有很长的路要走。

    推荐文章