ToDo:
読んだ。まぁまぁ楽しんだと思う。
ネタバレバレバレで
とりあえず思うっていうかたぶんみんな思ってるのは偶数章が難しい。 ただ話自体は偶奇ともに素直な気がする。 詳細わかってなくてもまぁ楽しめる感じ。
偶数で孤高世界のモチベーションがわかる、 みたいなオチもまぁよかったと思う…が。 それだけしか偶奇関係ないのかよ、ってのがむしろ強くて。
よくわからんのはまず、奇数の人達を呼んだ理由。 想像で語られた理由が正しいとすると、 孤高世界の人達は自分たちでスイッチを押すのはイヤだった、 ってことになるんだろうけど、 最後の方で同じく想像で語られてる、 孤高世界の人達はスイッチが入ってないからぼんやりしてる、 っていうような話とあわせると、なんでぼんやりしてるのに 外部の人まねき入れる判断ができてるんだろ…と。
次にわからんのは奇数で発見される人達はなんなの、って話。 そもそも誰があの全体を作ったのかよくわからんし、 その中に進化してないチャンクがあるのもよくわからない。
途中奇数の人が融合世界からの連絡受けれちゃってるけどそれはいいんだろうか。 ていうかそんなことできるならもっと入念に準備しないもんだろうか…
どうでもいいけど奇数のバックアップってどうやって起動の判断してるんだろ。 しばらく連絡なかったら? 孤高世界への旅行の日程とか決めがたそうだけど。
イーガンって人は科学的な整合性さえ取れてれば このへんは比較的読者の想像におまかせしますー 的な感じにしちゃう人なのかもなぁとか思うけど知らない。
結局物語自体よりSF的な仕掛けばかりが面白いな。
偶数はとりあえず方角くらいは地球の言葉で書いて欲しかった。 本気で想像できない。あと図が2回出てくるけど、 その図に出てこない方角があるのが鬼。
偶数の発見史が地球史と比べてどうなのか、ってのが知りたいけどむずかしい。 たぶん発見の順序とかはいじりまくってる気がする。 地球だと物理で「幾何学」と「対称性」あたりの言葉が とても大事になったのはたぶん最近だと思うんだけど、 そのへんがすごい最初の方から語られまくってるあたりは、 たぶん順序いじったところだと思うんだけど確信は無い。
ザックの原理って結局何だったんだろ。
なんか読んでて、あ、これ一般相対論にあたるものの発見かなーと2回思ったので、 やはりたぶんさっぱりわかってない。
偶数全体的にわかんなさすぎてアレなんで、 まぁぼちぼち解説読むか…
(09:21)
東大情報理工のひとたちのやっている(いや他の大学もやってるぽいけど話題になってるのをよく見るのは東大なので)、 CPU を作る学生実験が楽しそうだと、はじめに思ってから…12年くらいは経過した気がする。
僕もマネしてみたいなあと思っている…だけではやらないようなので、自分を追いつめる目的をかねて特設サイトをひっそり作ってみた
http://shinh.skr.jp/h/?CPUTsukuru
僕自身の趣旨としては実際の課題を、しょぼくてもいいからぼんやりなぞってみれば良いなぁ思っている。まぁ授業の邪魔にならないようひっそりと
たぶん10月くらいから、いっしょに(チームを作るとかじゃなくておのおのが好き勝手に、しかし同時にやるという意味で)やろうという暇な人募集。ちなみに僕が挫折する確率も結構たかい
(01:20)
まずカタカナ混じってるので kernelvm とかでぐぐっても出にくいと覚えておくと良い
まあありきたりだけど刺激になる感じでよかった。
個人的に ARM64 の話が聞けたのがまず良かった。最近仕事でぐぐっててよく参照する個人ブログトップ3の人ってのがまた。
http://d.hatena.ne.jp/embedded/
ちなみに残り二人は隣に座ってた人と自分自身なんだが。
ARM64 は x64 同様昔のしがらみが減っていて…みたいなのを twitter で見たけど、 x86 => x64 より diff がでかいんじゃないかなぁとか。あと、今 CPU イチから作るとどうなるのかなぁとか気になる。 IA64 はそういう試みだったと思うんだけど、商業的に失敗しちゃったからなあ。そういうのでいうと Mill ってのが色々おかしくて面白い気がする。
http://millcomputing.com/topic/introduction-to-the-mill-cpu-programming-model-2/
レジスタが無い (SSA ぽい感じ) とか stack が別れてるとか。
あとは、 Rust の発表と qemu の発表が若いのに色々知っててすごいなぁとか思った。特に qemu の話は普通に symbolic execution とか知らなかったのでなるほどなぁとか思った。
あと、 qemu の TCG ぶんまわす部分は、 valgrind がわりと似てると思う。どっちが読みやすいかはよく知らない。 qemu は一度 TCG まわりいじって遊んだことあるんだけど、あまり読みにくいとは感じなかったのは、運がいい部分だけ触ってたか、単に相性のいいコードなのか、それか僕が見た時から大幅に変わってるか、かな。相性いい説は普通にありえるな、 TCC あんま抵抗ないし。
ネットワークの話がなんか一番おかしい気がしたけど、ただなんかあまりわからない話なのが残念。どうもネットワークは勉強する意欲がわかない
話的には Unicode の話も面白かったな。ていうか m17n とかの話はただでさえ、だいたい悲惨で面白いのに、話し方も面白いとかなりのコンテンツ力。
あとは PDP11 はみんな感心してたけど、どのくらい大変なのかいまいちピンと来なかった。というのは ICFPC とかで作るオモチャ CPU とどのくらい大変度に差があるのかな…ということでちょっと眺めてみた
https://github.com/kanorimon/pdp11
いやまあこれいきなり書くのはまぁ大変かな… getMnemonic がすごい。
日頃見てるドメイン的に syscall のとことか見たくなるんだけど、 fork で FD 閉じてるのはこれいいのかな。あと brk がなんもしてないけど色々動くもんだな。
あとだらだらしてる時に学生の人に学生ですかと話しかけられてみたり。社会人に見えない風体をしてるのは自覚してるので、似たような年代だと推測されたんでないかと思うんだけど、現実には15歳年上だった。
(00:58)
http://www.ioccc.org/1984/mullender.c
これを実行してみたいな。コンパイラ無いけど、たぶん a.out 作ればいい感じだよな。
つーことで適当にいじったら実行できた!
ORG 0 dw 0x108 ; NMAGIC dw 0xa2 ; text size dw 0 ; data size dw 0x100 ; bss size dw 0 dw 0 dw 0 dw 0 dw 277, 2525, -4129, 25, 0, 477, 1019, 0xbef, 0, 12800 dw -113, 21119, 0x52d7, -1006, -7151, 0, 0x4bc, 8196 dw 14880, 10541, 2056, 2056, 4548, 3044, -6716, 0x9 dw 4407, 6, 5568, 1, -30460, 0, 0x9, 5570, 512, -30419 dw 0x7e82, 496, 6, 0, 4, 1280, 15, 0, 4, 1280, 4, 0 dw 4, 0, 0, 0, 0x8, 0, 4, 0, ',', 0, 12, 0, 4, 0, '#' dw 0, 16, 0, 4, 0, 30, 0, 22, 0, 0x6176, 120, 25712 dw 'p', 29811, 'r', 29303, 29801, 'e'
nasm で作れる。 8進数を nasm は知らないみたいだったんで、適当に10進数に変換してある。
" :-)...." をひたすら出力するプログラムだったみたいだ。長年の謎が解けたので PDP-11 インタプリタには感謝しないと…ついでに出力できたアセンブリコード:
0: 0115 br 0x2c 2: 09dd jsr pc, *(r5)+ 4: efdf 0019 0000 sub *$0x21, *$0 a: 01dd br 0xffffffc6 c: 03fb beq 0x4 e: 0bef tst *-(pc) 10: 0000 .word 0 12: 3200 bit (r0), r0 14: ff8f setd 16: 527f 52d7 bis (r1), *$0x52f1 1a: fc12 setd 1c: e411 sub (r0)+, (r1)+ 1e: 0000 .word 0 20: 04bc bge 0xffffff9a 22: 2004 cmp r0, r4 24: 3a20 bit *-(r0), -(r0) 26: 292d cmp -(r4), *-(r5) 28: 0808 jsr r0, (r0) 2a: 0808 jsr r0, (r0) 2c: 11c4 mov pc, r4 2e: 0be4 tst -(r4) 30: e5c4 0009 sub $11, r4 34: 1137 0006 mov r4, 0x3e 38: 15c0 0001 mov $1, r0 3c: 8904 sys 4 3e: 0000 .word 0 40: 0009 .word 11 42: 15c2 0200 mov $1000, r2 46: 892d sys 5 48: 7e82 sob r2, 0x46 4a: 01f0 br 0x2c 4c: 0006 rtt 4e: 0000 .word 0 50: 0004 .word 4 52: 0500 blt 0x54 54: 000f .word 17 56: 0000 .word 0 58: 0004 .word 4 5a: 0500 blt 0x5c 5c: 0004 .word 4 5e: 0000 .word 0 60: 0004 .word 4 62: 0000 .word 0 64: 0000 .word 0 66: 0000 .word 0 68: 0008 .word 10 6a: 0000 .word 0 6c: 0004 .word 4 6e: 0000 .word 0 70: 002c .word 54 72: 0000 .word 0 74: 000c .word 14 76: 0000 .word 0 78: 0004 .word 4 7a: 0000 .word 0 7c: 0023 .word 43 7e: 0000 .word 0 80: 0010 .word 20 82: 0000 .word 0 84: 0004 .word 4 86: 0000 .word 0 88: 001e .word 36 8a: 0000 .word 0 8c: 0016 .word 26 8e: 0000 .word 0 90: 6176 0078 add r5, 170(sp) 94: 6470 0070 add (r1)+, 160(r0) 98: 7473 0072 ash 162(r3), r1 9c: 7277 7469 div 0x7509, r1 a0: 0065 jmp -(r5)
(01:59)
arton さんのところで Y-00 てのがあるのかーと知ったので
http://www.artonx.org/diary/20140430.html#p01
買う前はなんかうさんくさいなぁ…と思ってたんだけど、読んだ後も同様な印象だった。
というか終始 BB84 を攻撃してて、肝心の Y-00 の中身についてほとんど説明してないような…
(00:32)
http://www.amazon.co.jp/dp/4789838072
主に人に勧めるという観点で、Linkers & Loaders は教科書的にいい本ではあるけど、 GNU とか ELF に寄せたもうちょい実践的な本無いかなぁと思ったらあったので買ってみた。
ざーとながめたかんじ、なかなか勧められそうな感じで良い、と思う。ただまあそれなりに気になる点が。
P.97 ライブラリ・アーカイブどうしの場合には、先に見つかったほうのシンボルが優先されます
これはまー書いた人はわかってそうだけど、ダウトだよな。
$ cat foo.c void func() {} void foo() {} $ gcc -c foo.c && ar crus libfoo.a foo.o $ cat bar.c void func() {} void bar() {} $ gcc -c bar.c && ar crus libbar.a bar.o $ gcc main.c -L. -lfoo -lbar
とか、この記述だとエラーにならなさそうに見えるけど、エラーになる。
P.158 同じような .a の恐怖的な話。 -u も紹介してあげるとやさしい気がする
8.4 章、簡易ローダの作成。ここから先、なんで memcpy でロードするんだろう…って感じ。わざわざ ELF 書き換えツールを作って RWX にするとかしてるけど、たぶん本の記述量的にも実践的にも、ローダをリンクする時に 0x8048000 付近を避けて、ローダ内では mmap するのが良いと思う。ELF 書き換えツールもリンカスクリプトもいらなくて、ローダをリンクする時に
-static -Wl,-Ttext-segment=0x50000000
とかすればいいだけでないかなと。そのへんわかってないとは思えないんで、ちょっと意図がつかみかねるかんじ。 -Ttext-segment は最近だった気もするんで、まぁリンカスクリプトいじりは必要かもしれないけど。
あとローダがセクションヘッダ読むのも微妙だなぁと。これも mmap でやってりゃいらんと思うんだけど。
9.3 章、 undump の話。これも mmap すればいいやろ、って感じが。 P.197 の malloc により取得したメモリの考慮が必要、とかはちょっとなんの考慮が必要なのかわからない気がする。 PT_LOAD を全部ちゃんと復元すればたぶん動くと思うけど。
復元後に printf が動かなかった、って書いてあるけど、これはなんでだろう。あとひとつ気になるのは、復元中に fprintf とかしてるけど、これ当然 .data が塗り潰された後に動いてるのは単に運が良いだけなような、ていう。
なんか最後の方で実践的感が減ってる気がしたのが少し残念だった。でもまぁなんかでもよくまとまってる感じではあるかなぁ。
(01:06)
は他称以外で用いてはいけない言葉である、ってどっかで見て、なるほどなぁと思って今に至る。
最初に見たのは ukai さんが書いてるか、 ukai さん関係だった気がするんだけど、晴耕雨ハック (http://sourceforge.jp/magazine/journals/sado/148) と混同してるかもしれない。
(00:05)
前 | 2025年 9月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。