So-net無料ブログ作成
  • ブログをはじめる
  • ログイン

clibと呼ばれるライブラリー開発の思い出(5)  [clib]

前回から一年近くが過ぎてしまいましたので、過去の記事を最初に列挙しておきます。

スレッドライブラリ

独自に設計したメモリ管理ライブラリに基づいて設計したのが「スレッドライブラリ」でした。主には二つの機能が提供されていました。
  • CThreadIRunnableCSynchronizerCReaderWriterLockというスレッド生成および同期用のクラス
  • スレッドセーフなコレクションクラス(リスト、セットなど)
私の記憶が曖昧になっており、コレクションクラスとして何を準備したのかは記憶が定かではありません。スレッドライブラリのAPI設計では、いくつかの間違いをしました。それらの間違いは、初期のclibでは修正されていません。間違いを修正したのは、2003年から従事したLinuxベースでのソフトウェア開発でです。代表的な間違いは、fail-fast iteratorを仕様に盛り込まなかったことです。そのため、誤ったイテレータの使い方が行われていても気付かない実装になっていました。

今日なら

1993年から2000年にかけてC++を用いたデジタル複合機のコントローラソフトウェア開発で経験したメモリ関連の苦労を反映したのがclibでした。かなりの量のソフトウェアを新規開発しながらも、富士ゼロックス社のデジタル複合機を2000年後半から2年弱で開発できたことに貢献したと思っています。

しかし、今日作り直すとしたら、C/C++ではなくGoで開発すると思います。実際開発しましたし、将来機会があればやはりGoだと思います。
小さなスタックで動作する軽量なゴルーチン、CSP による通信、ガベージコレクタとメモリ保護、構造体によるコンパクトなメモリ設計、オブジェクト指向プログラミング、および、ウェブのクライアントやサーバの機能を含めたさまざまな機能を提供する標準パッケージと、道具は揃っています。したがって、オペレーティングシステムにLinux を採用している組み込みシステムでは、C やC++で開発するのではなく、Go で開発するのが適切だと思っていますし、将来Go で開発されるのが普通になる日がくるのではないかと期待しています。実際、ある組み込みシステムの制御ソフトウェアをGo を使った完全なテスト駆動開発で行うプロジェクトを2 年間にわたり率いて、Go での組み込みシステムの開発が可能なことを実証できました。

『プログラミング言語Go』の「訳者あとがき」より
残念ながら、clibを設計してから10年後にGoは登場しました。

コメント(0)