酔眼漂流読書日記

本と音楽と酒場と言葉

CPUの仕組みに迫る『CODE コードから見たコンピュータのからくり』

 

2024年2月に新しい訳書が出ます。

本書は2003年に出版された「CODE: コードから見たコンピュータのからくり」の第2版です。

 

第1版ではコード化(符号化)の意義と意味を説明し、0と1を使った簡単な計算の仕組みを説明したところで終わりでしたが、今回の第2版は積み残した宿題に著者は挑戦しています。すなわちコンピュータの心臓部である CPU (中央演算装置)の仕組みに切り込んでいるのです。

よく「コンピュータは0と1で動いている」と言われますが、それはどういう意味なのでしょう。その奥底には単純ないくつかの部品が置かれています。

たとえば以下に示したのはANDゲートという部品です

ANDゲートとその動作(上記書籍、102ページより引用)

左側が入力(2つある)で右側が出力を示しています。0または1の入力があると、0または1の出力が得られる様子を示していますが AND ゲートという名前が示しているように、このゲートは「2つの入力が同時に1になったときだけ出力が1になる」という動作をします(赤い色がついているのが1を示している)。

またORゲートというものもあり、この場合は「2つの入力のどちらかが1になったときに出力が1になる」という動作をします。

詳しくは本書をみて欲しいのですが、実際のコンピュータはこうした論理ゲート(AND、OR以外にも出てきます)が大量に組み合わされて構成されています。

さて、なぜこうした組み合わせだけで「計算」ができるのか。それどころかなぜ「記憶」ができるのか。そもそもその「計算」の指示(つまりプログラムの実行)がなぜこうした「論理ゲートの組み合わせ」だけで実現できるのか。

本書は泥臭くこの論理ゲートの組み合わせを積み上げながら、かつて実用的に使われていたCPU(インテル8080)のサブセットがどのように構成されているかを追いかけて行きます。

世の中にはJavaPythonC#Lisp、様々な「高級」プログラミング言語がありますが、いわゆるフォン・ノイマン型のアーキテクチャ(これも本書を参照)を利用する限り最後は0,1の「マシン語」に還元され、その実行がここに示したような論理ゲートによって支えられているのです。

非常にハードな内容ですが、本書は「教科書」ではなくあくまでも「読み物」です。よって演習問題はありませんし、途中少しわからなくなっても大丈夫です。ストーリーに沿って本書を読み切れば、現代的なコンピュータの大元の仕組みが「わかったような気に」なります。

コンピュータの性能は恐ろしく上がりましたが、最後に行われている動作は(少なくとも原理的には)本書で示されているものと同じなのです。

普通にアプリケーションのプログラミングを勉強しているだけでは、あるいは普通のプログラム解説本を読んでいるだけでは、最後はCPUがよろしくやってくれるところで終わりですが、本書を読むとそのよろしくやってもらっているCPUの中身が一段掘り下げられて、それがハードウェアとどのように絡み合っているかを知ることができます。

論理と物理の境目で何が起きているのかを知りたい方にはピッタリの書籍です。



 

プロジェクト・ヘイル・メアリー

 

 

「火星の人〔新版〕 上 (ハヤカワ文庫SF)」で知られるアンディ・ウィアー氏の翻訳ものです。「火星の人」同様に、限られたリソースを与えられた主人公が宇宙で奮闘する物語ですが、変わった形の「ファーストコンタクト」物でもあります。

最初はとにかくどうやってサバイバルして行くかから始まり、やがて最初は記憶喪失状態だった主人公が自らのミッションを思い出し、その解決に突き進む苦闘。そこに登場する異星人。

様々な困難を乗り越えて、これで解決かと思ったところからのどんでん返し。途中の理屈は追えずとも、ドラマとして面白い仕上がりになっています。

バッドエンドではありませんが、本作の終わり方にはいろいろ議論もあるでしょう。映画化が進んでいるようですが、20世紀なら確実に終わり方がいわゆる「ハッピーエンド」にまとめられてしまうでしょうね(笑)。

「AIのべりすと」で遊ぶ

AI を使った文章生成を試してみました。

ai-novel.com

とある記事で紹介されていた文章ジェネレーター「AIのべりすと」で少し遊んでみました ... まだまだお遊びレベル(アルファ版ですしね)とはいえ、結構もっともらしい出力を出してくると思いました。

仕組みとしては人間がプロンプトとして、適当な入力を行うと、その続きをAIが勝手に書いてくれるというものです。

この投稿の最後に示した文章は冒頭の

夜道を歩いていると、誰かにつけられているような気がすることがある。たとえそれが自分の足音がただ反響しているものだとしても、せきたてられるような

までを私が入力したあと、AIが生成した文章です。以降ボタンを押すたびに2〜3文ずつ文章が生成されて行きます。途中で

そのときまた別の男が近づいてきた、どうやらそいつも僕と同じ姿をしているように見える。そいつは

という部分を私が追加したのですが、その内容を受けてジェネレーターが文章を生成していることがわかります。

その2箇所を書いたことを除いて、一切人間(私)は手を入れていません。

