PerryはTypeScriptコードを、Windows、macOS、Linux、iOS、Androidなど10のプラットフォーム向けのネイティブGUIおよびCLIアプリケーションにコンパイルするツールです。単一のTypeScriptコードベースから複数プラットフォームに対応したアプリを生成できます。
#compiler
23 件
Geckoは、自動構文エラー回復機能を備えた高速なGLR(一般化LR)パーサーです。複数の構文解析経路を並行して処理し、曖昧な文法やエラーを含む入力に対しても効率的に解析を行います。
F#コードをJavaScriptにコンパイルするFableのバージョン5がリリースされた。本リリースでは、F# 9のサポート、新しいビルドパイプライン、およびパフォーマンスの改善が含まれている。
kdtsは、型情報を早期に消去するのではなく、コンパイル全体を通じて型を活用し最適化を導くTypeScriptコンパイラ。高速モードと最適化モードの2つの動作モードを持ち、最適化モードではGoogle Closure Compilerをバックエンドとして型駆動の最適化を実行する。現在はBunのみ対応で、正確に型付けされたTypeScriptのサブセットを対象に、暗号処理や分散IDコードなどを含むライブラリのコンパイルに実用されている。
PerryはRustで実装されたTypeScriptコンパイラで、WebAssembly、Node.js、Deno、Bun、Cloudflare Workers、Vercel Edge Functions、Netlify Functions、AWS Lambda、Fastly Compute@Edgeの9つのプラットフォームをターゲットしています。高速なコンパイルとクロスプラットフォーム対応を特徴としています。
CheerpJ 4.3は、JavaアプリケーションをWebAssemblyにコンパイルし、ブラウザ上でネイティブに動作させる技術です。既存のJavaコードを変更することなく、Webブラウザで直接実行できるようになります。
Rip言語はES2022にコンパイルされるプログラミング言語で、組み込みのリアクティビティ機能を備えています。最新のJavaScript標準をターゲットにし、リアクティブプログラミングをネイティブサポートします。
Kefirは、C17およびC23標準をサポートするCコンパイラです。このコンパイラは、最新のC言語機能を実装し、効率的なコード生成を目指しています。
Aliasing
1.0コンパイラが最適化できないタイミングを知ることも重要です。これは、エイリアシング(複数の参照が同じメモリ位置を指すこと)がコンパイラの最適化能力に影響を与える可能性があるためです。
この記事では、Zigプログラミング言語のトークナイザーについて説明しています。トークナイザーはソースコードを意味のある単位(トークン)に分割する最初の段階で、構文解析の基礎となります。
Zig Parser
2.0Zig言語のパーサーに関する記事。Zigの構文解析の仕組みや実装について解説されており、プログラミング言語のパーサー設計に興味がある開発者向けの内容です。
Zig AstGenは、抽象構文木(AST)をZig中間表現(ZIR)に変換するコンパイラフェーズです。このプロセスにより、Zigコンパイラは構文解析後のコードを最適化された中間表現に変換し、さらなるコンパイルステップへと進めることができます。
Zigのセマンティック解析フェーズであるSemaについて説明します。SemaはZIR(Zig Intermediate Representation)をAIR(Analysis IR)に変換し、型チェック、定数折りたたみ、エラーチェックなどのセマンティック解析を実行します。
Zigのコンパイル時機能を活用して、タグ付き共用体のサブセットを安全かつ効率的に定義する方法について解説します。型安全性を保ちながら、特定のタグ値のみを許可するサブセット型を作成するテクニックを紹介します。
Rustの借用チェッカーに関するよくある質問と対処法。借用チェッカーとの付き合い方のコツやヒントをまとめています。
ブートストラップは、ある言語のコンパイラをその言語自身で記述する手法です。これにより、自己完結的な開発サイクルが可能になり、言語の進化と移植性が促進されます。歴史的にはLispやCなど多くの言語で採用されてきた重要な概念です。
<code>cargo clippy</code>を実行すると何が起こるのか?Rustコンパイラの内部構造とrustc_driverの仕組みについて解説します。
Swiftの型チェッカーが遅い理由は、10年前の設計上の選択が現在まで影響しているためです。この記事では、その歴史的な設計決定がどのように現在のパフォーマンス問題につながっているかを探ります。
副作用のカタログ
1.0最適化コンパイラがIR命令の副作用を追跡する方法について、Cinderのビットセット表現とJavaScriptCoreの抽象ヒープ階層など、主要なアプローチを比較・解説します。命令の並べ替えや削除を可能にする効果追跡の実装手法を探ります。
GDBは通常、コンパイラが生成するDWARFデバッグ情報を使用して機械語をステップ実行しますが、JITコンパイルされた関数ではデバッグ情報が不足します。GDB JITインターフェースは、JITランタイムが関数をコンパイルするたびにELF/Mach-Oオブジェクトをメモリ内で生成し、リンクリストを更新することで、JITコードにもデバッグ機能を提供します。新しいカスタムデバッグ情報インターフェースでは、独自のバイナリフォーマットとリーダーを実装することで、より柔軟なデバッグが可能になります。
RubyのZJITコンパイラが、デフォルト引数評価のために複数のエントリポイントを持つ制御フローグラフを扱う際の設計上の課題について。複数のエントリブロックが存在する場合の支配木計算の問題と、その解決策として検討されている3つのアプローチ(特殊処理、スーパーエントリブロックの合成、CFGの複製)を解説。
値番号付けは、SSA形式を超えたコンパイラ最適化手法で、コンパイル時に同じ値を生成することが確実な命令を識別し、共通部分式の除去を実現します。純粋な演算に対してハッシュベースの等価性判定を行い、ローカルおよびグローバルな値番号付けを通じてコードの重複を排除します。
Nanopass Frameworkは、小さな変換ステップ(ナノパス)を通じてコンパイラを構築するためのSchemeベースのドメイン固有言語です。各パスが単純な変換に焦点を当てることで、コンパイラの設計をより理解しやすく、保守しやすくします。