osコースでいくつか書いたので、アセンブリ言語の使用は嫌いではありません。しかし、明らかに、アセンブリ言語には抽象化が欠けているため、詳細に注意を払う必要があります。
TAOCPを記述するためにアセンブリ言語は本当に不可欠ですか?
osコースでいくつか書いたので、アセンブリ言語の使用は嫌いではありません。しかし、明らかに、アセンブリ言語には抽象化が欠けているため、詳細に注意を払う必要があります。
TAOCPを記述するためにアセンブリ言語は本当に不可欠ですか?
回答:
彼は、MIXのアセンブリ言語であるMIXALだけでなく、単純なコンピューター(60年代に使用されたコンピューターのような)のモデルであるMIXも使用しています。これは、彼がある程度の分野での開発から独立している教育のモデルです。
彼が別のプログラミング言語(ちなみに、どれが適していると思いますか)、たとえばNPL(気の利いたプログラミング言語)を使用した場合、彼はMIXを使用するという考えを放棄するか、選択したコンピューター言語のコンパイラー(Vol 1で扱っているものよりもはるかに複雑なものです)。そうすれば、TAOCPではなくTAONPLPになります。最初のものはそのような選択とは無関係であり、このため、プログラミングに関する本はほとんどありません。2つ目はおそらく今では忘れられているでしょう...
また、コンピューターが基本的に彼のMIXと同じように機能している限り、コンピューターの操作方法を学ぶことに本当に興味がある場合は、それを考慮するのが良いことです。
あなたの若いwhippersnappersは時々私を驚かせます。学校を始める前に何かが起こったという手がかりがあまりにも多くあります。(私は同じ問題を抱えています。大人の観点から見ると、15年は実際には非常に短い時間であると理解するのに長い時間がかかりました。私の父はそれで戦いました、そして、私の母はそれの間に中学生でした。)
TAOCP、vol。1、「Fundamental Algorithms」、第1版は、1968年に最初に印刷されました。それは45年前です。Knuthはその前にシリーズの計画を開始しました。
参考:Intel 8086は、10年後の1978年に初めて登場しました。PASCAL言語は1971年に初めて登場しました。C言語の最初の開発は1969年から1973年までで、K&Rは1978年に公開されました。
Knuthはこのシリーズがフィールドをカバーすることを意図していました。彼は、THENというスタイルを実践者に役立つように設定しました。彼は、そのシリーズが文字通り彼の人生の仕事になること、あるいは彼が最終的に終了したときにおそらく半世紀をはるかに超えるものに及ぶその執筆になることをこれまで期待していなかった。
アセンブリ言語は、おそらく当時ほど重要ではありませんが、Java / C ++ / Javascript / Python / Perl Mavenが皆さんに信じてほしいものよりもはるかに重要です。
今、私の法律を下車してください!
Knuthは序文で彼の推論を議論します。ほんの一部を引用します。
... ALGOLやFORTRANなどの代数言語を使用するか、この目的のために機械指向言語を使用するかを決定する必要がありました。おそらく今日のコンピューターの専門家の多くは、機械指向言語を使用するという私の決定に同意しませんが、次の理由から、これが間違いなく正しい選択であると確信しました。
- 代数言語は、ここで検討する非数値問題よりも数値問題に適しています。[...]
- ...機械指向の言語で記述することにより、プログラマははるかに効率的な方法を使用する傾向があります。現実にずっと近い。
- 私たちが必要とするプログラムは、いくつかの例外を除き、すべてかなり短いです...
- コンピューターにさりげなく興味を持っている人は、機械語をよく学ばなければなりません...
- とにかくいくつかの機械語が必要になります...
彼は直接それを指摘していませんが、ALGOLとFORTRANについての彼の言及は、彼が避けた別の問題を指していると思います。彼がAlgolを選択したと仮定しましょう(とにかくFortranよりも非数値プログラムに適していることは明らかです)。Algolはおそらく、今日のプログラマーのほとんどにとって、彼が選択したアセンブリ言語よりもさらに外国語であると推測します。
第3版では、彼はMIXを再設計して最新のプロセッサにより密接に適合させ、コードを書き直さなければなりませんでした。しかし、彼がより高いレベルの言語を使用していれば、書き直しはかなり大きくなったはずであり、彼が与えたすべての理由も同様に残るだろうと思います。
Knuthは彼の理論的根拠も更新しました。
機械語があるのはなぜですか?
多くの読者は、「Knuthがなぜ高レベルのプログラミング言語に固執するのではなく、別のマシンにMIXを置き換えるのですか?最近ではほとんど誰もアセンブラを使用していません」
そのような人々は彼らの意見を受ける権利があり、彼らは私の本の機械語部分を読むことを気にする必要はありません。しかし、1960年代初期に書かれた第1巻の序文で述べた機械語の理由は、今日でも有効です。
- 私の本の主な目標の1つは、単にそれらがどのように適用されるかを示すことではなく、高レベルの構造が実際にマシンに実装される方法を示すことです。コルーチンリンケージ、ツリー構造、乱数生成、高精度演算、基数変換、データのパッキング、組み合わせ検索、再帰などをゼロから説明します。
- 私の本で必要なプログラムは一般的に非常に短いため、その主要なポイントを簡単に把握できます。
- コンピュータにさりげなく興味を持っている人は、基礎となるハードウェアがどのようなものであるかを少なくともある程度知っている必要があります。そうでなければ、彼らが書くプログラムはかなり奇妙になります。
- 私が説明する多くのソフトウェアプログラムの出力として、機械語はどんな場合でも必要です。
- 機械語でソートおよび検索するためのアルゴリズムなどの基本的な方法を表現することにより、キャッシュとRAMサイズおよびその他のハードウェア特性(メモリ速度、パイプライン、複数の問題、ルックアサイドバッファー、キャッシュブロックのサイズ、など)異なるスキームを比較する場合。
さらに、高級言語を使用した場合、どの言語を使用する必要がありますか?1960年代には、おそらくAlgol Wを選択したでしょう。1970年代には、Pascalを使用して本を書き直さなければなりませんでした。1980年代には、すべてをCに変更していたはずです。1990年代には、C ++に切り替えてから、おそらくJavaに切り替える必要がありました。2000年代には、さらに別の言語が間違いなくde rigueurになるでしょう。言語が流行になったり流行から外れたりするにつれて、私は自分の本を書き直す時間を買う余裕がありません。言語は私の本のポイントではなく、むしろあなたの好きな言語でできることです。私の本は時代を超越した真実に焦点を当てています。
したがって、TAOCPの高レベル言語として英語を使い続け、マシンが実際に計算する方法を示すために低レベル言語を使い続けます。すでに流行の言語を使用してプラグイン方式でパッケージ化されているアルゴリズムのみを見たい読者は、他の人の本を買うべきです。
良いニュースは、RISCマシンのデザインがすっきりしている場合、RISCマシンのプログラミングは快適でシンプルなことです。だから私は、要点から気を散らす難解で面倒な小さな詳細にこだわる必要はない。この点で、MMIXはMIXよりも大幅に優れています。