技术编辑:徐九丨发自 侏罗纪公园
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