首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

13.7  探索

Explorations

13.22 请学习Scheme shell,scsh。将它与sh/bash比较。你更喜欢从键盘用哪一个?如果做脚本你更喜欢用哪个?

13.23 研究JavaScript和/或Java小程序的安全性机制。这里允许程序做哪些事情,以及为什么?是否有什么潜在有用的特征,由于无法把它们做成安全的而无法提供?在所提供的特征里可能还遗留有哪些安全漏洞?

13.24 请学习万维网爬虫,这是一类探索万维网的程序。请构造一个能搜索某些有趣东西的爬虫。对于这样的任务,哪些语言特征或工具看起来特别有用?警告:自动万维网爬虫是一种公共活动,有严格的规则。在创建爬虫之前,请先做万维网搜索并学习这种规则。在让你的爬虫走出你的子网(甚至你自己的机器)之前,应非常仔细地测试你的代码。特别是当心对同一服务器快速的重复请求就构成了拒绝服务攻击,可能受到犯罪指控。

13.25 请学习Perl和Ruby的taint模型。它与沙箱(见第711页旁白的描述)比较起来怎么样?它能捕获哪类安全性问题?不能捕获哪类安全性问题?

13.26 在第729页的旁白中提到,awk和egrep的“扩充”RE的实现通常是先转换到一个NFA后再转换到DFA,而Perl等的扩充RE通常通过带回溯的搜索实现。有些工具,包括GNU的ggrep采用的是Boyer-Moore-Gosper算法 [BM77,KMP77] 的某种变形进行快速的确定性搜索。请弄清这一算法如何工作。其优点是什么?能把它用于Perl一类的语言吗?

13.27 在第735页的旁白中提出,不是常量的模式通常必须在使用时重新编译。如果Perl程序员希望免除重新编译的开销,他们可以用o尾随修改符或qr引号操作符。请考察这些机制对性能的影响。并考虑下面问题:语言实现有可能在多大程度上自动地有效地确定何时应该去做重新编译。

13.28 我们在13.4.2节有关Perl正则表达式的讨论仍然不完全。没提到的特征包括(上下文)前窥和后窥断言、注释、逐渐打开或关闭的修改符、内嵌代码、条件、Unicode支持、非斜线界定符,以及直译运算符(tr///)。请弄清这些特征的意义,解释它们是否(以及如何)扩充了记法的表达能力。如果没有这些东西,你可以怎样去模拟它们(可能需要外围的Perl代码)?

13.29 请考察PHP、Tcl、Python、Ruby、JavaScript、Emacs Lisp、Java和C# 的正则表达式支持的细节。请写出一篇文章,其中尽可能简洁地比较它们之间的异同,用Perl的正则表达式作为比较的参考。

13.30 请做一下有关Perl 6(在2005年早期还在开发中)的万维网检索。写一个报告说明它相对于Perl 5的变化。你对这些变化怎么看?如果要你来写一个新的修订版,你会做得与之不同吗?

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论