欢迎收听Console DevTools播客的另一期节目。我是David Mitten,Console.dev的首席执行官,Console.dev是一个免费的每周电子邮件摘要,提供给经验丰富的开发人员最好的工具和测试版发布。我是Jean Yang,Akita Software的首席执行官,Akita Software是理解您的API最快捷、最简单的方法。
在本期节目中,我和Jean将与Julia编程语言的共同创建者之一Jeff Bezanson进行对话。我们将从Julia的历史以及它为什么花了这么长时间才流行起来开始,探讨该语言背后的关键原则,它如何兼具C语言的速度和Python的易用性,以及运行这样一个大型开源项目是什么样的体验。我们将把时间控制在30分钟内,所以让我们开始吧。我们现在与Jeff Bezanson在一起。让我们从简短的背景介绍开始。请告诉我们您目前在做什么以及您是如何走到今天的。
你好,谢谢,David。很高兴来到这里。我是Jeff Bizanson。我是Julia编程语言的创建者之一,开发它是我大部分的工作。我也是Julia Hub的联合创始人,这是一家从该项目中发展出来的公司。这几乎就是我做的所有事情了。
酷。Jeff,我很高兴你能来参加我们的播客。我想从讨论最初开发Julia的动机开始。我还记得我们一起做助教的时候,你做着兼职,同时也在业余时间开发Julia。所以你能告诉我们Julia出现之前的世界是什么样的,是什么让你有动力开始并继续开发它吗?
我想回到90年代和2000年代初期,那是摩尔定律的鼎盛时期,对吧?我记得程序员中有一种普遍的文化,认为担心性能是愚蠢的,因为硬件会给你免费的性能。所以每个人都争先恐后地尽可能地牺牲性能。
这是一种流行的做法。这就是我们得到这些变得非常流行的脚本语言的地方。在我看来,人们几乎是在试图让它们尽可能慢,因为这是一种时尚。如果你没有牺牲性能,你就没有理解摩尔定律。你指的是哪些特定的语言?或者你想让它们保持匿名?哦,有很多这样的语言。从Tickle到……
Python、Perl,等等。有很多这样的语言。其结果是,某些编程社区中的人最终使用了某些语言,对吧?因为你倾向于使用与你一起工作的人使用的相同语言。因此,你得到了这些网络效应,最终形成了语言用户的社区和泡沫。在科学领域,这种情况肯定发生了。人们最终主要使用MATLAB、R和Python。
在这些领域,这成了一种信念,即它们是一种易于使用、高效的语言,人们喜欢使用它们,并且对他们来说非常有效,但速度很慢。你必须放弃性能。
这是他们都了解的宇宙定律。然后,如果你想要性能,你必须使用C或Fortran之类的语言。这就是当时的情况。所以在大学里,我接触到了这种思维方式。我觉得这非常令人惊讶,因为我知道高级语言可以很快。你知道,我知道有一些很好的Lisp实现。你还有ML系列语言。有一些非常好的高级语言,它们有非常非常好的编译器,而且速度很快。而且似乎没有人使用它们。
我觉得这太神奇了。所以我把它当成一项使命,“我们能否让所有这些人意识到高级语言可以很快,他们应该使用一种快速的高级语言?”
所以这就是我的尝试。在我学习了很多东西并遇到合适的人来弄清楚设计应该是什么以及如何定位它之前,我实际上无法做到这一点,这花了几年的时间才能达到能够做到这一点的地位。对,这说得通。所以我想……
几年后,那段旅程是什么样的?你是如何保持动力的?然后我想,你从那些人那里学到了什么让你改变了?我学习了更多关于R和MATLAB是如何工作的知识。所以我主要是一个计算机科学人员。我没有做太多应用数学方面的事情。
所以我没有像大多数应用数学人员那样花那么多时间在MATLAB、R、Fortran语言上,他们将是我的目标用户。所以我碰巧学习了更多关于这些方面的知识。例如,在我Interactive Supercomputing的工作中,这是一家来自MIT的短暂存在的创业公司,它做了一个并行计算平台。
我学习了很多关于MATLAB以及那些程序员在寻找和想要什么。这是一个非常非常关注符号的群体。如果A星B没有进行矩阵乘法,他们就不会使用你的语言。一个简单的例子。
我发现Julia的故事非常鼓舞人心,尤其是在人们谈论这个Chat GPT应用程序一夜之间成为拥有数百万用户的超级热门应用的时代,是
你和你团队花了多长时间才真正做好Julia。所以我希望你能带我们回顾一下时间线,当你开始的时候是什么样的?我认为很多年都是必要的,才能得到正确的想法,让世界为此做好准备。所以我希望能够回顾整个故事。
这是一个非常好的观点,因为我现在实际上担心的是,我们花了这么长时间,以至于我们可能不再需要任何类型的编程语言或系统软件了。Chat GPT的事情几乎让我觉得重用的概念——几十年来一直是计算机科学的指导思想之一——可能现在已经结束了。我认为它可能会发展到那种程度。我担心的是,系统软件还有未来吗?
好吧,我认为如果有任何语言适合Chat GPT,那么Julia凭借其重用和高级脚本特性,似乎将处于Chat GPT的前沿。这是一个特性。好吧,这当然是一种乐观的看法。我喜欢你对故事的重新讲述,比如,好吧,首先我们做了这个,然后我们做了那个。这就是Julia最终流行起来的时候。
我在Interactive Supercomputing工作。实际上,甚至在那之前,我还在
从高中毕业开始,我就看到了当你必须输入大量数据、查看图像、制作大量图表以及编写程序来处理它们时,工作是什么样的。实际上,在那个小组中的人们主要使用C语言,效率非常低。然而,我看到的是,在那个时候,那是很久以前的事了,整个Python和NumPy工具链还远没有达到今天的水平。所以这是很久以前的事了。当时并没有真正的东西能够更好地处理它。
这是让我开始思考的一件事,天哪,这整个编程是如此不方便。我所做的其他编程都整齐地适合C工具链的可用工具,因为那是用于做系统和大多数应用程序的。它运行良好。对于这些东西,它显然是错误的抽象级别。所以这是让我开始思考需要一些完全不同类型的平台的事情之一。
然后很多年后,我最终加入了Interactive Supercomputing。我的意思是,我申请这份工作是因为我说,啊哈,这是一个我可以去解决这个问题的地方。这些人正在研究这个问题。所以我应该去那里,这就是我感兴趣的原因。
但当然,我们在那个商店里使用MATLAB、Python和R。Python是一个非常好的语言,但我真的不太喜欢R和MATLAB。所以我一直在那里不断地向每个人抱怨,说我们不得不把我们的并行计算平台塞进MATLAB和R中,这太糟糕了,因为如果我们有一个好的语言,它会容易得多。我只是在向人们抱怨这件事。那里有一个家伙,Veral,他听我说过这件事。
他说,你知道,你听起来很像这个人,Stefan。他说的话和你一样。你们应该互相交流。
所以他让我们取得了联系,我们开始进行激烈的电子邮件交流,我们互相发送我们的想法,关于它应该是什么样的。它应该像这样工作。如果一切都是像这样,那么这些问题就不会存在。在几年时间里,我们只是发送了数千封电子邮件,我们开始讨论这个问题,并开始设计一种语言。是的,我记得Jeff是教我MATLAB有多糟糕的人。我只是接受了它,我只是认为它应该很慢。
如果你正在做一些计算密集型的事情。但我喜欢这个故事。我最喜欢的关于这个故事的故事是,我听到人们谈论他们的MATLAB程序以及运行需要多长时间,这是一种特性。
他们谈论,你知道,我们的模拟非常复杂,它必须运行两天才能产生结果。你知道,我从未想过这对某人来说是一件好事。所以发现的东西真是令人惊讶。但是,哦,当然,我应该补充下一步是至关重要的,那就是当该公司被收购时,我必须寻找下一件事来做,并验证。
Verhal建议我和Alan Edelman谈谈,我可以向他推销这个项目。我向他展示了我们正在讨论的内容以及我们想要做什么。他认为这似乎是一个非常疯狂和毫无希望的想法。所以他决定支持它。
是的,当我一年后去读研究生院时,看到Jeff在那里,我非常高兴。他当时正在开发Julia。对于那些可能没有见过它的人,或者只使用过Python或R的人来说,该语言背后的核心原则是什么?如果你在一个学术圈子里,它的原则是什么?在这些技术计算平台中,
有很多多态性、对象和类型,它们具有你在其他领域中没有的非常复杂的特性。例如,如果你考虑一下单位,单位在许多方面都非常像数字,但它们不是封闭的乘法,例如。或者你有矩阵,其中乘法现在不是可交换的。矩阵的大小决定了它们是否兼容
还有许多不同类型的结构化矩阵。你知道,有一大堆矩阵结构,比如双对角线、三对角线。所以你只是有如此多样化的对象和可能的组合。所以它导致了这些库,这些库有很多非常复杂的特性内置其中。
然而,编译器想要了解它,因为编译器希望能够推断所有这些东西,通常是为了性能。我的意思是,当然,有些人会想要检查程序,但我们知道性能才是卖点,所以我们一开始只对编译性能感兴趣。我们研究了这些复杂的库特性,另一件事是,并非每个人都想要相同的东西。所以在不同的领域,人们使用不同的定义。
有一个名为无限数组的Julia包,它具有,它提供了数组类型,其中一些维度可以是无限的。对许多人来说,数组维度的尺寸最好是一个整数。而无限不是整数。
所以这可能会破坏很多东西。取决于你与谁交谈,这可能是有意义的,也可能没有意义,对吧?所以你可能想要各种各样的对象。你不能只把它构建到一个标准库中,然后说它很好,甚至连类型签名都不行,对吧?你甚至不能说,数组维度的尺寸必须是一个int,这是我们都习惯的东西。当然,这是一个合理的约束,对吧?不。所以只是有各种各样的可能特性,对吧?
因此,它们不能内置到语言中,因为你不能一劳永逸地设置它们。所以它们都必须写在库中。所以指导原则是,你可以把所有这些特性都写成库,然后让编译器来解决。有一个研究项目对编译MATLAB程序做了类似的事情。我认为它是由Ken Kennedy编写的《Telescoping Languages》。这是许多年前的一个研究项目。
我听说过这个,这激发了我的一些想法,其想法是他们将获取MATLAB代码库,并以各种方式用类型对其进行注释,并使用程序分析技术对其进行彻底分析,并将这些库转换成编译器,然后你可以针对这些库编译其他程序。所以我们做了一种类似的专门化,其想法是彻底分析库,以便能够编译针对具有这些可能古怪特性的东西的代码。
酷。所以Jeff,你有一个标语,C语言的速度与Python的易用性。我想深入探讨一下,Julia与其他语言的不同之处,使它能够做到这一点的核心方法是什么?或者它真的是一系列好的、明智的决策、语言设计和实现吗?是的。
它基于设计决策。东北大学有一篇论文,我们试图写下其中的一些内容,名为《Dynamism and Performance Reconciled by Design》。我们所做的是,你知道,人们长期以来一直在尝试加速各种动态语言。这是计算机科学中长期存在的的研究主题之一,例如从Smalltalk之类的语言开始,你知道,你如何让它运行得更快?并且有一个,你知道,一个由动态和静态技术组成的动物园,
人们发明了一些非常酷的东西来处理这些语言,你不能使用标准编译器技术对其进行静态分析,但仍然可以从中生成快速代码。所以这是一种,你知道,这是一种有趣的玩法,是如何编译这些不合作的语言
这使得它成为一个挑战,这使得它成为一个很好的研究问题。但对我来说,这有点烦人,因为你为什么总是要与语言设计作斗争?所以我从相反的方向入手,说,好吧,所有已知和可用的技术都是什么?然后你将如何设计一种语言来使这些技术发挥作用?对。因为这些技术并不完美。
它们在实践中运行得相当好,但你经常会遇到一些事情,好吧,并非每个程序都可以优化。你可能会运气不好,没有达到快速路径。所以我们说,好吧,我们将使用这些技术。我们可以做些什么来使它们尽可能地发挥作用?所以我们作弊了,因为我们可以从一开始就设计它,以便能够更好地优化程序。是的,我喜欢这个。你有什么具体的例子可以帮助说明你使用过的技术吗?
有些事情你想避免。所以你肯定想启用局部推理。所以你想尽量减少远距离行动可能造成的影响。
例如,如果我在一行上有一个变量,也许我已经弄清楚了它的类型。然后我在下一行调用一个完全未知的函数,对吧?因为这些类型的分析将是近似的。你不能保证你总是能得到关于某事的信息,对吧?所以你可能会遇到一个糟糕的情况,其中有一个完全未知的函数调用。你不知道会发生什么。那么在那之后的下一行,我还知道之前设置的变量的任何信息吗?
例如,是否可能,例如,那个完全未知的函数可能已经进入我的局部范围并改变了那个变量?因为如果是这样,我现在必须丢弃该信息。所以这将是不好的。所以你想避免这些影响,以便你可以拥有一个部分分析的程序,并且仍然能够尽可能地保留你拥有的信息。好的。是的,这说得通。
这说得通。这如何导致Julia用于并行和分布式计算以及那里的优化,以及为什么Julia是这种工作负载的特别好的语言?并行和分布式的情况非常不同。我的意思是,你可以在任何语言中进行分布式计算,因为你可以只是在许多机器上启动进程,然后发送消息,你知道,就是这样。所以它在每种语言中都是同样不可能的,对吧?是的。
不幸的是,也同样容易。是的,是的。我们可以做一些事情。我们很早就知道我们想要进行分布式计算。所以我们一直都有一个非常好的序列化库。所以我们知道我们至少可以发送任何对象。但实际上任何语言都可以做到这一点。所以我不知道是否有任何分布式特定的东西。但就并行而言,我认为这确实有帮助,
我认为这种语言是面向函数的。它不是纯函数式语言,但它是非常面向函数的,所以人们倾向于编写纯函数式代码。很多东西,我们在几年前添加了线程。一开始,你知道,甚至在所有东西都是线程安全之前,由于运气,东西最终运行良好,因为人们倾向于不随机地改变东西等等,仅仅是因为语言的设计本身就适合它。酷。
Jeff,我想深入探讨一下Julia Hub的形成,因为它似乎经历了许多阶段。有一个前学术阶段。有一段时间你在读研究生,Julia是一个MIT项目。然后你成立了一家公司,然后你为该公司获得了风险投资。从成立公司到获得融资的转变是什么样的?我很想了解更多关于这方面的信息。
在我们2012年发布Julia之后不久,事情就有了很大的进展。所以从那时起,我们一直都很忙于开发这种语言并帮助人们使用这种语言。
所以对我来说,有时感觉就像从Stefan发布它的第一篇博客文章开始,它一直都是这样,每天都在某种程度上。所以我们在几年内收到了咨询请求。所以我们开始做咨询,帮助人们在各种环境中采用这种语言,以帮助他们充分利用它。这就是它的开始,当然。
然后这位投资者Donald Fisher出现了。有一天,他出现在Alan Edelman的办公室。哇。结果他是一位专门投资开源语言的投资者,他一直在关注。
他不知何故看到了所有正在发生的事情,他出现来和我们谈谈,我们有点,你知道,困惑,你知道,我们没有公司,你知道,是什么,他说,哦,不,这里有一些东西,相信我,所以他很早就参与进来了,这令人印象深刻,是的,我不知道在这些投资者嗅到事情的发生并介入的早期阶段是什么样的,所以这非常令人惊奇,他只是不请自来地出现在你的办公室
可能不是不请自来。我的意思是,我记得他是直接走进来,但我肯定这是安排好的。有人也宣布了,不是你吗?开源方面的情况如何?你从与这么多人一起运行一个项目中学到了什么?这是一件有趣的事情。我的意思是,我喜欢与所有这些来自世界各地的人一起工作,其中许多人我甚至都不知道他们是谁。
这很有趣,但它变得非常忙碌。它变得非常混乱。很多时候,我都不确定我们是如何让它像现在这样运作良好的。有很多活动。我再也跟不上了。对我个人来说,我正在经历一种艰难的转变,那就是
令人惊讶的是,在相当长的一段时间里,我可以让我的头保持在水面上,并且了解正在发生的一切。现在这真的不可能了。所以我还在学习如何应对这种情况。很多变化正在到来。有时我打开一个源文件,哦,自从我上次查看它以来,这里发生了什么?你知道,这使得它变得困难。希望ChatGPT比我更快地理解大型代码库,我认为它确实更快。所以也许这会拯救局面。
所以成为你的助手,你的产品经理,他将以总结的形式将所有内容反馈给你。是的,听起来像是一个难题,但这是一个好问题。那将是希望。所以Jeff,在保持开源社区满意和Julia的商业需求之间是否存在紧张关系?是的,我们从未真正这么想过,因为……
开源社区是我们所做一切的基础。这是我目前职业生涯的基础。所以这始终是一件会保持原样的事情。当然,该项目和核心语言本身
以及围绕它的社区,保持它的运作方式,这是一个非常高的优先级。所有参与者都可以对此发表意见,而且这种情况仍在继续。我们永远不会为了任何商业原因而放弃它。所以接下来就是我们如何在这些原则下为整个事情提供资金,我们认为这是完全可能的。这并不容易,但我们认为这是完全可能的。
只是在特定市场愿意为其付费的事情与仅仅是一种语言之间有一个非常清晰的区分。这是你在JuliaHub网站上宣传的大规模数据处理和机器学习类型应用程序吗?你认为商业化机会在哪里?是的,它比这更具针对性。它特别关注建模和模拟领域。
所以是药物模拟或物理系统,现在希望很快还有电路。
有趣。幕后基础设施是什么样的?你们构建了一个自定义平台吗?它是什么样的?我们谈到的那种面向库的设计,它确实很成功。它的效果比我们预期的要好得多,因为那里有很多拥有你所说的领域专业知识的人来编写,比如说,微分方程求解器。但在C++中这样做会非常困难。
而且,不仅语言更难使用,而且一旦你想添加非常高级的功能,很多非常奇特的功能,使用低级语言就变得难以承受了。所以很多像这样的人能够在很多领域学习Julia,比如图像处理,各种东西。能够学习Julia,编写他们需要的库,具有他们需要的特性,
然后性能基本上是自动的。所以你已经有了良好的性能,并且拥有比以往任何时候都更多的功能。所以这些努力中最杰出的一种是Chris Rakakis的微分方程库。
我认为我们现在拥有该领域最好的库。这对于编写非常高级的数学符号中的方程系统来说,真的是一个非常高效的工具链。这将以很少的努力直接进入一些最快的求解器。酷。
Jeff,我们已经在沿途的各个点谈到了这一点,但我希望了解你从参与长期运行的开源项目中学到的一些经验教训。你如何与你的社区一起发展,以及你从与你的社区一起工作中学到的一些事情是什么?好吧,测试当然非常重要。我可以这么说。我的意思是,每个人都知道这一点,但总感觉你一遍又一遍地学习它。任何未经测试的东西都会崩溃。
有很多事情似乎不容易测试,但你仍然必须找到一种方法来测试它,否则它就会崩溃。我认为,这就是目前让我们继续前进的原因。多年来出现的人在个人资料方面有所不同,还是只是更多相同类型的人?
个人资料略有变化。当然,典型的Julia开发者仍然可能以某种方式从事应用数学或科学。但我认为,与最初的一小批早期采用者相比,人们的多样性肯定有所增加。
这有点难以描述,因为实际上,正如我所说,我甚至不知道这些人是谁。有些人只使用GitHub用户名。有时我甚至不知道他们是谁。所以很难获得非正式的人口统计数据,我想。很难从轶事上说。我们确实有一个在线的开发者调查问卷。
我们每年都会发送一次。其结果会告诉你,这可能是我们拥有的最佳信息。并且人们的多样性略有增加。Jeff,我要偏离一下脚本问这个问题。但是现在应用数学已经无处不在,Chat GPT和AI也无处不在,Julia是否正在进入AI领域?
我们正在进入AI领域。当然,在Julia中有一些用于进行AI机器学习的框架。事实上,我们领先一步的地方在于这个所谓的SciML工具链,该程序旨在集成
将基于方程式和确定性规则的传统科学知识与机器学习相结合,从而获得两全其美。因为如果你有一个试图在物理环境中学习做某事的代理,比如说,你可以尝试让它学习一切,但为什么不也告诉它我们所知道的物理知识呢?然后这将给它一个巨大的优势,事实证明这确实有效。如果你让这样的代理已经知道物理定律,
它改进的速度要快得多,而不是必须重建所有东西。你还可以做各种事情,例如使用机器学习技术来开发模拟组件的快速代理。这是一种非常有效地优化函数的巧妙方法,只需学习它的神经网络近似值,运行速度非常快。
因此,Julia 中的整个 SciML 生态系统有很多工具可以做到这一点。所以我认为,如果你想将这些传统的数学模型与机器学习技术结合起来,这实际上是最好的工具包。但据我所知,人们并没有用它来构建,比如说,chat GPT。你在本集开头暗示了你认为
编程总体上将如何被像 chat GPT 这样的东西改变。你是乐观还是悲观?因为从你的回答中并不完全清楚你持有什么观点?每个人总是问这个问题,你是乐观还是悲观?但我认为它真的必须分解成技术问题和道德问题,对吧?就像,我认为这项技术有效并且会有效吗?那么是的,
从这个意义上说,我很乐观。我认为它有效。人们至少会使用这些编码助手,以及我们甚至无法想象的东西。我非常好奇它将如何用于维护编程,因为我主要从事维护编程。我希望我的工作是坐下来编写一个执行 X 的程序。那将是很棒的,但我并没有真正做到这一点。我做的是维护编程。
我会问你,你是否见过任何探索使用 chat GPT 进行维护编程任务的尝试,而不仅仅是,你知道,编写一个执行 X 的函数之类的任务?
所以我的感觉是 Copilot 应该能够帮助解决其中的一些问题,对吧?也许吧。不幸的是,我还没有尝试过。我会说,从第一性原理出发,在我从事研究时,我与程序综合领域合作的许多人,维护编程是其中一个用例,因为程序综合的目标是减少样板代码。那么你什么时候会有样板代码呢?当你必须多次访问模式化某些东西时,当你必须进行维护编程时。并且
我觉得这是两个主要情况,或者当你必须将许多 API 串联在一起时。这三种情况是你想要进行自动编程的情况。所以在研究领域,我觉得 Copilot 与你相邻。应该有很多用于维护编程的 AI,但至于它的有效性如何,我不确定。我个人从未尝试过将 Copilot 用于维护编程。我很想知道如果你试图让它进行复杂的重构会发生什么,比如说。哦,
有趣。是的,在我看来,维护编程有点像你改变了一种数据类型,你必须把它贯穿你的整个系统。我觉得 Copilot 对此会很有帮助。但是,
但是重构会更难。所以目前,它只是生成,它几乎就像你编辑器中的高级自动完成一样。这对样板代码来说非常有用。但我认为,当它能够理解错误报告并提出解决方案时,我还没有看到任何能够做到这一点的东西。但我确实看到了一些东西,比如将这段代码转换成不同的
不同的语言,从一种语言到另一种语言,是的,翻译之类的东西,我觉得这种 AI 擅长于进行转换,但任何需要
核心或对底层程序语义的基本理解,我觉得会发生一些奇怪的事情。是的,这确实如此。实际上,将代码从一种语言转换为另一种语言的用例实际上是我对此感到非常兴奋的第一件事,因为在我看来,这实际上是执行此操作的完美技术。
因为当你将代码从一种语言转换为另一种语言时,我们会经常遇到这种情况,因为我们当然,你知道,当你试图销售一种语言时,很多人需要将他们的代码从 C++ 或 Python 或 MATLAB 移植到你的语言。所以这是首先出现的问题。这是一个非常特殊的任务。
这非常适合这种情况,因为你实际上,在某种程度上,你想近似地做到这一点,因为你不需要编译器。如果你试图使用像 C++ 到 Julia 的编译器,你将不会得到很好的代码。是的。是的。所以 Jeff,看看这个 chat GPT 业务是否有帮助。它可能不会很好用。你不会喜欢结果的。是的。是的。
好吧,在我们结束之前,我有两个闪电般的问题要问你。第一个是,你目前正在玩哪些有趣的开发工具或一般工具?我最喜欢的玩具是 RR,记录和回放框架。哦,酷。这是我几年来遇到的最大的改变生活、改变游戏规则的事情。
你可以做一些你以前做不到的事情。很多东西都是节省时间的工具。即使我认为 IDE 中的大多数东西,比如它们很方便。但是如果你看看它实际上为你节省了多少时间,它就像这里和那里几秒钟,这也许是值得的,因为它加起来。但这就像,你知道,一个工具几乎可以为你找到错误,只需五分钟而不是数小时的沮丧。这是一个巨大的进步。
好的,很好。那么你的当前技术设置是什么?你每天使用什么硬件和软件?我的技术设置,我必须承认,在这个时候已经相当老式了。我的意思是,我有一个,我使用的是预装了 Ubuntu 的 Dell XPS 笔记本电脑。我已经使用这些很长时间了,因为它有,是的,它预装了 Ubuntu。所以我喜欢这些。这是一台不错的机器。是的,鉴于这些现代机器的 BIOS 设置,安装 Ubuntu 变得越来越困难。
我已经使用 Linux 了,我不知道,多久了,很长时间了,超过 20 年了。所以预装了它的笔记本电脑的想法在我的大脑的某些部分仍然有点新颖。除此之外,它相当老式。它就像 Emacs 和终端一样。你使用哪个版本的 Ubuntu 并保持更新?是的,我保持最新状态。我现在使用的是 2204。是的,这相当新。太棒了。不幸的是,这就是我们今天的时间。感谢您的加入。是的,当然。
感谢收听 Console DevTools 播客。请在 Twitter 上告诉我们您的想法。我在 David Mitton,您可以关注 console.dev。不要忘记订阅并在您的播客播放器中对我们进行评分。如果您正在玩弄或构建任何有趣的 DevTools,请与我们联系。我们的电子邮件在节目说明中。下次再见。