《编程珠玑(续)(修订版)》—第2章2.4节原理

本节书摘来自异步社区《编程珠玑(续)(修订版)》一书中的第2章,第2.4节原理,作者【美】Jon Bentley,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 原理
Awk可以使程序员事半功倍。我们目前看到的多数程序如果使用传统的语言编写,代码量恐怕会多出一个数量级。规模的减小归功于Awk的几个特性:输入行之上的隐式循环、自动分隔成字段、变量的初始化和转换,以及关联数组。

关联数组是Awk将字符串和数值这样的基本数据类型结合起来的唯一机制,别无他法。幸而关联数组可以很自然地表示许多数据结构。

数组。一维、多维和稀疏数组实现起来都很容易。
顺序结构。队列和栈是由关联数组加一个或两个索引产生的。
符号表。符号表提供了从名字到值的一个映射:symtab[name] = value。如果所有名字有同样的值,那么这个数组就表示一个集合。
图。有穷状态机和拓扑排序都对有向图进行处理。FSM程序使用图的矩阵表示,而拓扑排序使用边-序列表示。
除了教学,Awk及其关联数组还有什么实际价值吗?Awk程序很小,这并不总是优点(像APL单行程序一样,Awk程序会使人费解,令人不胜其烦),但10行代码几乎总是要胜过100行代码。不幸的是,Awk代码运行起来似乎很慢。符号表的效率相对比较高,但以整数为索引的数组却要比传统实现慢上几个数量级。在什么情况下小而慢的程序才有用呢?

与开发成本相比,许多程序的运行时间成本是可以忽略的。Awk拓扑排序程序对某些任务来说已经接近产品质量了,但在出现错误时应该更健壮一些。
简单的程序可以得到有用的原型。先让用户尝试一个小规模程序。如果他们喜欢,再创建一个工业级的版本。
我用Awk作为小的子程序的测试环境,我们下一章再回到这个话题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值