Deno
Denoは、V8 JavaScriptエンジン及びRustプログラミング言語に基づいた、JavaScript及びTypeScriptのランタイム環境である。Node.jsの作者であるライアン・ダールによって作成され、セキュリティと生産性に焦点を当てている[3]。ライアン・ダールが2018年に行った講演「Node.jsに関する10の反省点」で発表された[4]。Denoは単一の実行ファイル内でランタイム環境とパッケージ管理システムの両方の役割を明示的に引き受けるので、別途パッケージ管理システムを必要としない[5][6]。 歴史DenoはJSConf EU 2018でのライアン・ダールによる講演「Node.jsに関する10の反省点」で発表された[4]。ライアン・ダールはこの講演において、後悔しているNode.jsの初期設計での決定について言及し、以下の点を挙げている。[7]
最終的に、彼はDenoのプロトタイプ版を発表し、Protocol Buffersのようなシリアライズツールを使用したメッセージの受け渡しを通じてシステムコールバインディングを実現し、アクセス制御用のコマンドラインフラグを提供することを目指した。 Denoは当初はGoで実装され、特権側 (Goとシステムコールアクセス) と非特権側 (V8) の間のシリアライズにProtocol Buffersを使用していた[8]。しかしながら、実行時間が2倍になることとガベージコレクションの圧力から、コードは直ぐにRustで再実装された[9]。非同期イベント駆動型プラットフォームとしてlibuvに代わってTokioが導入され、より高速な「ゼロ・コピー」シリアライゼーション及びデシリアライゼーションのためにFlatBuffersが導入された[10]が、2019年4月にシリアライゼーションの大幅なオーバーヘッドを測定したベンチマークが公開されたことによって[11]、FlatBuffersは同年8月の後半に削除された[12]。 Goの標準ライブラリをモデルとしたDenoの標準ライブラリは、広範なツール及びユーティリティを提供するために2018年11月に作成され、Node.jsの依存関係での爆発問題を部分的に解決した[13]。 概要Denoは現代のプログラマのための生産的で安全なスクリプト環境を目指している[5]。Node.jsと同様に、Denoはイベント駆動型アーキテクチャに重点を置いており、非ブロッキングコアIOユーティリティのセットとそのブロッキング版を提供している。DenoはWebサーバの作成や科学計算に利用することができる。発音は当初デノだったがディーノ[14][15] となった模様。 Node.jsとの比較DenoとNode.jsはGoogle ChromeなどのChromiumベースのウェブブラウザで採用されているV8 JavaScriptエンジン上に構築されたランタイム環境である。どちらも内部イベントループがあり、スクリプトと広範なコマンドラインユーティリティを実行するためのコマンドラインインタフェースを提供している。 DenoがNode.jsと異なる主な点は以下の通りである[5]:
例以下は、読み取り / 書き込み / ネットワーク権限無しの基本的なDenoスクリプトの実行例である (サンドボックスモード): deno run main.ts
権限を許可する場合は、明示的に対応するフラグを指定することが必要: deno run --allow-read --allow-net main.ts
スクリプトの依存関係を検査する場合は、 deno info main.ts
Denoでの基本的なHello worldは以下の通りである (Node.jsと同様): console.log("Hello, World!");
/**
* cat.ts
*/
for (const filename of Deno.args) {
const file = await Deno.open(filename);
await file.readable.pipeTo(Deno.stdout.writable, { preventClose: true });
}
このプログラムを実行するには、ファイルシステムの読み取り許可が必要である: deno run --allow-read cat.ts myfile
以下はDenoによる基本的なHTTPサーバの実装である: Deno.serve((req) => new Response("hello world"));
Denoはリモートの標準ライブラリファイルを自動的にダウンロードしてキャッシュし、コードをコンパイルする。同様に、URLを入力ファイル名として指定することで、明示的にダウンロードせずに標準ライブラリスクリプト (ファイルサーバなど) を直接実行することができる ( $ deno run -A https://deno.land/std/http/file_server.ts
Download https://deno.land/std/http/file_server.ts
Compile https://deno.land/std/http/file_server.ts
...
HTTP server listening on http://0.0.0.0:4500/
脚注
関連項目外部リンク |