---
type: article
title: 機械語論争 意見整理
timestamp: 2007-09-19T00:00:00Z
profile: sorane-okf/0.1
noFontEmbedding: true
---

# 機械語論争 意見整理

<p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%ED%C7%FA">誤爆</a>するつもりはなかったのだが今のままでは気まずいので、<a href="http://blog.hatena.ne.jp/shi3z/">id:shi3z</a>のところへ飯を食いに行く前に改めて自分の考えを整理してみる。</p>
<blockquote cite="http://d.hatena.ne.jp/shi3z/20070916" title="shi3zの日記 - 僕とマシン語"><p><a href="http://blog.hatena.ne.jp/mkusunok/">id:mkusunok</a>までもが<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%B7%A5%F3%B8%EC">マシン語</a>論争に入ってくるとは思わなんだ。来週ご飯食べる約束した矢先にこれだ。</p>
</blockquote>

<ul>
<li>僕は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>ができなくても困っていない。それは僕が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>ではないからである。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>であれば<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>ができた方がいいに決まっているし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>でなくてもITに関わる人間は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>という世界があることは知っておいて損はない。</li>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/x86">x86</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>がプロセサ内部でMicro-<a class="keyword" href="http://d.hatena.ne.jp/keyword/OPS">OPS</a>やFused-<a class="keyword" href="http://d.hatena.ne.jp/keyword/OPS">OPS</a>に変換され、逐次実行されていないからといって、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>を勉強しても意味がないということにはならない。現代のソフトウェアスタックは良くも悪くも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>に対する抽象の積み重ねであって、プロセサの内部命令まで意識してコードを書く機会は殆どない。</li>
<li>命令の実行順を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>が予期できないのは<a class="keyword" href="http://d.hatena.ne.jp/keyword/CISC">CISC</a>も<a class="keyword" href="http://d.hatena.ne.jp/keyword/RISC">RISC</a>も同様である。<a class="keyword" href="http://d.hatena.ne.jp/keyword/VLIW">VLIW</a>やEPICなら命令の実行順を指図できるが、あまりに複雑すぎて人手で最適化したから高速化できるというものでもない。</li>
<li>ポインタを正しく理解している<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>、概ねスレッドセーフなコードを書く<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>までブレークダウンして動作を想像できる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>は、泣いても笑っても割合として非常に少ない。あなたの周りにそういう<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>がいたら、それはとても幸せなことだ。</li>
</ul><p>ここから先は微妙に補足</p>

<ul>
<li>プラットフォームが何年も固定されているゲームコンソールと異なり、頻繁に内部命令やキャッシュ容量や高速化技術が進化しているPCやサーバーの世界では、なかなか<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>レベルで最適化する機会はない。けれどもこれは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>を勉強しないでいい理由にはならない。</li>
<li>多くのLLはCで書かれているしCは結局のところ高級<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%BB%A5%F3%A5%D6%A5%E9">アセンブラ</a>だから。大事なことは、何をどの段階でどう抽象しているかを把握することで、そのために<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>を書く機会がない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>であっても、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>を学ぶのは有用である。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>ならデバッガを立ち上げる機会があるはずだし、であれば<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%BB%A5%F3%A5%D6%A5%E9">アセンブラ</a>を書く機会こそなくとも、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>を読むチャンスはいくらでもあるだろう。</li>
<li>裏を返せばプロセッサの並列実行技術や最適化<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%E9">コンパイラ</a>の設計とかに興味を持っている訳でなければ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B8%EC">機械語</a>よりも低レベルなプロセッサの内部命令にまで興味を持つ必要はない。あまりに動く標的だし、可視化することが難しいから。</li>
<li>いまどきのプロセッサはどれもCで書かれたコードを早く書くように最適化されているが、昔は<a class="keyword" href="http://d.hatena.ne.jp/keyword/iAPX432">iAPX432</a>のようにAdaに最適化されたプロセッサや、Symbolicsのように<a class="keyword" href="http://d.hatena.ne.jp/keyword/LISP">LISP</a>に最適化されたプロセッサもあった。</li>
<li>かつて<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> OSが失敗したのはデバドラまで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a>で書こうとすると性能が出ないことが原因だったらしいが、OSの最適化技術が経路依存的に<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%B8%C0%B8%EC">C言語</a>チックになってしまったからで技術的必然はない。ただ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>も<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>も<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>も、Cで書かれている程度に<a class="keyword" href="http://d.hatena.ne.jp/keyword/UNIX">UNIX</a>の末裔だ。80年代半ばまでコンピュータの世界にはもっと多様性があったし、やっぱり<a class="keyword" href="http://d.hatena.ne.jp/keyword/Lisp">Lisp</a>とか<a class="keyword" href="http://d.hatena.ne.jp/keyword/Prolog">Prolog</a>とかを知ると世界は拡がるのではないか。それらを仕事で使う機会があるかどうかとは別にして。</li>
<li>世のOSが<a class="keyword" href="http://d.hatena.ne.jp/keyword/UNIX">UNIX</a>の末裔ばかりで埋め尽くされたのは、せいぜいこの20年の傾向である。チップの<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%B8%C0%B8%EC">C言語</a>設計とか仮想化とか形式検証とか、最近のいくつかの技術トレンドは、そろそろ<a class="keyword" href="http://d.hatena.ne.jp/keyword/UNIX">UNIX</a>の末裔ばかりではない世界が開けてきそうなことを予感させる。</li>
</ul>
