書評☆2 CPUの創りかた | くだけた文体で中途半端な解説のため,理解に電子回路の知識が必要

概要

Amazon.co.jpでの評価がかなり高かったので注目していた。しかし,期待外れだった。

書名通り,簡単なCPUの作り方を解説している。ただし,内容はかなり人を選ぶ。電子回路を使ってCPUを組む都合,電子部品や電子回路の知識を要求する。

本書内で,基礎的なことも解説しているように見える。しかし,全体的に中途半端でこの説明では,電子回路の勉強をしていないと理解は難しいだろう。

あまり内容を固くしたくないのか,くだけた文体で書かれている。これをどう捉えるかは読者によるが,自分にとっては読みにくくて,解説も中途半端に感じたので,合わなかった。

書籍の冒頭では,実際に電子回路を組むというよりは,読んで作りを理解することが,参考になるというようなことが書いてあった。しかし,これを読むだけで理解するというのはハードルが高すぎる。

結論

自分で実際に電子回路でCPUを組むというところが興味深いテーマだった。Amazon.co.jp上での評価も高かったので期待していた。しかし,いかんせん読者を選ぶ本だった。

電子回路の知識がない人,電子回路を組んだことがない人は本書の内容をたぶん理解できない。Amazon.co.jpで過大評価されていると感じた。

CPUについて勉強したければ,他書を強く薦める。

パーマリンク: https://book.senooken.jp/post/2018/12/07/

書評☆4 プログラムはなぜ動くのか 第2版 | CPUやプログラムの動作がわかりやすく,できれば早く読みたかった

概要

この本は,「矢沢久雄セレクション アルゴリズム&デザインパターン」で存在を知り,気になったので読んだ。

書名通り,プログラムが動作する仕組みを解説している。具体的には,以下のような項目について解説されている。

  • CPUの動作内容
  • 2進数による演算
  • 浮動小数点の扱い
  • メモリーの仕組み
  • メモリーとディスク
  • データ圧縮アルゴリズム
  • アセンブリ言語
  • ハードウェアの制御

IPAの情報処理技術者試験などでそれなりに情報の勉強をしていたつもりだが,この本で書かれている内容はあまり知らなかった。

普通にプログラミングの勉強をしていたら,学ぶことはないが,しっておくことでプログラミングでも活かせることが多かった。できれば,もっと早くに読んでおきたかった。

参考

特に有用だったのは,以下の章だ。

  • 第1章 プログラマにとってCPUとは何か
  • 第10章 アセンブリ言語からプログラムの本当の姿を知る

第1章では,コンピューターの演算を担当するCPUの動作について解説している。

どういうレジスターがあって,条件分岐や繰り返し,比較,関数呼び出しをどう実現しているのかを解説している。

第10章では,C言語のソースコードをアセンブリに変換して,一行一行機械語との対応を示している。

関数呼び出しに,スタックを使って,実行前のアドレスに移動したり,スタックを使うため,関数内の変数はスコープを持つなど解説している。グローバル変数とローカル変数のスコープがなぜ違うのかという理由を,メモリー上に格納される領域から理解できるようになった。

結論

CPUやアセンブリ言語,機械語という視点から,プログラムがどういうしくみで動作しているのかをわかりやすく解説していた。

こういう情報はなかなか触れる機会がない。できれば,プログラミングを学ぶ最初の方の段階で触れておくと,あとあと良いと思った。

個人的には,もう少し詳しい内容が欲しくなった。アセンブリ言語についての知識があると,プログラミング言語の仕組みの理解が深まるように感じたので,アセンブリ言語についてもう少し勉強しても良いと感じた。

パーマリンク: https://book.senooken.jp/post/2018/11/14/

書評☆2 大熱血! アセンブラ入門 | 1100ページもの超大ボリュームで多数のプロセッサー向けアセンブリのコードリーディング

概要

アセンブラ (言語) を気負わずに読み物のようによんでみようという趣旨で,50種類にも及ぶ多数のアセンブラを掲載している。

最初はかなり簡単で初歩的なところから,始まり徐々にアセンブラの全体像が見えるようになっている。

驚かされるのは書籍の分厚さだ。 1100ページ もの長大な文量となっており,通勤中の読書など持ち運び諦めたほうがいい。
また,あまりにも量が多すぎるので,最初の100-200ページまではちゃんと読んでいたがそれ以降は読む気が失くなってしまった。

