Add new...Clone CompilerExecutor From ThisOpt RemarksStack UsagePreprocessorASTLLVM IROpt PipelineDeviceRust MIRRust HIRRust Macro ExpansionGHC CoreGHC STGGHC CmmGCC Tree/RTLGNAT Debug TreeGNAT Debug Expanded CodeControl Flow Graph
![Compiler Explorer](https://cdn-ak-scissors.b.st-hatena.com/image/square/0230913d6eed2f7295720308aa716d40aa883ba1/height=288;version=1;width=512/https%3A%2F%2Fgithub.com%2Fcompiler-explorer%2Finfra%2Fblob%2Fmain%2Flogo%2Ffavicon.png%3Fraw%3Dtrue)
自分は最近RustのROS2クライアントを書いていて、間に合えばこれについて記事を書こうと思ったのですが、案の定間に合わなかったので代わりに書いています. ROS2はROS (Robot Operating System)というPロボット用フームワークの後継で、ROSが抱えるいくつかの問題点を解消するため、互換性を完全に切って新たに作られたものです.問題点の一つに、言語毎のクライアントライブラリの実装の仕様が統一されていないというものがあり、ROS2ではrclcやrmw等のC言語ライブラリを用意し、各言語のクライアントライブラリはそれらをラップして実装することが求められています. こういった事情でRustのROS2クライアントを作るためには、FFIが必須です. と御託はさておき、FFIでよく使う文字列と配列の変換について書いていきます. 前提知識 FFIについては知っているものとします.知
let plugin: Box<dyn Plugin> = unsafe { let load_plugin: Symbol<unsafe extern "C" fn() -> Box<dyn Plugin>> = lib.get(b"load_plugin")?; load_plugin() }; let name: String = plugin.name(); println!("1 {} 2 = {}", plugin.operator(), plugin.calc(1, 2)); // drop(plugin); // (2) 上の方法でトレイトオブジェクトを扱うことは(コンパイルエラーを生じないため)一見問題ないように見えます。しかし、load_plugin の戻り値型を Box にしてしまっているせいで所有権がプラグインとローダ間で移動し、(1) においてプラグイン側のアロケ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く