C
C++
headeronly
singlefile

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

More than 3 years have passed since last update.

漢は黙ってシングルファイル 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


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