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