プログラミング言語ESSENTIALS(THIRD EDITION):自然のプログラミング言語 - (A)

#巻頭言
>#序

この本は、あなたが対面コンピュータ・プログラミングにおける最も基本的なアイデアをもたらします:

>コンピュータの概念に基づき、この本はあなたの直感的な理解を得られます:

コンピュータA **のための通訳のちょうど別の言語のプログラムです。**

> **コンピュータ言語処理プログラムは、ちょうど別のプログラムです。**

それはそれは、明らかにされません聞こえますか?しかし、意味が深いです。あなたは、計算理論家であれば、通訳のアイデアは、正式な論理システムの制限のゲーデルの発見、ユニバーサルコンピュータのチューリングの概念、およびプログラム内蔵機械のフォン・ノイマンの基本的な概念を思い出します。あなたがプログラマであれば、通訳の考え方を習得することは偉大な力の源です。それは考え方の本当のシフト、あなたがプログラミングの考え方の基本的な変化を引き起こします。

>一見明白な、そうではありませんか?しかし、このビューには、深さです。あなたが戻ったゲーデル(ゲーデル)正式なロジック・システムの制限の基本的な概念は考えデートを計算し、理論家・コンピューティングの場合は^ ** 1 **、チューリングマシンとノイマン格納されたプログラム・マシンのコンセプト。あなたがプログラマであれば、アイデアを習得することが彼らの強力な機能のソースを変換することです。それはあなたの心、あなたの「プログラミング」ビューへの根本的な変化の実際のアップグレードにつながります。

私は通訳を学んだ前に、私はプログラミングの多くをした、と私はいくつかのかなりの番組を制作しました。それらの一つは、例えば、PL / Iで記述された大規模なデータ入力および情報検索システムでした。私は私のシステムを導入するとき、私は言語設計者のいくつか近寄りがたいグループによって確立されたルールの固定コレクションとしてPL / Iを見ました。私はこれらのルールを変更しないように私の仕事を見て、あるいは深くそれらを理解するのではなく、(非常に)大きなマニュアル、これを選択するか、使用するために、その機能を使用して選択します。言語が組織された方法にはいくつかの基本的な構造があったことを、私は言語設計者の意思決定の一部を上書きする場合がありますという概念は、私に起こったことはありません。私は私の実装を整理するために埋め込まれたサブ言語を作成する方法を知りませんでしたので、プログラム全体が大規模、複雑なモザイクのように見えました、ここで、各部分は、注意深くなく片を柔軟に組み合わせることができる言語のクラスタよりも、所定の位置に成形及び嵌合しなければなりませんでした。あなたが通訳を理解していない場合でも、プログラムを書くことができます。あなたも有能なプログラマすることができます。しかし、あなたはマスターすることはできません。

私が学んだ前に>私は翻訳技術のプログラミングの多くをやった、と手続きの多くを書きました。PLである場合、例えば、/ Iは、大規模なデータ入力および情報検索システムを書き込みます。私はこのシステムを書いたとき、I PL / Iは、牛のシリーズを確立し、支援するためのルールの固定セットとして見られています。私は私の仕事は、これらのルールを変更することはないことに気づいた、でも深さでそれを理解する必要がありますが、あなたが欲しいものを選んで「巨人」から使用する1つまたは大規模なマニュアルの他の特性を選択しないでください。組織の言語の構造の基礎となる概念は、私はいくつかの言語設計者の決定を無効にしたいです。私は私がプログラム全体の私の実装では、それぞれの作品は、慎重に位置を予定して配置しなければならない、大きな、複雑なモザイクのように見える整理するための完全なサブ言語を作成する方法を知っている、というよりはありません文と文エレガントな組み合わせの前の文のセット。あなたは翻訳技術を理解していない場合は、コードを書くことができます。あなたも、非常に有能なプログラマになることができますが、マスターになることができません。

プログラマーとして、あなたが通訳について学ぶべき3つの理由があります。

>プログラマーとして、あなたは翻訳技術を習得するための3つの理由があります。

