ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

やわらかFFI 〜fiddle.gem 入門〜

Rubyアドベントカレンダー(その1)10日目の記事です。

qiita.com

技術アドベントカレンダーの原点?に立ち返り、自分の書いたものではなくTipsの話をします。

今回はここ数年よく使うようになったgem、fiddleの紹介をしようと思います*1

fiddleとは/FFIとは

fiddleとはRubyにおいて、FFI(Foreign Function Interface)をするためのgemです。

github.com

そのものずばり ffi というgemがあるためそちらを使う方も多いようですが、fiddleは現在標準ライブラリであるので、Rubyをインストールしたらそのまま含まれており、またRubyコアチームによりメンテナンスされているようです。

さて、ではそのFFIとは何かという話になります。「あるプログラミング言語から他のプログラミング言語で定義された関数などを利用するための機構」という説明がされたりしますが、(ことC言語に詳しくない方には)ピンとこないかもしれません。ほんの少しC言語を書いてピンとくるようにしましょう。

共有ライブラリを作る

ということでC言語を書きます。心配なさらず、今回は雰囲気だけわかれば大丈夫です...。

実行する環境はLinuxUbuntu 20.04以降を推奨します*2Vagrant上のVMで試していますが、Dockerの中でも実行は大丈夫だと思います。

*1:RBSの持ちネタを使い切ってしまった。

*2:Ubuntuならある程度新しければ動くと思います

続きを読む

Crafting Interpretersの言語実装をRustで進めている話

Rustアドベントカレンダー(その1)3日目の記事です。

qiita.com

id:udzura と申します。Rustは2021年になると同時に始めたので、いまだ経験1年未満ですが、僭越ながらも今回アドベントカレンダーに参加いたします。

今回はタイトルの通り、RustでCrafting Interpretersを進めている話です。Crafting Interpretersとは、Loxと名付けられたインタプリタ言語をJavaやCで実装していき、その過程で言語実装の肝要を学ぶことができるという書籍です。Web版は無料で閲覧できます。

craftinginterpreters.com

現在II章まで終わり、実装はGitHubにアップしています。 Lox本体のソースコード部分 と同じMITライセンスにしています。

github.com

この記事では、進めた上で工夫した点、頑張った点を小学生の日記のように残していきます...。

続きを読む

RubyKaigi takeoutでRuby to BPF compilerの話をした話

Rubyアドベントカレンダー(カレンダー2)の2日目です。

qiita.com

今見たらカレンダー2も半分以上埋まってて嬉しい... Ruby is alive now!!!

ということで、RubyKaigi takeout 2021の振り返りも兼ねて作ったものの話です。

rubykaigi.org

Rucy: A Ruby Compiler

続きを読む

型付きRubyでパーサを書く(後編)

今までのあらすじとして、ここまでで、Rubyでパーサを書き、めでたくRBSで型を付けました。

udzura.hatenablog.jp

udzura.hatenablog.jp

github.com

本エントリでは簡単にふりかえってみます。

大前提として、個人の感想で、皆様の今後の型ライフにほんのちょっと参考になればいいなというのはありますが、個人の日記の話です。

また、僕が誤解している内容もたくさんあると思うのでその際はご教示願います。

ふりかえりと感想

続きを読む

型付きRubyでパーサを書く(中編)

前編はこちら。

udzura.hatenablog.jp


ここまででスキャナまでは実装し、大体動いたようです(型もちゃんとついたようです)ので、続きの実装をします。

続きを読む