タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

rustに関するhylomのブックマーク (4)

  • Rust FFI - LayerX Research

    hylom
    hylom 2020/01/29
  • Rustオブジェクトの削除タイミングを手動で制御する - Qiita

    Rust はガベージコレクタを持たない言語だ。コンパイル時に、構造体などのオブジェクトの所有権と生存状態(ライフタイム)を分析することで、オブジェクトを適切なタイミングでメモリから削除する仕組みになっている。この仕組みはとても良くできているが、時々、削除のタイミングを開発者が自分で制御したいこともある。 特にそれが必要になるのが、FFI(他言語関数インターフェイス)経由で、Rust のオブジェクトを他の言語に渡したい時だろう。この場合、他言語にはオブジェクトへのポインタを渡すことになるが、ライフタイムの分析をコンパイラに任せると、Rust の関数を抜けた時にオブジェクトの寿命が尽きたと判断されて、削除されてしまうことがある。これが起こると、他言語に渡したポインタは、参照先のオブジェクトが存在しない状態、いわゆる「ダングリングポインタ」になってしまう。 この記事では簡単な例を使って、ダングリ

    Rustオブジェクトの削除タイミングを手動で制御する - Qiita
    hylom
    hylom 2020/01/29
  • FFI を使って Ruby から Rust の関数を呼び出す(その3)

    前回は、引数や戻り値について、値渡しをしたのだが、今回はポインタを使ってみる。 ポインタを使用する場合、それを表すクラスを使用するのだが、RubyRust のどちらでメモリ領域を確保したかにより、使用するクラスが異なる。 Ruby 側でアロケートしたメモリについては、FFI::MemoryPointer を使用し、Rust 側でアロケートしたメモリについては、FFI::Pointer を使用する。 FFI::MemoryPointer の場合 確保された領域については、Ruby のGC が自動で解放してくれる。 FFI::Pointer 次に、Rust 側でヒープ領域のメモリを確保し、FFI::Pointer を使用して、Ruby 側で参照してみる。 先ほどの、FFI::PointerMemory で、確保され場合と異なり、 Rust 側で確保されたメモリ領域は、GC により解放され

    hylom
    hylom 2020/01/29
  • Rust の FFI

    hylom
    hylom 2020/01/29
  • 1