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 的字节码转换为 JVM 的字节码或机器码,实际上几乎是不可能的。
AI 时代真正的现代语言
通过以上内容,我们可以看出现代语言的特点实际上是 AI 时代不适用的过时元素。那么,哪种语言才能成为 AI 时代最合适的现代语言呢?我们可以从过去现代语言所排斥的元素中获得线索。AI 时代的现代语言应该:
- 具有明确的语法和自然的流程。
- 摆脱过度的 OOP 结构,采用扁平化和简单的结构。
- 避免不必要的语法糖或隐式模式,仅使用有限的基本关键字来构建多种功能。
- 拥有简单且可预测的构建系统,而非复杂的构建系统。
最符合这些标准的语言是 Golang。Go 语言设计之初就旨在通过最少的核心关键字和简单的语法组合,实现大部分实用功能,并彻底摒弃了不必要的抽象和隐式操作。这种结构不仅有利于开发者,也有利于 AI 解析和生成代码。
Go 语言这种追求可预测、扁平化结构、明确流程和一致语法的特性,与以人类开发者为中心设计的传统现代语言不同,更适合 AI 积极参与的开发环境。Go 语言一度被认为是过时的保守设计理念,反而在 AI 时代成为了最先进的选择。