シングルファイル C/C++ ライブラリが便利すぎてやばい

  • 270
    いいね
  • 4
    コメント
この記事は最終更新日から1年以上が経過しています。

漢は黙ってシングルファイル C/C++ ライブラリですね!

シングルファイル C/C++ ライブラリとは, ヘッダファイル .h ひとつだけで機能が実装されているライブラリ(もう少し条件をゆるくして .cc も含む)のことです. header-only とも言われれたりします.

このあたりの元祖は nothings 先生 http://nothings.org/ ですね. 最近は github にコードをあげています.

https://github.com/nothings/stb

シングルファイル系のライブラリまとめ一覧もあります.

https://github.com/nothings/stb/blob/master/docs/other_libs.md

シングルファイル系が便利すぎてやばいので, 自分でもいくつか作りました.

特に, TinyObjLoader は昨今のモバイル 3D ゲームや 3D プリント人気にあやかり(?) cocos2d-x に使われていたりと自分史上最も github でスター数が多いライブラリになっています. ありがとうございます.

なぜシングルファイルか

昨今は多様な OS(Windows, Linux, Mac, iOS/Android, Solaris, etc)や, 多様なデバイス(x86, ARM, MIPS, SPARC, etc)でアプリを動かす必要性が出てきたり, node.js などでちょっと処理が重い部分を C/C++ でネイティブ化したり, アイデアをぱぱっと実装したり, 簡単なデータコンバータを作りたいなどの要求が多く出てきています.

そのような状況では, シングルファイル系に大きな利点があります.

  • コンパイルが簡単(configure とかしなくてよい). Makefile などにファイルを追加するだけで使える.
  • ライブラリ間の依存関係が無い
    • boost に依存していてまず boost をビルドするところから... という問題が無い.
    • ライブラリ依存関係が無い(もしくは最低限)のため, ライブラリ間の依存関係でバージョン違いなどのビルドエラー, リンクエラーという問題も無い
    • システムにインストールされているライブラリと干渉しない.
  • 組み込んで扱いやすいライセンス(BSD, MIT, public domain, etc)

シングルヘッダベストテン

https://github.com/nothings/stb/blob/master/docs/other_libs.md まとめ一覧をふくめ, 独断で俺得なシングルファイル系ライブラリのおすすめ top 10 を選んでみました.

  1. STB image(画像ローダ)
  2. STB image write(画像セーバ)
  3. STB image resize(画像リサイズ)
  4. Duktape(JavaScript interpreter) http://duktape.org/
  5. TinyObjLoader(wavefront .obj loader)
  6. HappyHTTP(http client)
  7. PicoJSON(JSON parser)
  8. easywsclient(WebSocket client) https://github.com/dhbaird/easywsclient
  9. MicroProfile(Profiling) https://github.com/zeux/microprofile
  10. NanoVG/NanoSVG(ベクターグラフィックス)

ほしいもの

まだ未開拓な領域. これを実装したらヒーローになれます!

  • YAML parser
  • http/2 server/client(BSD or MIT license)

まとめ

github によるソーシャルコーディングのムーブメントもあって, 各種シングルファイル系の流行りが出てきている予感あります.

シングルファイル C/C++ ライブラリはたのしい!

TODO

  • もう少ししっくりくる名称は無いかな?