報 2024-05-18

2024-05-03/2024-05-18

ゴールデン・ウィーク

ちょっと微妙に義務が多くてどっか旅行とかはできず、基本的にはパソコンやってました...あと掃除とか... 掃除をしたら家が綺麗になって愛着が湧いてきたので掃除をするといいと思いますよ

新宿まで椅子に詳しい友達と椅子を見にいったりもしました。引越しでなまじ椅子を捨てた結果今は本当にしょうもない椅子で生活していて

ゴールデン・ウィークのたのしみの一つに音楽イベントもありました

例の如く好きな音楽しか流れない音楽イベント楽しすぎわろた。特に Redsign 先生のところが大バイブス時代という感じでボコボコにぶち上がって楽しかったです。

ルビー会議

RubyKaigi 2024 で沖縄に行きました。この文章も帰りの飛行機の中で書いています。ここは書くのには SilverBullet を使っていて、オフラインでも編集ができて便利ですね。

RubyKaigi 自体はまあ普通にパソコンカンファなので余裕でエンジョイという感じでした、なんかこう特に何も調べずに沖縄に行ったからあれなんですが、こう:

LR

Lrama もといパーサの話が多かったらしいですね。いや、自分は初参加だったのでよくわからないというか、プログラミング言語のカンファレンスなんだから言語処理系というものの構造からしてパーサの話は当然全体の1/4ぐらいはあってもいいんじゃないかと思いましたが...

さて、自分は元来形式言語コンプレックスというようなムードを持ち合わせていまして、すなわち構文解析というものと形式言語、そのつながり、実用的な側面について中途半端な理解しかないことを悔しく(悔しいなら勉強すればいいのに...)思っていました。悔しいっていうのは、こう、パーサを書く経験ならマジで死ぬほどあるのに、その土台を知らないというのは、いささか苦しい状態ですよね。わかりますか?

例えば手書きの再帰下降パーサやよくあるパーサコンビネータでパーサを書くと、あるあるの問題として左再帰というのがあり、まあなんか気持ちはわかるしそういうものだと思ってもう手癖として左再帰を回避する文法を書くようになっていたわけです。もう構文解析というのはまあ当然そういうものだと理解したつもりでした。ところが 2 年前ごろに、もう本当に何も考えていなかったのですが、適当に選んだ手頃なパーサジェネレータが LR 法だったことによって、何かおかしいぞということに気がついてしまった。なんだか左再帰問題がないし、なぜか曖昧な文法をお前が理解している。この頃から、自分がいかに構文解析について無知であったかだけを知り、結局だからなんだかわからないまま苦しい日々を送っていたわけです。まあ、形式言語コンプレックスというか、LR 法にユーザーとして心を打ち抜かれているだけか?それはそれとしてこう、正規表現との言語の範囲ガーみたいなものに正確に答えられないことについても白目を剥いているわけではありますが...

で、今回ちょうど Lrama の話があってなんだか形式言語コンプレックスを刺激されたので、まあせっかくだしということで金子さんに LR/LALR について教えを乞い、大体の理解は得てきました。これからパーサジェネレータを書きます、きっと楽しいと思いますし、金子さん曰くちょうど良い入門用の小さなコードとかがあんまりないということだったので、そういう意味合いの成果物にもできるんじゃないかな。

型みたいな

これまで自分の Ruby の型に対する態度というのはあんまり定まっておらず、そのため正直既存の取り組みについては「それは良いね」程度の気持ちしかありませんでした。PPL 2024 で mame さんの TypeProf v2 のポスターを見ていた時も、技術的におもろいなというところが主な印象だった。

