凹语言语言调整建议:删除i8/i16/var

  • wasm 指令不支持 i8 和 i16,因此提议去掉这2类整型数
  • 在函数内 去掉 var 关键字(只用于全局变量),保持和 struct 内风格一致

因为涉及不兼容修改,会提供过渡期方案。

大家先线上讨论(会议时间后面更新到这里),稍后我们会组织视频会议征询大家意见。
最并提报凹语言发展委员会投票决定。

i8/i16 不建议删除,因为对接其他语言时会遇到这些基本类型。

var 简写可能和 label 有冲突:

// x: int
// x: int = 123
// END: int = 123

一个可能的思路是改造 label 语法

虽然大多数语言设计都内置基本类型,技术上是否可将基本数据类型提取到标准库而非内置于语言?语言规则可以更加简化?

Go语言中这些i8/i16基础类型其实就是在builtin包定义的,所以它们并非是关键字,所以语言本身已经减少了一些复杂性。
但是对于基础类型的四则运算,则一般是需要语言内置的,否则使用太复杂了

1 个赞

最近版本已经初步实现 var 可省略的语法:
image

多谢,才知道。那么像 bool int string 等也是在包中定义的?数值运算之外的如字符串加法 "aaa"+"bbb" 是语言还是包内实现的呢?

函数返回值还是用 =>吗?如 func add(a: i32, b: i32) => i32

另外,将 func 作为一种类型可行吗?如:

main: func = {
...
}

add: func(a: i32, b: i32 => i32) = {
...
}

这些类型和运算能力都是语言内置的,但是怎么样将这些类型绑定到i8/i16这些名字上是在 builtin 包完成的。

func 本来就是可以作为类型的:

func main {
	L0, L1: bool
	L: int = 123

	fnAdd: func(a, b: i32) => i32 = func(a, b: i32) => i32 {
		return a+b
	}
	fnAdd2: func(a, b: i32) => i32 = fnAdd

Loop:
	for 1 > 0 {
		println(L0, L1, L, fnAdd(1,2), fnAdd2(3,4))
		break Loop
	}
}

这里是否多粘贴了一段?是

    fnAdd: func(a, b: i32) => i32 = {
		return a+b
	}

还是

    fnAdd = func(a, b: i32) => i32 {
		return a+b
	}

?
另外,非函数内定义的函数包括main也可以这样定义吗?

冒号后面是类型,如果省略类型则变成赋值语句,或者是 := 语法

为何 func(a, b: i32) => i32 要重复两次呢?

	fnAdd: func(a, b: i32) => i32 = func(a, b: i32) => i32 {
		return a+b
	}

冒号和等于号之间的是类型,等号右边是闭包对象值。
可以省略类型,那是 := 的用法,不是 name :type 这种用法

群里提到“函数内局部变量定义和struct成员/函数参数/函数返回值保持统一”,请问其中“函数返回值”指的是?

func swap(a0, b0: i32) => (b1, a1: i32) {
    ax, bx: i32
    ax, bx = a0, b0
    a1, b1 = bx, ax
    return
}
1 个赞