まず、あなたはおそらくない本格的な汎用言語の通訳が、通訳ちょうど同じ、通訳を実装するためにいくつかの点で必要になります。人々が柔軟な方法とコンピュータの描画ツールや情報検索システムに相互作用するほぼすべての複雑なコンピュータ・システムは、そのための構造的相互作用インタプリタのいくつかの並べ替えを例-含まれています。これらのプログラムは、複雑な個々の操作シェーディング表示画面上の領域を、またはデータベース検索が、インタプリタを実行するを含むことができ、あなたが有用なパターンに個々の操作を組み合わせることができます接着剤です。あなたは別の操作への入力として一つの操作の結果を使用することはできますか?あなたは一連の操作に名前を付けることはできますか?名前は、ローカルまたはグローバルですか?あなたは一連の操作をパラメータ化し、その入力に名前を付けることはできますか?等々。どんなに個々の操作がどのように複雑で、研磨、それは多くの場合、最も直接的にシステムのパワーを決定する接着剤の品質ではありません。それは良い、個々の操作でプログラムの例を見つけるのは簡単だが、お粗末な接着剤。それを振り返って、私は私のPL / Iデータベースプログラムは確かにお粗末な接着剤を持っていたことがわかります。

>まず第一に、あなたは、翻訳を達成するためにいくつかの点で必要になる場合があり、完全な汎用言語を達成できないかもしれないが、原理は同じです。エレガントな方法を作成するために、ほぼすべての複雑なシステム - 例えば、コンピュータ・マッピング・ツールや情報検索システム - 組織と通訳のシリーズです。これらのプログラムは、複雑な人格の動作を含むことができる - スクリーンまたはデータベースクエリの最適化の影に表示されている - あなたは複合操作は「接着剤」の有用なモデルであるパー​​ソナライズすることができるようにインタプリタがあります。あなたは他の操作、それの入力として1つの動作を使用することができますか?あなたは、操作それのシーケンスに名前を付けることはできますか?名前は、ローカルまたはグローバルのですか?あなたは一連の操作と各入力の名前、それをパラメータ化することができますか?などなど。あなたはどのように複雑な操作でエレガントなパーソナライズかどうか、「糊」の品質は、システムの能力に直接依存しています。振り返ってみると、私のPL / Iデータベースプログラムは、ジャンク債の数が含まれています。一部のプログラムは、パーソナライズされた操作の良い例を見つけるのは簡単ですが、あなたはまた、ごみの多くを見つけることができます。

第二に、通訳そのものでなくてもプログラムが重要な通訳状片を持っています。洗練されたコンピュータ支援設計システムの内側を見て、あなたはすべて一緒に働いて幾何学的な認識言語、グラフィックインタプリタ、ルールベースの制御インタプリタ、オブジェクト指向言語の通訳を見つけるためになりそうです。複雑なプログラムを構築するための最も強力な方法の一つは、異なる視点を提供してそれぞれの言語のコレクション、プログラム要素を扱う別の方法としてあります。右の目的のための言語の正しい種類を選択し、関連する実装のトレードオフを理解する:それは通訳の研究が何であるかです。

>第二に、非自明プログラムインタプリタは、いくつかの類似した機能が含まれます場合でも。深さ、洗練されたコンピュータ支援設計システム(CAD)、あなたが最も可能性の高い言語、グラフィック通訳、互いにコントローラおよびルールベースのオブジェクト指向言語が動作することを幾何学的な認識があります。ほとんどの組織では、私が唯一の有効な方法の複合体は異なる視点、集まりで構成される作業言語の異なるいくつかの方法であると言うことができます。正しい言語のための正しい宛先を選択して、異なる実装のトレードオフを理解する:これは、理由を説明するために学習のアイデアです。

通訳について学ぶための第三の理由は、明示的に言語の構造を伴うプログラミング技術がますます重要になってきているということです。オブジェクト指向システムにおけるクラス階層を設計し、操作すると今日の懸念は、この傾向の一例に過ぎません。おそらくこれは、我々のプログラムは、言語について、より明示的にますます複雑思考になっていることは、この複雑さに対処するための最善のツールかもしれないという事実の必然的な結果です。もう一度基本的なアイデアを考えてみましょう:インタプリタ自体はただのプログラムです。しかし、そのプログラムは、そのインタプリタ自体がそのインタプリタ自体であるいくつかの言語で書かれただけのプログラムであり、いくつかの言語で書かれています。おそらく、プログラムとプログラミング言語間の全体の区別が紛らわしい考えです、

