悪いプロトコル実装のオーバーヘッド

悪いプロトコル実装がどの程度のパフォーマンス劣化を引き起こしているかを示す必要がある。
(C言語で『とりあえず動く』ように実装された、)悪いプロトコル実装は、以下のような問題を含んでいる :

  • セキュリティ

もっとも理解しやすいのはセキュリティの問題だろう。TLV処理やURLのパース処理に起因する問題は日々発覚し、既知の脆弱性リストを長くし続けている。プロトコル記述言語の使用は、TLV処理ルーチンの再発明を防ぎ、異常なパケットをアプリケーションに到達させないこともできる。

  • 低い移植性

たとえばエンディアンや数値表現のような問題をC言語は十分に抽象化しないため、単純にC言語のコードをコンパイルしなおすだけでは適切な移植にはならない。プロトコル記述言語はこの部分の抽象化を含み、実装にとって最適なエンディアン変換コードを常に選択できる。

  • (キャッシュ)効率の悪い構造体アクセス

例えばチェックサムの導出にバイト単位のアクセスを用いている可能性が高い。WindowsTCP/IPチェックサム算出にSSEを(プリフェッチのために)使うが、他のチェックサム導出にまでSSEの使用を徹底しているわけではない。
これは重要な観点のはずだが、網羅的な検証は見つけ出せずにいる。むしろ内部データ構造の最適化が可能になることの方が大きな影響となるだろう。
内部データ構造の改善は多くの研究がある。(内部データ構造はmiraiの用語で、そもそも通常の議論では全てが内部データ構造を対象としている)
http://www.llvm.org/pubs/2005-05-21-PLDI-PoolAlloc.html
内部データ構造も抽象化する何らかの手法が必要かも知れない。C言語は型安全な言語ではないため、この手の最適化にはある程度の限界がある。