C–:支持垃圾回收的便携式汇编语言上
在软件开发领域,选择合适的编程语言和工具对于提高开发效率和程序性能至关重要。传统的C语言在某些场景下存在一些局限性,而C–作为一种便携式汇编语言,为解决这些问题提供了新的思路。
1 C语言的局限性
C编译器在处理内存别名问题时非常保守,这严重限制了指令调度器对内存操作进行重排或从循环中提取的能力。前端编译器通常知道不会发生别名问题,但却无法将此信息传达给C编译器。此外,C语言还缺乏对一些重要底层特性的控制能力,包括从过程中通过寄存器返回多个值、非对齐内存访问、算术运算、数据布局以及省略多路跳转的范围检查等。这些局限性使得C语言在作为便携式汇编器使用时显得很笨拙,并且会导致性能下降。
2 C–语言概述
C–虽然名字中带有“C”,但它绝不是C语言的子集,C语言只是其设计的起点。以下是一些用C–编写的计算 ∑n i=1 i
和 ∏n i=1 i
的函数示例:
/* Ordinary recursion */
export sp1;
sp1( bits32 n ) {
bits32 s, p;
if n == 1 {
return( 1, 1 );
} else {
s, p = sp1( n-1 );
return( s+n, p*n );
}
}
/* Tail recursion */
export sp2;
sp2( bits32 n ) {
jump sp2_help( n, 1, 1 );
}
s