Node.js的创建者Ryan Dahl访谈

2021-02-21 07:38:43

Ryan Dahl是Node.js以及Deno JavaScript和TypeScript运行时的软件工程师和原始开发人员。我们很高兴有机会与Ryan谈谈他的项目,Deno的主要挑战,听取他对JavaScript和TypeScript未来的想法,找到有关第三方Deno生态系统项目的更多信息并讨论他将如何改变如果他能时光倒流,那么他对Node.js的态度!

埃弗隆(Evrone):您的新Deno项目对开发人员产生了巨大影响。您现在大部分时间都在做什么?

瑞安(Ryan):我大部分时间都在研究Deno! Deno实际上是一个相当大的软件集合,包含在我们提供的可执行文件中。我们正在改善Deno运行时,但我们也在努力将基础架构应用于商业项目。

Evrone:您具有使用多种编程语言的实践经验:C,Rust,Ruby,JavaScript,TypeScript。您最喜欢和哪一个一起工作?

瑞恩(Ryan):这些天我写Rust最有趣。学习曲线陡峭,不适合许多问题。但是对于我现在正在研究的东西来说,它是完美的。它是一个更好的C ++。我坚信我永远不会开始新的C ++项目。 Rust具有如此简单的表达低级机械的能力,非常漂亮。

JavaScript从来不是我最喜欢的语言-它只是最常见的语言-因此,它是表达许多想法的有用方法。我不认为TypeScript是一种独立的语言;它的优点在于它只是标记了JavaScript。 TypeScript允许人们使用JavaScript构建更大,更健壮的系统,我说这是我日常日常工作的首选语言。

借助Deno,我们试图消除将TypeScript代码转换为JavaScript所固有的许多复杂性,希望这将使更多的人能够使用它。

Evrone:逐步键入已成功添加到核心Python,PHP和Ruby中。您认为将类型添加到JavaScript的主要表现是什么?

Ryan:将类型添加到JavaScript(使用TypeScript)比在Python,PHP或Ruby中成功地添加类型成功得多。 TypeScript是具有类型的JavaScript。更好的问题是:是什么在阻止JavaScript标准化组织(TC39)采用TypeScript?通过设计,标准化会缓慢而谨慎地进行。他们首先正在研究提出Types-As-Comments的提议,该提议将允许JavaScript运行时通过忽略类型来执行TypeScript语法。我认为最终TypeScript(或类似的东西)将作为JavaScript标准的一部分被提出,但这需要时间。

Evrone:作为受人尊敬的VIM用户,您如何看待像Visual Studio Code这样的现代程序员编辑器?他们对老警卫足够好吗?

赖安(Ryan):与我合作的每个人都使用vscode,他们喜欢它。可能大多数人都应该使用它。

我继续使用VIM的原因有两个。 1)我对它非常熟悉并且很快,我喜欢能够在ssh和tmux上工作,并且享受全屏终端的宁静。 2)对于软件基础结构来说,基于文本并可以通过简单工具进行访问非常重要。在Java世界中,他们犯了将IDE过多地与该语言的世界流联系在一起的错误,从而造成一种情况,即实际上人们被迫使用IDE对Java进行编程。通过自己使用简单的工具,可以确保我开发的软件不会不必要地依赖IDE。如果使用grep而不是跳转到定义,那么太多的间接寻址将变得无法忍受。对于我所做的,我认为这会产生更好的软件。

Evrone:Deno运行时展示了通过依赖项管理,安全性等来解决长期存在的问题的可能方法。您是否希望它像Haskell这样的实验场所?或者您想将它当作最佳实用选择吗?

瑞安(Ryan):不要把新颖性误认为是实验性的。 Deno绝对是实用的,它建立在服务器端JS已有多年经验的基础上。我和我的同事们致力于构建实用的动态语言运行时。我们围绕依赖项管理和安全性所做的设计选择非常保守。我们可以很容易地引入另一个类似于NPM的集中式系统,但是选择了基于Web标准URL的链接系统。我们可以更轻松地打开文件系统和网络中的各种安全漏洞;相反,我们选择像浏览器一样仔细管理访问。

