Blog

Blog

PHODAL

编程语言的 AI 支持

几年前,在初步设计了 Datum Lang 的语法后,我开始探索在 IDE 中支持编程语言,于是写了那篇《编程语言的 IDE 支持》。在生成式 AI 的影响下,我开发、维护的几个开源编程语言相关的工具,又在持续发生变化:

  • AutoDev 中,尝试添加了更多的语言支持,Rust 、 Golang,以及 Scala 、 PL/SQL 的试水。
  • Chapi 中,优化了 Kotlin 的支持,并支持了 C 语言。
  • ArchGuard 中,添加了更多语言的静态代码分析。

生成式 AI 带来了更多好玩的点,也意味着,我们得思考它对于语言的基础设施的变化。

编程语言的 IDE + AI

在过去 IDE 提供的智能提示功能,已经为我们抹除了一部分语言间的差异 —— 通过猜测可能的函数调用,就可以写出凑合的代码。而在我的几个多语言工具里,显然 AI 进一步弱化了这个差异。

编程范式的代码化、Prompt 化

不论是我们开源的 AutoDev,还是 GitHub Copilot、JetBrains AI Assistant 等,都在将各类的编程范式显性地写入 prompt 中。这些场景包含了:

  • 自动化生成惯性代码。不论是静态代码分析,还是相似代码,都在将人类的习惯带给 AI 。
  • 约定俗成的规范。诸如于如何测试好 controller 、 service 等不同场景的代码。
  • 语言常用框架。诸如于生成代码、测试里,应该考虑到这个项目的框架。
  • 文档生成。诸如于语言标准的文档应该如何编写。

如果你仔细阅读 AutoDev 代码或者 CHANGLOG 时,就会发现对应的趋势。

惯性依赖分析依旧是重点

在编程语言中,AI 工具通过两种方式来分析人类的行为,进而给出对应的代码建议:

  • 基于语法树的相关上下文
  • 基于最近变更的相关上下文

对于 AI 辅助编程来说,这两种模式可以提供更好的上下文,从而进一步提供生成代码的质量。

IDE 工具将进一步强化生成式 AI

在 JetBrains + AI Assistant 和 VSCode + GitHub Copilot 中,我们都可以明显看到 AI 对编程工具的影响。尽管 GitHub Copilot 能提供非常好的体验,但是显然 IDE 配合智能建议 + 静态分析能提供更好的 AI 体验。

诸如于,对于私有化的语言接口来说,可以将潜在的接口发送给模型,交由模型来进一步处理。而在这一点上,不带静态分析功能的编辑器能力是有限的。

生成式 AI 对编程语言的影响

相信有大量的读者已经深度使用了 ChatGPT 和 GitHub Copilot,所以这里我们就只输出一些总结。

强类型语言优于弱类型语言

PS:需要注意的是由于大量的 AI 基础设施、开发人员、榜单是基于 Python 语言的,所以 Python 会比我们想象中的好一点。但是,实际效果嘛,懂的都懂。

从现有的 GitHub Copilot 等补全型工具的结论来说:

  • 强类型语言的接受率差不多比弱类型语言多 10%。
  • 混合语言代码接受率下降。诸如 JPA Query、React、Vue 这一类包含多语言场景时,接受率会再进一步下降。(前端代码受模板的影响进一步下跌📉)

而依赖于 Java 生态的 Kotlin 语言,效果也比普通的动态语言略微好一点。

编程语言依然不可或缺

尽管,GPT 4 的相关文章一直在鼓吹人类不再需要编程,但是显然这是不可能的。每个人对于自然语言的理解是不同的,如果每个人用自己的语言去编程,那么人类间就无法协同协作。

在现阶段的自然语言应用里,即诸如于 text2SQL、text2DSL 的场景下,由 AI 应用所做的主要工作依然是去除自然语言中的歧义,最后将确定性的部分转换为代码,再进行和编译。

别忘了,这个世界如果还存在多个国家,就会只有一个大语言模型。两个大语言模型之间总是存在差异的。

编程语言的基础设施需要重构

单元测试为应用开发提供了一个非常快捷的检验方式。即在不需要启动应用的情况下,你就可以检验实现代码的逻辑是否正确。这单元测试的这一隔离的类容器化特性,对于中大型项目非常重要,节省了大量的启动时间。

而生成式 AI 一次性生成大量的代码,也意味着,基于现有开发模式,限制我们交付速度的还是校验成本。如果不能更好地降低校验成本,那么生成式 AI 是无法真正提升整体速度的。甚至于,你会感受到你的机器跑不动单元测试。

语言学习成本的缩小

对于实现需求而言,IDE 提供了非常好的语法提示,AI 生成主要函数、提供代码补全。只要我们掌握一门编程语言的开发,剩下的事情就变得非常容易。

当然了,对于新兴的语言来说,这可能是一个挑战 —— 需要花费精力转换其它语言的代码,以构建可用的 AI 能力。

未来

从现有的模式来看,AI 缩短了开发者在语言上的技能要求,从而进一步降低了准入门槛,使得更多的人可以加入这个行业。进一步地,开发者可能需要变得更加全能,掌握更多的语言。

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 最新技术分享

标签