ブログ
Perryによるネイティブアプリ開発のニュース、チュートリアル、技術的な深掘り。
ネイティブ TypeScript コンパイラの GC を作る:判断、意外な発見、そして現在地
Perry は LLVM で TypeScript をネイティブコードへコンパイルします。つまり、本物のガベージコレクタが必要です。私たちが下した判断、証拠を残さないバグ、構造上失敗できなかった CI ゲート、そして Node や参照カウント方式の AOT 競合との現在の数値を紹介します。
Claude Code をコンパイルする — 1つの minify 済みバンドル、160件のコンパイラ修正
私たちは、npm が Claude Code 向けに出荷する13 MBの minify 済みの cli.js に Perry を向け、それをネイティブバイナリに変えようとしました。1か月後、それは起動し、ログインし、本物の API レスポンスをストリームし、入力した文字を描画するようになりました — そして160件のプルリクエストが Perry にマージされました。no-op だった MessageChannel から、RegExp ヘッダーに欠けていた GC の write barrier まで。
Shipping a Watch-Only App to the App Store (When Nothing Else Will)
Every documented way to upload a standalone watchOS app to the App Store fails — altool, iTMSTransporter, xcodebuild, even Xcode 26's Organizer all refuse the watchOS platform. Here's the undocumented workaround that works and keeps arm64_32 for older watches: an ITSWatchOnlyContainer iOS stub, uploaded with iTMSTransporter.
本物の npm パッケージが今コンパイルできる:axios、zod、express — そして適合性の一掃
v0.5.875 から v0.5.1146 までの約 270 リリースは、1 つのベンチマークについてではなかった — 本物の npm パッケージをコンパイルして動かすことについてだった。axios、zod v4、express、fastify、hono が今や動く。test262 パリティが跳躍した(String 60→79%、Array 61→72%)。Windows は Mica で Fluent になった。そして DatePicker とドラッグ & ドロップがすべてのプラットフォームに着地した。
aya_koto のベンチマークが Perry の GC について教えてくれたこと
ある読者が AtCoder ABC451D で Perry をベンチマークし、Bun より 3.85× 遅いと計測した。それ以降、静かなリグレッションがギャップを 6.59× にまで広げていた。修正は私たちが予想していた場所にはなく、それが露わにした意図的な GC のトレードオフは本物で、Perry v0.5.875 は今や同じベンチで Bun と並ぶ:425 ms 対 431 ms。
自動アップデート、ライブインスペクター、そして自らを半分にしたコンパイラ
Perry v0.5.306 → v0.5.359 を 4 日で — 53 のパッチリリース、約 30 件の Issue クローズ、そして 3 つの大きなものが着地:デスクトップ自動アップデート用の perry/updater、localhost:7676 のライブインスペクター、そして最大の 4 ファイルを 33〜91% 縮めたコンパイラのリファクタリング。
世代別GC、遅延JSON、そして精査に耐えるベンチマーク
Perry v0.5.174 → v0.5.306を3日間で達成。並行して投入されたGCとJSONの作業も含む。世代別GCがデフォルトに昇格。Small String Optimizationもデフォルトに昇格。JSONパイプラインに遅延テープが入り、validate-and-roundtripで中央値75ms――動的型付けランタイム勢では最速。ベンチマークページもRUNS=11の中央値+p95+σで書き直され、simdjsonとAssemblyScript+json-asがピアとして追加され、Perryのあらゆる弱点が正直に提示されている。
npm配布、perry dev、そしてすべてのベンチマークで勝利
Perry v0.5.80 → v0.5.174を6日間で達成。@perryts/perryがサポートされている7つのすべてのプラットフォーム向けにnpmで出荷。perry devがインメモリASTキャッシュとディスク上のモジュール単位オブジェクトキャッシュの上にウォッチモードでの自動再コンパイルを追加。json_roundtripが最後のギャップを閉じる――Perryは今やNode.jsとBunの両方に対してすべてのベンチマークで勝利。
すべてを最適化する:一週間、68リリース、そしてJSONの547倍高速化
Perry v0.5.13 → v0.5.80を7日間で達成。JSON.parseがNodeとの547倍のギャップを解消。mimallocがグローバルアロケータとして採用。インラインキャッシュ、シェイプ遷移、型付きBufferスロット、i32ネイティブビット演算、スカラー置換、そしてFastifyとWebSocketサーバを稼働し続けるネイティブイベントループ。
CraneliftからLLVMへ:Perryが24倍高速になるまで
PerryのバックエンドがCraneliftからLLVMに移行完了。初回の切り替えではベンチマークが70倍遅くなりましたが、6つのターゲット最適化により、Node.jsに対して14/15勝、最大24.6倍の高速化を達成しました。
tvOS、Linux からの iOS クロスコンパイル、Perry Login
Perry v0.4.24:10 番目のコンパイルターゲットとしての tvOS、ld64.lld 経由で Linux から iOS・macOS へのクロスコンパイル、従量課金制の perry login、Windows UI 刷新、macOS 公証、5 日間で 120 コミット。
真のマルチスレッド、コンパイル時 i18n、watchOS
Perry v0.4.0:コンパイル時の安全性を備えた本物の OS スレッド、30 以上のロケール向けゼロセレモニー国際化システム、9 番目のコンパイルターゲットとしての watchOS、オーディオ・カメラ API、並列コンパイラパイプライン。
Windows へのクロスコンパイル、iOS ゲームループ、100% テストパリティ
1 週間で 103 コミット:lld-link 経由で Linux から Windows へのクロスコンパイル、iOS ゲームループサポート、クラッシュレポート、2 段階 Hub ビルドパイプライン、セルフホスティングコンパイラが 68/68 の決定論的テストパリティを達成。
完全なパイプライン:ドキュメント、配布、WidgetKit
1 週間で 82 コミット:49 ページのドキュメントサイト、App Store と Play Store への自動公開、Homebrew と APT パッケージ、TypeScript からのネイティブ WidgetKit エクステンション、新しいウィジェット、http/https モジュール、セルフホスティング LLVM コンパイラ。
コンパイラからエコシステムへ:React、データベース、クラウドビルド
Perry はコンパイラから完全なエコシステムへと成長しました。perry/ui を中核に、MySQL/PostgreSQL/SQLite 対応の Prisma 互換 ORM、ユニバーサルプッシュ通知、App Store 公開付き分散ビルド、React 互換レイヤー——すべて 1 週間で。
6 つのプラットフォームすべてで完全な機能パリティ
20 以上のネイティブ UI ウィジェット、Canvas ウィジェット、テーブルビュー、システム通知、キーチェーンアクセス、マルチウィンドウサポート、そして macOS、iOS、iPadOS、Android、Linux、Windows での完全な機能パリティ——すべてひとつの TypeScript コードベースから。
プラグインシステムはパフォーマンスへの課税
プラグインアーキテクチャは拡張性と引き換えにパフォーマンスを犠牲にします。もし拡張性がランタイムではなくビルド時に実現できたら?コンパイル時合成なら両方手に入ります——オーバーヘッドゼロ、完全な柔軟性。
Hono、tRPC、Strapi をネイティブバイナリにコンパイル
Perry は 3 つの主要な TypeScript フレームワーク——Hono、tRPC、Strapi——をネイティブ ARM64 実行ファイルにコンパイルできるようになりました。1 秒未満でコンパイルし、2 MB 未満のバイナリを生成し、クラッシュなしで動作します。
Pry の開発:TypeScript によるネイティブ JSON ビューア
A walkthrough of building Pry, a native JSON viewer compiled from TypeScript to machine code with the Perry runtime and GC linked in and no webview.
TypeScript からクロスプラットフォームのネイティブ UI を実現
How Perry maps one TypeScript codebase to platform widgets across its documented targets, including the platform-specific limitations and prerequisites.
Perry の紹介
Perry compiles supported TypeScript to standalone native executables with its runtime and GC linked in, without requiring an external Node.js installation or JavaScript engine.