読者です 読者をやめる 読者になる 読者になる

はざまブログ

cybozu.com の中の人の個人ブログ

教材としての yrmcds

@ymmt2005 こと山本泰宇です。 公式発表とは別に、こちらでは yrmcds のもう一つの使い方を紹介します。それと、私の気持ちなどを。

yrmcds は実際のところ、作ることをかなりためらいました。工数という観点でみれば Apache が Redis を扱えるようにするとか、レプリケーションの仕組みを頑張るといったほうが小さい気がしたからです。C++11 の実践課題という動機は個人に寄っているので、会社に十分なメリットがないことには・・・と。

そこで会社へのメリットとして、以下の価値を加えることにしました。

  1. 後進の開発者が設計やプログラミング技法を学ぶ教材として使える
  2. 英語圏では無名のサイボウズの知名度の足しになるようにオープンソース化して宣伝を頑張る

教材として 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 の仕組みや設計意図を解説しています。 複雑なプログラムを書く前に行うべき設計作業の実例を学べます。

  • プログラミングの実践例

    • C++11 の各種機能
    • モダンな C++ (例外安全, RAII, ...)
    • 高度なスレッド制御
    • epoll を用いたリアクターの実装
    • IPv6/IPv4 対応

簡潔さとリーダビリティを重視しているので、テンプレートを駆使して高速化といったチューニングはしていません。 とは言っても、現時点でも秒間 10 万リクエスト程度はさばく性能を発揮できています。

簡潔ではありますが、技法は高度なものをあえて多く取り入れています。 短時間で「濃い」学習ができる教材になっていると思いますので、そのような用途でもご活用いただければとても嬉しく思います。

ご質問などありましたら、ブログのコメントでも twitter でもお気軽にどうぞ。