そして肝心の内容だが,ひたすらにいろいろなアセンブラを読んでみるという内容となっており,ある意味単調となっている。
同じような内容でも,アーキテクチャーが変われば変わるということを示していると思うのだが,読む側としては味気なかった。

また,書籍の趣旨にもあるとおり,多数のアセンブラを気負わずに読むということで,リファレンスとしても使いにくくなっている。

アセンブリを学ぶという目的には合わないと思った。これなら,まだ「プログラムはなぜ動くのか 第2版」のほうが参考になる。

結論

アセンブラがどんなものかと思って借りた。この本は出版が2017年と比較的新しくて興味を持って読んだ。

しかし,文量が多すぎであり,しかも内容があくまで読み物という体制をとっているので,リファレンスとしても使いにくく,勉強のための参考書としてはあまり役に立たないように感じた。

本書の趣旨通り,アセンブラが好きで読み物として,いろんなアーキテクチャーのアセンブラがどうなっているのか知りたい人が読むと良いだろうと思った。

パーマリンク: https://book.senooken.jp/post/2018/07/28/

書評☆3 まつもとゆきひろ 言語のしくみ | yaccやC言語を使った具体的で意味のあるプログラミング言語の実装手順

概要

  • 書名: まつもとゆきひろ 言語のしくみ
  • 副題:
  • 著者: まつもと ゆきひろ
  • 出版日: 2016-12-27
  • 読了日: 2018-07-05
  • 評価: ☆3
  • パーマリンク: https://book.senooken.jp/post/2018/07/05/

評価

日経Linux 2014年4月号から2016年12月号まで連載された「作りながら学ぶプログラミング言語」という記事をまとめて加筆・編集された内容となっている。

プログラミング言語を作るという書籍は既にいくつもあるが,それらは教科書的な内容がほとんどであり,現実に役に立つような発展的な内容が書かれているものはほとんどない。また,実際に世界で広く使われているプログラミング言語の開発経験者により,デザインの仕方を語られた本自体が少ない。その時点で,この本は希少性が高い。

プログラミング言語の開発にはそんなに興味はないが,内部的にどういうことを考えてどうやって作られているかというのには興味があったので読んだ。

言語設計の部分はけっこう小難しくてあまり理解できなかったが,以下のように参考になる箇所もあった。

  • 並行プログラミングではどういうことを気にしないといけないのか
  • オブジェクト指向での継承パターンの選択
  • 構文解析ソフトyaccの使い方
  • C言語での各種具体的な実装方法

引用

p. 004: はじめに

どのように言語をデザインすべきか経験から語れる人など、そうはいないのです。


数少ない例外としては、C++設計者であるBjarne Stroustrup氏による「The Design and Evolustion of C++」(邦題「C++の設計と進化」、ソフトバンクパブリッシング)があります。この本を読めばC++がなぜこのようになっているのか、何を目指していたのかが分かる貴重な書籍です。

C++の設計について書かれている本があることを知らなかったので参考になった。いずれ読んでみたい。

p. 036: 1-3 バーチャルマシン

【シンボル】 言語処理系が内部でメソッド名などの識別に使っている値で、任意の文字列に対して異なった値が割り当てられる。

gdbなどでシンボルという単語を見かけるが意味がわからなかった。この解説で意味がわかった。

p. 056: 単純継承の問題

ところが多重継承でクラス関係がDAG (Directed Acyclic Graph) 構造となる場には、探索順序は一意には定まりません。

単一継承の問題とは、継承のラインを子得てメソッドなどのクラス属性を共有する方法がないことです。共通のスーパークラスが存在しない場合、属性を共有できず、コピーするしかありません。

オブジェクト指向型の単純継承と多重継承で継承時に発生する問題を知れた。

p. 223: 4-2 基本データ構造

ユニオンは同じメモリー領域に対する複数の方での解釈を定義するものです。


ユニオンはあまり頻繁に用いられるものではないので、そのようなものをなんに使うのか疑問に持つ人も多いでしょう。ユニオンの 使われ方はいくつかありますが、典型的なものは以下の3種類です。

  • 最大サイズの確保
  • 条件付き構造体定義
  • メモリー解釈の操作

C言語のunionは使いどころがよくわからなかったのだが,使うタイミングが少し良くわかった。

p. 293: 5-3 CSV処理機能

