web-dev-qa-db-ja.com

アセンブリ言語とアルゴリズム言語(C、ALGOLなど)

通常、コンピュータサイエンスの論文では、PascalやC/C++に似た、ALGOLのような疑似言語でアルゴリズムが説明されています。

しかし、ドナルド・クヌースは彼自身のアセンブリ言語(MMIX)を使用しています。

ALGOLのような言語では表現できないが、非構造化アセンブリコードでは表現できるよく知られたアルゴリズムはありますか?コルーチンのように、多分?

1
Dennis Yurichev

クヌース自身が「TheArtofComputerProgramming」で答えを出していると思います。

彼は言う:

高水準言語は、コルーチンリンケージ、乱数生成、多倍長演算、およびメモリの効率的な使用に関連する多くの問題など、重要な低レベルの詳細を議論するには不十分です。

しかし、マシン指向の言語を使用するという決定は、おそらく次の事実によるものです。

新しい代数言語は5年ごとに流行し、時代遅れになっていますが、私は時代を超えた概念を強調しようとしています。

(TAOCPvol。1の序文)


さらに、高級言語を使用した場合、それはどの言語である必要がありますか? 1960年代には、おそらくALGOLWを選択したでしょう。 1970年代には、Pascalを使用して本を書き直す必要がありました。 1980年代には、私は確かにすべてをCに変更したでしょう。 1990年代には、C++に切り替えてから、おそらくJavaに切り替える必要がありました。 2000年代には、さらに別の言語は間違いなくde rigueurになります。言語が流行し、時代遅れになるにつれて、本を書き直す時間はありません。言語は私の本の要点ではありません。要点はむしろあなたが好きな言語でできることです。私の本は時代を超えた真実に焦点を当てています。


機械語で並べ替えや検索を行うためのアルゴリズムなどの基本的な方法を表現することで、キャッシュの影響やRAMサイズやその他のハードウェア特性(メモリ速度、異なるスキームを比較する場合のパイプライン化、複数の問題、ルックアサイドバッファ、キャッシュブロックのサイズなど)。

確かに'6以来、ALGOLのような言語のコルーチンには適切な表記法がありました。

...コルーチンリンケージは、初期のUNIVAC出版物で「プログラミングのヒント」としてすでに簡単に言及されていました[...] ALGOLのような言語でのコルーチンの適切な表記法がDahlandNygaardのSIMULAIで紹介されました[...]コルーチンのいくつかの優れた例(複製されたコルーチンを含む)は、Structured Programming [Dahl、Dijkstra、およびHoareによる]という本に記載されています。

(TAOCPvol。1、pp 229-230)

FORTRAN/ALGOLの高精度/多倍長ルーチンは言うまでもありません:

FORTRANプログラムで使用するための拡張精度サブルーチンは、B.I。 Blum(1965)[...]そしてM.TienariとV.SuokonautioによるALGOLでの使用[...]リンクされたメモリ割り当て技術を利用した無制限精度の整数の算術GEによってエレガントに導入されましたコリンズ[...]

(TAOCPvol。2、pg 279)

乱数生成についても同じです。C(TAOCPvol。2、pp 185-188)の例と、他の高級言語での演習([EX10] pg 193など)があります。

4
manlio