Accelerated C++ 0~5章

Filed in C/C++, prog, , 読書感想文

 はい、早くも浮気です。OS【第二版】は読むのに気合が要るので疲れます。今日はさらっと流したかったので楽に読める本を。
 今日読んだのはアンドリュー・コーニグ、バーバラ・E・ムー著、小林健一郎訳、Accelerated C++ 効率的なプログラミングのための新しい定跡 0~5章です。全然軽くねぇ……orz
 この本は、C++とSTLを便利に使ってしまおうと言う所から始まる入門書です。文法や規則の説明は必要になってから、とりあえず使ってみようよと言うスタンスで書かれています。以前書いたエントリで長月が言っていたスタンスですね。事実この方法は良いと思いました。
 さて、この本は大まかに0~7章までの前半と8~10章の後半に分かれています。今回は前半の中でも0~5章について書きます。
 まず第0章はC++事始めとしてお決まりの hello, world! から始まります。単純な hello, world! にも実はこれだけの物が詰まってるんだよ? と言った風情で書かれています。この辺りは C/C++ 未経験者以外は読み飛ばしても大丈夫です。
 第1章では、早速 iostream を用いた入出力と string を用いた値の保存を行います。さらに、string のメンバ関数を使って、入力文字列に合わせて自動的にサイズを調整したフレームを表示したりもします。
 コンストラクタやメンバ関数を巧みに使っていて、初見の時になるほどと思わされた覚えがあります。C++経験者でも意外と知らない string の使い方かもしれません。
 第2章では、第1章で書いたプログラムを拡張します。第1章で書いたプログラムでは、フレームとして出力される文字列がそれぞれ string 型の変数としてハードコードされていました。それをフレキシブルな形に書き直すのが第2章の目的です。
 ここまで来てやっとループです。まあここまで来てと言っても20ページ無いんですが。
 残念なのが、コードが余り技巧的ではなくなって見ごたえが無い事です。必要な事に必要なだけ、そして解りやすく書かれているエレガントなコードなんですが、第1章で見たようなああなるほどと言った感動はありませんでした。
 続いて第3章では、たくさんのデータを扱うと言う題の通り、コンテナが登場します。
 これまでに学んで来た入出力やループを使って、生徒の宿題やテストの点数を入力し、学期の成績を計算するプログラムを作り、それを平均点の計算からメディアンを求めるプログラムに拡張すると言う段階を踏んで vector の使い方に繋いでいます。
 ここでのプログラムも何か引っかかる物があります。それが解決されるのが次章です。
 第4章に入ってやっと関数が登場します。前述した違和感の正体がこれです。既にプログラミングを嗜んでいる人間にとっては、長い main 関数が引っかかる訳です。
 第4章では、前章で作成したプログラムを、関数を用いた物に書き直していきます。さらに、複数の生徒の成績を扱う為に、データを構造体によって関連付けたり、ちらっと例外も顔を出します。それと構造体や構造体を利用する関数をヘッダファイルに追い出したりもしてますね。後にクラスの解説へと繋がりそうです (と言うか繋がります)。
 この章では sort や max 等のアルゴリズム系関数も出てきます。長月の私見ですが、どうも長月を含めた中途半端なレベルのC++使いは、STLのコンテナは良く知っていてもアルゴリズムを良く知らない様に思えます。本書を読んでいると、このやり方ならそういう偏りは出来にくいかもなあと思います。
 本日の締め、第5章ではイテレータが解説されます。前章のプログラムに合否判定の機能を加える為に、vector の巡回をすると言った感じです。
 イテレータは vector に特有の物ではありません。本章では、vector の部分削除や挿入に伴うコピーに起因する速度低下を不満として、list への差し替えを行います。
 さらに、イテレータで範囲指定する類の関数も使い始めます。
 なんと言うか、やっとSTLの本領が見えてきたと言った所でしょうか。C++はちょっと触っている人なんかはここら辺り方楽しくなってくるのではないでしょうか。
 上記のレビューにもちょこちょこと書かれていますが、本書は入門書で有りながら、経験者にも有益な本でもあります。文法や機能等に着目した従来の本と違い、問題解決に着目した作りであるため、意外な所で今までもやもやしていた物が解決したりします。
 自分はC++を使っているしそれなりに使えているからと思っている方も一度読んでみては?
 目次 6~7章>>

オペレーティングシステム【第二版】 第2章 (前編)

