copy and destroy

catch and eat

日記の練習です。

『コンピュータの構成と設計』、C 言語のソートのコード(配列に収められている数値を昇順にソートする)をアセンブルする例題が出て来て、ソートのアルゴリズム、全然知らないから(アセンブラじゃなくて C 言語の方で)ハマっている。

sort 手続き

sort(int v[], int n)
{
	int i, j;
	for(i = 0; i < n; i = i + 1){
		for(j = i - 1; j >= 0 && v[j] > v[j + 1]; j = j - 1){
			swap(v, j);
		}
	}
}

swap 手続き

swap(int v[], int k)
{
	int temp;
	temp = v[k];
	v[k] = v[k +1 ];
	v[k + 1] = temp;
}


一晩たってみて、これはたぶん「挿入ソート」*1*2だと思うんだけど…

レジスタやスタックをどう使うのか、 そういう MIPS プロセッサの気持ちはわかるのに C 言語がわからない。アンバランス。

*1:挿入ソート - Wikipedia https://ja.wikipedia.org/wiki/%E6%8C%BF%E5%85%A5%E3%82%BD%E3%83%BC%E3%83%88

*2:「挿入ソートはリストの整列済みの部分に対して新たな要素を適切な位置に挿入することで整列を行うアルゴリズムです / 挿入ソート : アルゴリズム https://www.codereading.com/algo_and_ds/algo/insertion_sort.html

『コンピュータの構成と設計』進捗

日記の練習です。

『コンピュータの構成と設計』の写経なんですが、

https://copyanddestroy.hatenablog.com/entry/2025/07/25/165928

ページの履歴を見ると5月末から始めたっぽいのですが、本当にゆっくりと進めていてやっと全14節のうちの第8節まで来ました。メインイベントは「3.11 配列とポインタの対比」です。振り落とされないように進めます。

CODv2 第3章「命令:マシンの言葉」 - taizooo
gyazo.com

2匹の象の啓示、大雑把な合意と動くコード

日記の練習です。

2匹の象の啓示

タネンバウム『コンピュータネットワーク』第4版
第1章 序論 「1.4.4 OSI モデルとプロトコルの批評」図 1-23

gyazo.com

この話の前提は、「なぜ、標準 OSI モデルとそのプロトコルではなく、 TCP/IP モデルとそのプロトコルが選ばれたのか」というもの。4つの教訓を上げていてその最初の一つが「時期が悪かった」というテーマだった。そこで掲示されたグラフが「2匹の象の啓示」。

標準が設定される時期というものは標準が成功するかどうかに関して極めて重要である。 MIT の David Clark *1は、「2匹の象の啓示」と呼ぶ図のような標準化の理論を示している。

この図は、新しいテーマに対する活動の量を示している。テーマが最初に見出されたときには、議論、論文、会合といった形で突発的に研究活動が始まる。これが落ち着いてしばらくすると、企業がこのテーマを見出して何十億ドルもの投資の波がくる。

標準はこれら2匹の「象」のくぼみで書かれることが重要である。

標準が早く書かれすぎて研究がまだおわっていないと、テーマがまだよく理解されていないため、結果よくない標準となる。書かれるのが遅すぎると、多くの企業はさまざまな方法ですでに多くの投資を行っているため、標準は事実上無視される。

2匹の象の間が非常に短いと(皆が早く出発しようとしていると)標準を開発する人々は押しつぶされてしまう。

rough consensus and running code

https://en.wikipedia.org/wiki/David_D._Clark#Legacy

We reject: kings, presidents, and voting. We believe in: rough consensus and running code.

我々は王、大統領、そして投票を拒否する。我々は「大雑把な合意と動くコード」を信じる。

‘Rough Consensus and Running Code’ and the Internet-OSI Standards War | Andrew L. Russel (2006)

In 1999, law professor Lawrence Lessig declared that “rough consensus and runningcode” had broad significance as “a manifesto that will define our generation.” An examina-tion of the origins of this credo—coined by David Clark in 1992—illustrates some techni-cal, rhetorical, and philosophical differences between the Internet standards process and the competing ISO process.

Most participants in the Internet standards process today consider“rough consensus and running code” to be asuccinct and accurate description of the Internet standards process.

