Slide 1

Slide 1 text

Rust製JavaScript EngineのTypeScriptサポート 2025/05/23 tskaigi 2025 1

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

JavaScript EngineでTypeScriptを実行する( ) 3

Slide 4

Slide 4 text

JavaScript EngineでTypeScriptを実行する( ) Q. 以下のコードをブラウザで動かしてください。 const str: string = "TSKaigi 2025!!" 4

Slide 5

Slide 5 text

JavaScript EngineでTypeScriptを実行する( ) Q. 以下のコードをブラウザで実行してください。 const str: string = "TSKaigi 2025!!" A. 型アノテーションはJavaScriptの構文ではないので構文エラーとなる。 ( Uncaught SyntaxError: Missing initializer in const declaration ) 5

Slide 6

Slide 6 text

Novaでは Novaでは、Rustのfeatureフラグを使用することでTypeScriptを実行できるようになっ ている const str: string = "TSKaigi 2025!!" $ cargo run --features typescript eval index.ts $ andromeda run index.ts 6

Slide 7

Slide 7 text

実装コード 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

Slide 8

Slide 8 text

どのようにサポートしているのか? 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

Slide 9

Slide 9 text

正式にサポートするの? わからない TypeScriptのサポートをメインに考えているわけではないので、本格的にサポー トするかはわからない まずtest262を通すことが優先。 現状のTypeScriptサポートも聞いたら、「やってみたら動いた!」みたいな感じ だった。 なので誰か手が空いた人が進めていくみたいな感じにはなると思う。 9

Slide 10

Slide 10 text

個人的な意見 現状の開発において、TypeScriptを使わないことはありえなくなってきている(とい うかなっている)。 であれば、JS EngineがTypeScriptをネイティブで実行できるようにしても良いのか なと思う。 そしてその結果、あわよくば型情報を使った最適化を可能にし、よりJavaScriptが高 速で動くことを期待したい。 10