作者 | 卓慧娴
采访 | Eric Wang
责编 | 何苗
出品丨GOSIM 开源创新汇
Rik Arends,拥有超过 20 年的编程语言经验,软件开发与技术创新的杰出领导者,Makepad 创始人,在 Web 技术、UI 构建及 AI 集成领域非常受欢迎。
他 8 岁时沉迷于计算技术进行视觉和音频处理,开始了与计算机的不解之缘,自学写程序播放莫扎特,到后来 Cloud9 IDE 搭建,两大 Magic Moment ,让他在如今的职业道路上越走越坚定。直到他突破编程语言极限,从零构写搭建 Makepad ,实现多平台高效运行。
在 AI 赋能 Makepad 方面,Rik Arends 同样走在了前列。他看到了 AI 对软件开发模式的深远影响,致力于构建一个全面的愿景,而不仅仅是打造一个框架。通过整合语言模型,他实现了 AI 在代码生成、UI 设计等方面的应用,致力于成为开发者与 AI 合作构建应用程序的桥梁。他强调,高效嵌入 AI 不仅是未来的机会,更是行业发展的必然要求。
GOSIM 很荣幸邀请到 Rik Arends 来到中国,与全球的技术人畅谈与分享宝贵的经验。在 GOSIM CHINA 2024 大会中,他带来了《 Makepad:Rust 中的可视化应用程序设计》主题的精彩演讲。会后,GOSIM 对话栏目 Open AGI Forum 特别邀请到他,与 CSDN 资深科技编辑 Eric Wang 展开独家对话,探讨自己对编程哲学、Makepad 发展之路以及对 AI 赋能程序应用的独到见解。
Rik Arends 的精彩观点摘录:
-
我希望拥有一个集视觉设计器、代码编辑器于一体的完整集成开发环境,它们能够协同工作,以便为开发者提供一个无论是否借助 AI 辅助都能高效使用的应用程序。
-
我认为高效嵌入 AI 不仅是一个机会,更是一个要求,因为这是行业未来必然的发展方向。要么跟上时代趋势,要么就被淘汰。
-
程序员的自我怀疑不应该是我们放弃的时刻而是我们应用所学汲取错误经验,并再次尝试的时刻。
-
我认为 Rust 的错误信息非常友好,我们可以获得来自 Rust 分析器和代码编辑器大量的编译信息、类型推断和类型信息,接着能显示出清晰的报错信息。因此它可能会成为 AI 操作的最佳语言。
-
我们接下来研究的方向是拥有具备实时编译和设计功能的 IDE 。
-
在未来, AI 将辅助编程和设计。我们有机会成为开发者与 AI 合作构建应用程序的桥梁,将会有新的具备视觉感知力的多模态开源 AI 模型问世。
以下是本次采访的主要内容:
人生两大 Magic Moment ,从莫扎特到 ICloud9 IDE
Eric Wang:你是如何走上当前的职业道路的?
Rik Arends:在我小时候,大约 8 岁左右。我完全被 Commodore 64 、MSX 、Amiga 以及那些拥有色彩和声音的古老计算机所吸引,那是我第一次被计算机所吸引。我编写的第一个程序非常基础,利用 PC 扬声器播放了一首莫扎特的曲子。
自此我对计算的原始兴奋感从未丧失。但每一次迭代中,要达到演奏声音的基本境界需要付出更多。在今天,这仍然非常困难。我还没有真正完成 API 的开发以达到那样。但时代不断变化,也许下一个前沿是 AI 音乐。
抓住过去不放也许并不是通往未来的最佳途径,但我最初就是这样开始的。
在 18 岁的时候,我开始使用第一个 GPU , C++ 中的 Voodoo 图形,这是我的第一个 Magic Moment 。在之前如果想画点什么,必须得编写一个 CPU 函数来填充多边形,效率很低,想让它快到足够有趣来实现交互也相当困难。而有了第一代 GPU ,可以渲染一个完美且完整的 3D 模型。
而我的第二个 Magic Moment 是,我决定去做 GPU 加速图形,完成它只需要懂一点数学和矩阵代数。画面魔法般变得异常清晰。从此我就开始对设计工具的用户界面感兴趣,来制作这些实时动画。主要针对用户界面,接着我开始接触用户界面 UI 工具包来制作 XML ,但都是用 C++ 编写的。
2004 年我意识到我构建的网页浏览器已经问世了。我自问是否还要继续,因为我在这方面并不擅长,虽然我当时做得比想象的要好。
于是我转而学习 JavaScript 和网页开发。那是一个非常痛苦的时刻,因为从能够用 C++ 做任何事情到突然间能做的事情非常少且缓慢。但同时,你可以通过为企业开发 Web 应用程序来赚钱,这就是我进入 UI 技术构建的契机。在某个时候,我们有了足够的 UI 技术以至于构建一个 IDE ,并最终演变成了 Cloud9 IDE 。
Eric Wang:能否谈谈在开发 Web IDE 中面临的挑战?特别是现在 AI IDE正在推出,它们仍然在云端。
Rik Arends:我们进入云端 IDE 领域,从在浏览器中构建复杂用户界面方面开始。但现在仍是挑战,只有一小部分人能够用 HTML 完成。因此挑战一方面在于 UI ,即如何操作 DOM ,使代码编辑器足够快。
这部分是我的一位同事 Fabian ——代码编辑技术的先驱负责的。我们有一家小公司和一群工程师,这个难题就迎刃而解了,这是基础。其他部分实际上是围绕它开发的用户界面工具包,也由我当时的联合创始人开发。我一直认为并没有解决用户界面的难题,因为它不够快,我无法进行代码折叠和动画制作。这些东西在 HTML 中都无法运行。
根据我的经验,用户界面是实际创新的瓶颈。我不想做和其他 IDE 一样的事,想要创新真正的问题在云后端。比如当时与他人合作进行云端编译,那时的云端技术还不成熟,大家都刚开始接触云端服务。这意味着我们必须寻找一个可行的云端解决方案,而这极其困难。
这让我对云计算深恶痛绝,因为它不仅管理复杂,而且成本高昂。特别是对于初创公司来说非常昂贵。
Makepad 源于对极致 UI 体验的追求
Eric Wang:作为 Makepad 创始人,你最初是如何构建该框架的,它可以解决什么问题?
Rik Arends:Makepad 是对 UI 堆栈从零开始的重写,我希望能以这种方式编写 UI 。在创立 Makepad 之前,我还创立了 Cloud9 IDE 。我始终热衷于构建高性能 UI ,以便能够实现复杂的应用。但我发现 HTML 在这方面非常受限,因此开始寻求更好的解决方案,尤其是针对代码编辑器、IDE 和设计工具来说。
由于 Cloud9 是基于 HTML 和 CSS 构建的,我非常了解它,同时我意识到 HTML 引擎没有足够快的速度来进行动态设计应用。而我一直希望将设计和代码融合在一起。
我有一个带动画的实时内嵌部件的代码编辑器,是一个优化升级而非玩具级别的产品,能够真正投入实际工作。WebGL 刚刚发布。我想,如果能像 ShaderToy 那样,会怎样呢?在 ShaderToy ,我认为也已经有了编写像素着色器的地方。因此,我看到了这些动画和着色器,虽然执行效率低,但他们给了我证明,即存在一种绘制或调整样式的方法,这种方法可能不是基于 CSS 或矢量引擎,也许我们可以用小程序来进行样式设计。
于是我决定使用 JavaScript 和 WebGL。我又反复尝试用 WebGL 和 JavaScript 构建我的 IDE 。我的上一次迭代时采用了多线程架构来实现 JavaScript ,其中主线程负责显示服务器,而 Web Workers 则用于执行应用程序,只需将其显示命令和着色器程序发送至主线程。对此我感到无比自豪。
但问题是,我想用它来进行自我实现。我尝试在 Makepad 上编写一个按需生成内容的程序,大约 30 分钟后,Chrome 频繁崩溃,报错信息缺失,且无法确定崩溃原因。而且当时,我已经有了一个很棒的基于 WebGL 和 JavaScript 的代码编辑器。但它效率极低,以至于在编码时 CPU 使用率达到了 100%,运行困难。
我的一位从事游戏开发的很有干劲的朋友,他认为 UI 很酷,但是占用过多的 CPU 内存,影响其他任务的推进。这让我很受触动。用户界面通常只占 CPU 的很小一部分,我开始思考做点有用的优化,如 CAD 软件或其他高性能计算任务,虽然我考虑到可以在另一个线程上做,但这不是最理想的。因此我基本上放弃了 JavaScript ,因为我已经竭尽全力尝试了五六次了。
我的联合创始人 Eddie 曾在 Mozilla 工作,并参与了 Rust 项目。他推荐我们用 Rust 。我当时想到它可以通过 WebAssembly 来实现。这样一来,实现在浏览器中运行它的梦想依然有望成真。于是,我开始重新学习 Rust 语言,这真的很难。
Eric Wang:那么,Makepad 是如何利用现代 CPU 和 GPU 的强大功能来提升性能的?
Rik Arends:由于 Rust 是编译型语言,我尝试为 Makepad 编写 UI 模型的代码,它高效且简洁且几乎不占用 CPU 。我优化至每 16 或 8 个操作耗时一毫秒的性能,同时将 CPU 使用率控制在 10% 左右。便于将 CPU 用于执行其他任务,且不耗尽电量。我将样式处理转移至小型着色器程序,使得无需在 CPU 上运行矢量引擎的三角剖分或矢量引擎代码,从而节省了时间。但 GPU 的效率会稍降。在处理非常简单或生成的矢量数据时,Makepad 在 GPU 计算方面效率略有下降,但我认为这是一个值得的权衡。因为如果不总是重新绘制,那么 GPU 也不会耗尽电池,且 GPU 的速度越来越快。所以,即使在 GPU 窗口内,我的 GPU 使用时间也在缩短。这只是时间问题。当我开始做 Makepad 时,担心使用了太多的 GPU 。但现在这个问题已无需担忧了。
Eric Wang:Makepad 在处理跨平台开发方面有哪些独特的方法?
Rik Arends:首先,Makepad 的独特之处在于与支持的平台保持了一定关联性,而非过度抽象。这是因为低级别的平台抽象层难以实现统一,各个平台之间的差异显著。Makepad 的后端支持 WebAssembly、iOS、MacOS、Windows、Linux 以及 Android 等多个平台。这些平台在某些方面结构相似,但如事件循环的实现是完全不同的。在 Android 系统上,我们甚至运行在一个特殊的线程中,而不是在 UI 线程中等。图形 API 在着色器编译器层面进行高层次抽象,将 Makepad 着色器语言转换为 Metal 或 GLSL 。
接着,我针对每个后端都实现了场景图解释器,避免了低层次平台抽象的复杂性。尽管 WGPU 等低层次抽象性可能更优,但往往异常复杂,并不适用于 Makepad 。而且 WebAssembly 甚至更加奇怪,它是一个基于消息传递的后端。因此,如果在低级别上进行实现,性能可能会非常差。高层次平台抽象为 Makepad 带来了编译时间上的优势。
由于我们的代码库中包含了从平台层到上层的所有内容,几乎不依赖外部库,特别是平台层库。使得我可以将 Makepad Studio 或 IDE 与所有小部件、所有内容一起,在 10 秒内完成利落的编译。我会尽量保持代码精简。即使是在处理字体支持时,也几乎避免沉重负担保持精简,让我们拭目以待它能否持续下去。
快速的编译是开发过程中的重要起点,因为最终的结果你难以预知,而一个快速的编译过程能够为后续的开发提供良好的基础。
Eric Wang:你认为 Makepad 在与其他流行的 UI 框架诸如 Rigged 或 Flutter 等相比时,有哪些优势?
Rik Arends:我致力于构建一个全面的愿景,而不仅仅是打造一个框架。我希望拥有一个集视觉设计器、代码编辑器于一体的完整集成开发环境,它们能够协同工作,以便为开发者提供一个无论是否借助 AI 辅助都能高效使用的应用程序。用户只需点击按钮,就可以将应用程序部署到手机、网页或桌面端。我认为,这种全面的方法将是我们实现差异化的关键所在。
我不认为 Flutter 有设计工具,当然也可能有人为它开发了。Web 方面确实从未真正有过好用的工具,尽管有 Webflow 等的尝试。在 Web 合作方面,Makepad 利用 Web 画布实施嵌入。但在其他操作系统上,合作性就没那么强了,因为它有自己的 Metal 窗口。因此我们寻求可选的 WGPU 后端增强例如与 Bevy 等系统的互操作性。但首要任务仍是实现我们设定的价值目标。再去考虑兼容性。
Makepad 将成为开发者与 AI 合作构建 APP 的桥梁
Eric Wang:展望未来,你对 Makepad 的未来发展有什么计划或愿景?
Rik Arends:正如我在演讲中提到的,软件开发的旧模式正面临转折,AI 将对其产生重大影响。这意味着,仅仅将 Visual Basic 的老方法套用到 Rust 上,对于 Makepad 未来的发展来说是不够的,因此,我们重新构想,探索在 AI 主导的未来中,Makepad 能够扮演的角色。在未来,AI 将辅助编程和设计。我们有机会成为开发者与 AI 合作构建应用程序的桥梁。在我的设想中,将会有新的具备视觉感知力的多模态开源 AI 模型问世。
理想的 IDE 应能借由 AI 生成 UI ,且能即时看到结果。如果不符合预期,AI 能自动完成修正,不需要人工介入。同时我们还可以将 Rust 编译器的错误信息整合进来。我认为 Rust 的错误信息非常友好,我们可以获得来自 Rust 分析器和代码编辑器大量的编译信息、类型推断和类型信息,接着能显示出清晰的报错信息。因此它可能会成为 AI 操作的最佳语言。但这只是我的一个假设,我还没有证明它,但这确是我们接下来研究的方向,拥有具备实时编译和设计功能的 IDE 。
我认为高效嵌入 AI 不仅是一个机会,更是一个要求,因为这是行业未来必然的发展方向。要么跟上时代趋势,要么就被淘汰。
Eric Wang:你用 Makepad 展示的 AI 功能,具体都整合了哪些内容呢?
Rik Arends:这是首个被整合的语言模型,非常简单,我写了一些带有注释的示例代码。我通过输入上下文和需求以及添加纠错代码来指导它。结果证明这种方法效果不错。它能很好地生成着色器语言、UI 领域特定语言以及 Rust API 代码。然而,它的可扩展性还需时间验证。我现在还不知道结果,只是把这个概念验证的结果分享给大家。
Eric Wang:是什么启发你将 AI 融入 Makepad ?这是最近才有的想法?
Rik Arends:这是最近才发展起来的。正如我所说,我已经做了 10 年了。这是我在做 Cloud9 时面临的前端工程挑战的结果。这比我预期的要长,我不得不放弃 JavaScript ,不得不学习一门新语言 Rust ,并且改造整个系统。
如果将刚开发 Rust 六个月后的 Makepad 和现在的做对比,你会发现它已经优化了多次。但与 JavaScript 不同,我们可以优化重构 Rust ,因为它的编译器擅长报错,非常友好。但如果重构 JavaScript ,你会在运行时发现各种问题,那是一种糟糕的体验。
所以,Rust 极大改善了我的工作效率,我并没有一个明确的时间表,而是朝着既定方向发展。随着时间推移,我开始思考如何融入 AI 代码生成。但一两年前的早期实验,出错太多,无法实际使用。
但当 OpenAI o1 发布时,我开始看到它正在生成优质代码,接着我重新开始研究开源模型,意识到开源模型实际上并没有那么落后,它们正在奋力追赶。
至于 Makepad ,我希望至少当我向大家询问这些 AI 模型,比如,“你知道Makepad吗 ?”他们会有所了解。Makepad 显然在训练数据集中,因为 AI 已经阅读了我们的代码库并基于它进行了训练。
Eric Wang:AI 的整合如何增强 Makepad 针对于对开发者的功能?
Rik Arends:当我们用新语言创建一个新的框架时,Rust 对很多人来说是新的。我们将引入一个新的 DSL 用于 UI 描述,使用着色器有很多未知数。因此需要准确的文件说明,还需要有人愿意阅读这些说明来使用你的系统,这在现在越来越罕见。或者让 AI 处理样板代码,只需提供问题,它就能给提供最佳答案。我认为对于 Makepad 这个新框架来说。AI 集成可能是使其成功的关键。
Eric Wang:你如何看待 Makepad 性能导向的设计与 AI 结合对应用开发的影响?
Rik Arends:我希望可以利用 AI 从更高层次的规范、叙述或草图中生成 Rust 代码,使得 Makepad 的性能优势变得更易于获得和利用。但 Rust 并不是一种容易编写的语言,它有一个借用检查器,对于只理解垃圾收集器的人来说非常困难。因此,我希望利用 AI 能使得在不增加开发者难度的情况下,实现 Makepad 性能的提升。
Eric Wang:你认为 Makepad 能给开发者的工作流程带来哪些改进?
Rik Arends: Makepad 的许多改进仍在推进中,它足够强大用于构建,例如我们有像 Robrics 这样的示例应用,这是 Kevin 正在构建的Matrix客户端,还有 Moly —— AI 前端应用程序,这也是对我们 UI 系统非常好的测试案例,但构建这类 UI 较难,需要熟练的开发者。我们正利用现有基础设施来构建工具,拖放编辑器、在 IDE 中集成类型信息等这些事都在进行中。我们计划在明年真正将这个工具交到开发者手中。
程序员成长手册:
与我一起在AI时代“冲浪”
Eric Wang:你有 20 年的编程经验,包括 C 、C++、JavaScript 和 Rust ,不同的计算机语言经验如何影响了你对软件开发的看法?
Rik Arends:我认为深入到编程语言的极限至关重要。在 2005 年,我在 C++ 应用中达到了我的极限。而后我又深入研究了 JavaScript ,从静态编译转向 JavaScript 。JavaScript 带来了垃圾回收机制,虽然事情的解决效率下降了,但避免了可怕的内存错误。这开启了全新的编程范式。例如,在 C++ 中生成代码较难,模板较拙,但在 JavaScript 中,可以在运行时通过代码生成很多东西。我也因此学到丰富的元编程知识,这在 C++ 中无法实现,所以现在我掌握了在运行时生成专用函数的能力。
Rust 在某种程度上既是倒退也是巨大的进步。这让我们又回到了编译型语言的范畴,不再有运行时的代码生成。但我们获得了出色的内存安全、高性能以及在无需大量工作前提下的底层 API 访问权限。因此基本上每次我切换语言,都学到了新东西,但这不能适用于所有语言。Rust 运行中不存在垃圾回收机制,也没有运行时代码生成,并且这改变了你的编程方式。总体上来说是更好的,因为运行时代码生成非常棘手。
Rust 的结构化安全系统实际上有利于代码质量。我使用 C++ 时,会存在内存错误,导致程序不可预测地崩溃,这真的不利于你的血压健康。JavaScript 可能会导致不可预测的内存问题,产生垃圾导致回收器卡顿。当你在 UI 中渲染时,当然不希望动画卡顿。使用 Rust 虽然有限制,但非常稳定,生成的代码也非常稳定。
Rust 运行没有内存和性能问题。而某些被认为不错的东西可能对生产性软件并不那么友好。
Eric Wang:从程序员的角度来看,你认为我们真的需要 AI 具备人类的情感或同理心之类的能力吗,还是我们只需要一个完美的工具。
Rik Arends:我觉得很难说我们需要什么。在未来,我们将拥有事物的各种变体。我们将拥有看似有意识,作为助手的电脑。一切都会随之而来。这不是我能控制或引导的。就像有一股浪潮袭来。你所能做的就是尝试驾驭它,冲浪其中。
Eric Wang:我曾听说过程序员或多或少都有一些自我怀疑,随着人工智能的出现,这种自我怀疑会变得更强烈吗?你有哪些建议?
Rik Arends:每次我的 JavaScript 实验失败时,那都不是一个愉快的时刻。但我从那个阶段吸取了教训并再次尝试。所以自我怀疑不应该是我们放弃的时刻而是我们应用所学汲取错误经验,并再次尝试的时刻。
我认为缺乏自我怀疑其实并不是好的情况。因为它阻止我们反思和学习。所以我不会害怕自我怀疑而是拥抱它,但不要让它使你瘫痪,而是利用它来做出更明智的决定,为下一次尝试做好准备。
Eric Wang:针对从传统编程时代过渡到 AI 时代的资深程序员,以及所有想要使用 Makepad 或为其做出贡献的开发者,你会给他们什么建议?
Rik Arends:我也正面临着 AI 时代的挑战。我在思考如何将即将到来的事物转化为积极的一面。于是我意识到,首先我们不能忽视它,如果忽视它,就无法获得即将到来的巨大生产力的提升。那些即将到来的进步尚未完全实现,但它们已经在路上了。
许多开发者已经开始使用 Cursor,或利用 AI 辅助进行文档搜索、撰写注释等,这些对他们来说已经是日常的一部分了。但我还想强调我们必须接受它而非忽视,现在新的时代即将到来,不再需要专家开发者来做样板工作,可以用 AI 代替。对于许多行业开发者来说,将迎来一个拥有超能力的时代,用 AI 来实现目标。因此我认为最积极的态度是,好好享受即将到来的这个时期。
Eric Wang:非常感谢 Rik Arends 给我们带来的这场深刻分析。感谢所有观看的开发者,以上就是本期 Open AGI Forum 的全部内容。我们下期再见!
Rik Arends 演讲视频链接,复制链接跳转观看完整视频:
《 Makepad:Rust 中的可视化应用程序设计》
https://www.bilibili.com/video/BV1Hmm1YsE7r/?share_source=copy_web
(文:AI科技大本营)