全体を通してみると「一ノ瀬弓子クリスティーナ」が飛び抜けて変ですが、その他の部分はなんとなく話が続いていますね(笑)。まあどのフレーズもどこかで聞いたような言い回しばかりだとは思いますけど。この文体 ... ラノベ文体とでも言うのでしょうか。

まあ文体はパラメータをいじっていろいろ変えられるようですね。他にもいろいろな遊び方ができるようです。

今回のものはすべて無料版で行っていますが、有料版もあってさらにパラメータを調整できるようです(月額いくらかは調べていません)。

なおこのシステムを使って生成された文章に対して提供元は一切著作権を主張しない(当然ながら一切の責任も持たない)と言っていますので、その意味では安心して使うことができます。

詳しくはこちらをどうぞ

AIのべりすと - 利用規約


===以下生成サンプル===

夜道を歩いていると、誰かにつけられているような気がすることがある。たとえそれが自分の足音がただ反響しているものだとしても、せきたてられるような不安感が消えないことがあるのだ。
今だってそうだった。だから僕は歩く速度を落とさず、むしろ少し早めた。しかしそれでもなお、背後から誰かの視線を感じるのだ。
僕をつけているのは誰だ? 実はその答えはわかっていた。
僕の後ろから、足音も立てずに追いかけてくる人影があるからだ。
それは――僕自身だった。
僕はゆっくりと振り返った。そこにはやはり、僕の姿があった。
ただし服装は違う。制服ではなく、黒ずくめの服に身を包んでいる。そして腰には日本刀を下げていた。
「…………」
僕は黙って相手を見つめ返した。するともう一人の僕は言った。
「久しぶりだな、一ノ瀬弓子クリスティーナよ」
「お前は誰だ!?」
僕は訊ねた。もう一人の僕はニヤリと笑うと言った。
「私はこの世で最も優れた魔術師であり剣士である男、すなわち剣崎龍之介様だ!」
「そんなことは知っている! 私が知りたいのは何者なのかということだ!」
「何者かだと?」
剣崎と名乗る男はフンッと鼻で笑った。
「私の正体などどうでもいいだろう。重要なのは貴様の命運が尽きようとしているということだけだ」
「命運だと?」
「そうだ。貴様の命はあと三日しかない。それを理解したくなければすぐにここから立ち去ることだ」「何を言っているんだ? ふざけるんじゃないぞ」
僕は一歩前に出た。だがそこで足を止めた。それ以上前に踏み出せば、目の前にいるもう一人の自分を傷つけてしまうと思ったからだ。
「やめておけ。貴様に勝ち目はない」
剣崎は刀に手をかけた。次の瞬間、抜刀した。
僕は反射的に身構えたが、何も起きなかった。ただ刀を振り抜いただけのように見えた。しかし違った。
僕の胸元に小さな傷ができていた。そこから血が流れ出している。痛みはなかった。まるで薄い紙きれでも切り裂いたかのように、肌の表面だけを切られてしまったようだ。
「私の刃に触れたものは何でも切断できる」
剣崎は不敵に笑って言った。
「さあ、これでわかったか? 無駄な抵抗はするな。貴様に残された時間はもう少ない」「……」
僕は黙り込んだまま考えた。確かにこいつの言う通りかもしれない。このままでは三日後に死ぬらしい。そうなれば当然、美鎖さんも死んでしまうことになる。いや、そもそも美鎖さんの身に危険が迫っているかどうかさえわからないのだ。
もしこれが嘘なら、僕はとんでもない大馬鹿野郎ということになる。けれど、もしも真実ならば……
「……一つだけ教えてくれないか?」
「なんだ?」
「どうしておまえは俺と同じ姿をしているんだ?」
「同じ姿ではない。鏡を見ているようなものだ」
そのときまた別の男が近づいてきた、どうやらそいつも僕と同じ姿をしているように見える。そいつは剣崎の隣に立つと、腕を組んで偉そうな態度で口を開いた。
「それは違うぜ。オレたちは二人で一人だ」
「どういう意味だ?」
「そのままの意味だよ。まあ、こっちの世界じゃオレたちのことを知っている奴はほとんどいないけどな」「こっちの世界とはどこのことなのだ?」
「質問が多いな。いちいち答えるのも面倒くさい」
もう一人の僕はめんどくさそうに頭をかいた。それから僕を見て言った。
「いいかよく聞けよ。お前たちが住んでいる世界とは別の次元にある場所のことをこっちの世界っていうんだよ」
「別の世界だって?」
「ああ。オレたちみたいな存在はこの世界にたくさんいる。だけど、普通の人間どもが知っているのはそのごく一部だ。だからオレたちも普通の姿をしてるわけだ」
「なるほどな」

"went" の数奇な運命

go - went - gone

Where She Went「行く」を意味する "go" は不規則活用する動詞としても有名です。

現在型、過去形、過去分詞が

go - went - gone

と変化します。go と gone はなんとなく繋がりがあるような気がしますが、真ん中の went が全く関係ないような気がします。

よくわからないときは辞書を引いてみましょう。

まずは素直に went を引いてみます。

まず『エースクラウン英和辞典』(第3版)