Deno是新软件-使其固有地不适用于许多用例。但是Deno还是一个大型Rust代码库,具有强大的速度,可靠的始终为绿色的CI和定期的计划发布。这不是实验。

Evrone:2020年,大多数软件开发者大会成为" online"和" virtual"。您是否尝试过新格式,您对此有何看法?

瑞安:我参加了一些;但我暂时避开它们。对我而言,会议中最好的部分是"走廊轨道"。这是在线会议的一个关键缺失方面。我更喜欢自己以2倍的速度观看youtube上的演讲。希望我能在2021年晚些时候参加一些非虚拟会议。

Evrone:将依赖关系图从一个文件分散到单个源代码文件的想法受到Webpack的拥护,并受到许多开发人员的好评。但是依赖性管理具有挑战性,Node.js从Common.js迁移到ESM花费了多年的时间。您要使用Deno解决的主要依赖管理问题是什么?

赖安(Ryan):浏览器并未因分发JavaScript而受到任何CDN的祝福-网络的分散性是其最大的优势。我看不到为什么这也不能用于服务器端JavaScript。因此,我希望Deno不依赖任何集中式代码数据库。

Evrone:Python和JavaScript竞争成为最好的通用编程语言,我们应该首先教给新开发人员。您对此有何看法?

瑞安(Ryan):脚本语言非常适合初学者。本质上,Python和JavaScript是非常相似的系统,具有不同的语法和稍微不同的语义。 JavaScript由国际标准委员会管理,可在所有地方运行,并且速度要快一个数量级(将V8与cpython进行比较时),并且拥有更大的用户群。对于某些领域,还有更多可用的Python库,特别是在科学计算中。根据新程序员试图做什么,Python可能合适。但是,总的来说,我认为JavaScript是一种更好的入门语言。

Evrone:具有一个主线程和小型" handler"的异步并发范例可调用对象是Node.js的基石之一。现在,新的" async / await"语法和“协程”概念。作为平台作者,您如何看待它们以及它们可用的替代方案,例如Go" goroutines&#34 ;?还是基于Ruby线程的并发?

Ryan:OS线程无法很好地扩展到高并发应用程序。如果您有很多并发连接,请不要使用Ruby。

Goroutines非常易于使用,并可以达到最佳性能。像Go一样,Node和Deno建立在非阻塞I / O和OS事件通知系统(epoll,kqueue)上。 JavaScript本质上是一个单线程系统,因此Node或Deno的单个实例通常无法在不开始创建新实例的情况下利用系统上的所有CPU内核。 Node / Deno是JavaScript的最佳选择,但是在没有其他可能偏向JS的其他要求的情况下,Go最终是高并发系统的更好选择。

Evrone:在如此激烈的竞争中,您如何看待JavaScript和TypeScript的未来,尤其是与后端,嵌入式和ML领域有关的未来?

Ryan:动态(或'脚本')语言很有用。程序员要解决的问题通常不受CPU限制。问题更多的是工程时间限制。能够快速开发和部署更为重要。在动态语言中,JavaScript(纯JavaScript或带类型的JavaScript)是最流行的,也是迄今为止最快的。相信在将来,我们所追求的唯一动态语言将是从Web浏览器中生长出来的这种奇怪的进化语言。借助Deno,我们正在努力消除在JS等目前很少使用的地方应用JS的障碍。例如,我们可能会在Deno中添加WebGPU支持,从而允许简单的现成GPU编程,最终将使TensorFlow.js之类的系统能够在Deno上运行。

如前所述,动态语言有其局限性,并不适合所有问题领域。如果您正在对数据库进行编程,则最好使用一种使您对计算机具有最大控制权的语言(例如Rust或C ++)进行编写。如果您要编写高并发性API服务器,那么很难想象有比Go更好的选择。

Evrone:现代操作系统和新的Deno运行时引入了精细的权限,以抵消第三方软件和依赖项的安全风险。但是,对于使用依赖关系的最终用户和开发人员来说,在允许" allowing"和"下降"应用程序安全性要求?您如何看待几年后我们会自动点击“允许所有操作”的风险?就像我们大多数人对网站Cookie和安全确认所做的一样现在?

