博客园  :: 首页  :: 联系 :: 管理

08 2011 档案

摘要:我们已经看到, 元编程在一个类似jsp的模板引擎方面的应用。我们通过简单的字符串处 理来生成代码。但是我们可以做的更好。我们先提一个问题, 怎样写一个工具, 通过查找 目录结构中的源文件来自动生成Ant脚本。 阅读全文

posted @ 2011-08-18 11:02 雪庭 阅读(1083) 评论(0) 推荐(0) 编辑

摘要:到此刻为止, 我们所知的关于Lisp的指示可以总结为一句话: Lisp是一个可执行的语法更 优美的XML, 但我们还没有说Lisp是怎样做到这一点的, 现在开始补上这个话题。 阅读全文

posted @ 2011-08-18 10:52 雪庭 阅读(446) 评论(0) 推荐(0) 编辑

摘要:到了这里, 对XML的讨论你大概都听累了, 我都讲累了。我们先停一停, 把树, s表达式, Ant这些东西先放一放, 我们来说说C的预处理器。一定有人问了, 我们的话题和C有什么 关系? 我们已经知道了很多关于元编程的事情, 也探讨过专门写代码的代码。理解这问题 有一定难度, 因为相关讨论文章所使用的编程语言, 都是你们不熟悉的。但是如果只论概 念的话, 就相对要简单一些。我相信, 如果以C语言做例子来讨论元编程, 理解起来一定 会容易得多。好, 我们接着看。 阅读全文

posted @ 2011-08-18 09:36 雪庭 阅读(211) 评论(0) 推荐(0) 编辑

摘要:我们先把算符的事情放一放, 考虑一下Ant设计局限之外的东西。我早先说过, Ant可以通 过写Java类来扩展。Ant解析器会根据名字来匹配XML元素和Java类, 一旦找到匹配, 就执 行相应任务。为什么不用Ant自己来扩展Ant呢? 毕竟核心任务要包含很多传统语言的结构 (例如"if"), 如果Ant自身就能提供构造任务的能力(而不是依赖java类), 我们就可以得 到更高的移植性。我们将会依赖一组核心任务(如果你原意, 也不妨把它称作标准库), 而 不用管有没有Java 环境了。这组核心任务可以用任何方式来实现, 而其他任务建筑在这 组核心任务之上, 那样的话, Ant就会成为通用的, 可扩展的, 基于XML的编程语言。考虑 下面这种代码的可能性: 阅读全文

posted @ 2011-08-18 09:11 雪庭 阅读(303) 评论(0) 推荐(0) 编辑

摘要:在Richard Stallman的理论下,用户彼此拷贝软件不但不是“盗版”,而是体现了人类天性的互助美德。对Richard Stallman来说,自由是根本,用户可自由共享软件成果,随便拷贝和修改代码。他说:“想想看,如果有人同你说:‘只要你保证不拷贝给其他人用的话,我就把这些宝贝拷贝给你。’其实,这样的人才是魔鬼;而诱人当魔鬼的,则是卖高价软件的人。”可以断定,进入世纪末,软件业发生的最大变革就是自由软件的全面复兴。在自由软件的浪潮下,软件业的商业模式将脱胎换骨,从卖程序代码为中心,转化为以服务为中心。 阅读全文

posted @ 2011-08-17 16:50 雪庭 阅读(558) 评论(0) 推荐(0) 编辑

摘要:我们现在已经来到了月亮背光的那一面, 先别忙着离开。再探索一下, 看看我们还能发现什么东西。闭上眼睛, 想一想2000年冬天的那个雨夜, 一个名叫James Duncan Davidson的杰出的程序员正在研究Tomcat的servlet容器。那时, 他正小心地保存好刚修改过的文件, 然后执行make。结果冒出了一大堆错误, 显然有什么东西搞错了。经过仔细检查, 他想, 难道是因为tab前面加了个空格而导致命令不能执行吗? 确实如此。老是这样, 他真的受够了。乌云背后的月亮给了他启示, 他创建了一个新的Java项目, 然后写了一个简单但是十分有用的工具, 这个工具巧妙地利用了Java属性文件中的信息来构造工程, 现在James可以写makefile的替代品, 它能起到相同的作用, 而形式更加优美, 也不用担心有makefile那样可恨的空格问题。这个工具能够自动解释属性文件, 然后采取正确的动作来编译工程。真是简单而优美。 阅读全文

