Help us understand the problem. What is going on with this article?

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

漢は黙ってシングルファイル 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(ベクターグラフィックス)

ほしいもの

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

ヘッダーオンリー

1 ヘッダファイルではありませんが, 複数ヘッダファイルでも素晴らしいものがあります.

まとめ

github によるソーシャルコーディングのムーブメントもあって, 各種シングルファイル系の流行りが出てきている予感あります(機能が制限されているので, プルリクやバグレポもやりやすい).

そして..., シングルファイル C/C++ ライブラリはたのしい! :tada:

TODO

  • もう少ししっくりくる名称は無いかな?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away