f:id:ardbeg1958:20210624031416p:plain

あっさりしています。新しい情報は得られませんでした。

出版社の説明によると

dictionary.sanseido-publ.co.jp

と書かれていて、「初級向け英和辞典の絶対エース」とあるように、初心者向けの内容になっています。最初の勉強には役立ちそうですが、今回の探求には向いていません。

ということでもう少し大きな辞書を引いてみましょう。

これは手元にある『研究社新英和大辞典』(第6版)の一部です。

f:id:ardbeg1958:20210624030903p:plain

[1] の内容は、エースクラウンと同じで「go の過去形」と言っているだけですが、[2] になにやら新しい情報が増えています。

「wend の過去形、過去分詞」という部分ですね。さらにその下には「もとは wend の過去形だったが 15世紀から go の過去形として用いられる」という説明があります。

どうやら go の過去形は昔は went ではないものだったのが、15世紀ころ本来は wend の過去形だった went で置き換えられてしまったようです。

とすると次は wend とは何かです。

段々語源に近付いているので、ここでは Wiktionary を引いてみます。

en.wiktionary.org

ここを見ると、語源について以下のような説明が書かれています。

Etymology[edit]

From Middle English wenden, from Old English wendan (to turn, direct, wend one’s way, go, return, change, alter, vary, restore, happen, convert, translate), from Proto-Germanic *wandijaną (to turn), causative of Proto-Germanic *windaną (to wind), from Proto-Indo-European *wendʰ- (to turn, wind, braid). Cognate with Dutch wenden (to turn)German wenden (to turn, reverse)Danish vende (to turn)Norwegian Bokmål vende (to turn)Norwegian Nynorsk venda (to turn)Swedish vända (to turn, turn over, veer, direct)Icelandic venda (to wend, turn, change)Gothic 𐍅𐌰𐌽𐌳𐌾𐌰𐌽 (wandjanto cause to turn). Related to wind (Etymology 2).

転じる、進む、戻る、変わる ... といった意味をもった "wenden" から派生して、それは 、祖インドヨーロピアン語族の "wendʰ- "から派生したと書いてあります。この "wendʰ- " は "wind" の語源でもあって、「風が吹く」「曲がる」といったような意味のようです(不思議な表記法ですね)。

en.wiktionary.org

ということで語源は「風が吹く」といったところかららしいのですが、 wend そのものの意味は(再び「研究社新英和大辞典」より)

f:id:ardbeg1958:20210624033758p:plain

「転じる、進む、行く」といったもののようです。

ここで気になる記述がありますね

f:id:ardbeg1958:20210624034101p:plain

という部分です。

これが何を意味しているかと言えば、上の方にもありましたが「いま wend の過去形は wended だが、昔は went だった」と書いてあるのです。

wend に対して went、こうした活用のパターンは実はたくさんあって

 send/sent, spend/spent, lend/lent, rend/rent, or blend/blent. 

といった組み合わせにも見ることができます。もともと wend はこうしたものの仲間だったのですね。

go に奪われた went 

ということで went は元々 wend の過去形、過去分詞形だったのが、go の過去形として奪われてしまったために、元々の wend が wend - wended - wended のように規則活用するようになってしまったようですね。

では went を奪う前の go の過去形はどうだったのかというと yede  とか yeed といったものだったようなのですが、そこをなぜ went が置き換えるようになったのかははっきりとしていないようです。

重要な単語であるがゆえに不規則な変化が起きてしまうのでしょうか。

 

 

【本】ダメな文章を達人の文章にする31の方法

簡潔でわかりやすい入門的文章読本

あるところで紹介されて読んでみました。こうした文章読本は色々出ていますが、具体例よりも「論」が長く効果が実感しにくいものが多いような偏見を持っています(すみません)。

もちろん「論」は大切ですので、そうした「論の多いもの」をじっくり腰を据えて読む価値もあると思います。

しかし基本忙しく、身近に文書添削をしてもらえる専門家もいない現代人には、簡潔ですぐにでも応用できる手法も必要です。そのようなときにはこの本の出番です。この本が良いと思った点は、文章を読みやすく、そしてわかりやすくするための具体的な手法を 31 の方法に分けて説明しているところです。

特に若い人なら自分の書く文章をすぐにでも改善できるヒントが沢山載せられていると思います。あと「あなたの書く文章はわかりにくい」と言われているひとにもおすすめできると思います。1時間もかからずに読めてしまうという点もお勧めポイントです(笑)。

書かれている内容は、文章の書き方に気をつけているひとなら一度はどこかで聞いたり、習ったりしたような気がするものかもしれません。しかしまとめて読み直して、そこに書かれた具体例(改善例)を読んだり、世の中の文章に当てはめてみると納得感があります。

Amazon のレビューをみると「基礎的過ぎる」「中高生向き」「初歩の初歩」「目次だけで十分」といった低レビューもあるのですが、あまりにもするすると読めてしまうのでそうした物足りなさを感じてしまうのかもしれません。まあ確かにこの書籍を読んだからといってすぐに「達人」にはならないと思いますのでタイトルは少し盛りすぎですね。