uecker.codeberg.page
昨日 23:20
Indirect Calling of Nested Functions on GCC Without Executable Stack
GCCのネスト関数はコールバックとして渡す際、トランポリンと呼ばれる実行可能スタック上のコード片を経由して呼び出される。著者は、トランポリンから静的チェーンとコードアドレスを直接抽出し__builtin_call_with_static_chainで呼び出すことで、実行可能スタックを要求せずにネスト関数を間接呼び出しする手法を解説している。これはGCC 17で導入予定の新組み込み関数の機能を、古いGCCでも疑似的に実現するフォールバックとなり、呼び出し後にpatchelfでスタックの実行属性を解除できる。さらにトランポリン自体を関数記述子として扱い、呼び出し側で簡易インタプリタ的に解釈するアイデアにも触れている。
GCCのネスト関数はコールバックとして渡す際、トランポリンと呼ばれる実行可能スタック上のコード片を経由して呼び出される。著者は、トランポリンから静的チェーンとコードアドレスを直接抽出し__builtin_call_with_static_chainで呼び出すことで、実行可能スタックを要求せずにネスト関数を間接呼び出しする手法を解説している。これはGCC 17で導入予定の新組み込み関数の機能を、古いGCCでも疑似的に実現するフォールバックとなり、呼び出し後にpatchelfでスタックの実行属性を解除できる。さらにトランポリン自体を関数記述子として扱い、呼び出し側で簡易インタプリタ的に解釈するアイデアにも触れている。
duckdb.org
2026/08/20
DuckDB v2.0: Your Database Deserves a Better Parser
DuckDBはv2.0でPostgreSQL派生のYACC/Bisonパーサーを、PEG(Parsing Expression Grammar)ベースの独自パーサーに全面刷新した。LALR文法の拡張性の限界を解消しつつ、Python同様PEGを採用。パックラット構文解析でバックトラックによる指数関数的な処理時間増大を防ぎ、既存のAST・SQL方言(DuckSQL)との互換性も維持。今後は拡張機能によるトークナイザ・文法ルールの拡張も可能になり、パイプ構文(`|>`)などの新構文追加も容易になる。
DuckDBはv2.0でPostgreSQL派生のYACC/Bisonパーサーを、PEG(Parsing Expression Grammar)ベースの独自パーサーに全面刷新した。LALR文法の拡張性の限界を解消しつつ、Python同様PEGを採用。パックラット構文解析でバックトラックによる指数関数的な処理時間増大を防ぎ、既存のAST・SQL方言(DuckSQL)との互換性も維持。今後は拡張機能によるトークナイザ・文法ルールの拡張も可能になり、パイプ構文(`|>`)などの新構文追加も容易になる。