Filed in prog, , 読書感想文

 え~と、タネンバウム本分厚いです。重いです。立ち読みには向きません。買った理由がちょっぴり解りました。
 さて、今日読んだのは、A.S.タネンバウム、A.S.ウッドハル著、オペレーティングシステム 設計と理論およびMINIXによる実装【第二版】の第2章前半です。ええ、前半です。2章全部じゃないです。2章だけで122ページ有りますから、流石にさらりとは読めません(´・ω・`) 3章に至っては180ページ超えてるありさまですから……orz
 そんな訳で今回は2章 (前) です。
 2章のテーマはプロセスです。2章ではプロセスの概念に始まって、複数のプログラムを制御する為の理論とMINIXでの設計、MINIXを例にした実装を解説しています。
 今回はMINIXでの設計の概要までを読んで思いつくまま書き殴ってみます。
 まず最初はプロセスと言う概念についての解説です。本書ではプロセスモデルの解説を通して概念の説明をしています。そしてプロセスに求められる物、必要な機能の実現等の理論の解説が続きます。
 プロセスと言うのは実行中のプログラムを指す言葉です。実際には千差万別であるプログラムを、統一的な方法で管理できるように抽象化した概念をプロセスと言います。
 この項で解説されている基本的な概念をしっかりと理解しておかないと後に混乱する事になります。プログラムとプロセスを混同するとスケジューリング辺りでパニックに陥るでしょう。
 第二項はプロセス間通信の解説です。
 マルチプログラミング環境に於いては、複数のプロセス間での通信が頻繁に行われます。第二項ではそのプロセス間に於ける通信方法や、それにまつわる問題、その解決法等を解説しています。
 プロセスは一つ一つ独立した物です。しかし完全に独立してしまうと、そのプログラムに必要な動作を全て実装しなければなりません。また、権限の問題で使用できない機能を利用しなければならない場合もあります。ですから、完全に独立させるよりは、必要な機能を持った別のプロセスに処理を委譲できる様にすべきなのです。そこで必要になるのがプロセス間通信であり、通信に際しての決まり事と方法なのです。
 第三項は典型的なIPC問題とその解決についてです。
 IPCとは InterProcess Communication の略で、プロセス間通信の事です。IPC問題と言うのは、デッドロックや同期化、競合状態に関する典型的でプリミティブな事例の事です。これを解決する事で、実際の利用時に起きる複雑な状態にも対応できると言う、不具合の最小構成の事だと考えれば良いでしょう。
 第三項では、IPC問題の中でも特にありふれた問題を三つ取り上げて、その問題点と解決方法を解説しています。
 第四項で解説されるのはスケジューラ、いよいよ大物登場です。
 これまでの解説で棚上げにされてきた、具体的なプロセスのスイッチングやその順位の決定についての理論、与える資源 (時間や機器や機能) の調整について等、プロセス管理の根本であり煩雑で難解な部分の解説を行っています。
 単に実行を開始された順で同じ量の資源を提供するのであれば複雑な事は有りません。しかし、処理には優先順位があり、実現すべき処理に必要な資源の量もそれぞれです。また、プロセスによってはスリープする事もあり、その間に何もしないのは資源の浪費になります。そう言った無駄を省き、必要な所に資源を回す為にもスケジューリングや資源の割り振りは慎重に行わなければなりません。
 第四項ではこう言った問題に対する今までに行われてきた提案を解説しています。
 第五項では、これまでに解説されてきた理論を元に、MINIXを題材とした設計の一例を解説しています。
 内部の構成、プロセス管理、プロセス間通信、スケジューリング等について、MINIXではどの様な理由でどの様な選択をしたのかが解説されています。ここで解説されているMINIXと言うOSのプロセスに関する思想を理解しておかないと、この後に続く具体的な解説で混乱します。
 ここまででも十分に厄介な第2章ですが、これまでの内容を理解していないと続く第6項で大変混乱します。
 プロセスはOSの根幹をなす概念です。他のほとんどの部分から依存される部分ですから、要点だけはしっかりと掴んでおきましょう。
 #(´ー`)oO(当blogのお客さんでこのエントリとかOS【第二版】に興味ある人っているのかしら? 興味ある人はコメントキボンヌ

オペレーティングシステム【第二版】 第1章

Filed in prog, , 読書感想文

 のっけからごっつい本です。なんかこれが二冊あれば人を殴り殺すのも可能なんじゃないかって感じがします。と言うか、囲碁blogのアンテナから来る人が多い事を承知の上でこの本を選ぶ辺り、長月は捻くれ過ぎなんだなぁと他人事のように思うのでした。
 今日から読み始める本は、アンドリュー.S.タネンバウム、アルバート.S.ウッドハル著、千輝順子訳、今泉貴史監修、オペレーティングシステム 設計と理論およびMINIXによる実装【第二版】です。
 ページ数1200ページ越え、四割がソースコードとは言え、量も内容も大物です。正直長月なんでこんな物買ったんでしょうか? おかげさまで自作ソースコードを収めたディレクトリにFDとかHDDから起動するためのブートストラップコードとか転がってますよ'`,、(´∀`)'`,、
 さて、肝心の内容ですが、今回は第一章についてです。
 第一章はオペレーティングシステム概論と言うタイトルの通り、OSとは何であるかや、OSの歴史等が書かれています。また、歴史に沿って、現代のモダンなOSならばまず搭載している機能や概念等も説明されています。
 OSと言う概念やOSの歴史等は基本的に読み物です。技術的な面で見れば余り役立ちません。しかし、現在から見ればチープなハードウェアとソフトウェアしかなかった時代を思うと何とはなしに感慨深い物も有ります。テープメディアや8インチFDや5インチFDの時代を知る (当時年齢一桁) 長月はこの辺りを読むと、セピア色どころか思い出すのさえ苦労する時代の思い出が蘇ります。当時は父のひざの上で訳も解らずBasicのコードを眺めていた物です。
 さらに進んでMINIXの歴史を通り過ぎると、コンピュータ技術の進化を辿るように機能や構造、概念の説明が続きます。
 まずは概念の説明がなされ、プロセスやファイルシステム、メモリ管理やコマンドインタプリタ、システムコール等が解説され、OSの一般的な構造へと続きます。
 構造の解説では、モノリシックカーネルやレイヤ構造を持ったシステム、仮想マシン、クライアント/サーバモデル、所謂マイクロカーネルまで基本的な構造を割合丁寧に、且つ急ぎ足で説明しています。
 ここまでの内容は技術的な観点で見ると余り役に立たないものが多いでしょう。第一章は全体を俯瞰した物なので抽象度が高いのです。しかし、考え方を知らなければ設計や実相の段階で無用な悩みを抱えることになるので、こういった概念も無視できない物では有ります。
 本エントリを見てこの本を買おうと言う人は余り居ないと思いますが、この本を読むのであれば、まず第一章をしっかり読む事をオススメします。

今月は読書強化月間って事で(゚∀゚)

Filed in 日記

 なんとなく思いつきで今月は読書強化月間にします。
 今までちゃんと読み返してなかった本を読み返そうかなと。とか言いつつ持ってる本で二回読んでないものはもう無いんである意味厳しいんですが (飽きとか)、毎日読んだ分をレビューしてみようかなと。
 感想を書くために色々考えるだろうからそれが理解の助けにならないかなーとか考えてます。まぁ最近の長月はあんまり暇人じゃないので読める量も知れたものなんですが(´・ω・`)
 てな訳でyyzさん、しばらくの間商売敵になります、よろしく(゚∀゚)
 #問題はこれが意図しないエイプリルフールになってしまうかもしれないって事だ……orz

