@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 でもお気軽にどうぞ。