![見出し画像](https://assets.st-note.com/production/uploads/images/173520330/rectangle_large_type_2_2743b569cd39a719c636701c9ef78c21.jpeg?width=1200)
コンピュータシステムの理論と実装 その3
コンピュータシステムの理論と実装 読了
一応・・・ね。。
本書の特徴である、実際に手を動かしてみて理解するっていうコンセプトガン無視で途中から目を通すだけになってしまった
とはいえ学びもあったよ
01の世界でNAND回路などのシンプルな仕組みを組み合わせて、複雑な処理を高速に動かせる状態のコンピュータって改めてすごいってことを知った
こういうの考案して作り上げた人々ほんとすごい
抽象化
シンプルな仕組みから複雑なものを作るっていう話
シンプルな部品をつくて、それを使って少し複雑なことをできるようにして、さらにそれを使ってさらに複雑なことをできるように・・・っていう世界。ソフトウェア開発でも同じく大事よね
抽象化する際には、抽象化されたものを使う人は実装の詳細は知らなくても使える状態
これもソフトウェア開発でも同じよね
私はユニットテストとかが真っ先に頭に浮かんで、ユニットテスト書くときに実装のテストしちゃうとあかん ってのは肝に銘じていて、そこに通づる物がありそう
実装が抽象側に漏れ出すというか、せっかく抽象化してるのに・・・という。インスタンス変数を公開しちゃうとかも似た話かも
VM(バーチャルマシン)というワードの罠
バーチャルマシンと聞くと、私はVMWareを想起しちゃう人なんですが、本書ではそこのレイヤーの話ではなかった
あくまで高級言語をコンパイルした結果である中間言語を解釈できるものが本書で言うVM
だからなんだって話ではありますが、あんまり意識してこなかったので、ほーそうかってなりました
Java動かすときのJVMもJava Virtual Machine の略だってことを知った
KotlinとかScalaがJavaと同じ環境で動くというのも、それぞれの言語のコンパイラがKotlinもScalaもJavaと同じ中間言語にコンパイルしてくれるからってことで納得
CPUアーキテクチャの違い
本業の方でもCPUアーキテクチャ事にMySQLをコンパイルするとかしないとかそういう話があったりしますが、なんか違うんだろうけど・・・くらいでした
とはいえ、超詳しくなったわけじゃないんですが、CPUアーキテクチャ毎に機械語と回路のマッピングが違うからCPUアーキテクチャごとにコンパイル(翻訳)してあげる必要があるってことがわかった
CPU アーキテクチャA が 地球人、CPU アーキテクチャB が火星人 だとすると、高級言語で書かれたコードを、地球語に翻訳(コンパイル)、火星語に翻訳 ってのがそれぞれ必要みたいな話
アセンブリとアセンブラ
アセンブリは機械語に1対1で対応する低水準プログラミング言語
まだ人間が読める
アセンブラはアセンブリを機械語(01の世界)に変換するやつ
Assemblyっていう「組み立て」っていう単語が元になったらしい