Skip to content

Commit

Permalink
docs: synced via GitHub Actions
Browse files Browse the repository at this point in the history
  • Loading branch information
nop-cao committed Nov 25, 2024
1 parent cd81cee commit d797652
Showing 1 changed file with 106 additions and 0 deletions.
106 changes: 106 additions & 0 deletions src/theory/why-xlang-is-innovative.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# 为什么XLang是一门创新的程序语言?

## 一. 为什么需要设计XLang语言
![](https://gitee.com/canonical-entropy/nop-entropy/raw/master/docs/tutorial/simple/images/xlang.png)

XLang语言是Nop平台底层的关键性支撑技术,在形式上它包含了XDef、Xpl、XScript等多个子语言。因为XLang与其他单一语法形式的程序语言有着较大的差异,所以有些人可能会疑惑XLang到底算不算是一种程序语言?它是不是只是在多种现有语言的基础上增加了一些零散的扩展?

这里我想提出一个对程序语言的本质性理解:**一门程序语言定义了一种程序结构空间,程序语言是程序结构空间的构造规则**。也就是说,一门程序语言所能够创造的所有结构以及这些结构之间的所有可行演化路径构成了一个特定的程序结构空间,所有可行的计算都在这个结构空间中发生。

> 我们的物理世界是一个四维时空,量子场论和相对论是它底层的构造规则。超弦理论试图突破底层结构空间的限制,在11维时空中建立统一的构造规则。
基于以上理解,XLang语言之所以是一门新的程序语言,是因为它创造了一个新的程序结构空间,在这个结构空间中可以很方便的实现可逆计算理论所提出的`Y = F(X) + Delta`的计算范式。虽然XLang可以认为是包含XDef, XPL, XScript等多个子语言,但是它们作为一个整体才是实现可逆计算的关键所在。
**XLang是世界上第一个在语言中明确定义领域结构坐标并内置通用的差量计算规则的程序语言**

要解释清楚XLang语言的创新性,有必要回顾一下历史。

### 高级程序语言的发展历史
以下是智谱AI所生成的高级程序语言发展历史:

### 早期阶段(1950s-1960s)
- **Fortran(1957)**:引入了数组、循环和子程序等概念,解决了科学计算中的复杂数学问题。
- **COBOL(1959)**:设计了类似于英语的语法,便于商业数据处理。
- **ALGOL(1958)**:引入了块结构、递归和过程抽象,对后来的语言设计产生了深远影响。
### 结构化编程阶段(1970s)
- **C(1972)**:引入了指针、结构体和函数指针,提供了低级访问和高效性能,解决了系统编程的问题。
- **Pascal(1970)**:强调了数据类型和程序结构,引入了枚举、集合和记录类型,便于教学和软件开发。
- **Ada(1980)**:引入了包、任务和异常处理,支持并行编程和嵌入式系统开发。
### 面向对象编程阶段(1980s-1990s)
- **C++(1983)**:在C的基础上引入了类、对象、继承和多态,解决了大型软件开发的模块化和重用性问题。
- **Java(1995)**:引入了垃圾回收、异常处理和平台独立的Java虚拟机(JVM),解决了跨平台开发和网络编程的问题。
- **Python(1991)**:强调了代码可读性和简洁性,引入了动态类型、列表推导和装饰器,适用于快速开发和脚本编写。
### 互联网时代(1990s-2000s)
- **PHP(1995)**:专为网页开发设计,引入了HTML嵌入式代码、数据库连接和会话管理,解决了动态网页生成和服务器端脚本的问题。PHP的发展可以细分为几个小阶段:
- **JavaScript(1995)**:引入了事件驱动、异步编程和DOM操作,解决了浏览器端交互和动态内容的问题。
- **Ruby(1995)**:强调了简洁和一致性的语法,引入了块、迭代器和元编程,适用于快速开发和Web应用。
### 现代多范式编程阶段(2010s-2020s)
- **Go(2009)**:引入了协程(Goroutine)、通道(Channel)和强大的标准库,解决了并发编程和大规模系统开发的问题。
- **Rust(2010)**:引入了所有权系统、生命周期和借用检查,提供了内存安全和并发性能,适用于系统编程和性能敏感的应用。
- **Kotlin(2011)**:在Java的基础上引入了空安全、扩展函数和协程,解决了Android开发中的痛点,提高了开发效率。
- **Swift(2014)**:为iOS开发设计,引入了闭包、元组和非空类型,提供了更安全、更高效的编程体验。
- **TypeScript(2012)**:在JavaScript的基础上引入了类型系统、接口和装饰器,提高了代码的可维护性和开发效率。

========智谱清言AI创作完毕=================

通用的高级程序语言从FORTRAN开始,经历了几十年的长期发展,目前已经发展到某种瓶颈,新语言所带来的本质上新颖的特性越来越少,各个高级语言都发展到了所谓的多范式编程阶段,它们的语法特性逐渐开始融合、趋同,比如大部分语言现在都同时支持面向对象式的结构声明,支持函数式的Lambda表达式,支持元编程所需要的自定义注解,支持异步编程所需的Async相关语法和支持库等。

一个有趣的问题是,是否还存在着通用的可抽象的语法特性,它们具有足够的技术价值以至于需要一个新的程序语言来承载?

### 面向对象的进一步发展

目前主流的编程语言大多采用面向对象编程范式,会引入类结构定义以及类型之间的继承关系。

```java
class Shape {
public void draw() {
System.out.println("Drawing a generic shape");
}
}
class Circle extends Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("Drawing a rectangle");
}
}
```



面向对象语言和函数式语言是两种主流的程序语言范式。


如果TypeScript被认为是JavaScript + JSX + Type扩展,那么XLang可以看作是 JavaScript + XPL + 差量计算 + 元模型+ 元编程扩展。

一般的程序语言很强调语法形式,但是XLang强调的是语法形式不重要,不同展现形式之间可以进行可逆转换,此外语义结构应该支持差量分解、合并。

1. XPL模板语言是一种类似Freemarker的XML格式的模板语言,但是它的AST语法树与XScript是同一个AST语法树,这样这两者的元编程和类型分析等可以统一实现。后续也有打算开发更多的语法前端,比如类似Python的语法形式也可以解析到XLang的AST语法树,这样可以在多种形式之间自由转换。
2. 与JSX不同,XLang提供了一种更加灵活、可扩展性更强的方式实现JavaScript语法中嵌入XML,以及在XML中嵌入JavaScript
3. XLang在XML语法方面提供了XDef元模型定义语言,支持定义新的DSL语言。这个子语言的作用类似于XML Schema语言,但是更加直观、强大。
4. 使用XDef定义的所有DSL统称为XDSL, 这些XDSL都自动具有`x:override``x:extends`, `x:gen-extends`等语法特性。这些语法特性是可逆计算理论所提出的,在此前的程序语言中没有建立这种通用的抽象。
也就是说,XLang是第一个内置通用差量计算语法的程序语言。
5. XLang可以认为是包含XDef, XPL, XScript等多个子语言,但是它们作为一个整体才能实现可逆计算理论所提出的Y = F(X) + Delta的计算范式。
6. XLang与其他语言的本质区别在于,它是基于可逆计算理论、面向DSL开发的程序语言。一般语言都是直接面向应用开发的,我们直接使用这些语言来对业务建模,实现业务逻辑。但是使用XLang,我们先建立一个DSL,
然后再使用DSL来描述业务。并且开发一个DSL的成本非常低,最基本的情况下只需要使用XDef语言定义XDef元模型文件,即可得到这个新的DSL的解析器、验证器、IDE插件、可视化编辑器等。
7. Jetbrains公司有一个产品MPS,它也是支持先开发DSL,然后再用DSL来描述业务。MPS底层是自己定义的一套底层语言机制。Nop平台是一个类似于MPS的低代码开发平台,它的底层就是XLang语言。只不过Nop平台的指导理论是可逆计算,与MPS的技术路线和指导思想有着本质差异。
但是技术发展目标是类似的。

支持泛型的面向对象程序语言 在结构层面的计算模式可以看作是 Map = Map extends Map<Map>,而可逆计算理论以及XLang语言是将这种计算范式从Map结构扩展到Tree结构,并且引入包含删除语义的x-extends差量合并运算
Tree = Tree x-extends Tree<Tree>

一般的通用程序语言,比如C#和Java,它们试图解决的问题和采用的解决方案本质上是类似的,语法和语义层面基本也是可以一一对应的。XLang与这些语言都不同,它试图基于Tree和Delta差量的概念重建程序结构空间。程序语言是程序结构空间的构造规则,而XLang就是这个新视角下的程序结构空间的构造规则

可逆计算是一个创新性很强的软件构造理论,而XLang是实现可逆计算理论的一个关键手段。如果只是从传统的程序语言角度去理解,面向的是传统的软件结构空间和传统的思想路线,可能无法感知到XLang到底要解决什么问题,为什么此前所有的技术都无法解决这些问题。

创新性的语言所提出的问题和所实现的解决方案都是不同于传统语言的。比如rust它提出了对于内存安全和并发安全的新的认知,并创造了新的语法结构作为解决方案。XLang语言是基于可逆计算理论所提出的新的软件构造的结构规律,提出了一整套针对Tree结构的生成、转换、分解、合并语法规则。其实Lisp就可以看作是最早的使用通用Tree结构的程序语言,但是Lisp并没有建立Tree的差量的概念。根据可逆计算理论, A = 0 + A,在存在单位元的情况下,任何全量都是差量的特例,我们应该在差量概念的基础上重建所有理解。

SQL语言是面向表结构的,具有一个内置的Schema定义语言,并且具有存储过程子语法。而XLang是面向Tree结构和DSL开发的,具有内置的XDef元模型语言和类似JavaScript的XScript子语法。

## 二. XLang的具体语法设计

## 三. 语言之外的世界

0 comments on commit d797652

Please sign in to comment.