やっぱり間違えてた(´・ω・`)

Filed in Perl, prog

 なんかバージョンを変えたら解決しました。
 最初に試してた奴のバージョンは 1.99_06、今回のが 0.88。
 どうも新しいのは Perl 5.8.* で追加された Encode モジュールのラッパみたいで、一応 Jcode 0.88 相当のコードは含まれてる物の内部構造が大幅に変わってる模様。古いコードを Jcode::_Classic に押し込めたおかげでおかしな事になった様です。
 つーことで、同じような罠に引っかかってここにきた人、Jcode 0.* に差し替えましょう(´・ω・`)

むむ? 何かを間違えましたか?

Filed in Perl, prog

 ちょっと入用になって Jcode.pm の OpenLab の Jcode.pm プロジェクトページから以前DLしておいた物をインスコ。といってもコピるだけ。インスコ用のスクリプトついてないし(´・ω・`)
 コピー終了して既に組んであるスクリプトを実行してみると。

Undefined subroutine &Jcode::_Classic::euc_utf8 called at <Perlのパス>/lib/Jcode/_Classic.pm line 255

 と出る。はて? インスコ失敗してたのけ? 該当個所を見てみる。よくわからん。load_module 関数が関係してそうだけど、load_module 関数を眺めてみても解らず。デバッグ表示ではパッケージはちゃんと require されてるっぽいしなぁ。
 といった所でふと気付く。ああ、パッケージ名の修飾がないんだ。自作ライブラリだとちゃんとパッケージ化せずに内部で使う変数だけ $Hoge::variable_ とかして関数は require だけで呼べるようにしてたせいで勘違いしてた。
 てことでパッケージ名を補ってやれば通るかな? パッケージ名は load_module 関数が返してるから、後は関数名を付け足してシンボリック参照辺りで何とかなるな。ってなんでそんなニッチな機能だけはすぐに思い出せるんだ俺……orz
 であ実行( ・∀・)σぽちっとな

Can't use string ( snip ) as a subroutine ref while "strict refs" in use at <Perlのパス>/lib/Jcode/_Classic.pm line 256

 ……orz
 もう訳わかんないんで誰か似たような事例と解決策教えてくだちぃ……orz


Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
Oenology Post Formats
Click to view/hide

Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
Posts Calendar
Click to view/hide
2005年4月
« 3月   5月 »
 12
3456789
10111213141516
17181920212223
24252627282930

Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
アーカイブ
Click to view/hide

Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
最近の投稿
Click to view/hide