Lispがどのように神のためのプログラミング言語になったか

プログラマーがさまざまなプログラミング言語の利点を議論するとき、彼らはしばしば異なるデバイスのセットのツールとして、それらについて平凡な言葉で話します-1つはシステムプログラミングに適し、もう1つは現在の問題を解決するために他のプログラムを接着するのに適しています。 そうであるはずです。 言語にはさまざまな長所があり、特定の例を指定せずに1つの言語が他の言語より優れていると言うことは、非生産的で鋭い議論を引き起こすことを意味します。



しかし、奇妙なことに普遍的な尊敬を呼び起こす言語が1つあります。それはLispです。 キーボードの十字軍は、どんな言語も他の言語よりも優れていると断言する者を攻撃する準備ができており、Lispが異なるレベルにあることに同意します。 平均的なプログラマーはLispを使用して実用的なものを作成したことはないため、他の言語で判断される功利主義の基準を超えており、おそらくLispに対する敬意はあまりにも深いため、神話上の特性。 みんなのお気に入りのxkcdコミックは、少なくとも2回Lispを描写しました。1冊のコミックで、キャラクターはLispの啓発を達成し、宇宙の基本構造を学ぶのに役立ちます。 別の例では、ローブを着た古いプログラマーが括弧の束をパダワンに渡し、これが「より文明的な時代の優雅な武器」であり、Lispに内在するフォースのオカルトの可能性を暗示していると説明した。



別の素晴らしい例は、ボブ・カネフスキーの「神はテラに住んでいます」という歌のパロディです。 彼のパロディは90年代半ばに書かれ、「永遠の炎」と呼ばれています。 彼女は、どうやら、神がLispの助けを借りてどのように世界を創造したかを説明しています。 以下は抜粋であり、完全版はGNU Humor Collection Webサイトで見つけることができます。

結局のところ、神はLispで書いた

彼が葉を緑で満たしたとき。

フラクタルの花と再帰的根:

私が今まで見た中で最も美しいハック。

そして、私は雪を研究するとき

そして、私は同じものを2つ見つけません

神は言語を愛していることを知っています

独自の4文字の名前。


私は自分だけのために話しますが、文化的なミーム「Lispは秘密の魔法」が最も奇妙で興味深い現象であるように思われます。 Lispはアイボリータワーで人工知能を研究するためのツールとして考案されたため、通常のプログラマーにとっては少し馴染みがなく、神秘的です。 しかし、今ではプログラマは互いに意識を広げるサイケデリックな薬のように、「あなたが死ぬ前にLispを試してみてください」と押し合っています。 Lispは今でも使用しているプログラミング言語の中で2番目に古く、 Fortranに次いで2番目であり、それが1年であるにもかかわらず、彼らはこれを行います。 それを開発した会社またはチームが、新しいプログラミング言語の広告をあなたに任せると想像してください。 あなたの新しい言語が神の力を持っていることを皆に納得させることができてクールではないでしょうか? しかし、これはどのように達成できますか? プログラミング言語はどのようにして秘密の知識の源として有名になりましたか?



Lispはどのようにしてこれに到達しましたか?





バイトマガジン表紙、1979年8月



理論A:公理的言語



Lispの作成者であるJohn McCarthyは、当初、Lispを計算原理のエレガントな本質にすることを目指していませんでした。 しかし、1つまたは2つの成功したアイデアといくつかの改善の後、Lispはまさにそれに変わりました。 Paul Graham-後で説明します-Lispを作成した後、McCarthyは「Euclidがジオメトリに対して行ったのと同じプログラミングを行いました」と書いています。 おそらく、マッカーシーはLispでより深い意味を探しています。なぜなら、マッカーシーは、彼がそれを発明したのか発見したのかを言うのが難しい基本的な部分からそれを作成したからです。



マッカーシーは、 1956年のダートマスの夏の人工知能研究プロジェクトの間に言語の創造について熟考し始めました。 このワークショップは、AIの分野で初めての連続した数週間にわたる学術会議でした。 ところで、この会議を開催することを提案した「人工知能」という用語を生み出したのは、ダートムアの数学の准教授としてのマッカーシーでした。 会議には約10人が参加しました。 その中には、RAND Corporationに関連する2人の研究者であるAllen NewelとHerbert Simonと、 IPL言語の開発を完了したばかりのカーネギーメロン大学がいました。



