Ryan Dahl 访谈:Node.js/Deno 的创始人

一起来了解Ryan Dahl的新项目Deno,以及他对当前JavaScript生态和技术趋势的看法。

介绍

Ryan Dahl是Node.js以及Deno(JavaScript和TypeScript运行环境)的创始人。我们很高兴有机会与Ryan谈谈他的项目:Deno及其主要挑战。聆听他对JavaScript和TypeScript的未来的想法,了解有关第三方Deno生态系统项目的更多信息,以及如果他能时光倒流,他对Node.js的态度又是什么?

  1. 您的Deno新项目对开发人员产生了很大影响,您现在大部分时间都在做什么?

Ryan: 我现在大部分时间都在Deno工作上。你看到的Deno虽然只是一个可执行程序,实际上是一个相当庞大的软件集合。我们正在不断改善Deno,同时我们也在努力将Deno作为基础架构应用到商业项目中。

 
  1. Evrone: 您有使用多种编程语言的实践经验:C++,Rust,Ruby,JavaScript,TypeScript,您最喜欢哪一个语言?

Ryan: 这段时间,我非常享受Rust编程。Rust学习曲线陡峭,未必适合非常多的场景,但是对于我现在正在进行的工作来说,它非常完美。Rust是更棒的C++。我坚信我将永远不会开启另外一个C++的新项目,Rust能够以更简单的方式来处理计算机底层,非常完美。

JavaScript从来都不是我最喜欢的语言,它只是最常见的语言之一,作为一门编程语言,你可以使用它表达你的想法。我不认为TypeScript是一种独立的语言。它的美丽之处在于它是有类型(typing)标记的JavaScript。

TypeScript允许人们基于JavaScript构建更庞大,更健壮的系统,它也是我处理每天日常任务的首选语言。借助于Deno,我们将会消除TypeScript代码转换为JavaScript固有的许多复杂性,希望这将帮助更多的开发人员使用TypeScript。

 

  1. Evrone: 类型(typing)已经逐渐被添加到Python,PHP和Ruby等语言核心规范中,以您的观点,什么阻止了JavaScript添加类型(typing)的支持?

Ryan: 将类型添加到JavaScript(通过TypeScript)的成功远远超过了Python,PHP或Ruby等语言。TypeScript就是具有类型的JavaScript。

是什么在阻止JavaScript标准化组织(TC39)采用TypeScript?这个问题很有趣。考虑到设计和规划,标准化推进,这些都会相对谨慎和缓慢。他们正在研究Types-As-Comments的提议,该提议将允许JavaScript运行时通过忽略类型来执行TypeScript语法。我认为最终TypeScript(或类似的方案)将作为JavaScript标准的一部分被提出,但这需要时间。

  1. Evrone: 作为一个受人尊敬的VIM用户,您如何看待像VS Code这类现代化的编辑器?他们对保守派程序员足够好吗?

Ryan: 与我共事的每个人都在使用VS Code,他们非常喜欢它,我想大多数人都应该使用VS Code。我继续使用VIM的原因有两个:

1)我对它非常熟悉并且很快,我喜欢能够在ssh和tmux上工作,并且享受全屏终端的宁静。

2)对于基础软件来说,基于文本编辑并可以通过简单工具进行触达是非常重要。在Java世界中,他们犯了一个错误,就是将IDE和该语言的捆绑在一起,从而造就目前的情况:即开发者必须使用IDE来进行Java编程。通过使用简单的工具,可以确保我开发的软件不会不必要地依赖IDE。当然使用grep查找字符串,而不使用直接跳转到变量声明位置,这种无意义的多次跳转也是无法接受的。就我所做的事情,我认为不过度依赖IDE会是更好的软件设计。

 

  1. Evrone: 依赖管理、安全性等都是长期存在的问题,Deno展现了可能的解决方法。您是否希望Deno成为像Haskell这样的实验田?或者您想将Deno当作最佳实践之选吗?

