StudyCS.log

ただの日記

coreutilsのソースってこんなに長かったのか、、、、

2020年3月11日

 大学のプログラミングの講義ではC言語を使って勉強を進めている。Cを使ってプログラミングを教えることは世間的には賛否の分かれるところらしいが、僕自身はあまり気にならない。確かに文字列の扱いなどが面倒だったりはするが、アルゴリズムなどを学ぶときにはやはりポインタの恩恵を受けるところが多いし、興味があればシステムにも手を出せる点は素晴らしい。

 特にシステムプログラミングの関することなのだが、先日「UNIXという考え方」という本を読み、Unixの設計思想に感銘を受けた。そして、Unix/Linuxのコマンド類がどのようなコードで構成されているかに興味を持った。調べてみるとLinuxで中核をなしているようなコマンド類は'Coreutils'というパッケージにまとめられているようだ。

 パッケージ自体は次のような流れて簡単に取得できる。僕はUbuntuユーザなので例にもれずaptツールを使って落とした。

    $which cat
    $dpkg --search /bin/cat
    $sudo apt source coreutils

 コマンドのソースを見て最初に持った感想は、「長いな、、、」だった。 

 機能だけ見ればこんなに単純なのに、裏ではわりと複雑な処理をしているようだ。せいぜい100行くらいのソースだろうと想像していた僕に、cat->約700行、wc->約900行、ls -> 約5000行というのはかなり衝撃だった。

 とはいえ、立ち止まっていても仕方がないからとりあえずcatから読み始めた(なんとなく簡単そうだと思った)のだが、画面を埋め尽くすのは見たこともない関数、マクロ、システムコールの数々である。僕の知っているCのコードとあまりにも違うではないか。

 これがシステムの世界なのか!!!

 しかし打ちのめされるというよりはむしろテンションが上がった。ここにあるコードをすべて理解して掌握してみたいと思った。コードの意味は理解できなかったが(まだ読み終えてない)、Linuxへの学習意欲は上がりましたとさ。めでたし、めでたし。

今日の学習記録

 ・マスタリングVimを読み返した。プラグインなどの追加はしばらくしない感じだし、ウィンドウもそこそこ使いこなしている感じで良いのだが、バッファがあまり活用できていないことに気がづいた。今後は少し注意を払って積極的に使っていこう。

 ・コンピュータアーキテクチャの基礎を頑張って読みすすめている。結構な期間がすでにかかっているのだが、もう少しで読み終わりそうだ。

 ・Essential Grammar in UseのUnit55を終えた。行き先、期間、目的という示しているものに合わせて、go to/go on/go for/go -ing を使い分けられるようになった。

 ・暗号技術のchapter4を読み進めた。AESの雰囲気が何となくつかめた。

 ・今年の頭に設定した、今年分のReadingChallengeのリストに若干の修正を加えた。

 ・Catコマンドのソースを読むために、いろいろ関数を調べた。