NewelとSimonは、発話論理で証拠を提供できるシステムを作成しようとしました。 彼らは、自分のコンピューター命令のレベルのままでこれを行うのは難しいことを理解したので、彼らは「理論的論理の機械」の仕事をより自然に表現するのに役立つ言語、または「擬似コード」と呼ばれる言語を作成することにしました。 彼らの言語であるIPL(「情報処理言語」)は、現代のプログラミング言語というよりも、アセンブラーの高レベルの方言に似ていました。 NewelとSimonは、おそらくFortranに言及して、当時開発中だった「他の擬似コード」は、標準の数学表記で方程式を表現することで「忙しい」と述べました。 代わりに、彼らの言語は、シンボリック式のリストの形式でステートメントを提示することに焦点を合わせました。 IPLプログラムは、アセンブラーマクロシーケンスを使用して、これらの1つ以上のリスト内の式を処理および評価しました。



マッカーシーは、Fortranに似た言語で代数式を使用すると便利だと考えました。 したがって、彼はIPLが好きではありませんでした。 しかし、彼はシンボリックリストがAIの分野、特に演includeを含むタスクをモデル化する良い方法であると考えました。 これは、Fortranに似ているがIPLのようなシンボリックリストを処理できる代​​数リスト処理言語を作成したいというマッカーシーの願望の芽生えでした。



もちろん、今日のLispはFortranに似ていません。 今後数年間で、理想的なリスト処理言語に関するMcCarthyのアイデアは進化しました。 彼のアイデアは1957年にFortranチェスプログラムの手順を書き始めたときに変わり始めました。 Fortranの長い露出により、マッカーシーはデザインにいくつかの悪い点があり、主なものは不器用なIFステートメントであると確信しました。 マッカーシーは、条件式「true」の代替案を発明し、特定のチェックが成功した場合は部分式Aを返し、別の場合は部分式Bを返し、返された部分式のみを実行します。 1958年の夏、McCarthyが差別化が可能なプログラムに取り組んでいたとき、彼は条件式「true」が再帰関数の記述をより簡単で自然にしたことに気付きました。 差別化の問題により、McCarthyは、別の関数を引数として取り、リストのすべての要素に適用するmaplist関数を作成するようになりました。 任意の数のメンバーの合計を区別するのに役立ちました。



Fortranはそのようなことを表現できなかったので、1958年の秋にマッカーシーは数人の学生にLispを実装するタスクを尋ねました。 マッカーシーは現在MITの准教授であったため、すべての学生はMITで学びました。 アイデアを実用的なコードに変換することで、マッカーシーと学生は言語をさらに簡素化する変更を加えました。 これらの最大のものは、Lisp構文でした。 マッカーシーは最初はいわゆる Lisp構文をFortranに似せた「 構文糖 」の層である「M式」。 M式はS式(Lispで有名な括弧で囲まれた単純なリスト)に変換できますが、S式は実際にはコンピューターの低レベルの表現でした。 唯一の問題は、McCarthyが角括弧でM式を示し、MITで使用されているIBM 026パンチには角括弧がなかったことです。 したがって、LispチームはS式に限定し、それらを使用してデータのリストだけでなく関数の使用も表現しました。 マッカーシーと学生は、プレフィックス録音への切り替えや、言語が1種類の実数しか持たないメモリモデルなど、いくつかの他の単純化を行いました。



1960年、McCarthyはLispに関する有名な作品「シンボリック式の再帰関数とその機械による計算」を発表しました。 その時までに、言語はマッカーシーが別のプログラミング言語だけでなく「エレガントな数学システム」を作成したことに気付くほどにまで縮小されていました。 彼は後に、Lispの単純化の多くがそれを「再帰関数の理論で使用されるチューリングマシンや一般的な再帰定義よりもはるかに正確な計算関数を記述する方法」に変えたと書いた。 彼の仕事で、彼はLispを実用的なプログラミング言語として、また再帰関数の振る舞いを研究するための形式主義として導入しました。



