プログラミング
Common Lispが今、最高のプログラミング言語である理由
Why Common Lisp is now the best programming language (vivienhenz.com)
要約
LLM(大規模言語モデル)の台頭により、コード生成の速度が向上し、プログラムの実行速度やフィードバックループの短さが重要になっています。Common Lispは、実行時にもデバッガを介してプログラムを継続でき、コードとデータを同じリスト構造で扱えるため、マクロによる言語拡張が容易です。これにより、LLMを活用してドメイン固有言語を構築し、開発効率と保守性を大幅に向上させることが可能になります。
全文翻訳
Common Lispが今、最高のプログラミング言語である理由
2026年10月
一部のプログラミング言語は他の言語よりも優れているということに同意しますか?もしそうなら、そのうちの1つが最高であるはずです。そして、それは実際にはCommon Lispであり、特にLLMがコードを書けるようになった今、そうです。LLMは非常に速くコードを書きます。そしてそれは多くのことを変えます。なぜなら、コードを書くことがかつては遅い部分だったからです。今、遅い部分は、あなたのプログラムが実際に機能するかどうかを見つけることです。そして、それができる前に、あなたはそれを再構築しなければなりません。それは数分かかることがあります。人間がコードを書いていた頃は、これはあまり重要ではありませんでした。なぜなら、書くのにコンパイルして実行を開始するのを待つよりも時間がかかっていたからです。しかし、今ではそうではありません。だから、フィードバックループがどれだけ長くかかるかが、どれだけ速く構築できるかを決定します。Common Lispでは、そのループはほとんど存在しません。なぜなら、読み込み時、コンパイル時、実行時の間に実際の区別がないからです(Graham)。Common Lispはイメージベースであり、あなたのプログラムはメモリ内のライブイメージであることを意味します。したがって、関数の新しいバージョンは、何も再起動することなくすぐに古いバージョンを置き換えます。また、ほとんどの言語では、エラーはプログラムをクラッシュさせます。したがって、LLMでコードを書いている場合、変更を加えてプログラムを再度実行するためにクラッシュログを読む必要があります。Common Lispでは、プログラムはクラッシュせず、停止して、スタック全体とすべての変数を持つデバッガを開きます。あなたはただあなたのLLMをデバッガに向け、それは修正を行い、プログラムを再開します。私の知る限り、Common Lispはこれらすべてを行う唯一の主流言語です。
Lispは「List Processing」の略です。Common Lispでは、コードはリストとして書かれます。例えば、(+ 1 2) は2つの数を加算するプログラムですが、それは単に3つの要素のリストでもあります:シンボル+、そして数値1と2。興味深いのは、これがCommon Lispがデータを格納するために使用するのと同じ種類のリストであり、言語がリスト処理を中心に構築されているため、データ操作のためのすべてのツールがコードにも機能することです。したがって、プログラムは別のプログラムを取得して変更することができます。例えば、(+ 1 2) を (* 1 2) に変換して、結果をすぐに実行できます。これがマクロを可能にするものです。マクロは、コードを受け取り、その代わりに新しいコードを返す関数です。つまり、言語自体に新しい構文を追加できるということです。言語に何かを追加できるようになったら、問題に向けてそれを構築できます。だからLispでは、単にプログラムを書くだけでなく、ドメインのための言語を書き、その言語でプログラムを書きます。それは今、より重要です。なぜなら、プログラムを価値あるものにするのは、その背後にある意見だからです。そして、私たちはソフトウェア企業がユーザー自身に製品を変更させる世界に向かっています。なぜなら、LLMがあればそれは簡単だからです。したがって、企業が良い意見を持ったドメイン言語を製品のために構築した場合、その上にユーザーが構築するすべては、企業の意見から始まり、ゼロからではないため、はるかに良くなります。ERPを考えてみてください。すべての企業は少しずつ異なって運営されているため、ほとんどすべての企業がそれを変更する必要があることに気づきます。しかし、ERPが独自のドメイン言語で書かれている場合、あなたはLLMにその言語で変更を行うように依頼するだけです。変更は自然にドメイン言語の根本的な意見に従うため、製品を壊すのではなく、製品に適合します。そして、それは単に良いだけでなく、安価でもあります。Lispプログラムは、マクロが繰り返しパターンを抽象化し、それらを言語自体の一部にすることができるため、しばしばはるかに簡潔です。したがって、プログラムが大きくなるほど、違いは大きくなります。私自身の経験では、Common Lispで構築したアプリは、Pythonバージョンよりも約6〜7倍短くなります。LLMにとって、コードが少ないことはトークンが少ないことを意味し、トークンは支払うものであるため、開発費が少なくなります。また、プログラムのより大きな部分がLLMのコンテキストウィンドウに収まるようになります。LLMがプログラム全体をコンテキストウィンドウに持っている場合、それは意図の完全なビューを持つことになり、より良い意思決定につながります。私の経験では、多くのLLMバグは、プログラムの他の部分を見ずに一部を変更することから生じます。だからCommon Lispでは、それはあまり起こりません。
Common LispはANSI標準であり、1994年以来更新されていません。私はこの機能を気に入っています。そして、ERPの例に戻ると、ユーザーが製品自体を変更する場合、それはまさにあなたが望むことです。なぜなら、基盤となる言語は決して移動せず、その上に構築されたものは決して壊れないからです。Common Lispでプログラムを書くとき、必要なライブラリを見つけられないことがよくあります。主要なCommon LispパッケージマネージャーであるQuicklispには数千のプロジェクトがありますが、npmには数百万あります。しかし、私はそれがもう問題だとは思いません。今日のほとんどのプログラムは、侵害され続けている何百万行ものコードに依存しています。あなたはあなたのプログラムにそれを望みません。また、LLMを使えば、必要な部分を自分で書くか、ライブラリ全体を移植することができます。そして、LLMはコードの移植に非常に優れているようです。最後に、私は今、多くの人々がビジネスを構築することを期待してプログラミングしているのを見ています。Common Lispで製品を構築することへの明白な反対意見は、それをプログラムする方法を知っている人が非常に少ないため、エンジニアを見つけるのが難しいだろうということです。しかし、私はそれが実際には問題ではないと思います。成功する会社を築きたいなら、最高の技術者を採用したいはずです。つまり、新しいことを学ぶのが本当に得意な人です。だから、コーディング面接で彼らにCommon Lispを学ばせればいいのです。人々がどれだけ速く物事を習得するかを見るでしょう。そして、うまくいく人はおそらくそれを学び続け、非常に得意になるでしょう。結論として、次にプログラムを書きたいときは、Common Lispを使用してください。
引用文献
Graham, Paul. "What Made Lisp Different." Paul Graham, May 2002, paulgraham.com/diff.html. Accessed 5 Oct. 2026.