ヒトリ歩き

愚痴とかいろいろ書きます

スキルアップのためにOSSのソースから学ぶ

OSSのソースからいろんなことを学ぼう

最近、C言語の業務ばかりやっており、CのコーディングスキルアップのためにOSSのコードをチェックアウトして見ます。
今回は、FreeBSDをチェックアウトします。
なぜ、FreeBSDかと言いますとGNUに比べるとソースが読みやすいとのことだったからです。

FreeBSDとは

安定性と堅牢性を特徴としたUnix系のオープンソースオペレーティングシステムです。
BSD」は、「Berkeley Software Distribution」の略表記とされています。
ネットワークOSとしての稼働実績はLinux系よりも高く高負荷でも安定したパフォーマンスを維持し続ける信頼性に定評があるそうです。

www.ossnews.jp

ソースコードをチェックアウトしてみよう

では、FreeBSDソースコードをチェックアウトしてみます。
FreeBSDは、Subversionで管理されているので、svnコマンドでチェックアウトします。
libcをチェックアウトしたい場合は、以下のURLからチェックアウトします。
(バージョンは11.2のソースをチェックアウトします)

https://svn.freebsd.org/base/releng/11.2/lib/libc/

今回は、fopen関数の中身をみたいので、stdioをチェックアウトします。
https://svn.freebsd.org/base/releng/11.2/lib/libc/stdio

インクルードファイルも見ることになると思うので、includeフォルダもチェックアウトしておきましょう。
https://svn.freebsd.org/base/releng/11.2/include/

stdioフォルダのチェックアウトのコマンドは次のとおりです。

# svn co  https://svn.freebsd.org/base/releng/11.2/lib/libc/stdio

ソースを読もう

コーディングスキルを高めるには、コード自体を書くというのも大事ですが、優れたOSSのコードを読むというのもスキルを高める上で必要だと思います。
今回は、fopen.cを見てみます。
(ソースの内容は各自で参照してください)
軽くソースを見た感じの私の理解は次のとおりです。

  • 引数に指定したモードのチェック
  • ストリームを制御するためのFILEオブジェクトがあるかチェックし、あればFILEオブジェクトを初期化
  • 引数に指定したファイルをオープン
  • FILEオブジェクトに必要な情報を追加し、FILEオブジェクトを返却

関数自体は短いですが、他の関数を利用しているので詳細まで理解するには利用している関数まで見る必要があります。
ただ、関数を小さくしかつインデントも1段階であり、エラーであれば即時リターンとなっているので、概要はすぐに把握できるようになっています。
今回、fopen.cを見て、基本的なことですが、インデントは1段階とするエラー時は、即時リターンするということを得ることが出来ました。

まとめ

  • OSSのソースを見ることで、良いコーディングとは何かを考える機会を得ることが出来る。
  • OSSのソースからコンポーネントの構成を学ぶことで、凝集度が高く結合度の低い設計を学べる。