Optimized C++に載っている文字列最適化の手法をgoogle benchmarkでパフォーマンス測定してみました。 www.amazon.co.jp github.com
続きを読むC++でProtocol Bufferを試してみた
Protocol Bufferとはシリアライズ、デシリアライズ対象のデータ構造を定義したインタフェース定義言語になります。言語に依存しないのでgRPCなどの通信でも使われていまして、Googleのオリジナルの実装にはC++, Java, Pythonなどがあります。
言語に依存しないデータ構造等してJsonもありますが、Jsonに比べるとシンプルさとパフォーマンスを目的においているようですが、文字列型が多い場合はJsonの方がパフォーマンスが良かったりするので、どちらのパフォーマンスが良いかはデータ定義にも依存するようです。
今回はGoogleのドキュメントにあるC++のチュートリアルのデータ定義を用いてBoost::Asioでサーバ、クライアント間でシリアライズ、デシリアライズの確認をしてみます。
続きを読むパーサジェネレータでパーサを出力してみる
BNFを読み込んでパーサを出力し、実際にパースしASTの出力が確認できました。
パーサを出力するものはパーサジェネレータというと思うのですが、こちらはパーサコンビネータを使っています。パーサコンビネータはパーサのパーツを組み合わせてより複雑なパーサを出力できるもので、今回はパーサコンビネータの出力がParser[Parser[BnfParseResult]]
のようになっています。これはBNFを読み込んだ結果としてParser[BnfParseResult]
を出力し、さらにこれに対して文字列を読み込ませることでBnfParseResult
を出力するというものになっています。
パーサコンビネータのライブラリとして以下を使用しました。
続きを読むSpringCacheを試してみた
SpringBootではSpringCacheというものがあり、内部的にはCaffineが利用されているということで確認してみました。baeldungの説明を参考に進めています。
続きを読む