For historians,“rough consensus and running code” stands as a revealing depiction of the international poli-tics of computer internetworking in the last quarter of the 20th century, as well as a point of entry for investigating why contemporaries described the competition between the Internetand OSI as “the Internet religious war.”

1999年、ローレンス・レッシグ*2は、「大雑把な合意と動くコード」は「私たちの世代を定義するマニフェスト」として幅広い重要性を持っていると宣言しました。 1992年に David Clark が作成したこの信条の起源の試験は、インターネット標準プロセスと競合する ISO プロセスの間のいくつかの技術、修辞的、および哲学的な違いを示しています。

今日のインターネット標準プロセスのほとんどの参加者は、「大雑把な合意と動くコード」がインターネット標準プロセスの同性的かつ正確な説明であると考えています。

歴史家にとって、「大雑把な合意と動くコード」は、20世紀のコンピューター・インターネットワーキングの国際政治の明らかな描写と同様に、同時代の人々がインターネットと OSI の間の競争を「インターネットの宗教戦争」と表現した理由を調査するための参入点であると考えています。

COD 読書環境について

日記の練習です。

『コンピュータの構成と設計』の写経なんですが、 Cosense の1ページが長くなりすぎてて、過去に写経したところを参照するために同じページを2枚開いています。左が書き込む方で、右が検索、参照用です。いい加減、分割するべきですがちゃんと理解できていないのでどこで分ければいいかわかりません。

CODv2 第3章「命令:マシンの言葉」 - taizooo
gyazo.com

そして MIPS のレジスタは32ビットあるんですけど、頻繁に10進数と2進数の変換が出てくるので、計算機を常駐しています。

gyazo.com

キーワードが英語なので Google 翻訳も欠かせません。 C 言語ではオペランド? 定数? ですが、アセンブラでは immediate (既値)と呼ばれます。変数はメモリの中に置かれますが、既値は演算命令の中に置かれます。

論理リンク制御副層( LLC )とメディア・アクセス副層( MAC )

日記の練習です。

タネンバウム『コンピュータネットワーク』第4版、 ALOHA ネットワークに興味があって読み始めたので、いきなり途中の「第4章 メディア・アクセス副層」から読み始めたんだけど、

「4.3 イーサネット」の最後で論理リンク制御っていうのが出てきて、

gyazo.com

どうやらデータ・リンク層は、論理リンク制御副層( Logicl Link Control : LLC )とメディア・アクセス副層( Medium Access Control : MAC )の2階建てになっていて、上層のデータ・リンク層が2つのマシンが通信することの核心らしい。『第3章 データ・リンク層』、読まないわけには、いかないっぽい。

適当なところで切り上げるつもりだったんだけど、泥沼じゃん。


以下、リンクとか

LLM Is The New C

日記の練習です。

copyanddestroy.hatenablog.com

x.com

x.com

redsweater.com

chatgpt.com

焦点は抽象化の“段階”ではなく、その性質の違いにあります。

初期のプログラミングでは、人間がアセンブリを書くことで決定的に(=同じ入力に対して同じ出力が得られるように)機械を動かしていました。そこにコンパイラというレイヤーが加わっても、決定的に動くレイヤーが一段増えたに過ぎません。つまり、抽象度が上がっても「機械としての決定性」は保たれていた。

しかし、LLMがそこに入ってくると、非決定的なレイヤーが新たに加わることになります。同じ入力でも出力が揺れることがあり、これは人間の認知から見て「結果の予測がつきにくい」レイヤーです。

なので、「高級言語がさらに高級になっただけだ」という見方は、レイヤーの追加という点では正しいものの、決定性という重要な性質が変わったことを見落としかねないと思っています。単なる抽象化の延長ではなく、「決定性から非決定性への転換」という質的変化があるのでは、と感じました。

とはいえ、この「非決定性のレイヤー」が使いものにならないという話ではありません。むしろ、もともと人間を介して曖昧な指示を出していたような場面では、LLMの方が安定的・高速に動くとも言えます。

「いまいち意図通りに動かない人間」よりは、「ちょっとブレるけど一貫性のあるLLM」の方がよっぽど扱いやすい、という評価も成り立ちます。