McCarthyはLispを読者に説明し、小さなルールのセットからLispを構築しました。 その後、Paul GrahamはエッセイのRoots of Lispで読みやすい言語を使用してMcCarthyの足跡をたどりました。 Grahamは、わずか7つのプリミティブ演算子、関数の2つの異なるエントリ、およびプリミティブ演算子で定義された6つの高レベル関数でLispを説明できます。 このような単純なルールの小さなシーケンスでLispを定義する機能は、確かに謎に追加されます。 グラハムは、マッカーシーの研究を「計算の公理化」の試みと呼んだ。 これは、Lispの魅力を反映する素晴らしい方法だと思います。 他の言語では、while、typedef、public static voidなどの予約語で記述された明らかに人工的な構造がありますが、Lispの記述は計算ロジック自体によって制限されているようです。 この品質と「再帰関数の理論」のような難解な分野とのLispの最初のつながりは、言語の現在の名声を説明するはずです。



理論B:未来の機械



有名な「 コンピューター科学者の辞書 」によると、Lispは作成から20年後、AI研究の「ネイティブ言語」になりました。 Lispは初期段階で急速に広まりました。おそらく、その体系的な構文により、新しいマシンでの実装が比較的簡単になったためです。 その後、研究者は、AIの大部分がシンボリックであった時代に重要だったシンボリック表現をどれだけうまく処理できるかを考えて、それを使い続けました。 Lispは、 SHRDLU自然言語プログラム、 Macsymaコンピューター代数システムACL2ロジックシステムなどの多産なAIプロジェクトで使用されました。



1970年代半ばまでに、AI研究者はコンピューターの能力が不足し始めました。 たとえば、PDP-10-みんなのお気に入りのAIマシン-には18ビットのアドレス空間があり、LispのAIプログラムではますます不足していました。 多くのAIプログラムもインタラクティブである必要があり、タイムシェアリングシステムで適切に機能する大規模なインタラクティブプログラムを作成することは困難な作業でした。 MITのPeter Deutschが最初に提供したソリューションは、Lisp専用のコンピューターを開発することでした。 このようなマシンは、各ユーザーにLisp用に最適化された専用プロセッサーを提供する必要があります。 また、筋金入りのLispプログラマーのために、Lispで記述された開発環境が必要でした。 ミニコンピューターの時代の終わりに不快な瞬間に発明されたLispマシンは、マイクロコンピューター革命の全盛期の前に、プログラマーのエリートのための高性能パーソナルコンピューターでした。



しばらくの間、Lispマシンは未来の波になると思われました。 この技術の商業化をめぐって競争し始めた企業がいくつかありました。 これらの中で最も成功したのは、MIT AI Labの退役軍人によって作成されたSymbolicsでした。 1980年代、Symbolicsは、AI業界およびハイパワーコンピューティングを必要とする業界で人気のある3600シリーズのコンピューターを発売しました。 3600ラインには、大画面、ビットマップグラフィックス、マウスインターフェイス、強力なグラフィックスおよびアニメーションプログラムを備えたコンピューターが含まれていました。 これらは印象的なプログラムを書くことを可能にした印象的なマシンでした。 例えば、ロボティクス研究の分野で働いていたボブ・カリは、1985年にSymbolics 3650でパス検索アルゴリズムを実装して視覚化できることをTwitter経由で私に書いた。彼はラスターグラフィックスとOOP(Flavors拡張のおかげでLispマシンで利用可能) 1980年代に新しいものでした。 シンボリックは最前線にありました。







