现在的想法

希望能在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++代码。

打散了编译器前后端、分词器、语法解析等等,分为“逻辑语言处理”和“实体语言处理”两块。条件语句,类型系统,类模板的实例化归为逻辑语言处理。

下一步

完善类型系统和各个处理部分。