26、编程语言特性与实现技术

编程语言特性与实现技术

1. 编译器技术推动语言特性融入

随着编译器技术的进步,或者设计人员愿意构建更复杂的编译器,曾经被认为代价过高的语言特性如今得以融入。例如,Ada 语言中 case 语句的标签范围要求编译器能够生成采用二分查找的代码;C++ 中的内联函数避免了在微小函数的低效性和宏的混乱语义之间进行选择。异常处理在常见情况下(即未发生异常时)可以实现零成本,但实现起来颇具技巧性。迭代器、装箱、泛型和一等函数同样具有一定的复杂性,但在主流命令式语言中越来越常见。

1.1 部分实现技术的权衡

一些实现技术,如重新排列表达式以发现公共子表达式,或在非确定性结构中找到可接受的选择后避免对保护条件进行求值,虽然会给程序员带来一定负担(如必要时添加括号以避免溢出或确保数值稳定性,或确保保护条件表达式无副作用),但因其重要性而值得采用。而其他一些语义上有用的机制,如惰性求值、延续或真正的随机非确定性,通常被认为过于复杂或代价过高,仅在特殊情况下才值得使用。

1.2 原始语言中的特性替代

在相对原始的语言中,我们可以通过编程约定来获得缺失特性的部分益处。例如,在早期的 Fortran 方言中,我们可以将 goto 语句的使用限制在模仿更现代语言控制流的模式中;在没有短路求值的语言中,我们可以编写嵌套选择语句;在没有迭代器的语言中,我们可以编写一组提供等效功能的子程序。

2. 练习题解析

2.1 运算符相关问题

  • 问题 6.1 :大多数编程语言中,多数二元算术运算符是左结合的,但大多数编译器可以自由选择以任意顺序计算二元运算符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值