最近は JavaScript 関係のツールが JavaScript じゃなくてネイティブ言語で作られてるのをよく見ます
新規のものもあれば 既存のプロジェクトを別言語に置き換えているのもあります
特に多いのが Rust
Node.js の代替となる Deno が Rust なのでそれに関係するプロジェクトが多いというのもあるのかもです
◯ Rust
Deno
https://deno.land/
SWC (Speedy Web Compiler)
https://swc.rs/
dprint
https://dprint.dev/
fnm (Fast Node Manager)
https://github.com/Schniz/fnm
(以前は reason)
Volta
https://volta.sh/
Rome
https://rome.tools/
(以前は JavaScript)
◯ Go
esbuild
https://esbuild.github.io/
◯ Zig
bun
https://bun.sh/
esbuild は一時期話題になってたけど Rust の SWC と被るし Rust ツールがメインになるのかと思ってましたが SWC を作った人が tsc を Go に移植するという話を最近見かけました
https://kdy1.dev/posts/2022/1/tsc-go
TypeScript の型で shared mutability や GC に頼る部分が多くて Rust との相性が悪いのだとか
ネイティブな言語に移行して速度が上がるのは良いことですが JavaScript で書かれていることのメリットもあったので 喜ぶべきなのかそうじゃないのか難しい気持ちです
ツールが JavaScript で書かれていると 使うユーザにとっても詳しい言語なので 内部で何をしてるか気になったときに 実際に動いてるコードを見て把握したり 修正したりが容易でした
それ以外の言語になると 簡単に読めないというのがあります
ソースコードそのものを実行しているわけじゃないので まずソースコードを探さないといけないというのもそうですし 言語として詳しくないというのもあります
スクリプト言語と比べるとネイティブの言語って読みづらいんですよね
さらにソースコードの JavaScript ファイルを修正しながら何度か再実行してみたりといったことが簡単には行かないです
ビルドするツールを入れたり環境の準備が必要ですし 実行のたびにビルドが必要です
気軽に修正を加えられません
機能がなかったり環境依存の問題が起きても自分で修正すればいいやくらいの気軽さで使うのは難しいので ちゃんと使うのは内部を知ったり変更する必要がないくらいに安定して十分なオプションも用意されてからですかね
ググって Rust のドキュメントのページを開いたときに 同じような見た目なのに別ドキュメントになってることが多くて まとめてほしかったので公式サイト内のリンクにあったのをまとめた
後半はほとんど見ることなさそう
The Rust Programming Language - The Rust Programming Language
https://doc.rust-lang.org/book/title-page.html
Introduction - Rust By Example
https://doc.rust-lang.org/stable/rust-by-example/index.html
Introduction - The Rust Reference
https://doc.rust-lang.org/reference/index.html
Introduction - The Edition Guide
https://doc.rust-lang.org/edition-guide/index.html
Getting started - Command Line Applications in Rust
https://rust-cli.github.io/book/index.html
Introduction - Rust and WebAssembly
https://rustwasm.github.io/book/introduction.html
Overview - Rust Forge
https://forge.rust-lang.org/index.html
Introduction - The Cargo Book
https://doc.rust-lang.org/cargo/index.html
What is rustdoc? - The rustdoc book
https://doc.rust-lang.org/rustdoc/index.html
What is rustc? - The rustc book
https://doc.rust-lang.org/rustc/index.html
Introduction - The Embedded Rust Book
https://doc.rust-lang.org/embedded-book/index.html
Introduction - The Rustonomicon
https://doc.rust-lang.org/nomicon/index.html
The Unstable Book - The Rust Unstable Book
https://doc.rust-lang.org/nightly/unstable-book/index.html
後半はほとんど見ることなさそう
The Rust Programming Language - The Rust Programming Language
https://doc.rust-lang.org/book/title-page.html
Introduction - Rust By Example
https://doc.rust-lang.org/stable/rust-by-example/index.html
Introduction - The Rust Reference
https://doc.rust-lang.org/reference/index.html
Introduction - The Edition Guide
https://doc.rust-lang.org/edition-guide/index.html
Getting started - Command Line Applications in Rust
https://rust-cli.github.io/book/index.html
Introduction - Rust and WebAssembly
https://rustwasm.github.io/book/introduction.html
Overview - Rust Forge
https://forge.rust-lang.org/index.html
Introduction - The Cargo Book
https://doc.rust-lang.org/cargo/index.html
What is rustdoc? - The rustdoc book
https://doc.rust-lang.org/rustdoc/index.html
What is rustc? - The rustc book
https://doc.rust-lang.org/rustc/index.html
Introduction - The Embedded Rust Book
https://doc.rust-lang.org/embedded-book/index.html
Introduction - The Rustonomicon
https://doc.rust-lang.org/nomicon/index.html
The Unstable Book - The Rust Unstable Book
https://doc.rust-lang.org/nightly/unstable-book/index.html
Discord も Go → Rust に切り替えたらしいです
https://blog.discordapp.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f
けっこうこの移行よくみかけますね
最近だとネイティブにビルドできるメジャーなものといえばだいたいこの 2 つだからかな
C/C++ は複雑で避けられがちですし D はまだ生きてたのって感じですし
.NET 系は Core は Linux などで動くとはいってもネイティブとはちょっと違いますし
同じく Java 系も
個人的には Go は興味なくて Rust は興味あるので Rust に移行するプロダクトが多いのは嬉しいことです
そういえば deno も当初は Go で実装していて どうして Rust にしないの? みたいなこと言われて Rust にしたんでしたっけ
そんな deno も予定では 2 月末に 1.0 でるらしいです
完全 Web 互換らしいのでリリースしたら使ってみようかと期待してます
https://blog.discordapp.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f
けっこうこの移行よくみかけますね
最近だとネイティブにビルドできるメジャーなものといえばだいたいこの 2 つだからかな
C/C++ は複雑で避けられがちですし D はまだ生きてたのって感じですし
.NET 系は Core は Linux などで動くとはいってもネイティブとはちょっと違いますし
同じく Java 系も
個人的には Go は興味なくて Rust は興味あるので Rust に移行するプロダクトが多いのは嬉しいことです
そういえば deno も当初は Go で実装していて どうして Rust にしないの? みたいなこと言われて Rust にしたんでしたっけ
そんな deno も予定では 2 月末に 1.0 でるらしいです
完全 Web 互換らしいのでリリースしたら使ってみようかと期待してます
JavaScript のバンドラーというと
◯ webpack
◯ parcel
◯ rollup
くらいだろうと思ってたらこんなのをみつけた
https://github.com/nathan/pax
JavaScript じゃなくて Rust で作られてるみたい
バンドラーって基本 Babel みたいなトランスパイルや UglifyJS みたいなミニファイツールを使うし それらは基本 JavaScript で作られてるからバンドラーも JavaScript だと思ってけど Rust らしい
そういうの全部含んでる大規模なプロジェクトには見えないし どういうものなのか軽くみただけだとよくわからない
少し気になったところがあって 前の名前が 「parcel redux」 で略して 「pax」 らしい
https://github.com/nathan/pax/commit/ae70ce4a5370bbfcd5395b287f4595e10b9b98f5
内部で parcel 使ってて Rust はただのラッパーと考えたけど それだと直接 parcel 使うのより遅そうだしあんまりメリットがない
速度は早いらしいし たまたま名前かぶっただけであの parcel とは関係ないのかな?
もうひとつの redux の方はフロントエンドの状態管理ライブラリなわけでバンドルには関係なさそうだし
◯ webpack
◯ parcel
◯ rollup
くらいだろうと思ってたらこんなのをみつけた
https://github.com/nathan/pax
JavaScript じゃなくて Rust で作られてるみたい
バンドラーって基本 Babel みたいなトランスパイルや UglifyJS みたいなミニファイツールを使うし それらは基本 JavaScript で作られてるからバンドラーも JavaScript だと思ってけど Rust らしい
そういうの全部含んでる大規模なプロジェクトには見えないし どういうものなのか軽くみただけだとよくわからない
少し気になったところがあって 前の名前が 「parcel redux」 で略して 「pax」 らしい
https://github.com/nathan/pax/commit/ae70ce4a5370bbfcd5395b287f4595e10b9b98f5
内部で parcel 使ってて Rust はただのラッパーと考えたけど それだと直接 parcel 使うのより遅そうだしあんまりメリットがない
速度は早いらしいし たまたま名前かぶっただけであの parcel とは関係ないのかな?
もうひとつの redux の方はフロントエンドの状態管理ライブラリなわけでバンドルには関係なさそうだし