deno是一個基於v八、rust和Tokio的Javascript/Typescript的安全運行時。它在內部嵌入了一個typescript的編譯器。能夠將typescript編譯成js而後運行在v8上,並經過c++ libdeno實現js與rust的通訊交互,固然deno也能夠直接運行Javascript代碼。javascript
linux/mac
curl -fsSL https://deno.land/x/install/install.sh | sh
windows
iwr https://deno.land/x/install/install.ps1 | iex
詳細的細節請參考官網安裝介紹html
摘抄自維基百科斐波那契數列java
test.js
function fibo(n) { if (n === 0) return 0; let fn = 0, nextFn = 1; let tmp_fn = 0, tmp_nextFn = 0; for (var i = 0; i < n; i++) { tmp_fn = nextFn; tmp_nextFn = nextFn + fn; fn = tmp_fn; nextFn = tmp_nextFn; } return tmp_fn; } console.log(fibo(13));
deno ./test.js
test.ts
function fibo(n: number) { if (n === 0) return 0; let fn: number = 0, nextFn: number = 1; let tmp_fn: number = 0, tmp_nextFn: number = 1; for (let i: number = 0; i < n; i++) { tmp_fn = nextFn; tmp_nextFn = nextFn + fn; fn = tmp_fn; nextFn = tmp_nextFn; } return tmp_fn; } console.log(fibo(13));
deno ./test.ts
import * as log from "https://deno.land/x/std/log/mod.ts";
(async () => { for (let i = 1; i < Deno.args.length; i++) { let filename = Deno.args[i]; let file = await Deno.open(filename); await Deno.copy(Deno.stdout, file); file.close(); } })();
下圖1是deno的部分文件截圖linux
上圖中圈出來的三個文件夾分別是c++
分別對應deno的api層、中間層、和實現層,其中js中主要是typescript的代碼,包含typescript的編譯器和deno暴露給用戶的api。libdeno中主要是c++代碼,用來加載v8實例,實現typescript和rust的通訊。src文件中主要是rust的代碼,是deno功能的具體實現。例如用戶使用File實例的write方法來寫文件,其實是api層(typescript)經過中間層(libdeno)將數據傳輸給實現層(rust),最終寫文件操做由rust去完成。deno結合了Typescript/Javascript的易用性和rust的系統語言能力。下圖2能夠清晰的表示js和rust之間的邏輯關係。git
圖來自於 官網,圖2 deno的架構圖
~~~接下來還會有兩篇文章分析deno的內部原理~~~github