posted @ 2011-08-17 10:16 雪庭 阅读(336) 评论(0) 推荐(0) 编辑

摘要:千里之行始于足下。让我们的第一步从XML开始。可是XML已经说得更多的了, 还能有什么新意思可说呢? 有的。XML自身虽然谈谈不上有趣, 但是XML和Lisp的关系却相当有趣。XML和Lisp的概念有着惊人的相似之处。XML是我们通向理解Lisp的桥梁。好吧, 我们且把XML当作活马医。让我们拿好手杖, 对XML的无人涉及的荒原地带作一番探险。我们要从一个全新的视角来考察这个题目。 阅读全文

posted @ 2011-08-16 16:25 雪庭 阅读(326) 评论(0) 推荐(1) 编辑

摘要:最初在web的某些角落偶然看到有人赞美Lisp时, 我那时已经是一个颇有经验的程序员。在我的履历上, 掌握的语言范围相当广泛, 象C++, Java, C#主流语言等等都不在话下,我觉得我差不多知道所有的有关编程语言的事情。对待编程语言的问题上, 我觉得自己不太会遇到什么大问题。其实我大错特错了。 阅读全文

posted @ 2011-08-16 15:54 雪庭 阅读(563) 评论(0) 推荐(0) 编辑

摘要:一开始我有点想写50个条款的,就像Scott Meyers的力作《Effective C++》那样写50个条款。但最终我还是放弃了用一次休息时间就写出50个tips的相法,并把题目中的50改成了10。我至少花了两个小时坐下来写了这篇文章。要是一个eclipse用户的话,很可能会愿意花更多时间在文档中找寻可以帮助写blog的重构工具。 阅读全文

posted @ 2011-08-16 15:12 雪庭 阅读(399) 评论(0) 推荐(0) 编辑

摘要:emacs提供很多小巧实用的命令来对文本进行外科手术作业,极大地提升了编辑效率。 阅读全文

posted @ 2011-08-16 15:00 雪庭 阅读(293) 评论(0) 推荐(0) 编辑

摘要:最好的办法,就是买本Friedl的书《Mastering Regular Expressions》。绝对值!任何一位程序员都该有一本,管你用什么语言什么编辑器。 阅读全文

posted @ 2011-08-16 14:42 雪庭 阅读(679) 评论(0) 推荐(0) 编辑

摘要:要找出当前buffer中所有的按键功能,输入M-x describe-bindings。它显示一个包含按键及被绑定命令的列表。 阅读全文

posted @ 2011-08-16 14:11 雪庭 阅读(230) 评论(0) 推荐(0) 编辑

摘要:你不需要菜单栏,菜单栏只不过是给那些找不着北的新手用的拐杖而已。同样,你也不需要有大按钮的工具栏,不需要卷动条--这些东东都是给失败者的,而它们却占用了宝贵的屏幕空间。还是在.emacs中用下面的代码把它们全关了吧。 阅读全文

posted @ 2011-08-16 11:15 雪庭 阅读(388) 评论(0) 推荐(0) 编辑

摘要:你会经常做一些需要打开多个视窗的编辑工作的。emacs使用一套与其它应用程序有些许不同的术语。一个buffer是指一个包含文本的逻辑空间,这个空间有可能会与一个进程或者文件关联;一个window是屏幕上显示着一个buffer(或者这个buffer的一部分内容)的可见区域。一个frame(窗框)则是一个你在操作系统说法里面管它叫window(窗体)的东西:一个独立的包含标题栏或者是类似东西的窗体。 阅读全文

posted @ 2011-08-16 10:55 雪庭 阅读(280) 评论(0) 推荐(0) 编辑

摘要:emacs最强大的功能之一就是她可以迅捷地生成一个不与任何一个文件关联的buffer。一旦你习惯了使用这一技术,你就对明显地感觉到其它编辑器这一功能性的不足。 阅读全文

posted @ 2011-08-15 14:13 雪庭 阅读(214) 评论(0) 推荐(0) 编辑

摘要:知道如何高效地移动光标是成为emacs高手的关键。IDE用户把他们大部份的时间花在摸索鼠标上了,根本没有想过如何用其它方法来实现光标导航,却不知道自己的方法是多么的低效。在一个高手的手中,emacs是世界上最高效的文本编辑工具,主要是因为她可以让你不用鼠标做到几乎所有的事情。 阅读全文

posted @ 2011-08-15 14:07 雪庭 阅读(207) 评论(0) 推荐(0) 编辑