LoginSignup
1
0

More than 5 years have passed since last update.

pigpioのrubyバインディングを作った。

Last updated at Posted at 2019-02-10

置き場

ドキュメント

はい。FileとThread以外の関数をバインドしたところで力尽きました。
今後は暇を見てはrubyらしい使い方が出来るようにラッピングクラス(Pigpio)を作っていきます。(Pigpioって打ちにくいですよね。)
後、Rspecも書かないといけないです。ダミーのpigpioライブラリを作ってラズパイが無くてもRspec出来るように環境を整えたので、あとは120個近い関数のテストを書くだけ。

きっかけ

rubyの拡張ライブラリの書き方を勉強する必要があったので、どうせならばと実用性のあるブツで勉強しようとつくりました。
おかげさまで、ほぼほぼ習得できたと思います。なので私の習得方法を書いてみたいと思います。

習得方法

拡張ライブラリ作成に必要な事は全て extension_ja に書いてありますが、何も知らない人がここを見ても理解できないと思います。
なので、理解できないなりに流し読みした後、適当にググったサイトを2つ、3つ写経して2時間くらいすると悟りがひらけます。悟りの中身は「ruby本体のCソースを読むべし」です。
悟りがひらけるころにはextension_jaを読んで中身を理解することができるので、これを読みながら自分なりに小さなライブラリを作るのを4時間くらい。
だいたい5,6時間もあれば拡張ライブラリをマスターできると思います。

習得できなかったこと

GCのトリガ

結局ruby.hに記載されたどの関数がGCトリガになるのか、最後まで不明でした。深くソースを追うのはちょっと躊躇われるので、ここは雰囲気で作ってます。多分、RB_GC_GUARDは多めに入っていると思います。

Moduleの特異メソッドの第一引数にVALUE selfが必要な理由

クラスメソッドはincludeでクラスのクラスメソッドになるからselfが必要と納得。
特異メソッドはどこにもくっつかないので、selfが参照されることは無い・・・はず。
これは多分全てをオブジェクトとして扱えて言語仕様が美しいという美的感覚かな?。

さいごに

当初の目的の勉強は達成したので、pigpioのバインディングの方はあまり進捗がなくなります。
なので、使いたいという人は自由に改変してください。PRくれたらコミットします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0