几年前,在初步设计了 Datum Lang 的语法后,我开始探索在 IDE 中支持编程语言,于是写了那篇《编程语言的 IDE 支持》。在生成式 AI 的影响下,我开发、维护的几个开源编程语言相关的工具,又在持续发生变化:
生成式 AI 带来了更多好玩的点,也意味着,我们得思考它对于语言的基础设施的变化。
在过去 IDE 提供的智能提示功能,已经为我们抹除了一部分语言间的差异 —— 通过猜测可能的函数调用,就可以写出凑合的代码。而在我的几个多语言工具里,显然 AI 进一步弱化了这个差异。
不论是我们开源的 AutoDev,还是 GitHub Copilot、JetBrains AI Assistant 等,都在将各类的编程范式显性地写入 prompt 中。这些场景包含了:
如果你仔细阅读 AutoDev 代码或者 CHANGLOG 时,就会发现对应的趋势。
在编程语言中,AI 工具通过两种方式来分析人类的行为,进而给出对应的代码建议:
对于 AI 辅助编程来说,这两种模式可以提供更好的上下文,从而进一步提供生成代码的质量。
在 JetBrains + AI Assistant 和 VSCode + GitHub Copilot 中,我们都可以明显看到 AI 对编程工具的影响。尽管 GitHub Copilot 能提供非常好的体验,但是显然 IDE 配合智能建议 + 静态分析能提供更好的 AI 体验。
诸如于,对于私有化的语言接口来说,可以将潜在的接口发送给模型,交由模型来进一步处理。而在这一点上,不带静态分析功能的编辑器能力是有限的。
相信有大量的读者已经深度使用了 ChatGPT 和 GitHub Copilot,所以这里我们就只输出一些总结。
PS:需要注意的是由于大量的 AI 基础设施、开发人员、榜单是基于 Python 语言的,所以 Python 会比我们想象中的好一点。但是,实际效果嘛,懂的都懂。
从现有的 GitHub Copilot 等补全型工具的结论来说:
而依赖于 Java 生态的 Kotlin 语言,效果也比普通的动态语言略微好一点。
尽管,GPT 4 的相关文章一直在鼓吹人类不再需要编程,但是显然这是不可能的。每个人对于自然语言的理解是不同的,如果每个人用自己的语言去编程,那么人类间就无法协同协作。
在现阶段的自然语言应用里,即诸如于 text2SQL、text2DSL 的场景下,由 AI 应用所做的主要工作依然是去除自然语言中的歧义,最后将确定性的部分转换为代码,再进行和编译。
别忘了,这个世界如果还存在多个国家,就会只有一个大语言模型。两个大语言模型之间总是存在差异的。
单元测试为应用开发提供了一个非常快捷的检验方式。即在不需要启动应用的情况下,你就可以检验实现代码的逻辑是否正确。这单元测试的这一隔离的类容器化特性,对于中大型项目非常重要,节省了大量的启动时间。
而生成式 AI 一次性生成大量的代码,也意味着,基于现有开发模式,限制我们交付速度的还是校验成本。如果不能更好地降低校验成本,那么生成式 AI 是无法真正提升整体速度的。甚至于,你会感受到你的机器跑不动单元测试。
对于实现需求而言,IDE 提供了非常好的语法提示,AI 生成主要函数、提供代码补全。只要我们掌握一门编程语言的开发,剩下的事情就变得非常容易。
当然了,对于新兴的语言来说,这可能是一个挑战 —— 需要花费精力转换其它语言的代码,以构建可用的 AI 能力。
从现有的模式来看,AI 缩短了开发者在语言上的技能要求,从而进一步降低了准入门槛,使得更多的人可以加入这个行业。进一步地,开发者可能需要变得更加全能,掌握更多的语言。
围观我的Github Idea墙, 也许,你会遇到心仪的项目