@ymmt2005 こと山本泰宇です。 公式発表とは別に、こちらでは yrmcds のもう一つの使い方を紹介します。それと、私の気持ちなどを。
yrmcds は実際のところ、作ることをかなりためらいました。工数という観点でみれば Apache が Redis を扱えるようにするとか、レプリケーションの仕組みを頑張るといったほうが小さい気がしたからです。C++11 の実践課題という動機は個人に寄っているので、会社に十分なメリットがないことには・・・と。
そこで会社へのメリットとして、以下の価値を加えることにしました。
- 後進の開発者が設計やプログラミング技法を学ぶ教材として使える
- 英語圏では無名のサイボウズの知名度の足しになるようにオープンソース化して宣伝を頑張る
教材として yrmcds が提供しているものは以下です。
簡潔なコード
以下の cloc レポートが示すように、ほとんどのファイルが 200 行未満のコードで構成されています。
File blank comment code
--------------------------------------------------------------------------------
src/memcache.cpp 91 18 859
src/worker.cpp 21 1 604
cybozu/tcp.cpp 48 12 439
cybozu/test.hpp 21 42 293
src/memcache.hpp 70 46 266
src/server.cpp 40 8 183
cybozu/hash_map.hpp 40 94 150
src/object.cpp 17 1 144
cybozu/reactor.cpp 19 3 140
cybozu/tcp.hpp 30 100 136
cybozu/dynbuf.hpp 24 35 135
cybozu/reactor.hpp 46 110 134
src/config.cpp 23 1 129
src/gc.cpp 12 1 116
src/replication.cpp 17 1 107
cybozu/logger.hpp 21 18 95
src/sockets.cpp 13 4 93
cybozu/ip_address.cpp 14 1 82
src/worker.hpp 19 4 78
src/config.hpp 14 12 74
src/object.hpp 18 7 73
cybozu/util.hpp 16 19 65
src/main.cpp 17 3 64
src/sync.hpp 16 2 63
cybozu/config_parser.hpp 17 44 62
src/gc.hpp 12 2 52
src/tempfile.cpp 12 1 52
src/sockets.hpp 20 2 51
...
デザインドキュメント
docs/design.md では yrmcds の仕組みや設計意図を解説しています。 複雑なプログラムを書く前に行うべき設計作業の実例を学べます。
プログラミングの実践例
簡潔さとリーダビリティを重視しているので、テンプレートを駆使して高速化といったチューニングはしていません。 とは言っても、現時点でも秒間 10 万リクエスト程度はさばく性能を発揮できています。
簡潔ではありますが、技法は高度なものをあえて多く取り入れています。 短時間で「濃い」学習ができる教材になっていると思いますので、そのような用途でもご活用いただければとても嬉しく思います。
ご質問などありましたら、ブログのコメントでも twitter でもお気軽にどうぞ。