プログラミングとの出会いとLispへの道のり

matheusmoreira氏のプログラミングの原点は、幼少期にプレイしたビデオゲーム「ロックマンエグゼ」シリーズにあります。このゲームがきっかけで英語を学び始め、最初のプログラミング言語としてC++に触れました。13〜14歳でブラジルの技術高校に入学し、Dev-C++という古いIDEとcplusplus.comのチュートリアルを通じてC++を習得したそうです。(出典 )

C++を習得した後、彼はJava、Ruby、Pythonといった多様な言語を学び、最終的にLispやSchemeに出会いました。特にSchemeを見た時には「非常にエレガントだ」と感じたと言います。Rubyは当時最も気に入っていた言語で、いくつかRuby Gemも開発し、そのうちの一つ『Acclaim』は小規模ながらも注目を集めたようです。(出典 )

「多くの言語を学ぶにつれて、最終的に辿り着いたのがLispやSchemeだった」という彼の言葉は、多くの開発者が経験する「最適な言語」探しの旅を象徴しているように感じます。様々な言語を渡り歩くことで、それぞれの良い点、そうでない点が浮き彫りになるのは開発者あるあるではないでしょうか。

なぜ彼は多様な言語を追求したのか、そしてC言語への回帰

matheusmoreira氏がこれほど多くのプログラミング言語を探求した動機は、初期の学校のプロジェクトから始まり、やがて「最適なものを見つけたい」という純粋な好奇心へと変化しました。彼は「ホームと呼べる言語」を探していたと言います。長く使い続けたのはRubyとC言語で、特にC言語の「低レベルでのシンプルさ」に魅力を感じたそうです。(出典 )

Lispファミリーの言語は、PythonやJavaのように単一の進化を遂げるのではなく、多くの異なる方言が存在します。これは「Lispはプログラミング言語のファミリー」であるためで、基本的な構文は共有するものの、オペレーターやセマンティクス、標準ライブラリ、言語機能が異なります。(出典 )

項目 単一言語(Python, Javaなど) Lispファミリー
言語進化の形態 単一言語として進化 多数の方言が存在
基本構文 各言語固有 多くのLisp方言で共通
オペレーター・セマンティクス 各言語固有 方言によって異なる
標準ライブラリ 各言語固有 方言によって異なる
代表的な実装 CPython, PyPy, JVM, GraalVMなど Common Lisp, Scheme, Clojureなど

matheusmoreira氏が最終的に辿り着いた「Lone Lisp」は、既存のLisp処理系とは一線を画し、Linuxシステムコールに直接基づいて構築されています。このアプローチは、C言語で培われた低レベルプログラミングへの深い理解と、Lispの持つ表現力を組み合わせることで実現されました。

Lone Lispとその意義

Lone LispがLinuxシステムコールに直接基づいているという点は、非常に注目に値します。通常、高レベル言語の処理系は、OSとの間に標準ライブラリやランタイムを挟みますが、Lone Lispはこの抽象レイヤーを極力排除し、OSのカーネル機能に直接アクセスする設計思想を取っています。(出典 )

これは、低レベルでの制御が必要なシステムプログラミングや、リソースが限られた環境での開発において、パフォーマンスと効率の最大化を目指すものです。C言語の経験が豊富な彼だからこそ実現できたアプローチだと感じます。

PythonやTypeScriptをメインで使っている私からすると、システムコールレベルでのプログラミングは普段あまり意識することはありませんが、このような低レベルからのアプローチは、言語の動作原理を深く理解する上で非常に重要だと改めて認識させられます。個人的には、Pythonバインディングがあれば、気軽に試してみたいと感じます。自分のプロダクトのクリティカルな部分に組み込むことで、思わぬパフォーマンス改善があるかもしれません。

最近のAIモデルやLLMのローカル実行では、GPU性能だけでなく、効率的なメモリアクセスやI/O処理も重要になります。Lone Lispのような低レベルアプローチは、そうした分野での最適化に貢献する可能性も秘めているのではないでしょうか。

特に個人プロダクトでLLMを動かす際に、システム全体のボトルネックを解消するためのヒントになりそうです。RTX 3090を搭載した自作PCでStable DiffusionやローカルLLMを動かしている私にとっては、非常に興味深い視点です。