プログラミング
CHICKEN SchemeメンテナーSjamaan/Peter Bex氏へのインタビュー
Interview with Chicken Scheme Maintainer Sjamaan/Peter Bex (alexalejandre.com)
要約
この記事は、CHICKEN Schemeのメンテナーであり、プロのClojure開発者であるPeter Bex氏へのインタビューです。Bex氏は、CHICKEN Schemeの6.0.0リリース、Schemeのコミュニティと標準化プロセス、データベース(Postgres、MySQL、SQLite)、そしてClojureについて語っています。また、自身のコンピューティングの始まり、Lisp/Schemeへの傾倒、CHICKEN Schemeへの貢献、そしてLispの内部構造に関する学習プロセスについても詳しく述べています。
全文翻訳
2026年9月 - Alex AlejandrePeter Bex(ウェブサイト)は、CHICKEN Schemeのメンテナーであり、プロのClojure開発者です。私たちは数ヶ月にわたりIRCで知り合い、以下のトピックについて話し合いました。
CHICKEN Schemeとその6.0.0リリース
Schemeのコミュニティと標準化プロセス
Postgres、MySQL(デフォルト)とSQLiteの恐ろしさ
Clojure
私の現在のコアへの主な貢献は、数値タワーコード、irregexライブラリのコア内コピーをアップストリームバージョン(私が共同メンテナーを務めている)に最新の状態に保つこと、バグの修正、そして時折のセキュリティ修正に焦点を当てています。私はコードベースの奇妙な角に深く潜り込み、より良く理解してから、見つけた奇妙な点を改善することを楽しんでいます。- 彼のCHICKEN
はじめに
コンピューティングを始めたきっかけは?
子供向けの「BASICを学ぼう」という本が付属した古い手作りのC64をもらったときにコンピューティングを始めました。もちろん、自分でコンピューターゲームを作りたかったのです(結局できませんでしたが)。その後、誕生日プレゼントで本物のPCを手に入れ、DOSのQBASICでBASICの知識がある程度転用できることを発見しました。
その後、C言語を学び、長年使用していましたが、大学でLisp(実際にはScheme)を教えるコースがありました。私たちはThe Little Lisper/Schemerから始め、次にSICPを学びました。その前に「関数型プログラミングコース」がありましたが、まったく理解できなかったため、ほとんど落第しかけました(彼らはConcurrent Cleanを使用しました。明らかに教師は、その品質に関係なく、自分の言語を使って教えるという一般的な学術界の誤りを犯しています)。しかし、The Little Schemerが最終的に理解させてくれました。教師はラムダ関数だけを使ってオブジェクトを実装する方法も示してくれ、それは素晴らしいと思いました。
私は、すべてのLLMのくだらないものが出る前にAIを研究していました。A*検索や遺伝的アルゴリズムのような古典的なAIアルゴリズムの巧妙さの方がはるかに好きでしたが、実際にはあまり使用しておらず、研究のためだけでした。遺伝的アルゴリズムを何かに使おうといつも考えていますが、まだ実用的なユースケースはありません。しかし、ニューラルネットワークが未来であることは当時から明らかでしたが、それは単なる数学(当初はほとんど理解できませんでした)であり、基本的にブラックボックスなので、退屈だと感じていました。AIを研究したおかげでLispに出会えたので、今でも感謝しています。
「基本的な言語」の1つとしてLispに興味を持っていたかもしれませんが、本当に深く掘り下げるだけの根気はなかったかもしれません。大学卒業後、比較的初期(2006年)のRailsを使用している会社に就職したので、Rubyも学びました。Rubyを学ぶのは楽しかったし、Railsのパワーを見るのはクールだと思いましたが、Railsは非常に強い意見を持っており、私のプログラミングスタイルとは完全には互換性がなかったため、後に非常にフラストレーションを感じました。
CHICKEN & Scheme
なぜCHICKEN?
そのコースの後、個人的なプロジェクトにはすべてLispを使おうとしました。最初はScheme48を使いましたが、実用的ではありませんでした(非常にエレガントでしたが)。イメージが大きすぎたり、メモリが不足したりする問題に遭遇したのを覚えています。PLT Scheme(現Racket)は、DrRacketを通じて初めて触れたときから、非常に遅く感じられたため、あまり好きではありませんでした。ただし、DrRacketはIDEが何ができるかについてのクールな代替案だと思います。例えば、変数の上にカーソルを置くと、その変数の起源を示す線が表示されるなどです。
CHICKENは、実用的で高速なシステムであり、優れたコミュニティと許容できるライセンス(当時、GPLにはかなり嫌悪感がありました)を持っていました。CHICKENはまた、私たちが知る限り、ここで説明されているCheney on the MTAテクニックを使用している2つの実装のうちの1つです。多くの荒削りな部分がありましたが、それらを解決したいという願望が、私がコアに深く入り込むことを可能にしたのだと思います。すべてが完璧なら、本当にやることはあまりありません!
そこで、最初はいくつかの控えめなエッグ(CHICKENパッケージ)でCHICKENに貢献し始め、最終的にはコアシステムにも貢献しました。私は主に、CHICKENコアをいじり、色々なことを試すことで、Lispの内部構造について学びました。QueinnecのLisp in Small Piecesを読みましたが、これはCへの翻訳を扱っていますが、多くのことが未解決のままで、OOPの重さで気を散らします。SICPには良い資料がいくつかあります。AppelのCompiling with Continuationsは非常に短く要点を押さえていますが、それでもかなり包括的です。私はそのような本が好きです。
一般的に、最近はあまり時間がありませんが、コアでのハッキングを楽しんでいます。私は学習が遅いことを強調しなければなりません。CHICKENの理解を深めることは、何年も何年もかかるプロセスであり、システムの一部の部分はまだあまり馴染みがありません(ただし、必要に応じてすぐに慣れることができる程度には知っています)。
Lispの本には何が欠けていますか?
Compiling with Continuationsにはランタイムシステムに関する短いセクションしかないため、例えばガベージコレクションやデータ表現についてはあまり深く掘り下げていません。Lisp in Small Piecesは、私の記憶が正しければ、continuation passing styleには触れていません。また、そのデータ表現はあまり最適化されていません。私は、現在あまり議論されていないクールなテクニックについてブログを書くのが好きです。例えば、弱参照を実装する方法や、それらを効率的にGCする方法などです。めったに見ない他の話題としては、FFIやクロスモジュール最適化、別コンパイル、クロスコンパイル(これはほんの一握りのSchemeしかサポートしていません)などがあります。
あなたにとってSchemeとは?
一般的に、Schemeは私にとって、実験を容易にする最小限のコアを持つ非常にクリーンな言語です。これが標準化プロセスの根本的な緊張です。プロダクション品質のSchemeは大きくなる傾向があり、それを標準化することには価値があります。しかし、それは実験的な実装を可能にするミニマリズムを奪います。例えば、Felix Winkelmann(@Bunny351、CHICKENのオリジナル作者によるScheme実装に関する講演)は、かつて型とフロー解析で多くの実験を行ったCommon Lisp(サブセット)の実装を開始し、それがCHICKENの型システムにつながりました。
Schemeのエコシステム全体、R7RS、SRFIs対実装固有のライブラリなどについてどう思いますか? いくつかの実装はもう気にしていないようです。
R7RSを小さな言語と大きな言語に分割したのは正しいことだったと思います。R6RSはミニマリストには嫌われ、マキシマリストには不十分だと見なされたからです。一般的に、R7RSについては少し悲しいです。もし、いくつかの大きなコミュニティSchemeが実質的に完全に無視しているのであれば、それはIMOで何か間違っています。多くの、おそらくほとんどのScheme実装は、実質的に一人で運営されています。CHICKENも再びそのようになりつつあると思います。なぜなら、私たちはかなりの数の貢献者を失い(主に人生の状況の変化のため)、新しい貢献者を引き付けるのが難しいからです。
同時に、R7RS「large」プロジェクトは、コミュニティの賛同を本当に気にすることなく、独自に進んでしまったようです。R7RS largeの変更も、追いつくには速すぎます。数年で大量のSRFIをリリースしました(実際、今見返すとそれほど多くないように見えますが、SRFIが以前よりも確かに速いです)。SRFIプロセスは、良くも悪くも、文字通り誰でも投稿を受け付けています。CHICKENの新しい貢献者が、いくつかの新しいSRFIの実装を投稿しているのを見かけました。それは良いことですし、少なくとも人々がこれをやろうとしていることを嬉しく思います。
CHICKEN 6はベースR7RSですが、古いCHICKENコードは引き続き動作します。古いモジュール構文(「ネイティブ」なもの)も引き続きサポートしています。R7RSライブラリ宣言は、基本的にコアモジュール構文のシンタックスシュガーです。R7RS-smallはR5RSとほぼ完全に後方互換性があるため、競合はありません。エッグをCHICKEN 6に移植するには、通常、いくつかの小さな調整が必要です。なぜなら、いくつかの(非R5RS)識別子がR7RSスタイルによりよく適合するようにモジュール間で移動したからです。
CHICKENの開発プロセスはどのようなものですか?
CHICKEN 4は「hygienic CHICKEN」であり、モジュールシステムを導入しました(そして、エクスポーザーのオーバーホールが必要でした)。これはすべてFelixによるもので、マクロがモジュールとどのように相互作用するかなど、内部の深い知識を大量に必要としました。
CHIC