Ryan: 不能将新颖性错误理解为实验性。Deno绝对是实用的,它建立在服务器端JS已有多年经验的基础上。我和我的同事们致力于构建实用的动态语言运行环境,围绕依赖项管理和安全性所做的设计是深思熟虑的。我们可以很容易地引入另一个类似于NPM的集中式系统,但是最终选择了基于Web标准URL的链接系统。我们可以非常容易地开放文件系统和网络,但是这会带来各种安全漏洞,相反,我们选择像浏览器一样设计,仔细地管理这些访问权限。

Deno是一个创新的系统,目前未必能适用到非常多的场景,此外Deno也是一个大型Rust代码库,开发速度快,运行性能高,项目有可靠的CI和定期的计划发布,统统这些都表明Deno不是实验田。

 

  1. Evrone: 在2020年,大多数软件开发者大会都变成了“在线”和“虚拟”会议。您是否尝试过这种新格式,对此您有何看法?

我参加了一些,但现在我暂时避开这种形式。对我而言,会议中最好的部分是“Hallway Track(各种议题、展台、workshop和线下交流等)”,这是在线会议缺少的关键方面。我自己更喜欢以2倍的速度观看youtube上的演讲,希望能在2021年晚些时候参加一些非虚拟会议。

 

  1. Evrone: 解耦是将大文件分解为多个文件的依赖图谱,这一想法得到了Webpack的拥护,并收到许多开发者的好评。但是依赖管理非常具有挑战性,Node.js从CommonJS迁移到ESM花费了多年的时间。您想使用Deno解决哪些主要的依赖管理挑战?

Ryan: 浏览器没有为分发JavaScript的任何CDN做特殊照顾,网络的分散性是其最大的优势。我不明白为什么这不能被同样适用于服务器端JavaScript。因此,我希望Deno不依赖任何集中式的依赖仓库。

 

  1. Evrone: Python和JavaScript在竞争成为最好的通用编程语言,对于软件开发新人,应该学习哪一种语言?您对此有何看法?

Ryan: 脚本语言对初学者来说都很不错。本质上,Python和JavaScript是非常相似的系统,语法/语义有些不同。avaScript由国际标准委员会管理,可以运行在各种系统中,并且JavaScript速度要比Python快很多(将V8与CPython进行比较时),并且拥有更庞大的开发者群体。对于某些领域,会有更多的Python库支持,尤其是在科学计算中,Python可能是合适的,主要是看新程序员想要做什么。但是,总的来说,我认为JavaScript是一种更好的入门语言。

 

  1. Evrone: 一个主线程和众多小的handler可调用对象,该异步并发模型是Node.js的基石之一。现在,通过新的“async/await”语法和“coroutines”概念进一步提升了异步并发模型。作为平台软件开发者,您如何看待它们以及其可用的替代方案,例如Go语言的“goroutines”或基于Ruby线程的并发?

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

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

 

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

Ryan: 动态或脚本语言非常有用。程序员要解决的问题通常不是CPU的限制,更多的是工程时限,能够快速开发和部署更为重要。在动态语言中,JavaScript(纯JavaScript或带类型的JavaScript)是最流行的,也是迄今为止运行最快的。

相信在将来,我们所追求的唯一动态语言,很可能是从Web浏览器中衍生出来的。借助Deno,我们正在努力消除JS目前很少涉及领域的应用障碍,如机器学习。例如,我们可能会在Deno中添加WebGPU支持,GPU编程更简单,最终将使TensorFlow.js之类的系统能够在Deno上运行。如前所述,动态语言有其局限性,并不能适用所有问题领域。如果您正在进行数据库系统开发,那么最好使用一种使您对计算机具有最大控制权的语言(例如Rust或C++)进行编写。如果您要编写高并发性API服务器,那么很难想象有比Go更好的选择。

 

  1. Evrone: 现代操作系统和Deno都引入了精细的权限控制,以抵消第三方软件和依赖项的安全风险。但是,最终用户和开发人员能在应用程序的“允许”和“拒绝”安全性请求时做出正确的决定吗?您如何看待几年后像我们大多数人一样,自动单击“允许一切”的风险,就像我们大多数人现在对网站cookie“安全确认”所做的那样?