最も都合が良かったものが「semitrivial/csv_parser」というリポジトリーでした。グローバル変数を使っておらず、非常にシンプルで無駄なことをしていません。

実際にGitHubからC言語のCSVパーサーを探して,組み込む手順について解説していて参考になった。

p. 304: 時刻の表現方法

Linuxを含めた多くのUNIXシステムでは、1970年1月1日00:00 (UTC) をエポックとします。


例えば、現在時刻を取り出すシステムコールtime(2) は、以下のようなAPIです。


しかし、いつも秒単位で話が済むとは限らず、1秒以下の情報を取り出す必要があるかもしれません。UNIXでもそう思ったのか、より新しいシステムコールgettimeofday(2) が追加されています。こちらは秒以下の時刻がマイクロ秒単位で与えられます。


その後、さらにさらに細かい時刻分解能が必要なこともありえると考えたのか、POSIX.1-2008ではより新しいシステムコールclock_gettime(2) が追加されています。


MacOSではいまだにclock_gettime()が未実装なのだそうです。

C言語での時刻の取得方法について参考になった。

p. 339: 5-7 ストリームグラフ

CUIはキャラクターで画面表示を行うので、もう何十年も使われてきているターミナルの中で動作できます。今後もターミナルがなくなることは心配しなくてよさそうです。今回はこちらのCUIを使ってグラフを表示する機能を作ります。

そこで参考にできるツールはないかといろいろ探したところ、stag *1 (https://github.com/seenaburns/stag/) というツールを見つけました。

stagは標準入力から数値データを読み込み、それに対して棒グラフを出力するツールです。

CUIでのグラフ作成ツールを知れた。

結論

プログラミング言語を自分で作ることというのはあまりないかもしれない。しかし,内部でどういうしくみで,何に気を払って実装されているのか,しっておくと他のことにも役に立つように感じた。

技術者の教養として読むのはいいと思った。

書評☆2 プログラミング道への招待 | 足し算による引き算の定義

概要

プログラミング道とは,「プログラミングを楽しむ道」のことだ。

プログラミング生活六十余年の著者により,大学初年生,プログラミングに興味のある高校生,プログラムが動く仕組みを独習したい大人や初心を忘れた(?)プログラマを対象とした「プログラミングへの招待」のつもりで書かれている。

プログラミングの読み物となっている。個人的には,アルゴリズムとかCPUの仕組みなどコンピューターの基本的なところの理解を深めたいなと思って読んでみた。しかし,目的とは合っていなかった。

CPUとか機械語のことも一応触れられているが,あまり深堀はされていない。初心者向けに書かれているのでしかたないかと思い,初心者の視点に立って読んでみても,いまいちだった。

初心者向けに書いてあるということだが,その割にはけっこう細かい内容が書いてある。アルゴリズムだとか,コンピューターの原理だとか。正直この内容を初心者に読ましても,退屈するのではないかと感じた。

参考

p. 107: 足し算しかないのに引き算に挑戦
y←x-1≡[u←0;v←0;loop x do u←v; v←v+1 end; y←u]

z←x-y≡[w←x; for y do w←w-1 end; z←w]

ホワイル (while) 言語という文 (statement) が5種類しか存在しない極めてシンプルなプログラミング言語で,足し算だけで引き算を実現する方法を解説していた。

今までそのようなことを考えたことがなかったので,この発想には驚いた。

p. 139: 日本語と英語の違い?

英語では,xとyを足すことは

add x and y

と書きます.しかし,日本語では

xとyを足す

と書きます.つまり,演算を表す動詞が最後に来るのです*11。

*11 引数を並べてから,関数(演算)名を書く方法を後置記法(逆ポーランド記法)と言います.日本語に近いですね。後置記法に基づいた電卓やプログラミング言語があります.これに対して,x+yは演算が真中に書かれるので中置記法,add(x,y)は演算が前に来るので前置記法(ポーランド記法)と呼びます.これは英語に近い.

中置記法という概念は知らなかった。また,英語がポーランド記法,日本語が逆ポーランド記法に近いという見方も新しかった。

結論

内容が中途半端であり,プログラムの根本的なところの理解にもならず,初心者にとっても中途半端に難しいので,プログラミングを楽しむどころか,嫌いになってしまうのではないかと心配になった。

年寄りが自己満足のために書いたような印象を持ったので,どちらの目的であっても他書をあたったほうがよいと感じた。

パーマリンク: https://book.senooken.jp/post/2018/07/03/