希望能在2025年1月前就出一个demo,作为0.000000001版本。
为了简洁,很多东西这里不提了。
语言和类型
运算符:C语言中也有的东西
支持加减乘除相关的运算符:+,-,*,/。
支持逻辑运算符:&&,||,!。
支持比较运算符:>,<,>=,<=,==,!=。
支持位运算运算符:&,|,~。
考虑不支持的运算符:异或(^),左移(<<),右移(>>),条件运算符(?:),逗号运算符(,)。
这些运算符可以支持最基本的代数运算和逻辑运算,这些还是比较重要的东西。
这些运算符虽然受到一些批评,但还是支持:自增(++)和自减(–),其实自增和自减运算符还有前自增和后自增的区别(i++和++i),支持前自增、后自增、前自减、后自减。
在C++和python中,下标也被作为运算符([]),这个也支持。
赋值通过额外的机制处理。
运算符的优先级:简化运算符的优先级规则,只分为三类:关系运算符,加减法,其他的。结合性只考虑从左到右。
面向对象
设计一个新的面向对象编程语言是困难的。
类模板体现了现代的内存管理的一种方式。c++通过vector实现队列和栈,实际上vector就是一个类模板。
美国对类模板的讨论现在一般都归到“泛型编程”,而且java也通过“泛型类”支持类似c++的类模板。我现在倾向于觉得类模板和泛型编程可能也不是一个东西。
引入一个语义:一些类可以作为类模板的类型参数,一些类不能。类似的语义一定程度上可以在新版的c++中通过“概念”支持,但并不直接表述类本身不能作为。
为了实现这点,引入特别的语法“可以之类”可以说明一个类可以用于类模板的类型参数,而“守拙之类”则不能用于类型参数。
为了简化,const和类型相关的限定词也做简化。指针和引用怎么支持还不清楚。
控制流
控制流还是有必要的。这里可以换成中文的关键字。
“if(……)……else……”使用“举(……)……伪……”。
“for(……){……}”使用“推(……){……}”。
循环语句简化为只有”while(1){……}”,使用”伺{……}”。
例子
包(TestPackage)
可以之类 TA;
可以之类 T1 [::A, ::B] {
}
导出 可以之类 T2 {
整数 x();
整数 打印(){
2;
3;
举(4) {
5; 6;
7; 8;
举(4) {
5; 6;
7; 8;
举(4) { 5; } 伪 { 6; }
返回 1+1+2;
退;
}
}
举(4) { 5; } 伪 { 6; }
/*推(1;2;3){4;}*/
推(1:2){4;}
}
}
守拙之类 T3 {
无返回 f(){
1;
}
}
编译器
编译器将源代码编译为c++代码。
打散了编译器前后端、分词器、语法解析等等,分为“逻辑语言处理”和“实体语言处理”两块。条件语句,类型系统,类模板的实例化归为逻辑语言处理。
下一步
完善类型系统和各个处理部分。