history

青木日記 RSS

<前の日 | この月 | 次の日>

2003-07-07

RHG 読書会 final

すでに一昨日のことですが、RHG 読書会の一巡目が終了しました。 お疲れさまでした。この後どうなるかはまだ決まってないのですが、 とりあえず次は 8/30 ってことになってます。 LL saturday に来る人も多いようなので、 そのあたりで何か決まるかもしれません。

しかし、前も書きましたが、まさか読書会まで始まるとは思いませんでした。 途中で次々と新たな間違いが発見されるという悲惨な場面もありましたが、 非常に楽しかったです。読書会を運営してくださった高橋さんと、 毎回面倒を見てくださった山下さん、参加してくださった皆さんに感謝します。

あとはここまでのフィードバックをもとにウェブ版の修正をなんとか…… しないとねえ……いや、ほんとに……。

そういえば、原稿を CVS で公開してみんなで編集、という話がありましたが、 これはさすがにぼくの一存では決められないので出版社に交渉してみます。

ちなみに「Rite 出たら第二版」「1.8 出たら第二版」「どうでもいいから第二版」 などなどいろいろな意見を伺っておりますが、この機会にはっきり言っておきます!

第二版どころか第二刷も出せるのか怪しすぎ。

つーか、いったい何部売れてるのかなあ。 ついでに聞いてみよっと。

Linux Assembly Language Programming レビュー

別にいいですよー。 と言っても実はまだちゃんと読んでないので、 これを機会に流し読みして書いてみます。 こういうチャンスに読まないとなかなか読めないですからね。

"Linux Assembly Language Programming" Bob Neveln, Prentice Hall PTR, 2000 (B5変 254ページ)

[英語]

普通。特に難解な言い回しをしたりすることはありません。 ruby-talk の平均よりちょっと上 (丁寧に近いほう)、 くらいだと思います。

[概要]

  • ch.1 Introduction
  • ch.2 Placeholding Numeration
  • ch.3 Logic Curcuits and Computation

Linux でアセンブラってのは嘘じゃないんですが、 まず前半 1/3 は Linux とほぼ無関係です。 i386 の一般的な話とか 16 進数とか flip flop とかの話が続きます。

  • ch.4 Assembly Language
  • ch.5 Machine Language
  • ch.6 Memory

やっとアセンブリが来たぜー! と思ったら今度はアセンブリ言語の文法の話になります。 さらにエンディアンとアラインメントとレジスタの話があって、 なかなかプログラムを書かせてくれません。泣けます。

  • ch.7 Stack

そしてスタック。引数渡しプロトコルとか。 この辺で、どれがLinux特有の規約か、なんて話があるといいのにな。

  • ch.8 Linux User Programs

386 な雰囲気。マルチタスク。Task State Segment。 ページングと仮想メモリ。アドレス変換。でもって ELF。ELF?! うーん、まあ、わからんでもないが……。

  • ch.9 Interrupts

割り込みだ。ようやく Linux してくるかなあ。 ISA バス。INT80 (システムコール)。 このへんはレジスタやスタックの使いかた (規約) が細かく書いてあるから お役立ち度が高そうだ。

  • ch.10 Bit Manipulations

なぜいまさらビット演算? 短い。

  • ch.11 Device Drivers

なんでドライバなんだよ。 しかも対象バージョンが書いてないじゃん。前書きにでもあるのかな。ないな。 ドライバなんてカーネルのバージョンが違ったら別物だぞ。 いずれにしろこの章だけでデバイスドライバが書けるとも思えず。 "Linux Device Drivers" 2nd でいいような気がするな。 あれは原書でも読みやすくていい本ですね。

  • ch.12 DOS Programs

え。なんだこのキャプション。ああ、セグメントの話ですか。うわ、違った。 本当に DOS だ。VGA 直接叩いてるし! キーボードバッファに手ぇ出してるし! つかリアルモードだし! うわ、うわー!

  • ch.13 Linux Boot Time Programs

むー。今度はブートシーケンスか。 これって実はカーネルの本?

唐突に終わった。

  • CD-ROM

nasm と、あと edlinas っていう GUI な 86 エミュレータが付いてます。 えっ、DOS プログラムなの?! 一緒についてる dosemu を使えってことか? 気に食わんなあ……。気に食わんが、動かしてみたら意外と面白かった。 (CD-ROM に入ってる dosemu は古いので Linux 2.4 ではコンパイルできなかった。 最新版のバイナリを落とせば OK)

