Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rust製JavaScript EngineのTypeScriptサポート

Avatar for ユウト ユウト
May 23, 2025
190

Rust製JavaScript EngineのTypeScriptサポート

近年、TypeScriptは広く普及し、主要なJavaScriptランタイムも対応を進めています。しかし、これらはあくまでランタイム側でのサポートであり、エンジン自体がTypeScriptを直接実行するわけではありません。
本LTでは、Rust製JavaScriptエンジン Nova におけるTypeScript実行の取り組みを紹介し、エンジンレベルでのTypeScriptサポートの可能性について考察します。

Avatar for ユウト

ユウト

May 23, 2025
Tweet

Transcript

  1. Rust製JavaScript Engine is Nova Why build a JavaScript engine? What

    is the Nova JavaScript engine? Rust言語で書かれたJavaScriptエンジン 他のJavaScriptエンジン: v8,JavaScriptCore,SpiderMonkey,LibJS,Boaなど test262の通過率は約66% i. 大体動く: Array,Map,TypedArray,Proxy, etc… ii. 未実装: Module,RegExp,Atomic, etc… 2
  2. JavaScript EngineでTypeScriptを実行する( ) Q. 以下のコードをブラウザで実行してください。 const str: string = "TSKaigi

    2025!!" A. 型アノテーションはJavaScriptの構文ではないので構文エラーとなる。 ( Uncaught SyntaxError: Missing initializer in const declaration ) 5
  3. 実装コード let mut source_type = if strict_mode { SourceType::default().with_module(true) }

    else { SourceType::default().with_script(true) }; if cfg!(feature = "typescript") { source_type = source_type.with_typescript(true); } もしかしたらjsxも動くかも...?? if cfg!(feature = "jsx") { source_type = source_type.with_jsx(true); } 7
  4. どのようにサポートしているのか? Parserにoxcを使用 // nova_vm/src/ecmascript/scripts_and_modules/source_code.rs#L95 let parser = Parser::new(..., source_text, source_type);

    Parse後に、JavaScriptエンジンなら当然、bytecodeにコンパイルする処理を書 く必要がある TypeScript独自の構文であるenumやnamespaceも同様にJavaScriptエンジンが扱 うならbytecodeにコンパイルさせる必要がある enumのbytecodeコンパイルは実装途中( #598 ) 8