>言語インタプリタの構造を研究するための第三の理由は、ますますプログラミング技術においてより重要な役割を果たしています。今、オブジェクト指向システムのクラス構造の設計と操作に焦点を当てることは、このトレンドのほんの一例です。おそらく、私たちのプログラムは、より複雑になる必然的な傾向、言語についての明確な思考おそらく、我々はより良​​いこの複雑ツールに対処することができます。もう一度基本的な概念を考えてみましょう:インタプリタ自体はただのプログラムです。しかし、これらの言語で書かれている言語プログラムのいくつかは......プログラムとプログラミング言語は、誤解を招くようなプログラムは、将来のプログラマであるかもしれない前に、彼らは私が書いたものを書いていないことがわかります自分自身の考え方の違いを説明することができますし、これは、アプリケーションごとに新しい言語を作成しています。

フリードマンとワンドは、画期的な仕事をしている、と彼らの本は、プログラミング言語のコースの風景を変更します。彼らはただの通訳をご紹介していません。彼らはあなたにそれらを示しています。この本のコアは、抽象的、高レベル言語で始まる通訳のツアーdeforce配列であり、我々は、ステートマシンに到達するまで徐々に言語的な特徴は、明示的にすること。あなたは実際に、このコードを実行する研究と、それを修正し、これらの通訳は、スコープを処理する方法、パラメータ渡し、制御構造などを変更することができます

フリードマンと王は画期的な作品を作った>、帳簿は、プログラミング言語のコースの風景を変更します。彼らは、彼らはまた、あなたにこれらを示し、解釈についてあなたのすべてを教えてくれません。この本のコアは、我々は、ステートマシンを取得するまではない豊かな言語的アイデンティティの、高レベル言語から始まる知識系列の原理を説明することです。ようにスコープ、パラメータの受け渡し、制御構造、および:あなたは、このコードを実行する学び、それを修正し、これらの動作モードの解釈を変更することができます。

言語の実行を研究するために通訳を使用した、著者は同じアイデアがそれらを実行せずにプログラムを分析するために使用することができる方法を示しています。二つの新しい章では、彼らは型チェッカーとinferencersを実装する方法を示しており、これらの機能は、近代的なオブジェクト指向言語でどのように相互作用します。

>通常、私たちは、著者らは、プログラムがプログラムを解析するために思考の同じ種類で実行されていないか、ここで示し、研究プロセス実行言語への翻訳を使用します。二つの新しい章では、近代的なオブジェクト指向言語の役割のどのようにこれらの機能、型チェックとダウンを実装するためにどのようにそれらを示します。

このアプローチの魅力の理由の一部は、著者がアルゴルのレキシカルスコープとブロック構造を持つLispのの均一な構文とデータの抽象化機能を兼ね備えた優れたツール-Scheme言語を選択しているということです。しかし、強力なツールは、主人の手の中で最も強力になります。本書のサンプル通訳は優れたモデルです。彼らは実行可能なモデルであるため、実際のところ、私はこれらの通訳及びアナライザは、今後数年間、多くのプログラミングシステムのコアで自分自身を見つけることを確信しています。

>この本のための魅力的な理由は、著者が--Scheme言語、統一された文法的な形とデータ抽象化のLisp言語とレキシカルスコープとブロックアルゴル言語の言語の組み合わせを説明するために非常に良いツールを選んだということです構造。しかし、マスターの手の中に高速なハードウェア・ツールは、より多くのNiubiになります。本書の例には、モデルの優れたインタプリタです。確かに、彼らは実行できるモデルがあるからこそ、私はこれらの説明及びアナライザは、多くのプログラミングシステムの中核となり、将来的に自分自身を見つけると確信しています。

これは簡単な本ではありません。通訳の習得は簡単に来て、正当な理由はありません。言語設計者は、通常のアプリケーションプログラマであるよりも、エンドユーザーから削除、さらにレベルです。アプリケーションプログラムの設計では、特定のタスクを実行するために考え、そして含まれるように備えて何を考えます。しかし、言語を設計する際に、あなたは、人々が実装したい場合がありますさまざまなアプリケーション、およびそれらを実装する可能性のある方法が検討します。あなたの言語は、静的または動的スコープ、またはそれらの混合物を持っているべきですか?それは、継承を持っているべきですか?それは、参照によってまたは値によってパラメータを渡すべきか?継続は、明示的または暗黙的にすべきですか?それはすべてあなたがプログラムの種類を書くのは簡単なはずこれは、お使いの言語が使用されることを期待し、あなたがより困難にする余裕ができているかに依存します。

