
2026/05/30 12:14
Perry は SWC と LLVM を用いて TypeScript を直接実行可能ファイルに変換します。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Perry v0.5.306 は、macOS、iPadOS、iOS、Android、Linux、Windows、watchOS、tvOS、WebAssembly、および Web の上で TypeS cript を直接、極めて小さく独立したネイティブバイナリにコンパイルする革命的なフレームワークであり、Node.js や Electron などのランタイムを必要としない。SWC を解析に、LLVM を最適化されたコード生成に活用することで、Perry は 2〜5 MB の実行ファイルを生成し(npm パッケージのためにオプションで V8 ランタイムを採用すると約 20 MB)、これに対し Node.js は約 80 MB、Bun は約 90 MB と比較して格段に小型である。起動時間は Perry で約 1 ms、Node.js で約 30 ms、Bun で約 10 ms となり、Apple M1 Max の RUNS=11 テストの中央値では Perry v0.5.279 が Node.js v25 を凌駕する。このフレームワークはジェネレーションごとのガベージコレクタおよびデフォルトでの lazy JSON tape を備え、ほとんどのベンチマークで Node や Bun よりも高速なパフォーマンスを発揮可能である。
Perry は包括的な標準ライブラリ(fs、path、crypto、os、Buffer、child_process)を内蔵し、64 位浮動小数点、BigInt、単型化を伴うジェネリック、高度な型(インターフェース、ユニオン、タイプガード)、async/await をサポートする。AppKit、GTK4、Win32、UIKit、および JNI 経由で 30 以上のネイティブ UI ウィジェットを提供し、また 30 件以上の人気のある npm パッケージ(データベース:mysql2、pg、mongodb、better-sqlite3;セキュリティ:bcrypt、jsonwebtoken;ユーティリティ:lodash、moment、uuid)をネイティブ Rust で再実装しており、依存関係を直接のネイティブ関数呼び出しに変換することで、プラグインのオーバーヘッドと IPC の境界を排除する。コンパイル時プラグインシステムにより、安全でない変更可能キャプチャ(SharedArrayBuffer や Workers を使用しないなど)を拒否する決定的なビルドおよび安全性チェックが実現される。
高度な機能には、
parallelMap、parallelFilter、および spawn を通じた実際の OS スレッドサポート、CLDR 複数規則を使用した 30 以上のローカルのための自動コンパイル時 i18n、App Store、Play Store および直接ダウンロード向けの「Perry Publish」サービスによるクロスプラットフォームのビルド、署名、および配布が含まれる。デプロイ前の機能検証に Geisterhand を活用した全 6 プラットフォームへの自動化された UI テストも可能である。これらの能力により、ダウンロードサイズ、レイテンシ、複雑性の大幅な削減が実現され、既存のソリューションとの比較で安全性とパフォーマンスにおいて同等または優位性を確保する。本文
Perry v0.5.306 の新機能:ジェネレーショナル GC と遅延 JSON テープ搭載
Perry はTypeScript をあらゆるプラットフォーム(macOS、iOS、Android、Linux、Windows など)でネイティブなバイナリにコンパイルするフレームワークです。Electron やランタイムの依存がなく、単一の実行ファイルのみで完結します。
🚀 主要リリースノート (v0.5.306)
最新のバージョン v0.5.306 において以下の重大なアップデートが行われました。
- ジェネレーショナル GC(Generational GC)の搭載
- メモリ管理効率を大幅に向上させ、メモリオーバーヘッドを最小限に抑えます。
- 遅延 JSON テープのデフォルト搭載
- 大規模なデータ処理においても、JSON のパース負荷を最適化し、パフォーマンスとスケーラビリティを高めます。
ベンチマーク結果: これらの機能により、Node.js および Bun よりも大多数のベンチマークで高速に動作します。
⚡ 圧倒的なパフォーマンス比較
Perry は AOT( Ahead-Of-Time)コンパイル方式を採用し、ランタイム依存を排除することで高速化を実現しています。
| メトリック | Perry | Node.js | Bun |
|---|---|---|---|
| バイナリサイズ | 2〜5 MB | ~80 MB | ~90 MB |
| 起動時間 | ~1 ms | ~30 ms | ~10 ms |
| ランタイム依存 | なし(ネイティブのみ) | Node.js / V8 | Bun / JSC |
| メモリ効率 | 最小限 | GC あり (V8) | GC あり (JSC) |
ベンチマーク結果: Perry v0.5.279 との比較で、Node.js v25 に対し最大 18 倍高速化を記録しました(Apple M1 Max環境での数値)。 ※バイナリサイズが小さいほど、配信コストと起動速度が良いことを意味します。
🛠 なぜ Perry か?(主な利点)
基本機能
- ランタイム不要: Node.js や V8 の依存がなく、どこでも動作する単一バイナリを出力します。
- 高速なコンパイル: パースは SWC、最適化は LLVM を使用し、JS 中間コードなしで直接ネイティブへコンパイル。
- 決定論的なビルド: 同じ入力から同じバイナリが生成され、CI/CD またはチーム間での再現性が保証されます。
- 軽量な実行ファイル: デフォルトで 2〜5 MB。V8 ランタイムを有効にする場合のみ 15〜20 MB です。
コードと開発環境
- TypeScript ネイティブコンパイル: 標準ライブラリ (
,fs
,path
など) のネイティブ実装が内蔵され、慣れ親しんだ API をそのまま使用可能。crypto - オプションの V8 ランタイム: JavaScript/NPM パッケージとの互換性が必要な場合に限り、V8 を有効化することで全機能のエコシステムと連携します。
- 真のマルチスレッディング: OS レベルのスレッド(
,parallelMap
など)をネイティブにサポートし、SharedArrayBuffer やワーカー不要で安全に並列処理を実行できます。spawn - コンパイル時プラグインシステム: ビルド時にモジュール合成を行い、ランタイムでの IPC オーバーヘッドやプラグイン負荷を排除します。
UI と i18n
- 25 種類以上のネイティブ UI ウィジェット: ボタン、テーブル、スクロールビューなど、すべてのプラットフォームでリアルなネイティブウィジェットに変換されます。
- コンパイル時 i18n: 文字列の自動抽出と CLDR ルールを内蔵し、翻訳情報はバイナリに埋め込まれます(ランタイムでのルックアップ不要)。
デプロイメント
- クロスプラットフォーム署名: コマンド一つで macOS、Windows、Android、iOS 向けのコード署名を自動処理します(手動設定不要)。
- App Store / Play Store 連携:
がパッケージング、署名認証、および配布処理を一括で行います。Perry Publish
📝 インストールと使い方
インストール
macOS (Homebrew) を使用してインストールします(arm64 および x86_64 対応)。
$ brew tap PerryTS/perry $ brew install perry
コンパイル方法
TypeScript ファイルをネイティブバイナリに変換します。
基本コマンド
$ perry compile main.ts # コンパイル完了例:main (2.3 MB)
出力名の変更
perry compile main.ts -o myapp
V8 ランタイムの有効化(オプション) NPM パッケージとの互換性を確保したい場合。
perry compile main.ts --enable-js-runtime
コードの検証(互換性チェック)
perry check ./src
🧩 機能サポート:包括的な API カバレッジ
コア言語特性
- データ型: 64 ビット浮動小数点、BigInt (256 ビット)、列挙型 (Enums)。
- 関数とクラス: アロー関数、クロージャ(可変なキャプチャ対応)、高階関数、継承、Getter/Setter。
- Async/Await: 完全な非同期処理をサポート。
タイプシステム
- 型アノテーション、型推論、ジェネリクス (Rust モードフォーム)、ユニオン型。
- 型ガード (
) および型エイリアス。typeof
標準ライブラリとユーティリティ
- FS/Path/Crypto:
,readFileSync
,join
など完全実装。sha256 - NPM パッケージ再実装: 30 種類以上の人気パッケージをネイティブ Rust で再実装済み。
- DB:
,mysql2
,pg
,mongodbbetter-sqlite3 - セキュリティ:
,bcryptjsonwebtoken - HTTP:
,axios
,node-fetchws - データ処理:
,lodash
,sharpcheerio - その他:
,dayjs
,uuid
など。dotenv
- DB:
⚡ 使い方: 通常のインポート(
) だけで、Perry は自動的にネイティブ実装を利用します。importの探索は不要です。node_modules
🏁 まとめ:TypeScript を使ってネイティブを配信
- すべての要件を満たす唯一の選択肢: Perry は TypeScript から AOT ネイティブコンパイル、そして完全なネイティブ UI までを一つのエコシステムで提供します。
- コードからストアへ: 開発者は TypeScript の構文のみを書き込み、ビルド、署名、配布のプロセスを自動で担ってもらえます。
仕組みの概要:
- HIR (High-level Intermediate Representation) の生成
- Transform (最適化処理)
- Monomorphization (多形態化・特殊化)
コンパイラの内部実装の詳細については、Perry のドキュメントを参照ください。