Cap'n ProtoのタイムトラベルRPC

時間を越えるのでProtocolBuffersより∞倍速いとのこと。

Cap'n Proto

ジョークかと思いきや、遅延評価的にRPCを効率化する仕組みらしい。

以下は英語もサンプルもろくに読まずに「こういうものかなぁ」と想像したもの。

メールサーバから最新の1通だけ取得して表示するコード。

# ログインする
mailer = Mailer.login("example.net", "id", "password")

# 受信箱にあるメール数を取得する
size = mailer.size("inbox")

# 最新の1通を取得する
value = mailer.get("inbox", size-1)

# 表示する
print value

3回のリクエスト & レスポンスが行われる。片道100ms掛かるとしたら600ms。

タイムトラベルRPCを導入すると、これを最短で200msに短縮できる。

コードは同じ。

# バックグラウンドでログイン処理のリクエストを開始する。
# レスポンスを待たないのですぐに返る。
# 返されるのはリクエスト処理を識別するオブジェクト。
mailer = Mailer.login("example.net", "id", "password")

# 「mailerで識別される処理のレスポンスに対し、
#  sizeメソッドを引数 "inbox" で呼べ」というリクエストを開始する。
size = mailer.size("inbox")

# 「mailerで識別される処理のレスポンスに対し、
#   getメソッドを
#    第1引数は "inbox"
#    第2引数は 変数sizeで識別される処理のレスポンス
#           から1を引いた値
#   で呼べ
#  」というリクエストを開始する。
value = mailer.get("inbox", size-1)

# この位置まで通信待ちは一切発生しない。

# サーバサイドでlogin処理が終わり、その結果を使ったsize処理、get処理が順に完了し、
# レスポンスが返ってくるのを待って、表示する。
print value

これはこれで実現可能だと思うけど、翻訳とかじゃなくて本当にただの想像だから、全然違うものだったらごめんね。

誰かがまともな解説を書いてくれると思います。