>これは、読みやすい本ではありません。堪能インタプリタは容易ではありません。通常のプログラムの開発者に対して、言語設計者は、ユーザレベルから遠いです。あなたには、いくつかの特定のタスクを実行するアプリケーションを設計するとき、あなたはそれに含まれている機能を検討する必要があります。言語を設計する際しかし、あなたは、人々が達成したい、そしてそれらを達成する1つのかもしれないの方法かもしれないもの、様々なプログラムを検討してください。あなたの言語は、静的または動的スコープ、または混合のですか?それはそれを継承していますか?これは、値でパラメータを渡すか渡さバイための方法ですか?それはすべてあなたの言語が使用され、どのようなプログラムはあなたの言語を使用することは非常に簡単になりますし、どのような実装はいくつかの困難を引き起こすことを期待する方法に依存します。

また、通訳は本当に微妙なプログラムです。インタプリタ内のコードの行に簡単な変更は、得られた言語の行動に大きな違いを作ることができます。あなただけのこれらのプログラム、非常に少数の人々の世界では、新しいインタプリタを一瞥し、それは比較的単純なプログラムでも上のどのように動作するかそこから予測することができますすくい取ることを考えてはいけません。したがって、これらのプログラムを研究。いっそのこと、それらを-これを実行動作するコードです。その後、より複雑なものをいくつかの簡単な表現を、解釈してみてください。エラーメッセージを追加します。通訳を変更します。独自のバリエーションを設計します。ちょうど彼らがどのように動作するかについて漠然とした感覚を得ることはありませ、実際にこれらのプログラムを習得するようにしてください。

>同様に、インタプリタは本当に繊細な手順です。コードインタプリタのラインに言語行動のわずかな修正が劇的に変化しているだろう。あなたはこれらのプログラムを閲覧することができるとは思わない - 世界はほとんど誰もが効率的に、それは、比較的簡単な手順を行動することができ、新たなインタプリタプログラムを垣間見ることができません。したがって、これらの手順を学び、それらを実行するのが最適です - これらは、コードを実行することができます。その後、より複雑にしてみてください、いくつかの単純な式を説明しよう。エラーメッセージを追加します。インタプリタを変更します。独自のバリアントを設計します。それは表面だけの気持ちを持っていない作品、本当にこれらの手順を習得するようにしてください。

あなたがこれを行う場合、あなたはあなたのプログラミングのビュー、およびプログラマーとして自分自身の表示を変更します。あなたは、言語は他の人が選択したルールの唯一のフォロワーではなく、一緒に入れていることで、ルールを選択した者として、言語ではなく、言語のユーザーのみのデザイナーとして自分を見に来ます。

そうした場合、あなたはプログラミングについての考え方を変更します>、あなたは本物のプログラマーとして自分自身を残します。あなたは他の人が行った選択に従うことだけではなく、デザイナーとしてユーザーだけではなく、言語、異なる言語と組み合わせて使用​​される選択ルールを言語を所有することになります。

第三版に##あとがき

> ##サプリメントの第3版

上記の序文は、わずか7年前に書かれました。それ以来、情報のアプリケーションやサービスはほとんど1990年に可能思えない方法で、世界中の人々の生活に入ってきた彼らは、プログラミング言語やプログラミングフレームワーク - すべての拡大を続けるプラットフォーム上に建てられたの増え続けるコレクションを搭載しています通訳。

>序文は7年間でよく書かれて。それ以来、人々の生活に1990年想像を絶する方法のためのアプリケーションや情報サービス。通訳プラットフォームの拡大に構築されているすべてのそれらのプログラミング言語やフレームワークのサポートの彼らの成長のコレクション、。