しかし、結果として、Symbolicsコンピューターはめちゃくちゃ高価でした。 Symbolics 3600の価格は1983年に110,000ドルでした。ほとんどの人は、Lispマシンのパワーと、遠くからLispを書くオペレーターの魔法に驚かせるだけでした。 しかし、彼らは驚いた。 Byte誌は、1979年から1980年代後半にかけてLispとLispマシンについて何度か説明しました。 Lispの1979年8月号で、編集長はMITで開発されている「記憶の山」と「高度なオペレーティングシステム」の新しいマシンに熱心でした。 彼はそれらをとても有望であると考えたので、Apple II、コモドールPET、およびTRS-80が登場した過去2年間は退屈に思えた。 5年後の1985年、Byte誌の著者は、「複雑で非常に強力なSymbolics 3670」向けのLispプログラムの記述プロセスを説明し、Lispを学ぶよう読者に奨励しました。将来の汎用言語の候補。



マウンテンビューコンピューターヒストリーミュージアムでLispを救うために尽力したPaul MacJonesに、人々が最初にLispを高次元の存在からの贈り物として話し始めた時期について尋ねました。 彼は、言語の機能自体が確かにこれに貢献しただけでなく、1960年代と1970年代のLispと強力なAIアプリケーションとの密接な関係も貢献したと言いました。 1980年代にLispマシンを購入できるようになったとき、MITやスタンフォードのよ​​うな場所の外でさらに数人の人々が出会い、伝説は成長し続けました。 今日、LispマシンとSymbolicsを覚えている人はほとんどいませんが、彼らは1980年代までLispミステリーのオーラを維持するのを助けました。



理論B:プログラミングトレーニング



1985年、MITの教授、ハロルド・アベルソン、ジェラルド・サスマン、およびサスマンの妻ジュリアは、教科書「コンピュータプログラムの構造と解釈」を出版しました。 教科書では、読者はScheme言語であるLisp方言でプログラミングを教えられました。 MITで20年間プログラミングの紹介に使用されました。 これは教科書であるSICPであり、Lispに神秘主義を加えたように思えます。 SICPはLispを取り上げ、プログラミングの芸術の深い、ほとんど哲学的な概念を説明するためにどのように使用できるかを示しました。 これらの概念はPLを使用するのに十分一般的でしたが、SICP作成者はLispを選択しました。 その結果、Lispの評判は、多くの世代のプログラマーを魅了した(そして非常に奇妙なミームになった)この奇妙で素晴らしい本の悪名によって補完されました。 Lispは常に「マッカーシーのエレガントな形式主義」でした。 今では「プログラミングの隠された秘密を教える」言語にもなっています。



この本がどれほど奇妙であるかについて少し話をする価値はあります-私にとっては、その奇妙さと奇妙さLispが今日一つに統合されたように思えるからです。 奇妙さは表紙から始まります。 魔法使いや錬金術師がテーブルに近づき、ある種の魔術を始める準備ができている様子を描いています。 一方では、彼はキャリパーまたはコンパスを持ち、他方では、「評価」および「適用」という碑文のあるグローブを持っています。 彼の反対側の女性はテーブルを指しています。 背景には、空中に放射状に広がるギリシャ文字のラムダがあります。







ここで何が起こっていますか? テーブルに動物の足があるのはなぜですか? なぜ女性はテーブルを指すのですか? インクwellの意義は何ですか? ウィザードが宇宙の秘密の知識を明らかにし、それらが評価/適用サイクルとラムダ計算で構成されることを理解する必要がありますか? どうやら、そうです。 このイメージだけが、今日のLispの認識に多くを加えることになっていた。



しかし、本自体のテキストはしばしば同じように奇妙であることが判明します。 SICPは、コンピューターサイエンスに関する他のほとんどの本とは異なります。 序文の著者は、この本はLispでのプログラミングに関するものではないことを説明しています。 後に彼らは、プログラミングはコンピューターサイエンスの分野としてではなく、「手続き型認識論 」の新しい記録として考えられるべきだと確信していると述べています。 プログラムは、コンピューターにたまにしか入力されない思考を構築する新しい方法です。 最初の章では、Lispの簡単なツアーを提供しますが、本の大部分は、より抽象的な概念に関するものです。 さまざまなプログラミングパラダイム、OOシステムの時間とアイデンティティの性質、および1つの場所で、相対性理論で光速の役割を果たすメッセージ送信の基本的な制限のために発生する同期の問題について説明します。 これらはかなり難解なものです。



