週刊オープンソース:goro の CI 詰め、Go ライブラリ二つ、そして一つの撤退
4月6日〜12日の週。PHP-in-Go ランタイムの品質面を押し上げ、Go の新規 ライブラリを2つ、そして引きずらずに正直に棚上げしたプロジェクトを 1つ。
goro:CI のギャップを詰める
KarpelesLab/goro は Pure Go
で書いている PHP の再実装で、PHP 本家のテストスイートをそのまま
回している。今週はおおむね 256 件の失敗から ~199 件まで に縮小。
82 コミットの内容は、$arr[] .= … 合成代入の二重追加バグ、readonly
プロパティのエラーメッセージを本家と一字一句合わせる修正、4桁を
超える年を拒否する DateTime シリアライズ、createFromFormat の
null バイト処理、EXPECTF 正規表現のマルチバイト UTF-8 対応、
テストランナーで SKIPIF → skipTest を正しく拾う修正、など。
大半は派手な新機能ではなく、エラーメッセージや端のケースの挙動を 本家に合わせる地味な作業。ただ、実際の PHP コードが goro 上で 「特に何も気付かず動く」ところまで持っていくには、この種の 詰めが効く。並行して進めている Rust 版 goro-rs にも同じ週に35コミット入った。
litertlm-ios:棚上げ
litertlm-ios は
6日に着手して10日には棚上げした。狙いは iPhone で Google の
LiteRT-LM を Metal GPU 経由で動かすこと。ビルドは通り、動作もし、
LiteRTLM.xcframework が生成できる状態まで行った。ただ、Google の
LiteRT-LM 向け GPU アクセラレータはクローズドソースで、オープン
ソース側の経路を作るには LiteRT-LM のアクセラレータプラグイン
インターフェースを TFLite の Metal デリゲートにブリッジするしかない。
これは迂回策であって、プロダクションの土台にはならない。
リポジトリの README に詳しいポストモーテムと、今の時点で代わりに使うべきランタイムの 比較表(MLX Swift、SwiftLM、llama.cpp、MLC-LLM)を書いた。Google が 本物の LiteRT-LM GPU 経路をオープンソース化する日が来れば (上流の issue がある)、ビルドまわりの資産はそのまま拾える。それまでは、 得たものを書き残して先へ進むほうがいい。
新しい Go ライブラリを二つ
anyhash — 60種類の
ハッシュアルゴリズムをインポートではなく名前で選ぶ Go の
ハッシュライブラリ。sha256.New() のかわりに New("sha256")。
大文字小文字・ハイフン無視のマッチング、計算途中の状態を複製する
Clone()、Sum() 後もそのまま書き続けられる設計、HMAC と HKDF、
そして PHP 互換の状態シリアライズ — PHP 側で開始したハッシュを
Go 側で完了させる、あるいはその逆ができる。外部依存ゼロ、
Go 標準ライブラリのみで実装。
pktkit — ゼロコピーの
L2/L3 パケット処理ライブラリ。Frame と Packet は型付きヘッダ
アクセサを持つ []byte のエイリアスで、ラッパーのアロケーションも
ホットパスでのコピーも無い。仮想ネットワークトポロジ — デバイス、
ハブ、アダプタ、トンネル — を組むための基盤で、IPv4 も IPv6 も
全体で対応。今週は API 面を詰める9コミット。(リポジトリ自体は
4月4日作成で、今週が実質初週。)