【Ruby 3.0 Advent Calendar 2020】C APIのヘッダーが分割された話【16日目】

はじめに

Ruby 3.0 Advent Calendar 2020 16日目の記事になります。

昨日は、【Ruby 3.0 Advent Calendar 2020】ArrayやStringのメソッドの返り値が変更された話【15日目】です。

今日は、Ruby3.0でC APIのヘッダーが分割れたことを紹介します。

C APIとは?

RubyでC(またはC++拡張)を書く際に使用するに使用するAPIです。 このC APIを使ってCレベルでHashやArrayを作成することができるようになります。

// Cレベルで新しい配列 ary を作成
VALUE ary = rb_ary_new()

また、独自クラスの作成などもできたりします。

// Arrayクラスを継承してSubArrayを作成しています。
VALUE rb_cSubArray = rb_define_class("SubArray", rb_cArray)

で、今回の変更は?

簡単に言うと、Ruby側のC APIをメンテナンスしやすくする意図で導入されました。

github.com

またCのマクロを廃止してインライン関数へと変更し、簡単な型チェック(Cレベルでの)が可能になっているようです。

C APIを使うユーザー向けの変更なので、Rubyをそのまま使うユーザー層からすると特に今までのRubyと違う部分はありません。 ただ、いくらかRubyのビルドに時間がかかるかもしれません。

なので、クリスマスにリリースされるRuby3.0のビルド時間は今までより時間がかかるかもしれないので紅茶でも入れながら待つといいかもしれません。