第十三章:速度.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十三章:速度

第⼗三章:速度 Lisp 实际上是两种语⾔:⼀种能写出快速执⾏的程序,⼀种则能让你快速的写出程 序。 在程序开发的早期阶 ,你可以为了开发上的便捷舍弃程序的执⾏速度。⼀旦程 序的结构开始固化,你就可以精炼其中的关键部分以使得它们执⾏的更快。 由于各个 Common Lisp 实现间的差异,很难针对优化给出通⽤的建议。在⼀个实现上 使程序变快的修改也许在另⼀个实现上会使得程序变慢。这是难免的事⼉。越强⼤的 语⾔,离机器底层就越远,离机器底层越远,语⾔的不同实现沿着不同路径趋向它的 可能性就越⼤。因此,即便有⼀些技巧⼏乎⼀定能够让程序运⾏的更快,本章的⽬的 也只是建议⽽不是规定。 13.1 瓶颈规则 (The Bottleneck Rule) 13.2 编译 (Compilation) 13.3 类型声明 (Type Declarations) 13.4 避免垃圾 (Gar age Avoidance) 13.5 ⽰例: 存储池 (Example: Pools) 13.6 快速操作符 (Fast Operators) 13.7 ⼆阶 开发 (Two-Phase Development) Chapter 13 总结 (Summary) Chapter 13 练习 (Exercises) 13.1 瓶颈规则 (The Bottleneck Rule) 不管是什么实现,关于优化都可以整理出三点规则:它应该关注瓶颈,它不应该开始 的太早,它应该始于算法。 也许关于优化最重要的事情就是要意识到,程序中的⼤部分执⾏时间都是被少数瓶颈 所消耗掉的。 正如⾼德纳所说,“在⼀个与 I/O ⽆关 (Non-I/O ound) 的程序中,⼤部 分的运⾏时间集中在⼤概 3% 的源代码中。” λ 优化程序的这⼀部分将会使得它的运⾏ 速度明显的提升;相反,优化程序的其他部分则是在浪费时间。 因此,优化程序时关键的第⼀步就是找到瓶颈。许多 Lisp 实现都提供性能分析器 (profiler) 来监视程序的运⾏并报告每⼀部分所花费的时间量。 为了写出最为⾼效的代 码,性能分析器⾮常重要,甚⾄是必不可少的。 如果你所使⽤的 Lisp 实现带有性能 分析器,那么请在进⾏优化时使⽤它。另⼀⽅⾯,如果实现没有提供性能分析器的 话,那么你就不得不通过猜测来寻找瓶颈,⽽且这种猜测往往都是错的 ! 瓶颈规则的⼀个推论是,不应该在程序的初期花费太多的精⼒在优化上。⾼德纳对此 深信不疑:“过早的优化是⼀切 (⾄少是⼤多数) 问题的源头。” λ 在刚开始写程序的时 候,通常很难看清真正的瓶颈在哪,如果这个时候进⾏优化,你很可能是在浪费时 间。优化也会使程序的修改变得更加困难,边写程序边优化就像是在⽤风⼲⾮常快的 颜料来画画⼀样。 在适当的时候做适当的事情,可以让你写出更优秀的程序。 Lisp 的⼀个优点就是能让 你⽤两种不同的⼯作⽅式来进⾏开发:很快地写出运⾏较慢的代码,或者,放慢写程 序的速度,精雕细琢,从⽽得出运⾏得较快的代码。 在程序开发的初期阶 ,⼯作通常在第⼀种模式下进⾏,只有当性能成为问题的时 候,才切换到第⼆种模式。 对于⾮常底层的语⾔,⽐如汇编,你必须优化程序的每⼀ ⾏。但这么做会浪费你⼤部分的精⼒,因为瓶颈仅仅是其中很⼩的那部分代码。⼀个 更加抽象的语⾔能够让你把主要精⼒集中在瓶颈上, 达到事半功倍的效果。 当真正开始优化的时候,还必须从最顶端⼊⼿。 在使⽤各种低层次的编码技巧 (low- level coding tricks) 之前,请先确保你已经使⽤了最为⾼效的算法。 这么做的潜在好处 相当⼤ ── 甚⾄可能⼤到你都不再需要玩那些奇淫技巧。 当然本规则还是要和前⼀ 个规则保持平衡。 有些时候,关于算法的决策必须尽早进⾏。 13.2 编译 (Compilation) 有五个参数可以控制代码的编译⽅式: sp eed (速度)代表编译器产⽣代码的速 度; comp ilation-sp eed (编译速度)代表程序被编译的速度; saf ety (安全) 代表要对⽬标 代码进⾏错误检查的数量; sp ace (空间)代表⽬标代码的⼤⼩和内存需求量;最 后, debug (调试)代表为了调试⽽保留的信息量。 交互与解释 (INTERACTIVE VS. INTERPRETED) Lisp 是⼀种交互式语⾔ (Interactive La

文档评论(0)

精品报告 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档