タグ

2017年3月19日のブックマーク (1件)

  • Rustのマングリング(名前修飾) - 簡潔なQ

    Rustの生成したネイティブコードを見ると、 _ZN6thread5sleep20h87eee61de4645181cAbE のようなシンボル名が見える。この例は std::thread::sleep に対応している。このようにRustの(単相化された)アイテム(関数や変数など)の名前をリンカが認識できる文字列にエンコードする処理はマングリングと呼ばれている。 Rustのマングリングは一見してわかるようにC++互換になっている。実際に上の関数をデマングルすると $ c++filt _ZN6thread5sleep20h87eee61de4645181cAbE thread::sleep::h87eee61de4645181cAb と、それらしき名前が出てくる。 しかし、これは表層上C++互換になっているというだけで、Rustのマングリングの質はこのハッシュ部分 h87eee61de464

    Rustのマングリング(名前修飾) - 簡潔なQ
    Nnwww
    Nnwww 2017/03/19
    C++とのFFIライブラリがあるので気になっていましたが、マングリングに互換性があったんですね