in C# e4k: tool to bind .NET libraries in native languages Both are from Mono/Xam team 3 Xamarinはアプリケーションを全部 C#/F#で作る生態系 e4kは.NETライブラリを他言語で利用で きるバインディングを作るツール どちらもMono/Xamarinチーム発
be used as a library • with C embedded API • 通常は実行可能ファイル • 大抵はネイティブライブラリと • Cの組み込みAPIがある "embedded mono" in Xamarin, e4k, Unity... $ gcc `pkg-config --cflags mono-2` `pkg-config --libs mono-2` ...
NDK: C/C++ toolchain for Android • Android is Linux ◦ has Kernel and libc (mono uses it for I/O impl. etc.) • Android NDK: Android用C/C++ ツール群 • AndroidはLinux ◦ kernel APIやlibcが使える(monoが I/Oの実装などで使う) mono builds with Android NDK (LLVM/Clang or GCC)
to manipulate JVM • load bytecode as classes to VM, run methods etc. • exists in Dalvik/ART too. • JVMを操作するC/C++ API • .classをVMにロードしたり、 メソッドを実行したりできる • Androidでも実装されている Java: `native` / Kotlin: `external` .NET: `extern` (P/Invoke)
runtime like Mono usually written in C/C++, has external C API, and • typically works with NDK • Android uses Linux, Mono is built on Linux • Java is accessible via JNI • e4kはMonoで作られている • Monoのようなランタイムはたいて いC/C++で作られ、C APIをもち、 • たいがいNDKでビルド可能 • AndroidはLinuxであり、Monoは Linux上で動く • Java VMはJNIで操作可能
API generator • Java support is just a wrapper around it • the demos are twofolds: ◦ 1: how C interop works ◦ 2: how Java interop works • e4kの基本はC APIの自動生成 • Javaサポートはその応用例 • デモは2部構成 ◦ 1: C相互運用の例 ◦ 2: Java相互運用の例
target to achieve huge, unsafe, too special Only one e4k-ed aar can be used embedded runtime conflicts lack of library ecosystem コアライブラリがバインドできない 難易度高め 巨大、unsafeなど特別なものが多い e4kのaarは1つしか使えない 組み込みランタイムが衝突 ライブラリ体系の不在問題
enough to run Xamarin.Forms Xamarin.Plugins are plenty of potentially reusable x-plat code e4kランタイムはXamarin.Formsを呼び 出せる程度には実用的 Xamarin.Pluginsに再利用可能になりそ うなライブラリがたくさんある
simple parameters and simple returns (such as strings) Use Assembly Linker to filter out blockers and then bind it 文字列など簡単な型のみを使ったメソッ ドを使うAPIを定義する アセンブリリンカーを使って邪魔なコード を削除してからバインドする
interop: ◦ C as the connector ▪ no C++ ◦ Clang: binder helper ◦ LLVM: runtime helper? • Common traps: pointers, value types, union, sizeof int • 事前コード変換と実行時相互運用 • 相互運用の場合 ◦ Cを相互運用の基盤にする ▪ C++は難しいので避ける ◦ Clang ASTが便利 ◦ LLVMランタイムも便利? • C呼び出しの一般的な問題: ポインタ、 値型、union、sizeof int