AI时代的现代语言
现代语言
现代语言指的是与过去的语言相比,提供更高生产力、稳定性、安全性、可维护性的语言。这些语言积极引入最新的技术和概念,为开发者提供更高效、更安全的开发工具。代表性的现代语言包括 Java, Rust, Python, TypeScript 等,它们具有以下特点。
1. 面向对象设计 ( OOP )
现代语言大多基于面向对象的概念进行设计。面向对象支持封装、继承、多态等原则,通过将复杂系统划分为更小的对象单元进行管理,使程序结构清晰且灵活。这尤其在大规模软件开发时,对于控制开发成本和投入、减少维护过程中可能出现的问题非常有效。
2. 语法糖和表达式
现代语言提供各种语法糖和基于表达式的语法,以提高代码的可读性和开发生产力。三元运算符、Lambda表达式、模式匹配等功能减少了样板代码,使代码更具可预测性,并提高了开发者的生产力。
3. 模块系统
现代语言通过模块系统,允许程序被分解为多个单元进行管理。这使得代码的重用性和依赖性管理更加容易,即使项目规模扩大也能使维护更加顺畅。代表性的例子包括 Java 的 Maven/Gradle、Rust 的 Cargo、TypeScript 的 npm/yarn 等。
4. 中间语言和虚拟机
现代语言为了实现平台独立性、性能优化和安全性,引入了中间语言和虚拟机。代表性的例子包括 JVM, LLVM, WASM, GraalVM 等。
AI 时代的开发与现代语言的局限性
现代语言是在人类编写绝大多数代码的前提下产生的。自然地,现代语言的目的是减少重复性工作、提高生产力,并通过支持开发者协作的结构来有效实现大型软件。然而,在 AI 时代,这一前提正在逐渐瓦解。Copilot, Cody 等 AI 工具正在自动化代码编写的许多部分,单个开发者能够生产的代码量正在呈指数级增长。因此,过去被视为优点的现代语言特性正在逐渐转变为过时的缺点。
面向对象设计
AI 可以快速准确地分析在单一函数或模块中明确表达所有信息的结构。另一方面,随着上下文的增加,需要推断的范围随之扩大,从而降低了 AI 的生产力和准确性。以 OOP 编写的代码将逻辑分散到多个对象中,而不是集中管理,这最终要求 AI 具备更多的上下文信息。请看下面的代码。
1public class AnimalHandler {
2 public void handle(Animal animal) {
3 animal.speak();
4 }
5}
6
7public class Main {
8 public static void main(String[] args) {
9 AnimalHandler handler = new AnimalHandler();
10
11 Animal a1 = new Dog();
12 Animal a2 = new Cat();
13 Animal a3 = new Horse();
14
15 handler.handle(a1);
16 handler.handle(a2);
17 handler.handle(a3);
18 }
19}
在上述代码中,AI 为了了解 speak() 方法实际执行的操作,必须重复进行如下推断:
- animal 是哪个具体类的实例?
- 在该类中被覆盖的 speak() 方法定义在哪里?
- Dog 和 Cat 类的定义在哪里,其内部操作是什么?
- Dog 和 Cat 类是否有可能在其他类中被覆盖?
这些信息并非集中在一个文件或一个函数中,只有通过追踪类文件之间的关系和继承结构才能理解。此外,像反射或动态加载这样在运行时确定的元素,对于 AI 而言如同黑箱,实际上无法进行分析。
语法糖和表达式
AI 偏好显式操作而非隐式操作,更倾向于组合简单结构来生成一个正确答案,而不是直接使用复杂结构。相比之下,语法糖允许使用多种表达方式,但其内部操作往往相同或相似。AI 必须逐一学习这些不同表达方式的含义,并且可能难以判断在特定情况下应该推荐哪种语法优先级。
中间语言和虚拟机
AI 主要基于源代码进行学习。另一方面,中间语言 (bytecode) 在编译过程中会去除变量名等含义,需要在运行时由虚拟机重新解释。这对 AI 来说是一项非常难以理解或转换的任务。例如,AI 可以实现从 TypeScript 到 Go 的转换,但将 V8 engine 的 bytecode 转换为 JVM 的 bytecode 或机器码几乎是不可能的。
AI 时代真正的现代语言
通过上述内容,我们可以看出现代语言的特点实际上是不适合 AI 时代的过时元素。那么,哪种语言能够成为 AI 时代最适合的现代语言呢?我们可以从过去现代语言所排斥的元素中获得启发。AI 时代的现代语言应具备以下特点:
- 必须具有显式语法和自然的流程。
- 必须摆脱过度的 OOP 结构,拥有扁平且简单的结构。
- 相较于不必要的语法糖或隐式模式,仅使用有限的基本关键字即可构建多种功能。
- 必须拥有简单且可预测的构建系统,而非复杂的系统。
最符合这些标准的语言是 Golang。Go 语言的设计旨在仅用最少的核心关键字和简单的语法组合即可实现绝大多数实用功能,并彻底排除不必要的抽象和隐式操作。这种结构不仅有利于开发者,也有利于 AI 理解和生成代码。
Go 语言追求可预测的扁平结构、显式流程和一致性语法,这些特性与基于人类开发者设计的现有现代语言不同,更适合 AI 积极参与的开发环境。Go 语言一度被视为过时的保守设计哲学,反而在 AI 时代成为最先进的选择。