Skip to content

类型 ​

类型修饰符 ​

在Auto语言早期设计里,类型的修饰符是前置的,如数组([]int),这个设计借鉴了Go语言的。

但在开发C转译器的过程中,我发现这种前置的修饰符,和C很多时候正好相反,容易混淆。 例如指针类型(*File),在C语言里是(File*)。

经过思考,我发现实际上如果统一前置或者统一后置,效果其实是一样的,关键是要统一。

考虑到Auto语言和C语言的紧密关系,我决定把所有的类型修饰符都设计为后置模式:

  1. 数组类型:
  • 动态数组:int[]
  • 定长数组:int[10]
  • 多维数组:int[3][10]
  • 多维动态数组:int[][][]
  1. 指针类型:
  • 指针:int*
  • 多级指针:char**
  • 由指针组成的数组:int*[3]
  • 指向数组的指针:int[]*
  1. 引用类型:
  • 引用:int&
  • 多级引用:char&&
  • 由引用组成的数组:int&[3]
  • 指向引用的指针:int&*
  1. 可选类型:
  • 可选:int?
  • 多级可选:char??
  • 由可选组成的数组:int?[3]
  • 指向可选的指针:int?*

注意,多维数组的维度顺序,和C/C++一样,是左侧为外围维度,右侧为内部维度:

auto
let arr int[3][10] = [[0..10], [1..11], [2..12]]

这里arr是一个长度为3的数组,其中每个元素都是一个长度为10的int数组。

要获取这个2维数组的最后一个元素,用:

auto
let last = arr[2][9]

这样获取元素的维度和声明类型的维度,顺序是一致的。都是先外围,再内部。

基于 MIT 许可发布。