Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

future; migrate to ffigen #17

Closed
sensuikan1973 opened this issue Jan 24, 2021 · 1 comment · Fixed by #84
Closed

future; migrate to ffigen #17

sensuikan1973 opened this issue Jan 24, 2021 · 1 comment · Fixed by #84
Labels

Comments

@sensuikan1973
Copy link
Owner

sensuikan1973 commented Jan 24, 2021

binding の実装はおおむね終わったものの、binding 定義を yaml に押し込める ffigen はやはり魅力的。
しかし、ffigen はまだ実験段階であり安定してなかったり、いくらか機能が欠けていたりするため、まだ採用には至ってない。
(#10 に書いたように inline Array の workaround 対応は参考にしてる。)

用途を考慮すると、課題は以下の通り。これらの対応が入って動くようになったら移行を検討したい。暇があれば contribute したり issue 立てたりしよう。

  • inline array in Structs ([dart:ffi] Inline arrays in Structs dart-lang/sdk#35763) 。根本的には dart 側の進捗に依存するが、繋ぎとして ffigen は workaround 対応を入れてるのが素晴らしい。
    • これ、結構重要なので dart:ffi の今後に期待。
    • 愚直にやろうとすると、構造体を丸ごと解釈しなきゃいけなくてだいぶ怠い。 C の Struct を丸ごと Pointer<Uint8> でとってきてがんばる感じになるやつ。
  • null safety (dev ブランチが一部対応漏れてた)
  • ポインタ前置き宣言への対応。 Foo* foo に対応できてなかった気がする。もちろん、Foo *foo はいけてた。
  • Nested Structs (Support for Nested Structures dart-lang/native#541) 。今は dev リリースには入ってる状態だが、dev はエラー出て動かなかった..
  • 生成ファイルがだいぶデカくなるからか、IDE での補完がだいぶ重くなってしまった。ffigen に関数単位でのフィルタリング機能があれば解消される。期待。

#38 もあるけど、まあそれはだいぶ先になりそう。

@sensuikan1973
Copy link
Owner Author

上に挙げた ffigen の課題が一通り解消されたため、移行がんばってみたが、PR に書いたように、まだ課題あったので一旦置き。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
1 participant