コンテンツにスキップ
Wikipedia

Deno

出典: フリー百科事典『ウィキペディア(Wikipedia)』

2024年9月29日 (日) 12:55; 舌先現象になります (会話 | 投稿記録) による版 (リンク修正)(日時は個人設定で未設定ならUTC)

舌先現象になります (会話 | 投稿記録)による2024年9月29日 (日) 12:55時点の版 (リンク修正)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
Deno
作者 ライアン・ダール
初版 2018年5月13日 (6年前) (2018年05月13日)[1]
最新版 1.46.3[2]  ウィキデータを編集 - 2024年9月4日 (25日前)
リポジトリ ウィキデータを編集
プログラミング
言語
対応OS
種別 ランタイム環境
ライセンス MITライセンス
公式サイト deno.com ウィキデータを編集
テンプレートを表示

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]

  • APIの設計でpromiseを使用しないという選択をしたこと
  • 古いGYPビルドシステムを使用するようにしたこと
  • node_modulespackage.jsonの採用
  • 拡張子を除外したこと
  • index.jsによる魔法のようなモジュールの依存関係の解決
  • V8のサンドボックス環境の破壊

最終的に、彼は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] :

  1. CommonJSの代わりに、ES Moduleをデフォルトのモジュールとシステムとして使用する。
  2. ウェブブラウザと同様に、依存関係 (ローカル及びリモート) を読み込むためにURLを使用する。
  3. リソースを取得するためのパッケージ管理システムが組み込まれているので、npmは不要である。
  4. キャッシングメカニズムを備えたスナップショットTypeScriptコンパイラを使用することによるTypeScriptのサポート。
  5. 幅広いWeb APIを実装することによるウェブブラウザとの互換性の向上。
  6. サンドボックスコードを実行するために、ファイルシステムとネットワークアクセスを制御することができる。
  7. promise、ES6及びTypeScriptの機能を利用するためにAPIを再設計したこと。
  8. コアAPIのサイズを最小限にしながら、外部に依存関係の無い大きな標準ライブラリを提供すること。
  9. 特権システムAPIを呼び出しとバインディングの使用のために、メッセージ受け渡しチャネルを使用すること。

[編集 ]

以下は、読み取り / 書き込み / ネットワーク権限無しの基本的なDenoスクリプトの実行例である (サンドボックスモード):

denorunmain.ts

権限を許可する場合は、明示的に対応するフラグを指定することが必要:

denorun--allow-read--allow-netmain.ts

スクリプトの依存関係を検査する場合は、infoサブコマンドを使用する:

denoinfomain.ts

Denoでの基本的なHello worldは以下の通りである (Node.jsと同様):

console.log("Hello, World!");

Denoオブジェクトはウェブブラウザでは使用できないDeno固有のAPIにグローバル名前空間を提供する。UNIXcat コマンドは、以下のように実装することができる:

/**
 * cat.ts
 */
for(constfilenameofDeno.args){
constfile=awaitDeno.open(filename);
awaitfile.readable.pipeTo(Deno.stdout.writable,{preventClose:true});
}

このプログラムを実行するには、ファイルシステムの読み取り許可が必要である:

denorun--allow-readcat.tsmyfile

以下はDenoによる基本的なHTTPサーバの実装である:

Deno.serve((req)=>newResponse("hello world"));

Denoはリモートの標準ライブラリファイルを自動的にダウンロードしてキャッシュし、コードをコンパイルする。同様に、URLを入力ファイル名として指定することで、明示的にダウンロードせずに標準ライブラリスクリプト (ファイルサーバなど) を直接実行することができる (-Aは全ての権限を有効にするフラグである):

$ denorun-Ahttps://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/

脚注

[編集 ]
  1. ^ "Contributors to denoland/deno". GitHub. 2020年5月15日閲覧。
  2. ^ "Release 1.46.3"; 閲覧日: 2024年9月21日; 出版日: 2024年9月4日.
  3. ^ Dylan Schiemann (2018年12月26日). "Deno: Secure V8 TypeScript Runtime from Original Node.js Creator". InfoQ. 2019年11月18日閲覧。
  4. ^ a b JSConf (2018年6月6日). "Node.jsに関する10の反省点". YouTube. 2019年11月18日閲覧。
  5. ^ a b c "Deno Manual". deno.land. 2019年11月18日閲覧。
  6. ^ Paul Krill (2018年6月21日). "Ryan Dahl’s Node.js regrets lead to Deno". InfoWorld. 2019年11月18日閲覧。
  7. ^ Ryan Dahl (2018年6月). "Design Mistakes in Node". 2019年11月18日閲覧。
  8. ^ "denoland/deno at golang". GitHub. 2019年11月18日閲覧。
  9. ^ "Suggestion: Look into porting to Rust and using Tokio". GitHub. 2019年11月18日閲覧。
  10. ^ "Protobuf seems like a lot of overhead for this use case?". GitHub. 2019年11月18日閲覧。
  11. ^ "Replace flatbuffers". GitHub. 2019年11月18日閲覧。
  12. ^ "Remove flatbuffers". GitHub. 2019年11月18日閲覧。
  13. ^ "deno_std". GitHub. 2019年11月18日閲覧。
  14. ^ "Pronunciation #5707". GitHub. 2022年8月22日閲覧。
  15. ^ "マニュアル冒頭に発音が記載". deno.com. 2024年1月12日閲覧。

関連項目

[編集 ]

外部リンク

[編集 ]
概念
エンジン
コンパイラ
デバッガ
エディタ
サーバーサイド
フレームワークライブラリ
ユニットテスト
Docジェネレータ
コード解析
パッケージ管理
アプリケーションバンドラー
関連技術
人物
パッケージ形式 (英語版)
 
コンパイルされているパッケージ(実行ファイル)
Windows
macOS
Unix系
dpkg
RPM
tar
その他
Solaris
z/OS
組み込みOS
モバイルOS
ゲーム機
クロスプラットフォーム
ウェブブラウザ

AltStyle によって変換されたページ (->オリジナル) /