Program-facts (wpfacts) stage takes ~18 min / 4 GB on typescript.js (expected seconds)

オープン
#13,974 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
rust, typescript

調査の方向性

Start with program_facts.rs, which the issue names as describing the whole-program facts stage, and inspect the facts-only reporting options PERRY_FACTS_ONLY=1 and PERRY_FACTS_REPORT=1. Reproduce with the stated 10-line ts.transpileModule program and [email protected], then profile constraint generation and solving. Done means the stage handles tsc-sized modules in seconds or exits early with a note when a budget is exceeded.

索引モデルが issue の本文から書いたものです。

説明

bug package-audit performance

Compiling a program that imports typescript from source spends ~18 minutes in the whole-program facts stage. program_facts.rs describes that stage as "a few seconds at most".

Setup: [email protected] with perry.compilePackages: ["typescript"] (plus allow.compilePackages), Perry ced22982, M1 mini. The program is a 10-line ts.transpileModule call.

run result
default compile still in the facts stage after >20 min (killed)
PERRY_FACTS_ONLY=1 PERRY_FACTS_REPORT=1 1061 s wall: 548 s constraint generation, 80 s solve, ~12.5M nodes, 4.1 GB peak footprint; wrote a 3.2 GB report dump
PERRY_PROGRAM_FACTS=0 facts stage skipped; the remaining compile (mostly LLVM codegen of the single 9 MB typescript.js module, 34 units, ~990 MiB IR) takes 17–29 min at 7.4–10.3 GB peak RSS

That LLVM time is a separate cost issue. The facts stage alone should not be ~18 min / 4 GB.

Why it matters: removing the native typescript binding (owner decision) makes import ts from 'typescript' compile typescript.js from source for every user. With the current numbers, each program that imports typescript costs ~35–45 min to compile by default. The object cache didn't hit across different entry programs either.

Expected: the facts stage scales to tsc-sized modules in seconds, or bails out early with a note when a module exceeds a budget.

主要言語
Rust
スター
4.9k
フォーク
166
平均マージ
3時間 46分
マージ済み PR(30日)
891

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

PerryTS/perry のほかの issue

PerryTS/perry の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。