そうはいっても、これまでの人生で型というものにある程度リソースを割いてきた身として、そういう微妙な態度はどうかとは思っていて、そのため会期を通して自分が Ruby に求めることについてじっくり考えていました。で、実際のところ型は書きたくないというのはそうみたいで、前夜祭で笹田さんと喋っていて咄嗟に「型を書きたいときは Ruby は使わないですね!」とか言ったらなんか面白がってもらえたのですが、この気持ちはちゃんと考えてもやっぱり変わりませんでした。Ruby を書くときは先に手続きがあり、そうでないときは先に API があるということでして、別の言い方をすると抽象的な規約の階層として目的を達成する場合とそうではない場合でコードの書き方が大きく違うということがわかってきます。Ruby を書くときは先にしょうもないただ動くだけのコード辺があって、それを最低限 Lambda(と、レビュアー)にわかってもらえる形に整形しているだけなんですね。ただ動くだけのコード片というのはまあほとんどの場合ステートメント列でしかなく、これを必要などに駆られて気持ちでメソッドに分けたりする上で型とかやっていくのはまあまあ意味がないというか、それなら先にそっちの作業をやったほうが「しょうもないただ動くだけのコード片」を書き始める上でも効率がいいはずなので...

まあそれはよくて、じゃあ何が Ruby を書く体験の中に足りないのかというと、最低限の動作保証ということになっているみたいです。適当に書いた Lambda 関数をデプロイして NameError とか言われると本当にげんなりして肩をすくめながらパソコンを閉じてしまう。あの、レビューに出す前の (typo してないかな...) みたいなしょうもない目(もしくは本物の!)grep は、ある程度苦痛だなあと思います。ではそこに対して最も効果的なアプローチはなんでしょうか?ええ!抽象実行、もとい TypeProf なんですね〜これが。

というわけで最終日で mame さんが発表される頃には自分はそこそこ TypeProf に対してブチ上がっており、まあ発表でコントリビュートを求めているという意思や多少の internals についても知ることができたので、う〜ん、ちょっと自分の時間を使って投資をしていきたいなと思っています。ブチ上がりすぎて最終日はほとんど TypeProf のコードを読んでいました。

JIT

あるよね〜と思った。C extension とのインターフェースのオーバーヘッドを含めるともう pure Ruby で YJIT に任せた方が速いというのは、ええ、すごいな〜と思いました

結局なんか往往にして良いパフォーマンス(を支える技術)に興味がないからそうなんだという気持ちで終わってしまうんですが、そうなんだな〜とは思いました。あと、会場でちらほら結局オーバーヘッドは DB だから〜みたいな話が聞こえてくるのは面白かった。結局 Web 系のアプリケーションエンジニアが来ている人の中で大半で、まあ実際人と喋ってみても内容は興味がないとかわからんとかが大半の感想だった

色々

今回は出張(出張て)で行ったのでちょうどよくコミュニケーションに義務感があったので、会などで random person と話す良い練習となって、すごいよかったと思います。

mruby 画像: mruby で動いている。ハードは家で組んでいって、行きの交通とか会期中に ST7735 と喋る部分のコードを書いた。こういうのがあると喋りやすいと思うんだけど、それはそれとして持っていったモバイルバッテリーがなぜか数分で電源供給をやめてしまうのであんまり使えなかった。

会期後も延泊をして土日は旅行ということにしました。なんか行く前の予報では土日雨ですよ^^という感じでだりいなと思っていたんですけど実際にはそうでもなくて、特に日曜はかなり気持ちよく晴れてくれまして、うれしかったです。土曜は自分が普段やる旅行の感じで適当に歩き回って一日を使いました。本当は海辺でカッコつけてパソコンをやろうかな(上に書いたようなことで気持ちが上がっておりすぐにでもパーサジェネレータを書きたかった)と思っていたんですがなんかあんまりいい感じに座れなくて結局無為にパソコンを背負って一日中歩いた人になった。で、一日移動してみて公共交通機関が微妙だなと感じたので、日曜は自身の旅行初の試みとなるレンタカーをやってみることにしました。土曜夜にうっかりパソコンをやりすぎて夜更かしをしてしまった結果使える時間もたいして多くなくあんまり動けなかったですが、あまりに綺麗に晴れてしっかり綺麗な海に感動できたので良かったなあと思っています。

画像: 海