HyperPB:UPBを凌駕する超高速Go Protobufパーサー

2025-07-24
HyperPB:UPBを凌駕する超高速Go Protobufパーサー

この記事では、Goで記述された超高速ProtobufパーサーであるHyperPBを紹介します。UPB(最速のProtobufランタイムの一つ)の長所を踏襲し、Go言語のレジスタABIや未定義動作がないことを利用して多くの最適化を行っています。JITコンパイルとオンラインPGOを用いることで、Protobuf Goの生成コードやvtprotobufをベンチマークテストで上回ります。その核心はテーブル駆動型のインタプリタであり、ゼロコピー技術、ホット/コールドデータの分割、アリーナ再利用などの巧妙な最適化が含まれています。

続きを読む
開発

GoのGC:詳細な解説とカスタムアリーナアロケータ

2025-04-21
GoのGC:詳細な解説とカスタムアリーナアロケータ

この記事では、Goのガベージコレクションの複雑さを深く掘り下げ、その知識を利用して高性能なアリーナアロケータを構築します。GoのGCの動作を巧みに利用することで、特に大規模なメモリ割り当てにおいて、Goの組み込みアロケータよりも高速なメモリ割り当てを実現しています。この記事では、カスタムアリーナアロケータの設計原則、実装、ベンチマーク結果について詳しく説明し、高並列環境でのパフォーマンスについても分析します。

続きを読む
開発

ターゲットトリプル:コンパイラの混沌へのガイド

2025-04-15
ターゲットトリプル:コンパイラの混沌へのガイド

この記事では、x86_64-unknown-linux-gnuなどのコンパイラのターゲットトリプルの複雑さについて深く掘り下げています。トリプルの構成要素(アーキテクチャ、ベンダー、OS、ABI)を説明し、GCCとLLVMのそれらの扱い方の違いを示しています。様々なアーキテクチャ(x86、ARMなど)の命名規則、ベンダーとOSの表現方法を詳細に分析し、混乱を避けるために一貫性を保つことの重要性を強調しています。最終的に、著者は、新しいツールチェーンを構築する際に、新しいターゲットトリプルの規約を考案しないようアドバイスしており、これはツールチェーン間の協調を容易にするためです。

続きを読む