トップ «前の日記(2018-02-11) 最新 次の日記(2018-02-24)» 編集

日々の破片

著作一覧

2018-02-16

_ 独習C

翔泳社から独習Cを上梓しました。

翔泳社の独習シリーズは数年前までは海外の定番書の翻訳だったわけですが、ここ数年は日本の著者による書下ろしに移行していて、いよいよCの番となり、光栄なことに僕に声がかかったという次第です。

正気に正直に言って、Cの入門書としては素晴らしいできの、Cを学習するなら、これしかないものを作ったつもりです。

とは言え、何しろCなので、つまりは常識的に考えて死すべき言語筆頭なわけですよ。したがって声がかかったからといって当然のように即答とはいかないわけで、書き方と切り口をどうするかは大問題。

(2014年には死すべき言語筆頭の座を明け渡したとは言え、それはすでに死語になりかけていたからと言えなくもない)

しかも、Webプログラマー用というわけではないので環境の軸足をmacとするわけにもいかないわけだ。でも当然、CL.exeというわけにはいかない(最初からC11というのは企画の基本方針となっていた)。というか、Windowsでmingwとかcygwinだったらさすがに引き受けない。

ところが幸か不幸かClang/C2がリリースされているわけで、つまりはそういう時宜を得ていたということだ。

clangを使ってC11(実質はC99、可変長配列あり)、今は21世紀とくれば執筆方針は明確だ。

x64、x86、ARMといった具体的なCPUはおいておくとしても、箱だの何だのの意味ない抽象化モデルは使わない。代わりにCPUとバスとメモリを単純化したモデル(キャッシュとレジスタは存在しないこととする)を操作するための言語として扱うことだ。

したがって、変数とはメモリ上の位置、型とは変数用に確保するバイト数と中身のビット構成の扱い方、つまりは整数型の違いは確保するバイト数の大小(stdint.hベースでint8_tとか使うのでビット数)、浮動小数点数については指数部、仮数部、符号という構成を示し、ポインタはアドレスを格納したもので押し通す。

その一方で、今、Cを学習するということの理由には、20世紀に作成された名作(駄作もあるとは思うが)を鑑賞するために必要な読解力をつけるという意味があるはずなので、%dのような古い書き方や、do while(0)マクロのようなイディオムについての説明はくそまじめにする。ただし、非ASCIIコードについてはUTF-8とワイド文字以外はすべて単なる多バイト文字としてほぼ無視する。

の、2本柱とする。

ポインターの説明が終わるまでは、しつこく同じことを説明して(上で書いた単純なノイマン型コンピュータ)モデルの形成を助ける。

そのあとは、スタック(と言う言葉は最後まで使わなかった)と再帰対制御文とループ、構造体とポインタをくどくど書く。(しつこく、とか、くどくどというのは練習問題があるからなわけだ)

独習C 新版(arton)

書籍購入者用の特典PDFというのがあって、いろいろ案を作ったが、最終的にすごくハイコンテキストな内容にしたのは、おそらく特典執筆直前に読んだ「もうすぐ絶滅するという開かれたウェブについて 続・情報共有の未来」の影響だと思う。そのくらいあの特典(ボーナストラック)はすごかった。

・サンプルと練習問題のバグ出しや動作チェックのヘルプをしてくださった村上さん、編集の宮腰さんと川月さんには、相当な行きつ戻りつにお付き合いしていただけて感謝しています。


2003|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|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ジェズイットを見習え