瑞安(Ryan):网站cookie弹出窗口不是最好的类比-它们是相当无用的法律副产品。更好的是内置对话框,其中显示"允许该网站访问您的相机"或"允许桌面通知"或"允许该网站查看您的位置"。这些并不是没有用的-这些是相当重要的安全功能。

程序员在计算机上运行许多随机自动化程序。没有人有时间审核他们将要运行的所有代码,也不足以在Docker容器中运行所有代码:当您运行lint时,这是孤立的吗?不,答案是您必须相信lint脚本不会破坏您的系统。我认为允许用户查看并可能拒绝不必要的系统访问非常合适。

Evrone:新的"全栈"这个想法促使开发人员同时编写前端和后端代码,而使用相同的语言和诸如TypeScript之类的共享技术栈,这现在变得非常容易。您认为对于许多开发人员来说,将如此多的不同事物纳入他们的日常工作范围是一个好主意吗?

瑞安(Ryan):降低复杂性总是有益的。程序员必须与之交互的语言,VM,框架和概念越少越好。

Evrone:您打算如何处理TypeScript语言本身的版本更新?在Node.js生态系统中,使用V8引擎进行JavaScript语法更新通常会导致某些程序包无法正常工作。

Ryan:TypeScript语言几乎具有完整的功能。取决于最先进的语言功能的用户可能会遇到不稳定的情况,请不要这样做。

Evrone:您如何看待软件开发人员的良好教育?我们需要科学吗?就像"计算机科学"所有数学,算法和数据结构,还是我们需要其他东西?

瑞安(Ryan):想要从事编程职业的人们应该去大学学习计算机科学。当然,可以获得相关领域的学位(例如电气工程,物理学,数学);有许多非常有能力的工程师根本没有学位。但是,通过花几年的时间学习基础知识并进行许多非常困难的实验,确实可以获得一些好处。

Evrone:随着GitHub之类的社交平台的推出,个人开发人员和大公司现在都可以轻松使用开源并做出贡献。这是开源的黄金时代吗?现在还是一眼看不到的问题?

赖安(Ryan):现在肯定是开源的标准,人们对许可证的使用情况已广为人知并得到了普遍解决。关于维护的激励模型仍然存在悬而未决的问题,也许Github赞助商正在朝这个方向提供帮助。它比以前要好,但是我希望我们能找到一种方法,使维护重要软件部分的人员可以为自己的工作付费。

Evrone:Deno已经几岁了。目前该项目的主要技术挑战是什么?

瑞恩(Ryan):有很多事情要做:我们正在构建与Hyper Web服务器的绑定,它将提供HTTP / 2,并且可能比当前Web服务器快得多。我们正在构建deno lsp&#34 ;,该语言提供了语言服务器协议,以便VSCode(和其他IDE)可以直接与Deno对话以获取语法突出显示,类型检查,格式设置等-期望进行编辑未来几个月内的体验将大大改善。我们正在努力通过尽可能多的Web平台测试-因此,随着时间的推移,Deno变得与Web更加兼容。查看Q1路线图以了解更多详细信息。

Evrone:我们的标志性时空旅行问题:如果您可以时光倒流,并在刚开始开发Node.js时只给年轻人一个建议,那将是什么建议?

赖安(Ryan):在Node的早期,我不太确定异步I / O是否可以由新手程序员轻松地用于大型项目中。我四处演讲,提出了这一主张,但我不确定如何解决。如果我能回到过去,我会向自己保证它将起作用。然后,我告诉自己,Node将成为软件的关键部分,与小型项目相比,大型软件项目需要不同的关注点:预算,沟通,组织。我会告诉自己要花更多的时间在这些元问题上。

我们很高兴与Ryan交谈并进一步了解他的生活,思想和生活。 项目。 在Evrone,我们经常使用Node.js为我们的客户开发自定义解决方案。 如果您像我们一样喜欢它-只需通过下面的表格给我们发送消息,让我们聊天吧!