『コンピュータの構成と設計』進捗

日記の練習です。

scrapbox.io

CODv2 (デイビッド・パターソン & ジョン・ヘネシー『コンピュータの構成と設計』第2版)、第3章 「命令 : マシンの言葉」

「 3.5 条件判定用の命令」が if 文、 if-then-else 文、 while 文、そして switch 文の( MIPS の)アセンブリ言語への(手作業での)コンパイルで、やっとこれが終わって、次は「3.6 コンピュータ・ハードウェア内での手続きのサポート」で、

ここでいう手続きは、「手続き」ないし「サブルーチン」って言っているので、たぶん関数、というかプログラムの部分?本体?(つまりプログラムとは手続きの集合のこと?)のことで、いきなりプログラム・カウンタとかスタック・ポインタとか出てきた。

いよいよヤバくなってきた。身の安全が確保できるギリギリなスピード、振り落とされる寸前な感じ。


そもそもは、 C の入門書でお約束にポインタ変数に嵌まって、

copyanddestroy.hatenablog.com

こんなふうにわかっていないけど、わかったような気になったところで、

ポインタから始めちゃったからだけどC言語は変数をメモリのどこにどういった形で(大きさで)置くのか、どう操作するのか、っていうものに見えてて、これは反対にコンピュータの中に入っていくイメージがする(適当ーーー)。

https://copyanddestroy.hatenablog.com/entry/2025/04/15/110527

なんてことを言っていて、で、

あれ?だとすれば、変数以外のものだって、ましてやプログラム本体だって、メモリの上に置かれているのでは?それらはいったいなにがどのように?

というふうに気がついてしまったのが、ことの発端だったので、いよいよ核心部分に迫っている。

Programming languages: history and future

https://dl.acm.org/doi/10.1145/361454.361485dl.acm.org

Communications of the ACM, Volume 15, Issue 7
Published: 01 July 1972
Jean E Sammet

本論文では、プログラミング言語(=高水準言語)の歴史と将来について論じます。このような歴史を記述する際の難しさについてもいくつか指摘します。本論文の主要部分は、言語の発展過程とそれらの相互関係を時系列で示すツリー構造です。言語が急増した理由も示しています。主要言語とその重要性の理由を列挙しています。年表のセクションでは、過去の重要な時期における出来事と1972年の主要なトピックを示します。特定の言語以外の重要な概念についても論じます。

4 が A になったり、 B が 13 になったり

x.com

blog.seas.upenn.edu

今日、プログラミング言語は英語に似ています。「function」や「return」といった単語は、Python、Java、JavaScriptといった現代の人気言語でも日常的な意味を保っています。

1950 年代初頭にホッパー氏が書いた重要なツールである A-0 コンパイラがなければ、コンピューター内部で行われる複雑なプロセスを抽象化するこうした進歩は、これほど急速には実現しなかったかもしれません。

「プログラマーって、下手なコピーライターなのよ」と彼女は言った。「4が、私たちの宇宙記号であるデルタになったり、Aになったり、Bが13になったりすることが何度もあって、驚きました」

A-0 コンパイラは、このような関数の「ライブラリ」を作成しました。これらの関数はすべて 1 つのコマンドで取得でき、記号用語を使用して複雑なプロセスを抽象化することで人的エラーを削減しました。

en.wikipedia.org

A-0 System ( Arithmetic Language version 0 ) は、電子計算機向けに開発された初期のコンパイラ関連ツールで、グレース・マレー・ホッパーによって1951年と1952年にもともとUNIVAC I向けに書かれました。A-0 は、現代のコンパイラの概念よりも、ローダーやリンカーとして機能しました。プログラムは、サブルーチンとその引数のシーケンスとして指定されました。サブルーチンは数値コードで識別され、サブルーチンへの引数は各サブルーチンコードの直後に記述されました。A-0システムは、仕様を機械語に変換し、それをもう一度コンピュータに入力して、そのプログラムを実行できるようにしました。

en.wikipedia.org

