C++でC風ライブラリを作る(準備編)
高木です。おはようございます。
最近、技術情報が川上節一色になってきました。
がんばって投稿してくれているのはいいのですが、もう少しバリエーションが欲しいところです。
ここは私が何か書くしかないでしょう。
継続的に技術情報を書き続けるのはネタ切れに悩まされます。
普段の仕事でやっていることを書くのはいろいろ気が引けますので、それ以外となるとネタ探しが大変なのです。
できることなら同じネタの連載にして、少なくともネタ探しの苦労を軽減したいものです。
そこで、C++を使ってC風のライブラリを作ってみようと考えました。
普段仕事でC++を使っていますが、いつも感じるのは「結局のところ、Cの関数が一番使いやすい」ということです。
これについては人によっては意見が多々あると思いますが、あくまでも私の感想です。
Cの関数が使い勝手がいいといっても、C++で使うのであればもうちょっとどうにかなるだろうと思うことはあります。
せっかくなので、そういうのを作ってしまおうというのが今回の企画です。
基本方針
私もおっさんになりましたので、小難しいライブラリは若い人たちにまかせて、ごくシンプルなものを目指したいと思います。
できればC++以外の言語にもポーティングしやすい実装にできれば一番ですが、そこは無理をしない程度にしましょう。
開発を始めるにあたって、いくつかの決めごとをしておかなければなりません。
私がC++を使うときは、ホスト環境だけでなくフリースタンディング環境も扱います。
この両方に対応するのはなかなか骨が折れますし、制約も非常に大きいですので、今回はホスト環境に特化することにしましょう。
使用するC++のバージョンもさまざまですので、どのバージョンに合わせるかも決めておかないといけません。
できる限り利用範囲を広げ、かつ設計や実装の利便性を確保する意味で、今回はC++11に合わせることにします。
アプリケーションの開発であれば最新のバージョンを使うんですけどね。
処理系に対する仮定も設けておきましょう。
規格厳密合致プログラムを書いてもほとんど有用性がありませんので。
というわけで、次のような仮定を設けることにします。
- char型は8ビットとする。
- 8ビット、16ビット、32ビット、64ビットの整数型を持つ。
- 負の整数の内部表現は2の補数とし、トラップ表現を持たない。
まずはこの程度にしておきたいと思います。
処理系依存のライブラリ関数に依存せざるを得ない場合は、最低限マイクロソフトとglibcに対応することを目指しましょう。
体裁について
ヘッダファイルの形式など、体裁についても決めておきましょう。
せっかくなので社名を埋め込んでおくことにしましょう。
ヘッダファイルはcloverfieldディレクトリ下に配置し、”cloverfield/○○.hh” の形式とします。
また、cloverfield名前空間を使用することにします。
大体こんな感じの緩い取り決めでスタートしたいと思います。
次回以降、順番にライブラリの各要素を作っていくことにします。