readelf (GNU) / elfdump (Solaris) の機能縮小版みたいなのが付いてるけど、 これのソースコードは酷い。まず行末が CR。この筆者、林檎派か? そういえば前書きに PowerPC なんたらって書いてあったな。 さらに C のフォーマットが糞。 main のみのプログラムで 450 行。 変数は int c, d, i, j, k を関数先頭で定義し、使いまわす。 なぜか i++ を i = i + 1 と書く。 なぜか for 文を使わず全部 while で書く。 エラーの時は return 0。 エラーメッセージを平気で stdout に吐く。 などなど。最大限好意的に解釈するなら、 アセンブリに落としたときに見やすいように書いてる可能性はあるでしょう。

[評価]

概要で文句を結構書いたのでできるだけ良い点を書きます。

最終的に落ちる機械語 (のバイト列) がどうなって、 レジスタとメモリがどういう状態になるのかというのを 逐一説明してくれるのはなかなかよいと思いました。 マシンの生の姿がとてもよく見えます。

最初に書きましたが、文章の質はよいですね。 下手なジョークもないので、我々が読んでも普通に読めます。

なかなか面白くならない点に関しては、 『はじめて読む8086』あたりを読んで基礎知識を先に入れちゃって、 適当にすっとばしながら読んでいけば補えるでしょう。

もうちょっと読み込むと評価が変わりそうですが、 とりあえず「値段とページ数なり」という評価です。 A-E の 5 段階で内容を評価するなら B。でも B- に近い B。

ああでも、『はじめて読む8086』『はじめて読む486』 "Linux Device Drivers" を持ってたら必要ないかも。 カバーする範囲としてはこんな感じだと思いますね。

←初歩、汎用、ハードウェア、asm           Linux特化、ソフトウェア、C →
 
はじめて読む 8086
<------------------>                 ※ 「....」は「内容が薄い」の意。
    はじめて読む 486
    <------------------------>
 
       Linux Assembly Language Programming
      <-----------..--..--..--..--..---------->
                                                 Linux Device Drivers
                         <-------------------------------------------->

逆に言うと、前記の三冊を持ってなければ役に立つということかな。 でも、初心者に勧めるとしたらやっぱり『はじめて読む……』か。 ドライバ書くなら Linux Device Drivers だろうな。 それではこの本の存在価値は、というか対象読者は誰なんだろう。

そもそも目的がよくわかんないんだよな。 PC アーキテクチャ (ハードウェア) について話したいのか、 アセンブラを使ったプログラミング (ソフトウェア) について話したいのか、 Linux カーネルについて話したいのか、 Linux のドライバが書きたいのか、 Linux のユーザモードプロセスをアセンブラで書きたいのか、 何が最大の目的なのかよくわからない。

それから、話がカーネル側に寄りすぎているのはいただけません。 少なからずユーザレベルの話を想像していただけに、そこのところは期待外れでした。 ダイナミックリンク、インラインアセンブラなどの話をしてほしかったと思います。 もっとも、この点に限ってはぼくの期待から外れていたというだけなので この本の責任ではないでしょう。 でも、題名からそっちの話を期待してしまう人もいそうなんで書いときます。

結局、題名がよくないのかもしれません。 "Linux Kernel Assembly Programming on i386 platform" だったら問題ないでしょうね。

見直してみると結局ぜんぜんほめてないですね。 特にダメな本ではないのですが、

  • 似たような本をたくさん持ってるからあんまり目新しいものがなかった
  • 現在の自分の興味とズレていた

の二点でウマが合わなかったということで。 ここんとこは悪い評者にあたったということで勘弁してください。

本日のツッコミ(全6件) [ツッコミを入れる]
nobu_toyofuku (2003-07-07 13:19)

「Kernel で super」。def foo; super; end; foo じゃありがちなエラーメッセージしかでないです。どういうスクリプトでしたっけ。

あおき (2003-07-07 13:54)

[ruby-dev:20519] で聞いてみました。
module Kernel
  def m() super end
end
Object.new.m
です。

あおき (2003-07-07 18:52)

やっぱりまずかった模様。
eval.c rev1.475 で修正が入りました。

nori (2003-07-07 20:20)

レビューを読みました。色々と詳しく書かれていたのでとても参考になりました。ありがとうございました。もう少し日本語で書かれた本を読んで基礎知識みたいなものを吸収しようかと思うので「はじめて読む8086」を買って、そして、Linuxデバイスドライバ第2版を買おうかと思います。

arton (2003-07-08 03:24)

NETRubyがmakeできないのって、jayの問題ですよね? とあまりやる気も無いのに確認。

あおき (2003-07-10 06:50)

あ、そうです。その件です。
でも確か生成後のファイルがついてるんですよね。
もう一回試してみます。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02<