平均を上回る
Original2001 年 4 月、2003 年 4 月改訂
(この記事は、2001 年の Franz Developer Symposium での講演を基に作成されています。)
1995 年の夏、友人のロバート モリスと私はViawebという新興企業を立ち上げました。私たちの計画は、エンド ユーザーがオンライン ストアを構築できるソフトウェアを作成することでした。当時、このソフトウェアが斬新だったのは、通常の Web ページをインターフェイスとして使用し、サーバー上で実行される点でした。
もちろん、多くの人が同時にこのアイデアを持っていたかもしれませんが、私の知る限り、Viaweb は最初の Web ベースのアプリケーションでした。私たちにとって、これは非常に斬新なアイデアに思えたので、そのアイデアにちなんで会社名を Viaweb としました。これは、当社のソフトウェアがデスクトップ コンピュータ上で実行されるのではなく、Web 経由で動作するからです。
このソフトウェアのもう一つの珍しい点は、主にLispと呼ばれるプログラミング言語で書かれていることです。これは、それまで大学や研究室で主に使用されていたLispで書かれた最初の大規模なエンドユーザーアプリケーションの1つでした。[1]
秘密兵器
Eric Raymond は「ハッカーになる方法」というエッセイを執筆しており、その中で、ハッカー志望者に学ぶべき言語について述べています。彼は、習得しやすい Python と Java から始めることを勧めています。また、本格的なハッカーは、Unix をハッキングするために C を、システム管理と CGI スクリプトのために Perl を習得したいと考えるでしょう。最後に、本当に本格的なハッカーは Lisp の習得を検討すべきです。
Lisp は、最終的に理解したときに得られる深い啓蒙体験のために学ぶ価値があります。たとえ実際に Lisp 自体をあまり使用しなくても、その体験によって、あなたは生涯を通じてより優れたプログラマーになれるでしょう。
これは、ラテン語を学ぶ際によく聞かれるのと同じ議論です。ラテン語を学んでも、古典学の教授になる以外は仕事に就くことはできませんが、知力が向上し、英語など、実際に使いたい言語でより優れたライターになれるでしょう。
しかし、ちょっと待ってください。この比喩はそこまでは当てはまりません。ラテン語で仕事に就けないのは、誰もそれを話さないからです。ラテン語で書いても、誰も理解できません。しかし、Lisp はコンピューター言語であり、コンピューターは、プログラマーが指示した言語を話します。
それで、彼が言うように、Lisp を使うとプログラマーとして優秀になれるのなら、なぜそれを使いたくないのでしょうか? 画家に、自分をもっと優れた画家になれる筆が与えられたら、すべての絵にそれを使いたいと思うのではないでしょうか? 私はここで Eric Raymond をからかおうとしているわけではありません。全体として、彼のアドバイスは良いものです。Lisp について彼が言うことは、ほとんど常識です。しかし、常識には矛盾があります。Lisp を使うとプログラマーとして優秀になれるのに、それを使わないのです。
なぜダメなのでしょうか? 結局のところ、プログラミング言語は単なるツールです。Lisp が本当に優れたプログラムを生み出すのであれば、それを使うべきです。そうでないなら、誰がそれを必要とするのでしょうか?
これは単なる理論上の質問ではありません。ソフトウェアは非常に競争の激しいビジネスであり、自然独占になりがちです。ソフトウェアをより速く、より良く書ける会社は、他の条件が同じであれば、競合他社を廃業に追い込むでしょう。そして、スタートアップを始めるとき、このことを痛感します。スタートアップは、すべてを得るか、何も得られないかのどちらかです。スタートアップでは、間違った技術に賭けると、競合他社に打ち負かされるでしょう。
Robert と私は Lisp をよく知っていたので、直感を信じて Lisp を選ばない理由は見つかりませんでした。他の誰もが C++ や Perl でソフトウェアを書いていることは知っていました。しかし、それが何の意味もないこともまたわかっていました。そのようにテクノロジーを選んだら、Windows を実行することになります。テクノロジーを選ぶときは、他の人が何をしているかは無視し、最もうまく機能するものだけを考慮する必要があります。
これはスタートアップ企業では特に当てはまります。大企業では、他の大企業がやっていることをすべて実行できます。しかし、スタートアップ企業は他のスタートアップ企業がやっていることをすべて実行することはできません。スタートアップ企業であっても、このことに気づいている人は多くないと思います。
平均的な大企業は年間約 10 パーセント成長します。したがって、大企業を経営していて、すべてを平均的な大企業と同じように行うと、平均的な大企業と同等の業績、つまり年間約 10 パーセントの成長が期待できます。
もちろん、スタートアップを経営している場合も同じことが起こります。平均的なスタートアップと同じようにすべてを行うと、平均的なパフォーマンスしか期待できません。ここで問題となるのは、平均的なパフォーマンスは倒産を意味するということです。スタートアップの存続率は 50 パーセントをはるかに下回ります。したがって、スタートアップを経営している場合は、何か変わったことをしたほうがよいでしょう。そうでなければ、困ったことになります。
1995 年当時、私たちは、競合他社が理解していなかった、そして今でもほとんどの人が理解していないことを知っていました。それは、自社のサーバーでのみ実行する必要があるソフトウェアを作成する場合、任意の言語を使用できるということです。デスクトップ ソフトウェアを作成する場合、オペレーティング システムと同じ言語でアプリケーションを作成する傾向が強くあります。10 年前、アプリケーションを作成するということは、C でアプリケーションを作成することを意味していました。しかし、Web ベースのソフトウェアでは、特に言語とオペレーティング システムの両方のソース コードがある場合は、任意の言語を使用できます。
しかし、この新しい自由は諸刃の剣です。今ではどんな言語も使用できるので、どの言語を使用するかを考える必要があります。何も変わっていないふりをしようとする企業は、競合他社が何も変わっていないことに気づくリスクがあります。
どの言語でも使えるとしたら、どの言語を使いますか? 私たちは Lisp を選びました。第一に、この市場では迅速な開発が重要であることは明らかでした。私たちはすべてゼロからスタートしていたので、競合他社よりも先に新機能を完成させられる会社が大きなアドバンテージを得ることになります。Lisp はソフトウェアを迅速に作成するのに非常に適した言語であり、サーバーベースのアプリケーションではソフトウェアが完成した瞬間にリリースできるため、迅速な開発の効果は大きくなります。
他の会社が Lisp を使いたがらないなら、それはそれでよいことです。Lisp は私たちに技術的な優位性を与える可能性があり、私たちはあらゆる支援を必要としていました。Viaweb を始めたとき、私たちにはビジネスの経験がまったくありませんでした。マーケティング、人材の雇用、資金調達、顧客の獲得などについて何も知りませんでした。私たちの 2 人とも、いわゆる本物の仕事に就いたことすらありませんでした。私たちが得意としていたのはソフトウェアの作成だけでした。それが私たちを救ってくれると期待していました。ソフトウェア部門で得られる利点はすべて利用するつもりでした。
ですから、Lisp の使用は実験だったと言えます。私たちの仮説は、ソフトウェアを Lisp で書けば、競合他社よりも早く機能を実現できるし、競合他社ができないことをソフトウェアで実現できるというものでした。また、Lisp は非常に高度なため、大規模な開発チームは必要なく、コストも低くなります。もしそうなら、より少ないコストでより優れた製品を提供でき、利益も出せます。最終的に私たちはすべてのユーザーを獲得し、競合他社はまったくユーザーを獲得できず、最終的には廃業するでしょう。いずれにせよ、それが実現することを私たちは望んでいました。
この実験の結果はどうだったでしょうか。いささか意外なことに、うまくいきました。最終的に、20 から 30 社ほどの競合相手ができましたが、どのソフトウェアも当社の製品に太刀打ちできませんでした。当社には、サーバー上で実行されながらデスクトップ アプリケーションのように感じられる WYSIWYG オンライン ストア ビルダーがありました。競合相手は CGI スクリプトを使用していました。そして、当社は機能面で常に他社をはるかに上回っていました。時には、競合相手は必死になって、当社にはない機能を導入しようとしました。しかし、Lisp では当社の開発サイクルが非常に速く、競合相手がプレス リリースで新機能を発表してから 1 日か 2 日で、その新機能を再現できることもありました。プレス リリースを取材するジャーナリストが当社に電話をかける頃には、当社にも新機能が備わっていました。
競合他社にとって、私たちが何らかの秘密兵器を持っている、つまり Enigma トラフィックを解読しているかのように思われたに違いありません。実際、私たちは秘密兵器を持っていましたが、それは彼らが認識していたよりも単純なものでした。誰も私たちに機能の情報を漏らしませんでした。私たちは、誰もが考えていたよりも速くソフトウェアを開発することができたのです。
9 歳くらいのとき、フレデリック・フォーサイス著の『*ジャッカルの日』*を偶然手にしました。主人公はフランス大統領の暗殺を依頼された暗殺者です。暗殺者は大統領の通る道を見下ろすアパートにたどり着くために警察を通り抜けなければなりません。松葉杖をついた老人に扮して警察のすぐそばを通り過ぎますが、警察は彼を疑うことはありません。
私たちの秘密兵器も同様でした。私たちは、括弧だらけの奇妙な構文を持つ奇妙な AI 言語でソフトウェアを作成しました。何年もの間、Lisp がそのように説明されるのを聞いてイライラしていました。しかし、今ではそれが私たちの利益になっています。ビジネスでは、競合他社が理解していない技術的な優位性ほど価値のあるものはありません。ビジネスでは、戦争と同様に、奇襲は力と同じくらい価値があります。
それで、恥ずかしながら、Viaweb の開発中、私は Lisp について公に何も話しませんでした。マスコミにも話したことがなく、私たちの Web サイトで Lisp を検索しても、私の経歴に 2 冊の本のタイトルしか見つかりません。これは偶然ではありません。スタートアップは、競合他社にできるだけ情報を与えないようにすべきです。競合他社が私たちのソフトウェアがどの言語で書かれているかを知らなかったり、気にしなかったりするのであれば、私はそのようにしておきたかったのです。[2]
私たちの技術を最もよく理解していたのは、お客様でした。お客様も Viaweb がどの言語で書かれているかは気にしませんでしたが、それが非常にうまく機能することに気付きました。文字通り数分で、見栄えの良いオンライン ストアを構築できました。そして、主に口コミで、ユーザーが増えていきました。1996 年末までに、オンライン ストアは約 70 ありました。1997 年末には 500 になりました。6 か月後、Yahoo が私たちを買収したとき、ユーザー数は 1,070 でした。今日、このソフトウェアは Yahoo Store として、市場を独占し続けています。これは Yahoo の最も収益性の高い部分の 1 つであり、これを使用して構築されたストアは Yahoo Shopping の基盤となっています。私は 1999 年に Yahoo を辞めたので、現在、正確に何人のユーザーがいるかはわかりませんが、最後に聞いたところによると、約 20,000 人でした。
ブラブパラドックス
Lisp の何がそんなに素晴らしいのでしょうか? そして、Lisp がそんなに素晴らしいのなら、なぜ誰もが使わないのでしょうか? これらは修辞的な質問のように聞こえますが、実際には簡単な答えがあります。Lisp が素晴らしいのは、信者にしか見えない魔法のような性質があるからではなく、単に利用可能な言語の中で最も強力なからです。そして、誰もが Lisp を使用しない理由は、プログラミング言語が単なる技術ではなく、思考習慣でもあり、それより遅く変化するものはないからです。もちろん、これらの答えは両方とも説明が必要です。
まず、衝撃的で物議を醸す発言から始めましょう。プログラミング言語の能力はそれぞれ異なります。
少なくとも、高級言語がマシン言語よりも強力であることに異論を唱える人はほとんどいないでしょう。今日のほとんどのプログラマーは、通常、マシン言語でプログラミングする必要はないことに同意するでしょう。代わりに、高級言語でプログラミングし、コンパイラーにマシン言語に変換させるべきです。この考え方は、現在ではハードウェアにも組み込まれています。1980 年代以降、命令セットは人間のプログラマーではなくコンパイラー向けに設計されてきました。
プログラム全体を機械語で手書きするのは間違いだということは誰もが知っています。あまり理解されていないのは、ここにはもっと一般的な原則があるということです。つまり、複数の言語から選択できる場合、他の条件が同じであれば、最も強力な言語以外でプログラムするのは間違いだということです。[3]
このルールには多くの例外があります。特定の言語で書かれたプログラムと非常に密接に連携する必要があるプログラムを作成している場合、新しいプログラムを同じ言語で作成するのが良いかもしれません。数値計算やビット操作など、非常に単純なことだけを行うプログラムを作成している場合は、抽象度の低い言語を使用する方がよいでしょう。特に、その方が少し高速になる場合があります。また、短い使い捨てのプログラムを作成している場合は、そのタスクに最適なライブラリ関数を持つ言語を使用する方がよい場合があります。ただし、一般に、アプリケーション ソフトウェアの場合は、入手できる最も強力な (適度に効率的な) 言語を使用する必要があります。それ以外の言語を使用することは、機械語でのプログラミングとまったく同じ種類の間違いですが、程度は低い可能性があります。
マシン言語が非常に低レベルであることがおわかりでしょう。しかし、少なくとも一種の社会的慣習として、高レベル言語はすべて同等に扱われることがよくあります。実際はそうではありません。技術的には、「高レベル言語」という用語は、非常に明確な意味を持つものではありません。一方にマシン言語があり、もう一方にすべての高レベル言語があるという境界線はありません。言語は、最も強力なものから、それ自体がさまざまな能力を持つマシン言語に至るまで、抽象度の連続体 [4] に沿っています。
Cobol について考えてみましょう。Cobol は、マシン語にコンパイルされるという意味で高級言語です。Cobol の能力が Python と同等であると本気で主張する人がいるでしょうか。おそらく、Cobol は Python よりもマシン語に近いでしょう。
あるいは、Perl 4 はどうでしょうか。Perl 4 と Perl 5 の間で、言語に語彙のクロージャが追加されました。ほとんどの Perl ハッカーは、Perl 5 が Perl 4 よりも強力であることに同意するでしょう。しかし、それを認めると、ある高級言語が他の高級言語よりも強力になる可能性があることを認めたことになります。そして必然的に、特別な場合を除き、入手できる最も強力なものを使用するべきです。
しかし、この考えが最後まで貫かれることはめったにありません。ある年齢を超えると、プログラマーが自発的に言語を変更することはめったにありません。人々は、たまたま慣れている言語が何であれ、それで十分だと考える傾向があります。
プログラマーは自分の好きな言語にとても愛着を持っています。誰かの感情を傷つけたくはありませんので、この点を説明するために、Blub という架空の言語を使用します。Blub は抽象度の連続体のちょうど真ん中に位置します。最も強力な言語ではありませんが、Cobol やマシン言語よりも強力です。
そして実際、私たちの仮想の Blub プログラマーはどちらも使用しません。もちろん、マシン語でプログラミングすることはありません。それがコンパイラーの役割です。そして、Cobol に関しては、それを使って何ができるのか彼にはわかりません。x (選択した Blub 機能) さえありません。
仮想の Blub プログラマーがパワーの連続体を見下ろす限り、彼は自分が下を見ていることに気づいています。Blub よりパワーの低い言語は、彼が慣れている機能が欠けているため、明らかにパワーが低いです。しかし、仮想の Blub プログラマーが反対方向、つまりパワーの連続体の上を見ると、彼は自分が上を見ていることに気づきません。彼が見ているのは、単に奇妙な言語です。彼はおそらく、それらの言語が Blub とパワー的にはほぼ同等で、さらに他の厄介な要素も加わっていると考えています。彼は Blub で十分です。なぜなら、彼は Blub で考えているからです。
しかし、パワーコンティニュアムの上位にある言語を使用するプログラマーの視点に切り替えると、そのプログラマーは Blub を軽蔑していることがわかります。Blub で何ができるというのでしょうか。y さえありません。
帰納的に、さまざまな言語間の力の違いをすべて理解できる立場にある唯一のプログラマーは、最も強力な言語を理解しているプログラマーです。(おそらくこれが、Eric Raymond が Lisp を使うとプログラマーとしての能力が向上すると言った意味でしょう。) Blub パラドックスがあるため、他の人の意見を信頼することはできません。つまり、たまたま使用している言語がプログラムについての考え方を決定づけるため、その言語で満足しているのです。
私は高校生の頃、Basic でプログラムを書いていた経験から、このことを知っています。その言語は再帰さえサポートしていませんでした。再帰を使わずにプログラムを書くことは想像しにくいですが、当時は再帰を惜しんでいませんでした。私は Basic で考えました。そして、私はその達人でした。調べたものすべてに精通していました。
Eric Raymond がハッカーに推奨する 5 つの言語は、パワーの連続体上のさまざまな地点に位置付けられます。これらの言語が互いにどこに位置するかは微妙な問題です。私が言いたいのは、Lisp がトップだと思うということです。この主張を裏付けるために、他の 4 つの言語を見たときに欠けていると思うことの 1 つについてお話しします。マクロなしで、これらの言語で何かができると思いますか? [5]
多くの言語にはマクロと呼ばれるものがあります。しかし、Lisp のマクロは独特です。信じられないかもしれませんが、マクロの機能は括弧に関連しています。Lisp の設計者は、単に違いを出すために言語にそれらの括弧をすべて入れたわけではありません。Blub プログラマーにとって、Lisp コードは奇妙に見えます。しかし、それらの括弧には理由があります。それらは、Lisp と他の言語の根本的な違いを外から証明するものなのです。
Lisp コードは、Lisp データ オブジェクトから構成されます。ソース ファイルに文字が含まれ、文字列が言語でサポートされているデータ型の 1 つであるという単純な意味ではありません。Lisp コードは、パーサーによって読み取られた後、トラバースできるデータ構造から構成されます。
コンパイラの仕組みを理解していれば、Lisp の構文が奇妙だというよりも、Lisp には構文がないということが実際に起こっていることがわかります。他の言語を解析するときにコンパイラ内で生成される解析ツリーにプログラムを書きます。しかし、これらの解析ツリーはプログラムから完全にアクセスできます。それらを操作するプログラムを書くことができます。Lisp では、これらのプログラムはマクロと呼ばれます。マクロはプログラムを書くプログラムです。
プログラムを書くプログラム? いつそんなことをしたいと思うでしょうか? Cobol で考えるなら、そう頻繁にはないでしょう。Lisp で考えるなら、いつでも。ここで、強力なマクロの例を挙げて、「ほら、どうでしょう?」と言えば便利ですが、そうすると、Lisp を知らない人には意味不明に見えてしまいます。その意味を理解するために必要なことをすべて説明する余地はありません。Ansi Common Lispでは、できるだけ早く進めようとしましたが、それでも 160 ページまでマクロにはたどり着きませんでした。
しかし、説得力のある議論ができると思います。Viaweb エディタのソース コードは、おそらく 20 ~ 25% がマクロでした。マクロは通常の Lisp 関数よりも書きにくく、必要のないときにマクロを使うのは悪いスタイルだと考えられています。そのため、そのコード内のすべてのマクロは、必要だからそこにあります。つまり、このプログラムのコードのうち少なくとも 20 ~ 25% は、他の言語では簡単にはできないことを行っています。Blub のプログラマーが Lisp の神秘的な力についての私の主張にどれほど懐疑的であろうとも、これは彼の好奇心をそそるはずです。私たちは、自分たちの楽しみのためにこのコードを書いていたわけではありません。私たちは小さなスタートアップ企業で、競合他社との間に技術的な壁を設けるためにできる限りのプログラミングをしていました。
疑い深い人は、ここに何らかの相関関係があるのではないかと考え始めるかもしれません。私たちのコードの大部分は、他の言語では非常に難しいことを行っています。その結果生まれたソフトウェアは、競合他社のソフトウェアではできないことを実現しました。おそらく何らかの関連性があるのでしょう。その糸口をたどってみてください。松葉杖でよろよろと歩いている老人には、目に見える以上の何かがあるかもしれません。
スタートアップのための合気道
しかし、私は誰か( 25歳以上)にLispを学ぶよう説得できるとは思っていません。この記事の目的は誰かの考えを変えることではなく、すでにLispの使用に興味を持っている人々、つまりLispが強力な言語であることは知っているが、広く使用されていないことを心配している人々を安心させることです。競争の状況では、それは有利です。競争相手がLispを理解していないという事実によって、Lispの力は倍増します。
スタートアップで Lisp を使うことを考えているなら、それが広く理解されていないことを心配する必要はありません。その状態が続くことを願うべきです。そして、そうなる可能性が高いです。ほとんどの人が現在使用しているもので満足するのがプログラミング言語の性質です。コンピュータ ハードウェアは個人の習慣よりもはるかに速く変化するため、プログラミングの実践はプロセッサより 10 年から 20 年遅れているのが普通です。MIT などの場所では 1960 年代初頭には高級言語でプログラムが書かれていましたが、多くの企業は 1980 年代に入ってもずっと機械語でコードを書き続けました。プロセッサが、店を閉めて家に帰りたがっているバーテンダーのように、RISC 命令セットに切り替えてついに彼らを追い出すまで、多くの人が機械語を書き続けたに違いありません。
通常、テクノロジーは急速に変化します。しかし、プログラミング言語は異なります。プログラミング言語は単なるテクノロジーではなく、プログラマーが考えるものです。半分はテクノロジーで、半分は宗教です。[6] そのため、平均的な言語、つまり平均的なプログラマーが使用する言語は、氷山のようにゆっくりと変化します。1960 年頃に Lisp によって導入されたガベージ コレクションは、現在では広く良いことだと考えられています。同様に、ランタイム タイピングも人気が高まっています。1970 年代初頭に Lisp によって導入された語彙クロージャは、現在、かろうじて注目されています。1960 年代半ばに Lisp によって導入されたマクロは、まだ未知の領域です。
明らかに、中間言語には巨大な勢いがあります。この強力な力と戦えると言っているのではありません。私が提案しているのは、まさにその逆です。合気道の修行者のように、中間言語を敵に対して使うことができるということです。
大企業で働いている場合、これは簡単ではないかもしれません。20年前のAdaのように、他の言語が世界を席巻しようとしていると新聞で読んだばかりの、尖った髪の上司にLispで何かを作ることを許可してもらうのは大変でしょう。しかし、尖った髪の上司がまだいない新興企業で働いている場合は、私たちがやったように、Blubパラドックスを有利に利用することができます。つまり、中間言語に固執している競合他社が決して対抗できないような技術を使用できるのです。
スタートアップ企業で働くことになったら、競合他社を評価するための便利なヒントがあります。それは、求人情報を読むことです。その企業のサイトにある他のすべての情報はストック写真か、それに相当する文章かもしれませんが、求人情報には企業が求めているものが具体的に記載されていなければなりません。そうでないと、間違った候補者が採用されてしまいます。
Viaweb で働いていた数年間、私は求人情報をたくさん読みました。毎月のように新しい競合企業が現れるようでした。ライブ オンライン デモがあるかどうかをチェックした後、私が最初にやることは、その企業の求人情報を見ることでした。これを 2、3 年続けると、どの企業を心配すべきか、どの企業を心配する必要がないかがわかるようになりました。求人情報が IT 色を帯びているほど、その企業は危険度が低いのです。最も安全なのは、Oracle の経験者を求める企業です。そのような企業について心配する必要はありませんでした。また、C++ または Java 開発者を求めている企業も安全でした。Perl または Python プログラマーを求めている企業なら、少し恐ろしいでしょう。少なくとも技術面は本物のハッカーが運営している企業のように聞こえてきます。Lisp ハッカーを求める求人情報を見たら、本当に心配したでしょう。
注記
[1] Viaweb は当初、2 つの部分から構成されていました。サイト構築に使用されていた Lisp で書かれたエディタと、注文を処理する C で書かれた注文システムです。最初のバージョンは注文システムが小さかったため、ほとんどが Lisp でした。その後、C で書かれた画像ジェネレータと、主に Perl で書かれたバックオフィス マネージャという 2 つのモジュールが追加されました。
2003 年 1 月、Yahoo は C++ と Perl で書かれた新しいバージョンのエディタをリリースしました。ただし、このプログラムを C++ に変換するには文字通り Lisp インタープリタを書かなければならなかったため、プログラムがもはや Lisp で書かれていないかどうかはわかりません。私の知る限り、すべてのページ生成テンプレートのソース ファイルは依然として Lisp コードです ( Greenspun の Tenth Ruleを参照)。
[2] ロバート・モリスは、たとえ競合他社が私たちがLispを使用していることを知っていたとしても、その理由を理解できなかったので、秘密にする必要はなかったと述べています。「彼らがそれほど賢いなら、すでにLispでプログラミングしているはずです。」
[3] すべての言語はチューリングマシンと同等という意味で同等に強力ですが、それはプログラマーが気にする言葉の意味ではありません。(チューリングマシンをプログラムしたい人は誰もいません。)プログラマーが気にする種類のパワーは正式に定義できないかもしれませんが、それを説明する1つの方法は、より強力な言語のインタープリタをその言語で書くことによってのみ、より強力でない言語で得られる機能を指すと言うことです。言語Aに文字列からスペースを削除する演算子があり、言語Bにない場合、おそらくそれはAをより強力にしません。なぜなら、おそらくBでそれを行うサブルーチンを書くことができるからです。しかし、Aが、たとえば再帰をサポートし、Bがサポートしない場合、それはライブラリ関数を書くことで修正できるものではないでしょう。
[4] オタクの皆さんへ:あるいは、上に向かって狭くなる格子かもしれません。ここで重要なのは形ではなく、少なくとも部分的な秩序があるという考えです。
[5] マクロを別の機能として扱うのは少し誤解を招きます。実際には、マクロの有用性は、語彙クロージャや残余パラメータなどの他のLisp機能によって大幅に強化されます。
[6] その結果、プログラミング言語の比較は宗教戦争の形をとったり、学部生の教科書のように中立的すぎるため実際には人類学の書物になったりする。平和を重んじる人や終身在職権を望む人は、この話題を避けている。しかし、この疑問は半分宗教的なものであり、特に新しい言語を設計したい場合には、研究する価値のあるものがある。