彼女は、プログラミングは英語ベースのコンピュータプログラミング言語で簡素化されるべきだと信じていた。彼女のコンパイラは、英語の用語をコンピュータが理解できる機械語に変換する。 1952年までに、ホッパーはA-0システム用に書かれたプログラムリンカー(当初はコンパイラと呼ばれていた)を完成させた。1954年、エッカート=モークリーはホッパーを自動プログラミング部門のリーダーに選び、彼女はFLOW-MATICなどいくつかの最初のコンパイル言語のリリースを主導した。 1959年、彼女はCODASYLコンソーシアムに参加し、英語の単語に基づいた機種に依存しないプログラミング言語であるCOBOLの作成に貢献した。 ホッパーは60年代を通じてこの言語の使用を推進した。

en.wikipedia.org

レーニングとツィラーのシステムは、代数式を解析する最初のプログラミング言語でした。ホッパーが1954年にこの言語に気づいたとき、彼女の研究の方向性は大きく変わりました。FLOW-MATICは、意味のない記号ではなく、英語のような文を用いて演算を表現した最初のプログラミング言語でした。また、データの記述と演算を明確に分離した最初のシステムでもありました。そのデータ定義言語は、実行文とは異なり、英語のようなものではなく、データ構造は印刷済みのフォームに記入することで定義されました。
FLOW-MATICとその直系の子孫であるAIMACOはCOBOLを形成し、その要素のいくつかを取り入れました。

en.wikipedia.org

タネンバウム『コンピュータネットワーク』

日記の練習です。

copyanddestroy.hatenablog.com

イーサネットはなぜ「エーテル」なのか

イーサネットの元になったのは ALOHAnet *8でブロードキャスト・チャンネルとランダムアクセス・チャンネルに2波を使用した無線ネットワークだった。これを有線にしたものがイーサネットの始まり*9。だから「エーテル」*10。 ALOHAnet は同じ周波数を使ってたくさんのマシンが通信するので衝突が問題だった。衝突を検知したらしばらく黙った。そのために乱数を使った*11。

ということで、 twitter で "Ethernet" と "ALOHAnet" で検索してこんな tweet を見つけた。

アンドリュー・タネンバウム『コンピュータネットワーク』。

いつもの図書館にはなかった。

ちょっと調べると、デイビッド・パターソン & ジョン・ヘネシー『コンピュータの構成と設計』と同様に、長い年月、版数を重ねていて、2023年に第6版の日本語版が出版されている。

scrapbox.io

この rkmt サンは年齢からいっておそらく、原著を初版(1981)で読んだと思われる*1。分厚くてビックリするくらい高価だけど、古い版のものはかなり安価で手に入れられる。

『コンピュータの構成と設計』は2版を読んでいるので、『コンピュータネットワーク』もちょっと古いヤツを積もうか、なんて思ったりしている。『コンピュータの構成と設計』、まだ全然進んでいないのに。

コンピュータネットワーク : OSI詳説 | NDLサーチ | 国立国会図書館
gyazo.com

*1:暦本 純一(れきもと じゅんいち、1961年2月4日[1] - ) https://ja.wikipedia.org/wiki/%E6%9A%A6%E6%9C%AC%E7%B4%94%E4%B8%80

日記の練習です。

Apple Talk がなぜ高価な(豪華な)シリアルライン(RS422)を使ったのかとか、

IBM PC のローカルネットワークはどんなものだったのかとか、

イーサネットはなぜ「エーテル」という単語を使ったのかとか、

そういう気づきがありました。インターネット創世記の話です。

ジェイムズ・グリック『インフォメーション』に一瞬現れるゼロックス

日記の練習です。

2013年

x.com

x.com

www.shinchosha.co.jp

プロローグ
第1章 太鼓は語る(符号が符号ではない場合)
第2章 言葉の永続性(頭の中に辞書はない)
第3章 ふたつの単語集(書くことの不確実、文字の不整合)
第4章 歯車仕掛けに思考力を投じる(見よ、恍惚たる算術家を)
第5章 地球の神経系統(貧弱なる針金数本に何が期待できようか?)
第6章 新しい電線、新しい論理(「これほど未知数であるものは、ほかにない」)
第7章 情報理論(「わたしが追求しているのは、ただの平凡な脳だ」)
第8章 情報的転回(心を築く基礎材料)
第9章 エントロピーと悪魔たち(「ものごとをふるい分けることはできません」)
第10章 生命を表わす暗号(有機体は卵の中に記されている)
第11章 ミーム・プールへ(あなたはわたしの脳に寄生する)
第12章 乱雑性(ランダムネス)とは何か(罪にまみれて)
第13章 情報は物理的である(それ(イット)はビットより生ず)
第14章 洪水のあとに(バベルの壮大な写真帳)
第15章 日々の新しき報せ(などなど)
エピローグ(意味の復帰)

