我在QQ上加了一个专门讨论DirectX的群,里面有不少的高手。这让我也有机会去感受一下GNU之父——斯托曼在大学时代曾经体会过的那些快乐。客观地讲,这就是传统黑客(有技术和共享合作精神,而非入侵他人计算机)。
在讨论技术之余,我发现大家都在抨击C++的语法问题。臃肿、复杂、难以理解,很多时候不够灵活,也无法榨干硬件能力。其他那些C++之外的语言更是如此。像Java这种语言只能被抨击为邪语(类似邪·教这种)。
仔细看不难发现,甚至没有哪种主流的编程语言是中国人发明的(其实还是有的,比如易语言,但很少见有人用这种东西)。最近华为非常高调,宣称已经造出了自主研发的操作系统(鸿蒙OS),下一步还要开发自主研发的编程语言。这其实是好事。但要落地,而绝不能画饼。可以以旧的编程语言为参照,改进轮子,大功一件。
我对脚本语言(比如Python、JavaScript),以及像Java这种半编译语言兴趣不大。以后再说。
本文专讲未来的编译语言。我只能算编程业余爱好者,水平不高,想到哪儿说哪儿。
自娱自乐,不必太当真。
一、pos_t类型
size_t类型大家都不陌生。这是一种typedef的无符号整数,且同指针有通常的长度(x86下是32位=4字节,x64下是64位=8字节)。而pos_t同size_t具有同样的长度,也是无符号整数。这东西什么用?请看下面的代码:
void func()
{
pos_t pos = End;
goto pos;
End:
return;
}
也就是说,要允许将标签赋值给变量,并以变量为目标进行跳转。ASM(汇编)是有这个能力的。在至少1/3以上的函数内,对于保证代码的效率而言是必须的。写过代码的人必深有体会。
函数内的标签还应该可以被导出来。上代码:
int func1(pos_t pos)
{
goto pos;
Pos1:
return 1;
Pos2:
return 2
}
void func2()
{
pos_t pos = func1:.Pos2;
int x = func1(pos);
printf("%d