あなたがWebページを作成しますか?唯一のシングル「印刷」の文を実行するブラウザで実行するプログラムを作成し、実際には、静的なテキストやグラフィックスのフォーマット意味1990年に。今日の動的なWebページでは、JavaScriptなどのスクリプト言語をフルに活用(インタプリタ言語用の別の名前)を作ります。ブラウザプログラムが複雑になり、そして一般的に、自身の個々の言語にそれぞれ、サービスのホストとおそらく完全に異なるプログラミングフレームワークでプログラムを実行しているWebサーバーへの非同期呼び出しを含むことができます。

>あなたは、Webページを作成しますか?1990年に、それは実際には、ブラウザでprint文を実行するためのプログラムを作成し、静的なテキストと画像のフォーマットを意味します。今、JavaScriptなどの動的なWebスクリプト言語(と呼ばれるかの言語を解釈される)、をフルに活用します。ブラウザプログラムは、典型的には、通常は私のメインサービスと言語で書かれているさまざまなプログラミングフレームワークの完全なプログラムを実行しているWebサーバへの非同期呼び出しを含む、非常に複雑になることがあります。

それとも、World of Warcraftのような大規模なオンラインマルチプレイヤーゲームで自分のアバターのパフォーマンスを向上させるためのボットを作成することがあります。その場合、あなたはおそらく、行動のクラスを表現するに支援するために、おそらくオブジェクト指向の拡張子で、Luaのようなスクリプト言語を使用しています。

>それとも、このようなWorld of Warcraftのようあなたのヒーローを、改善する能力で巨大な多人数参加型オンラインゲームのためのプラグインを作成することがあります。この例では、補助クラスの振る舞いを表現するために、オブジェクト指向の拡張機能を使用することが可能とLuaのようなスクリプト言語を使用する場合があります。

それとも、インデックス作成を行うための大規模なコンピューティング・クラスタをプログラミングし、グローバル規模で検索しています。その場合は、個々のプロセッサが予定されている方法の詳細を明示的に扱うのあなたを軽減するために、関数型プログラミングの地図削減パラダイムを使用してプログラムを書くことがあります。

>それとも大規模なコンピューティング・クラスタを作成しているが、世界中のインデックスと検索に使用されています。もしそうなら、あなたは関数型言語のMapReduceのモデルを使用してプログラムを書き込むことができ、あなたはスケジューリング作業上のプロセッサの使用状況の詳細を減らすことができます。

それともセンサネットワークのための新しいアルゴリズムを開発し、並列処理およびデータ集約とのより良い対処するための遅延評価の利用を模索しています。またはWebページを制御するためのXSLTのような形質転換系を探索。またはマルチメディアストリームを変換し、リミックスのためのフレームワークを設計します。または。

>それとも、新しいニューラルネットワークアルゴリズムを開発し、より優れた遅延計算処理の並列コンピューティングとデータ集約の使用を探ることがあります。またはXSLTと同様の制御ページの変換システムを、探ります。または変換し、マルチメディアストリームを混合するために設計のフレームワーク。それとも......
(SO)多くの新しい新しいアプリケーション!(SO)多くの新しい新しい言語!(SO)多くの新しい新しい通訳!

>だから、多くの新しいプログラム!だから、多くの新しい言語!だから、多くの新しい通訳!

これまで通り、初心者プログラマ、でも可能なものは、規則のその固定セット内で作業し、個別にそれぞれの新しいフレームワークを見に沿って取得することができます。しかし、新しいフレームワークを作成するマスターのスキルを必要とします、言語間で実行する原則を理解する言語機能は、アプリケーションのタイプに最適な鑑賞、そして生活にこれらの言語を持って通訳を作る方法を知っています。これらは、あなたがこの本から学ぶことができますスキルです。

>前述のように、プログラマをマスターする初心者でもプログラマは、それぞれ、各新しいフレームで動作するようにその規則的な幾何学との完全な見ることができます。しかし、新しい枠組みの見事なスキルを作成する必要があります。言語の動作原理を理解することは、私は、アプリケーション移行のタイプに最も適したどのような言語を理解し、そして私たちの生活の中に入れて、これらの言語の通訳を作る方法を知っています。これらはあなたがスキルを学びます。この本です。

ハル・アベルソンケンブリッジ、マサチューセッツ州2007年9月

-------
1.宇宙: "ゲーデル命題。"

 

ます。https://www.cnblogs.com/naturemickey/p/6358038.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34348111/article/details/93461855