ブログ

Perryによるネイティブアプリ開発のニュース、チュートリアル、技術的な深掘り。

GCperformanceLLVMdebuggingarchitecture

ネイティブ TypeScript コンパイラの GC を作る:判断、意外な発見、そして現在地

Perry は LLVM で TypeScript をネイティブコードへコンパイルします。つまり、本物のガベージコレクタが必要です。私たちが下した判断、証拠を残さないバグ、構造上失敗できなかった CI ゲート、そして Node や参照カウント方式の AOT 競合との現在の数値を紹介します。

compilerGCdebuggingNode.js paritymilestone

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 まで。

watchOSApp StoreiOShow-to

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.

npmtest262Windowswidgetsmilestone

本物の 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 とドラッグ & ドロップがすべてのプラットフォームに着地した。

GCperformancebenchmarkscommunity

aya_koto のベンチマークが Perry の GC について教えてくれたこと

ある読者が AtCoder ABC451D で Perry をベンチマークし、Bun より 3.85× 遅いと計測した。それ以降、静かなリグレッションがギャップを 6.59× にまで広げていた。修正は私たちが予想していた場所にはなく、それが露わにした意図的な GC のトレードオフは本物で、Perry v0.5.875 は今や同じベンチで Bun と並ぶ:425 ms 対 431 ms。

updaterdevtoolsrefactorcommunitymilestone

自動アップデート、ライブインスペクター、そして自らを半分にしたコンパイラ

Perry v0.5.306 → v0.5.359 を 4 日で — 53 のパッチリリース、約 30 件の Issue クローズ、そして 3 つの大きなものが着地:デスクトップ自動アップデート用の perry/updater、localhost:7676 のライブインスペクター、そして最大の 4 ファイルを 33〜91% 縮めたコンパイラのリファクタリング。

GCJSONperformancebenchmarksmilestone

世代別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のあらゆる弱点が正直に提示されている。

npmdeveloper-experienceperformancewatch-modemilestone

npm配布、perry dev、そしてすべてのベンチマークで勝利

Perry v0.5.80 → v0.5.174を6日間で達成。@perryts/perryがサポートされている7つのすべてのプラットフォーム向けにnpmで出荷。perry devがインメモリASTキャッシュとディスク上のモジュール単位オブジェクトキャッシュの上にウォッチモードでの自動再コンパイルを追加。json_roundtripが最後のギャップを閉じる――Perryは今やNode.jsとBunの両方に対してすべてのベンチマークで勝利。

performancellvmJSONGCservermilestone

すべてを最適化する:一週間、68リリース、そしてJSONの547倍高速化

Perry v0.5.13 → v0.5.80を7日間で達成。JSON.parseがNodeとの547倍のギャップを解消。mimallocがグローバルアロケータとして採用。インラインキャッシュ、シェイプ遷移、型付きBufferスロット、i32ネイティブビット演算、スカラー置換、そしてFastifyとWebSocketサーバを稼働し続けるネイティブイベントループ。

compilersllvmcraneliftperformancemilestone

CraneliftからLLVMへ:Perryが24倍高速になるまで

PerryのバックエンドがCraneliftからLLVMに移行完了。初回の切り替えではベンチマークが70倍遅くなりましたが、6つのターゲット最適化により、Node.jsに対して14/15勝、最大24.6倍の高速化を達成しました。

tvOScross-compilationbillingWindowsmilestone

tvOS、Linux からの iOS クロスコンパイル、Perry Login

Perry v0.4.24:10 番目のコンパイルターゲットとしての tvOS、ld64.lld 経由で Linux から iOS・macOS へのクロスコンパイル、従量課金制の perry login、Windows UI 刷新、macOS 公証、5 日間で 120 コミット。

threadingi18nwatchOScompilermilestone

真のマルチスレッド、コンパイル時 i18n、watchOS

Perry v0.4.0:コンパイル時の安全性を備えた本物の OS スレッド、30 以上のロケール向けゼロセレモニー国際化システム、9 番目のコンパイルターゲットとしての watchOS、オーディオ・カメラ API、並列コンパイラパイプライン。

compilercross-compilationinfrastructuremilestone

Windows へのクロスコンパイル、iOS ゲームループ、100% テストパリティ

1 週間で 103 コミット:lld-link 経由で Linux から Windows へのクロスコンパイル、iOS ゲームループサポート、クラッシュレポート、2 段階 Hub ビルドパイプライン、セルフホスティングコンパイラが 68/68 の決定論的テストパリティを達成。

distributiondocumentationWidgetKitmilestone

完全なパイプライン:ドキュメント、配布、WidgetKit

1 週間で 82 コミット:49 ページのドキュメントサイト、App Store と Play Store への自動公開、Homebrew と APT パッケージ、TypeScript からのネイティブ WidgetKit エクステンション、新しいウィジェット、http/https モジュール、セルフホスティング LLVM コンパイラ。

ecosystemperry/uidatabasesinfrastructuremilestone

コンパイラからエコシステムへ:React、データベース、クラウドビルド

Perry はコンパイラから完全なエコシステムへと成長しました。perry/ui を中核に、MySQL/PostgreSQL/SQLite 対応の Prisma 互換 ORM、ユニバーサルプッシュ通知、App Store 公開付き分散ビルド、React 互換レイヤー——すべて 1 週間で。

UIcross-platformreleasemilestone

6 つのプラットフォームすべてで完全な機能パリティ

20 以上のネイティブ UI ウィジェット、Canvas ウィジェット、テーブルビュー、システム通知、キーチェーンアクセス、マルチウィンドウサポート、そして macOS、iOS、iPadOS、Android、Linux、Windows での完全な機能パリティ——すべてひとつの TypeScript コードベースから。

architectureperformancecompiler

プラグインシステムはパフォーマンスへの課税

プラグインアーキテクチャは拡張性と引き換えにパフォーマンスを犠牲にします。もし拡張性がランタイムではなくビルド時に実現できたら?コンパイル時合成なら両方手に入ります——オーバーヘッドゼロ、完全な柔軟性。

compilerframeworksprogress

Hono、tRPC、Strapi をネイティブバイナリにコンパイル

Perry は 3 つの主要な TypeScript フレームワーク——Hono、tRPC、Strapi——をネイティブ ARM64 実行ファイルにコンパイルできるようになりました。1 秒未満でコンパイルし、2 MB 未満のバイナリを生成し、クラッシュなしで動作します。

tutorialshowcasePry

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.

architectureUIcross-platform

TypeScript からクロスプラットフォームのネイティブ UI を実現

How Perry maps one TypeScript codebase to platform widgets across its documented targets, including the platform-specific limitations and prerequisites.

announcementcompilerTypeScript

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.