そして、この本が悪いと言っているのではない。 彼女は素晴らしいです。重要なプログラミングの概念については、私が読んだ他のすべての本よりも高いレベルで説明します。長い間考えていたが説明できなかった概念です。驚くべきことに、プログラミング教科書の紹介では、OOPの基本的な欠点と、可変状態を最小限に抑える関数型言語の利点について、すぐに説明することができます。これがどのようにストリーミングパラダイムがおそらく今日のRxJSのようなものであるかの議論に変わるのは驚くべきことです両方のアプローチの長所を提供できます。 SICPは、McCarthyのLispの元の研究を思い起こさせる方法で、高レベルのプログラムを開発することの本質を強調しています。この本を読んだ後に最初にしたいことは、仲間のプログラマーに読んでもらうことです。彼らがそれを見つけ、カバーを見て、読んでいない場合、延期されるのは、eval / applyと呼ばれる不思議なことが、動物の足のあるテーブルに対して特別な力を与えることです。私は彼らの靴に感銘を受けたでしょう。



しかし、おそらく、SICPの最も重要な貢献は、Lispを楽しい好奇心から教育学的な必要性に引き上げることでした。 SICPのずっと前に、人々は互いにプログラマーとしてのレベルを向上させるためにLispを学ぶように助言しました。 1979年のByte Magazineの発行。 MITの新しいLispマシンを賞賛した同じ編集者は、この言語は「問題に関する異なる視点を表している」ため、この言語を学ぶ価値があると説明しました。しかし、SICPでは、Lispは他の言語との対照としてだけでなく提示されました。入門言語として使用され、基本的なプログラミング概念を学習するのに最適な言語であることを示唆しています。今日のプログラマーが互いに死ぬ前にLispを試すように互いに助言するとき、おそらく彼らはSICPのためにそれをするでしょう。結局のところ、Brainfuckはおそらく「タスクに関する異なる視点」も提供します。しかし、人々は代わりにLispを勉強します。20年にわたってLispの視点は非常に有用であり、MITの学生はLispを他のすべての言語に教えていました。



Lisp Return



SICPがリリースされた年に、BjörnStraustrupは本「C ++プログラミング言語」の初版を出版し、OOPを大衆にもたらしました。数年後、Lispマシン市場は崩壊し、AI冬が始まりました次の10年ほどで、C ++、そしてJavaが未来の言語になり、Lispが植生しました。



当然、人々がLispを再び賞賛し始めた時期を正確に示すことは不可能です。これはおそらく、Y-Combinatorの共同設立者であり、Hacker Newsの作成者であるPaul Grahamが、Lispをスタートアップにとって最高の言語として説明する有力なエッセイをいくつか発表した後に起こったのでしょう。「エッセイに先駆け平均の「Grahamは、Lispマクロが他の言語よりも言語を強力にしたと主張しました。ViawebスタートアップでLispを使用すると、競合他社よりも速く特定のものを開発できたと述べました。



代わりに、Lispのますます多くの機能が皆の好きな言語に分類され始めました。 Pythonはリスト生成を追加しました。 C#で-Linq。 Rubyでは...まあ、RubyはLispです。 Grahamが2001年に指摘したように、「後の人気言語の多くに組み込まれているデフォルト言語は、徐々にLispに向かって発展しました。」そして、他の言語が徐々にLispに近づいている間、Lisp自体は、どういうわけか、ほとんど理解していないが誰もが学ぶ必要がある神秘的な言語としての特別な評判を維持しています。 1980年、Lispの20周年の年に、McCarthyは、Lispが「PLの空間でのある種の近似局所最適値」をとる限り生き延びたと書いています。しかし、これはLispの本当の影響を過小評価しています。プログラマーは10年ごとに、それが自分のタスクに最適なツールであることを渋々承知していたため、50年間生き残ってきました。でも彼は生き残ったほとんどのプログラマーは使用しません。 AIの研究における起源と使用、そしておそらくSICPの遺産のために、Lispは人々を喜ばせ続けています。そして、新しい言語の助けを借りて世界を創造した神を想像できるまで、Lispはどこにも行かないでしょう。



All Articles