日記の練習です。

かつては TSS (タイムシェリングシステム) で、寄って集って、みんなで時間を( CPU を)シェアしてたのが、

(ここで歴史を早送りします)

スタンドアロン(パーソナルコンピュータ)になって、みんなバラバラになって、データをシェアすることが必要になった(インターネットが必要になった)、というのはちょっと面白いな。

インスタントの世紀( The Instant Era )

Low-Tech, Lo-Fi, Instant|ARTICLES|The Graphic Design Review

テリーはなぜ「i」を「インスタント」としたのか。まずは誌面の作り方だろう。タイプライターがそうだし、ダイモ、スタンプ、ステンシル、コピーマシンなどなど、要するにすぐに生成できるタイポグラフィと画像を使って「インスタント」に冊子をつくったのだ。それは「ストリート」というコンセプトと結びつき、ロンドンの若者にすぐに浸透していった。

同じころ、日本にも「インスタント」の波が押し寄せてきていた。例えば、トナー式のカラーコピー機。まだ拡大縮小の機能は付いておらずモノクロ機もオフィスにあるかないかのころだった。撮ってすぐに見ることができるポラロイドカメラや、やはり現像の手間なくすぐに見ることができる電磁式のビデオテープを用いたVTRシステムもインスタントな道具だった。そういうヴィジュアルにかかわる機材が一挙に民生化されたのがこのころだ。まだ高価ではあったがワードプロセッサ(ワープロ)の普及期であり、転写式のインスタントレタリングなど簡易タイポグラフィのツールも出揃っていた。

コピー機の代名詞であったゼロックスでは売り出し中のカラーコピー機を開放しており、申請すれば自由にコピーをとることができた。VTRはポーターパックの愛称で知られたSONYの小型ベータマックス機が先行し、あとを追うビクターはVHSシステムの編集室をこちらも無料で開放していた。ポラロイドカメラではフィルム写真を撮る前の確認用だけでなく、インスタントフィルムの代表機種としてSX-70が人気を博し、写真家やアーティストが好んで使っていた。

インスタントメディアは、プロフェッショナルな技術へのアンチテーゼだった。写真や映像といったこれまで業者に頼んで仕上げていた表現が、自分たちの手のうちに入ってきた。まさにゲームチェンジだった。今から考えれば、ぼくたちはそれらインスタントメディアを使うことで、パーソナルコンピュータの出現を待ち構えていたのだ。

アップルコンピュータのMacintoshシリーズは、マザーコンピュータから離れて個々に存在することを誇るように「stand-alone」の合図で始まった。1986年に発売された MacintoshPlus は、ハイテクノロジーでありながらビットマップフォントとディザパターンの画像を描くローファイの機材として、デザイナーたちの心をつかむのにさほど時間はかからなかった。72dpiで打ち出された自身の全身写真を一面に配した、エイプリル・グレイマンの長さ2mに及ぶ一枚刷りの出版物は、ハイテク─ローファイ時代のファンファーレとなった。

時間をおかずグラフィックデザイナーの机の上に鎮座することになるMacintoshもまた、インスタントメディアのひとつだったのだ。今でもそれは変わりない(とぼくは思っている)。

日記の練習です。

scrapbox.io

パターソン&ヘネシー『コンピュータの構成と設計』、6版まであって、それぞれがその時代背景を反映していて、それぞれが異なった内容になっているらしい。

山梨県立図書館には4版から最新の6版が蔵書としてあって、そして僕の手元には2版がある(幸か不幸か?)。

というわけで、いま僕の Amazon のカートには『コンピュータの構成と設計』の1版と3版が入ったり出たりを繰り返しています。

gyazo.com

powered by hatena blog.
the nikki system for lifelogging junkies.

all posts © their original owners.
writing is reusable solely under the by creative commons license.