
自Deno内部发布以来已经过去了18个月,发布了预览版本,在Habré上发表了几篇文章,Ryan参加了会议并谈论了他。 但是,我从未在任何地方看到过对该项目的深入分析-由于某些原因,每个人都只能翻译文档...
好吧,让我们现在尝试做。 在过去的五年中,我一直在Node.JS上进行写作,而我现在正在工作的OneTwoTrip公司已经在节点上编写了大约9年的项目(是的,我在节点上的整体中写了大约9年的故事)。 因此分析应该很好。 此外,我已经在Moscow Node.JS Meetup 10上告诉过他,这很有趣。 顺便说一句,如果您更方便听而不是阅读,那么您可以在这里收听和观看。 我的第二个讲话,我是穿着粉红色衬衫的家伙。
奇怪的是,为了了解项目的来源和原因,有必要落入过去。 因此,我们投入了一些p,举起了delorean的大门,然后踏上了征途-回顾使Node.JS成为现在的样子的重要十年。

转发过去
2009年
Ryan Dahl 在这里宣布了Node.JS, 这是JSConf 2009上的第一个演示。
2010
Express,socket.io出现-目前的主要组成部分几乎是所有服务。
确实有一些疯狂的人真正在编写服务器代码!
2011年
大个子开始与Node.JS调情-包括Uber和Linkedin。
Npm 1.0版本。
节点开始在Windows上运行。
2012年
Ryan不再开发Node.JS。 请记住 。 那是2012年。 因此,瑞安(Ryan)当然是创造者,并且为生态系统做出了很多贡献-但是接下来的7年没有他的参与而过去了。
2013年
Paypal,沃尔玛,eBay的节点。
Koa出现-还记得关于发生器的多少份副本被破坏吗?
2014年
Netflix上的节点。 人们开始尝试将项目正式化为更成熟的形式,并采用一种开放的模式来管理顾问委员会。 导致io.js分叉的技术停滞。
2015年
处理错误。 在Node Foundation的主持下以及Node 4的发布下,io.js和Node的狂喜合并。我必须说,这是我认为是第一个确实可以开发某些东西的版本。 如果有人在版本0.xx上写-那么您会记得var,回调地狱,一堆用于简化异步工作的不同库(例如step和async。是的,async不仅是async await,而且是npm库)。
2016年
左派事件仍然是邪恶的舌头,使人回想起了生态系统。 多少文章和攻击。 仇恨者会讨厌。 但是,已经从中吸取了重要的教训。
2017年
突破的一年。 我不会提及该节点的所有版本以及使用npm的模块安装数量的增加,但是,今年Node.JS上的服务数量超过了800万,每周的安装数量为30亿。 很难想象的绝对宇宙数字。
N-API也出现了,Node.JS在Ayo.js中又被派生了。 关于SJW的一个非常有趣且具有启发性的故事-值得单独写一篇文章,所以我不再赘述-我只建议您在闲暇时阅读。 仅向前扰流器表明,前叉安全地死了。
2018年
自左撇子以来的第二次狂躁症-现在是关于事件流如何窃取比特币。 数百篇有关生态系统不安全的帖子。 Fantasy帖子介绍了npm软件包如何窃取信用卡信息。 社区正在像软管一样喷洒泥浆。 我必须说,这非常有用,并且还得出了一些结论-稍后再得出结论。
此外,Ryan突然在社区上发布了有关值得在Go上编写严肃的服务这一事实的帖子,描述了Node中他遗憾的10件事,并宣布了解决所有问题的Deno。
2019年
Deno进入预览版,中心上出现了很多文章,现在您正在阅读其中的一篇。

