技術編輯:徐九丨發自 侏羅紀公園
SegmentFault 思否報道丨公衆號:SegmentFault前端
近日,Deno 1.0 正式發佈了。這是 Node 之父 Ryan Dahl 繼 Node 以後的又一大做。git
Deno 是一個通用的 JavaScript / TypeScript 編程環境。它聚集了許多最佳的開源技術,並在一個小的可執行文件中提供了全面的解決方案。github
Deno 和 Node 做爲「同父異母」的親兄弟,不只名字很像,就連要解決的問題也很像。那麼 Ryan 推出 Deno 的目的什麼?它們之間又有哪些異同?npm
Dahl 曾經在 JS Conf Berlin 上作了一個題爲《10 THINGS I REGRET ABOUT NODE.JS》的演講,在這個演講中他總結了本身當初在 Node 設計中的失誤。編程
其中的遺憾之一是沒有使用 JavaScript Promises,這些東西在 2009 年被添加到 Node 中,但在 2010 年被移除。這致使的結果是不少 Node 的 Async API "老化嚴重"。後端
另外一個失誤是安全性和缺少 Node 沙盒。Dahl 表示使用 GYP(Generate Your Projects)的構建系統對用戶來講是"可怕的體驗"。安全
與早期關注均衡 I/O 的狀況相反,模塊系統本質上是過後考慮的。若是考慮到這一點,那麼在早期階段就能夠作的更好。網絡
這也是 Dahl 爲何要搞 Deno 的緣由,但 Deno 並不定位爲 Node 的替代品,從總體功能來看,Deno 有更大的野心。據業內人士分析討論,推測是想要取代如今陳舊的先後端開發模式,讓 Deno 一統先後端開發全流程。異步
它創建在V8(Chromium和Node.js所使用的JavaScript引擎)上,但與Node不一樣的是,它利用了V8沙盒的安全優點。除非明確啓用,不然沒有文件、網絡或環境訪問權限。工具
與用 C++編寫的 Node.js 不一樣,Deno 用 Rust 編寫。
Deno_core 是一個 Rust 包,任何人均可以用它將 JavaScript 運行時嵌入到 Rust 中,而 Deno 就是創建在 deno_core 之上。
另外一個包 Rusty_v8,提供了 Rust 與 V8 C++ API 的綁定;它 "試圖成爲一個安全的接口",但還不是百分之百的安全。"可以以安全的方式與 V8 這樣複雜的虛擬機進行交互是至關驚人的,這讓咱們發現了 Deno 自己的許多困難的 bug,"Dahl 發佈的帖子解釋道。
Deno 的調度是由 Tokio 處理的,它是 Rust 的異步運行時。另外一個關鍵組件是 TypeScript,它是 Deno 中的主要語言。你能夠直接運行 TypeScript 文件,不須要將其編譯成 JavaScript。
Deno自己就是一個完整的生態系統,具備運行時和其本身的模塊/軟件包管理系統。這爲內置全部工具提供了更大的空間,而且成功地消除了 JavaScript 開發中的許多缺點。好比:
不管如何,由 Dahl 大神光環加持,再加上「面向將來」的設計,Deno 確定會成爲一個熱議的話題。
不過雖然此次 Deno 的版本號標爲了 1.0,但也仍處於很是早期的階段,Deno API 的某些部分還不穩定,根據文檔所說,Deno 的標準模塊也還不太穩定。該團隊還表示內部使用的 TypeScript 編譯器速度很是慢。
他們的意圖是將 TypeScript 編譯器移植到 Rust 上,儘管這是一個大項目。若是完成的話,對全部的 TypeScript 開發者都會有幫助,因此 Deno 團隊也在呼籲你們爲他們提供幫助。
因此,對於 Deno 是否會取代 Node 這件事,如今討論還爲時尚早。但多一個輪子多一條路,Deno 的出現,對於前端這個領域來講,必定是一個好事情。
相關資料:官方文檔:https://deno.land/
GitHub 地址:https://github.com/denoland/deno