Ryan: 网站Cookie弹出窗口不是最好的类比,它们是相当无用的法律副产品。更好的是内置的安全设置选项方式,上面写着“允许该网站访问您的相机”或“允许桌面通知”或“允许该网站查看您的位置”。

这些并不是没有用的,相反是相当重要的安全功能。程序员在计算机上运行非常多的自动化程序或脚本。没有人有时间审核他们将要运行的所有代码,当然也没有到需要在Docker容器中运行所有代码的情况:当您运行lint代码检查工具时,难道lint的执行也要被隔离的吗?答案是否定的,你必须相信lint不会破坏您的系统。我认为允许用户查看并能拒绝不必要的系统访问是非常合适的。

 

  1. Evrone: 新的全栈(Fullstack)思想促使开发人员同时编写前端代码和后端代码,使用相同的语言和共享技术堆栈(如TypeScript),这种方式非常简单。您认为对于许多开发人员来说,将如此多的不同技术栈纳入他们的日常开发是一个好主意吗?

Ryan: 降低复杂性总是有益的。更少的开发语言,更少的虚拟主机(VM),更少的框架(Framework)等,对程序员更好,简单就是美。

 

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

Ryan: TypeScript语言几乎具有完整的功能,相对已经非常稳定。依赖于TypeScript语言的前沿特性的用户可能会遇到不稳定的情况,出于稳定和兼容考虑不要使用太前沿的特性。

 

  1. Evrone: 您如何看待软件开发人员的良好教育?我们是否需要包括所有数学、算法和数据结构的”科学“(如“计算机科学”),还是需要其他东西?

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

 

  1. Evrone: 在Deno第三方生态系统项目中,是否有你喜欢的项目?

Ryan: 必须有

  • A React Framework
  • Web framework (like express)
  • web-based GUIs for desktop applications
  • puppeteer (same as in Node)
  • visualize module graphs
  • A minimal but flexible static site generator

 

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

Ryan:  开源现在已经是主流,人们对开源许可(licensing)的理解也已经被解决。关于开源维护的激励模型仍然存在着未解决的问题,也许Github资助(Sponsor)正在朝着这个方向努力。开源比以前要好多啦,但是我希望我们能找到一种方法,让维护软件重要功能的开发人员,可以获得自己付出相对应的报酬。

 

  1. Evrone: Deno目前的主要技术挑战是什么?

Ryan: 非常多的事情要做完成:我们正在构建Hyper Web服务器的绑定,它将提供HTTP2,并且比当前Web服务器快很多。我们正在构建“Deno LSP”,提供Deno相关的语言服务协议,以便VSCode(和其他IDE)可以直接与Deno通讯,从而实现语法高亮显示、类型检查、代码格式化等,期望在下一个版本中可以大大改善Deno编码体验。 查看 Q1路线图以了解更多的详细信息。

 

  1. Evrone: 如果时光可以倒流,你可以给刚开始开发Node.js的年轻你一些建议,那会是什么建议?

Ryan: 在Node的早期,我不太确定异步I/O能否由新手程序员轻松地用于大型项目中。我四处演讲,提出这一主张,但我不确定如何解决。如果我能回到过去,我将向自己保证异步I/O将起非常大的作用。然后,我要告诉自己,Node.js将成为项目开发的关键部分。另外大型软件项目与小型项目有不同的关注点,如预算、沟通和组织,我会告诉自己要花些时间在这些问题上。

 
  1. Evrone: 对那些正在开发npm软件包,同时也想支持Deno的开发人员有何建议?

Ryan: 使用ESM,同时留意一 下Deno对Node的兼容适配

我们很高兴与Ryan交谈并了解有关他的生活,思想和项目的更多信息。 在Evrone,我们经常使用Node.js为我们的客户开发自定义解决方案。感谢阿里巴巴F2E团队的翻译。

 

联系我们
已有项目构想?
我们一起来实现它吧
添加附件
文件必须小于 8 MB
允许的文件类型:jpg jpeg png txt rtf pdf doc docx ppt pptx
本网站受 reCAPTCHA 保护,并适用 Google 隐私政策服务条款