回到现在
我希望这次巡回演出后,能更清楚地了解生态系统存在什么样的痛点以及它是如何发展的-在这种情况下,更容易了解现在的情况。
Ryan Dahl对Node.JS感到遗憾的十件事
不幸的是,我没有找到随报告翻译而来的文章,因此我将在此处简要列出它们,并在此处进行评论。
- 旅程开始时缺乏对承诺的支持 。 是的,如果Ryan不兑现承诺,将其简化会更加简单,因为它们是在节点开发之初并未产生的额外复杂性。 所有这些回调地狱所浪费的时间肯定是可惜的-但是在2019年,所有理智的库都将诺言作为主要界面。 而且,甚至系统库也最终提供了承诺。
- 系统调用和网络调用的安全性。 一方面-是的,当一切都安全的时候很好。 另一方面,目前尚不清楚该节点在这方面比任何其他媒介都差。
- 使用GYP构建本机模块。 是的,可能是多余的,但是谁能知道铬会离开她。 再次-如果镀铬消失了,那么我们也可以离开....
- 过多的package.json。 NPM作为垄断登记册。 关于package.json的参数有点奇怪。 例如,瑞安(Ryan)说那里有任何垃圾,就像牌照一样。 但是,如果不存在,您如何迅速找出项目中使用的模块的许可证?..关于NPM的争论更像是事实,但我们稍后将对此进行详细介绍。
- 节点模块。 依赖项的复杂解析无法像在浏览器中那样工作。 是的,没错。 稳定的依赖关系开始出现在npm的4-5版本上,没有任何奇迹。 但是该机制有效,并允许您做一些令人惊奇的事情-目前还可以。 至于与浏览器的兼容性,无论您做什么,仍然会有处理代码的阶段,例如编译和收集包。 因此,节点模块在这种情况下不太可能具有任何意义。
- 需求无延伸及其不确定性 。 是的,可能不好。 但还不足以提及...
- index.js是不必要的并发症。 也无足轻重而无聊点来描述。
顺便说一句,请注意,我说瑞安后悔了10件事,但仅是7分,这不是一个错误,我多次审查了他的报告和报告的评论。 要么是关于处理数值的话题,这是一个复杂的笑话,要么是Ryan太害羞以至于无法再说3点...
但是好吧,我们了解了问题并继续前进。 从逻辑上讲,在Deno中,Ryan决定摆脱Node.JS的所有问题。 让我们看看他发生了什么。
迪诺由什么组成
- Deno用Rust编写。
- 作为事件循环,Deno使用Tokio,它再次用Rust编写。
- Deno开箱即用地支持Typescript。
- 嗯,代码是使用同一V8执行的,该V8捕获了整个世界。
乍一看听起来不错,但让我们仔细看看这些要点。
铁锈 。 不,请正确理解我的知识-我相信Rust和Go是很棒的语言,我对此感到非常高兴。 与使用C ++相比,它们使编写低级代码变得更快,更安全。 但是,有一个细微差别-在最佳情况下,它不会比C ++中的实现慢。 因此,我个人看不出编写系统链和事件循环的完整模拟的意义-不太可能带来任何实际好处,因为这些东西在某些时候只是达到了最佳状态,而实际上并未进一步优化。
打字稿 再说一次-我对TS没有任何看法。 许多公司和开发人员都在使用它,并且它已经显示出了它的价值。 但是Deno只是将转译器隐藏在二进制文件中,而将转译的代码隐藏在特殊目录中。 也就是说,引擎盖下的所有东西都是一样的,除了美观之外,没有任何好处。 但是有一个缺点-编译器版本与Deno版本紧密相关。 我不确定这是否很好-很容易想到要更新转译器或运行时的情况。 但不是两者都一次。
因此,虽然看不到任何美味。 让我们进一步看一下主要功能。
Deno和Node.JS之间的主要区别
Deno不使用npm。 没有中央注册表。 模块通过URL导入。 没有package.json。
也就是说,代码看起来像这样:
import { test, runIfMain } from "https://deno.land/std/testing/mod.ts";
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
test(function t1() {
assertEquals("hello", "hello");
});
, . . , . :
- . , , . . , :
1.1. , , .
1.2. , , , .
1.3. , . 2012 , npm , ? , " "? - , . github, gitlab, , . . . npm , , — , ? — . Entropic, , , — .
. , - ( ) — … … 2019? , , 2012 Node.JS shrinkwrap, lock file? , ?
, URL — , — .
Deno Promise.
, . 2012 — . . - .
Deno Uncaught Errors
. Node.JS . .
ES Modules, require
, , . , Node.JS ES Modules...
Deno , .
! … — allow-read, allow-net, allow-run, allow-env. - :
deno --allow-read=/etc https://deno.land/std/examples/cat.ts /etc/passwd
:
- .
- , --allow-all.
- . . , , . . , — .
- . , , . . , 2019 2012, — ...
. . NPM.

, npm 2012 :
- . .
- Lock file .
- . github, snyk npm.
- .
- .
- — , , .
- .
npm … , . , , … " ", — facebook, google, microsoft, gitlab… , npm .
:
- Rust — .
- TypeScript — .
- URL NPM — .
- — .
- . . . !

Deno. " , " — , , Deno — .
, , , , . Deno , , Moscow Node.JS Meetup — . — , - ?