﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-rosial-文章分类-蔡学镛</title><link>http://www.blogjava.net/rosial/category/12711.html</link><description>lost memory</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:35:12 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:35:12 GMT</pubDate><ttl>60</ttl><item><title>《爪哇夜未眠》- 图书篇 - 偶像崇拜</title><link>http://www.blogjava.net/rosial/articles/57514.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57514.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57514.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57514.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57514.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57514.html</trackback:ping><description><![CDATA[
		<p>偶像崇拜（一）<br />你的偶像是谁？在高中时代，我的偶像是抒情浪漫、高亢激昂的空中补给（Air Supply）以及静如处子、动如脱兔的凯莉·米洛（Kylie Minogue）；现在我的偶像是David Flanagan、Jonathan Knudsen、Elliotte Rusty Harold、Bruce Eckel等人。你问我David Flanagan等人唱过什么歌，喔！你误会了，他们不唱歌，他们是Java技术作家。<br />我认为，适当地崇拜优质的偶像，可以激励起自己“有为者亦若是”的精神，使得自己加倍努力地向偶像看齐，对于自己能力的提升有莫大的助益。崇拜的对象在于精，不在于多，你得好好地挑选出“优质的偶像”。<br />在学习C/C++程序设计的时代，我的偶像是Herbert Schildt和Bruce Eckel。在我学习Windows程序设计的时代，我的偶像是Jeffrey Richter和Tom Swan。而现在我全部的精力都放在Java上面，我的偶像变成了David Flanagan、Jonathan Knudsen、Bruce Eckel、Elliotte Rusty Harold。为什么是他们四个？因为他们四个都已经出过数本Java书籍，而且几乎每一本的内容都独一无二，都是经典。<br />David Flanagan写过的书包括Java、J2EE、JFC、JavaScript，每一本都很精采，其中的《Java in Nutshell》一书更是人手一本的Java经典，此书年年获得JDJ的Java好书读者票选榜首。要写出《Java in Nutshell》这样深入浅出、叫好叫座、可读可查的书，我想David Flanagan肯定是花了不少心力。 <br />Jonathan写过几本主题特殊的书籍，包括《Java密码学》、《Java 2D图学技术》、《乐高可编程积木》，每一本都得到非常好的评价。基本上，Java 2D并不如EJB、Servlet、Swing等主题来的热门，O'Reilly的Java 2D一书能如此畅销，甚至跃居 JDJ的Java好书票选排行第四，作者Jonathan功不可没。目前，Jonathan正全力在O'Reilly写书，所以我们可以期待不久之后他一定又会推出新书。只是，Jonathan是如此地博学多闻，我们无法预期他的下一本书会是什么主题。<br />Bruce Eckel是一名专业的顾问、讲师、和作家，他的研究范围以面向对象的应用为核心，涵盖C++、Java、Python、CORBA、Design Patterns。Bruce Eckel 的经典名作包括《Thinking in Java》和《Thinking in C++》。早在他的《Thinking in C++》第一版推出时（大概五年前），我就注意到他了。他的书中遍布深入而独到的见解，让我获益良多。Bruce Eckel这些年来大发慈悲，把他几本“最新版”的书的电子文件放到网站上供人下载，根本不管这样会影响到印刷版的销售量，少赚许多钱。我的周遭有许多人都是透过下载回来的《Thinking in Java》来学习Java的。《Thinking in Java》一书还得到今年Jolt Award的奖项。<br />Elliotte Rusty Harold是我最喜欢的作者，我喜欢他的程度更甚于前三位作者。Elliotte的《Java Network Programming》、《Java I/O》、《XML Bible》等书都是该领域 #1 书。Elliotte还维护一个Cafe Au Lait网站，天天更新内容，提供最新的 Java/XML动态。Elliotte 的书好到连 Bruce Eckel 都称赞：“在读过Elliotte的《Java Network Programming》一书之后，我才真正了解到网络程序设计是怎么回事。”<br />当然我的Java偶像不只这四位，还有许多。没有这些作者，我的Java程度就不能如此快速地日渐精进。如同Bette Midler的一首歌：“You are the wind beneath my wings”。<br />如果你光只是崇拜技术偶像，而没有把这股力量导向正面，没有努力地读完并彻底了解偶像所写的书，那就可惜了。我有一个同学，他的嗜好是收集了技术偶像的签名书并和偶像合照，只差见到技术偶像不会尖叫，感谢老天！在被他收集的名家当中，面向对象大师Grady Booch更是赫然在列，他甚至将Grady Booch和他的合照放在皮夹中，可以随时拿出来瞻仰一番，但是他却没详读过Grady Booch的书，甚至不知道Booch Notation中的实线云朵和虚线云朵之间的差异，这样的技术偶像崇拜就太肤浅了。<br />你没有技术偶像吗？我不介意你和我崇拜相同的人。<br /><br />偶像崇拜（二）<br />试探性地摘下墨镜和帽子，我冒着极大的风险绕了天珑书局一圈，大家浑然未察觉一个名人就在附近。这就怪了，不是有许多读者写email给我，说我是他们的偶像吗？这时候竟然没有半个人出来簇拥我，枉费我特别穿了一件容易被扯烂的衣服，真是叫人“失望”！不！我是说“庆幸”。 <br />不过读者会把我当成偶像，实在是令人匪夷所思。我除了在“Sleepless in Java”专栏上写了一些文章，又翻译过几本销售量屡创新低的书之外，实在没什么了不起的事迹。读者email给我的问题，有不少我是答不出来的，这样的人还配当偶像？一定是因为我在偶像崇拜一文中所介绍的偶像太少了，所以此次的文章又多介绍四个偶像，好让大家有移情别恋的对象。<br />Martin Fowler是我近期的新欢，是一位不可多得的大师级信息作家。他不但技术能力强，写出来的书更是相当好读。许多人称经典的书往往过于艰涩难读，所以当我看到 Martin Fowler能够把高深的知识讲得深入浅出，清晰有条理，读起来毫无压力时，我马上移情别恋，把Martin Fowler 移到我的偶像排行榜第一名。<br />Martin Fowler所写的《Refactoring》一书，可以说是继四人帮（Gang of Four）的《Design Patterns》之后，又一本影响力深远的书，Martin Fowler也因为此书变成 Refactoring的掌门人。Refactoring是XP（eXtreme Programming）的一个重要的因素。Martin Fowler所写的这本《Refactoring》成功地将常用的Refactoring分类、命名、举例说明。热门的主题往往会引来一阵跟风（Design Pattern 即为一例），但《Refacotring》一书问世至今，尚未有人写书赶此一热潮，我想可能是因为Martin Fowler的这本书实在太成功的缘故。建议你现在就去抢购，这本书很棒，“如果这本书不好的话，你们就来捶我好了”（语出多芬洗发精的电视广告。）<br />Martin Fowler另外两本很有名的作品是《UML Distilled》和《Analysis Patterns》。《UML Distilled》以去芜存菁的方式叙述UML，许多人都是透过此书才认识UML 的。而《Analysis Patterns》一书可以说是四人帮《Design Patterns》的OOA版，也是目前唯一一本Analysis Pattern领域的书。虽然《Analysis Patterns》未若《Design Patterns》掀起巨大的旋风，但实在不是Martin Fowler书写得不好，而是业界一向都比较重OOD轻OOA的缘故。<br />第二个偶像是Bill Day。在今年台北的Sun TechDays研讨会上，不经意地遇到Bill Day，我马上进入小鹿乱撞、袋鼠乱跳、又大象乱蹦的高度亢奋状态，逮着机会就不要脸地缠着他猛聊。还好我一直都在加强英文，和他沟通起来没有障碍。<br />Bill Day大学主修的是航空工程，毕业后却转换跑道到信息产业，而且还非常成功。Bill Day几年前的领域是在 JMF（Java Media Framework），JMF的规格书中有许多他的贡献，我记得当时他可以说是JMF领域中的第一把交椅。目前，Bill Day任职于Sun，负责带领一个J2ME的team，他同时还在大学开课教Java 3D。Bill Day原本拟在O'Reilly 出版一本JMF的书，但书写了半本之后，就没下文了，毕竟优秀的人总是很忙的。但我可管不了这么多，我还怂恿他写一本Java 3D的书。<br />我觉得像Bill Day这样可以从航空跨到信息，从多媒体通讯（JMF）跨到无线通讯和嵌入式系统（J2ME），再跨到计算器图学（Java 3D），而且都成果丰硕的软件工程师，实在很少。<br />第三个偶像是Alistair Cockburn，他所写的《Writing Effective Use Cases》一书刚刚得到今年的 Jolt Award（软件界很重要的奖）Books and Computer-Based Training 类的 Productivity Award。《Writing Effective Use Cases》一书针对写Use Case时的know-how有相当不凡的见解，这本书得奖绝对是实至名归。他在书中所提出的方法让我们在写 Use Case的时候有所依循，而且我觉得他独创的符号实在很酷，希望Use Case的写作软件也能支持这些有趣的符号。<br />Cockburn还有另一本书名为《Surviving Object-Oriented Projects》，我尚未阅读，手边也还没有此书。我把这本书列入我Future Reading List的书目中。糟糕！这个Future Reading List的书越来越多了。<br />第四号偶像是Scott Oaks。他在O'Reilly 写过数本Java 书，包括《Java Threads》、《Java Security》、《Jini in a Nutshell》。我发现Scott Oaks和Jonathan Knudsen有点类似，所写的每一本书主题差异都颇大。Scott Oaks所写出来的每一本书，内容循序渐进，很好阅读，而且深度也很够。以Java Threads一书来说，内容采取引导式教学的方式，这是自学类书籍内容安排最好的方式，也是最不容易写的方式。Scott Oaks的《Java Security, 2nd Ed》和《Jini in a Nutshell》也都是读者评价很好的书。<br />从我所崇拜的偶像名单中，可以看出我近期的喜好。上次列出的四位偶像都是Java书籍作者，此次却是一位Java书籍作者、一个Java程序员、两个软件工程类书籍作者。我最近对于软件工程有莫名的狂热。<br /><br />偶像崇拜（三）<br />这是“偶像崇拜”系列的第三篇，当初怎么也没想到“偶像崇拜”会从一篇文章变成一系列文章。其实我的想法是：独乐乐不若众乐乐，介绍大家多多认识一些优秀的信息界贤达，也算是功德一桩。不过我要强调，我鼓励偶像崇拜，但不鼓励盲目崇拜，失去理性而不分青红皂白的偶像崇拜，很可能会招来灾难（你瞧瞧我们台湾的政坛，不正是如此）。<br />这个世界盲目崇拜偶像的人太多了，比方说：几周前，我在电视上看到日本举办一个活动，不是签名会，不是握手会，而是令人匪夷所思的“掴脸会”：一堆日本人排队让摔角明星猪木狠狠地掴耳光（真的打得很大力），被掴后还笑脸盈盈地频频称谢。崇拜偶像可以崇拜到这种地步，在我看来是很不可思议的。我就不一样了，这么说好了，虽然我很崇拜人称Java之父的James Gosling，但如果James Gosling 掴我耳光的话，翻脸比翻书还快的我，肯定马上回敬他一脸奶油派，并且从此变节改用C#。<br />同以前一样，此次的文章中要介绍的偶像也是四位，James Gosling 正是其中一位。James Gosling是名校卡内基梅隆大学（Carnegie-Mellon University）的信息科学博士，目前是Sun Microsystems的副总裁。他设计过许多系统，包括了卫星数据采集系统、多CPU版的Unix、编译器、电子邮件系统、窗口管理系统。他还自己写了一套“所见即所得”（WYSIWYG）的Unix平台文字编辑器“Gosling Emacs”。他到Sun工作之后，早期是NeWS窗口系统的首席工程师，后来是Java语言、编译器、和虚拟机器的原创者，所以常被称为“Java 之父”。目前他正在设计Java实时系统（real-time system），也对软件开发工具有浓厚的兴趣。<br />James Gosling是一个很幽默的人，常常会亲自搞笑，在这个毫无情趣的信息圈子可谓相当难得。参加过今年Taiwan JavaTwo的人应该都看过他的搞笑影片，他甚至也在1998年的JavaOne上演一段亲手拿奶油派砸比尔·盖兹的戏码，当然这个比尔·盖兹并非本人，只是一个戴上比尔·盖兹橡胶头套的演员，真是反应时事民心的大胆演出！（注：当时的不久前才发生比尔·盖兹在比利时被人砸奶油派的事件。）<br />第二位偶像是Bertrand Meyer，他是ISE（Interactive Software Engineering）公司的CTO，他所设计的Eiffel相当宏观，把语言、软件工程方法、和工具整合在一起。Bertrand Meyer是TOOLS研讨会的主席，他也是数本程序语言和软件工程类书籍的作者和编辑。早期他是一家大公司的技术和管理阶层，也曾是加州大学的教员。他参与过第一个版本 Z 语言规格的设计。<br />Bertrand Meyer所著的《Object Oriented Software Construction,2nd Ed》一书得到1997年的JOLT信息图书类“卓越产品”大奖。该书把面向对象的相关技术，里里外外地剖析得很清楚，难怪厚成那样。我认为面向对象的好书不用看太多本，只要看这本就足够了。Bertrand Meyer所创的 DBC（Design by Contract）技术已经开始影响到其它语言的设计，Java未来应该也会引进这样的观念。<br />第三位偶像是Guido van Rossum，他是Python语言的原创者。原是荷兰人，后来移居美国。他是荷兰阿姆斯特丹大学的硕士，在荷兰的时候，参与过ABC语言的设计实做，也参与过一套分布式操作系统的设计（Amoeba）。后来设计了Python语言。Python语言创立至今已经十一年了，也渐渐地变成一个相当受欢迎的语言，但他仍持续不断地在研究改进Python。1999年五月时，他与Donald Becker同时得到 Dr. Dobb's Journal的程序设计卓越奖（1999 Excellence in Programming Award）。<br />去年五月以前，他在CNRI（the Corporation for National Research Initiatives）工作，带领一个研究团队研究 Python在无线通讯上的应用，兼任Python Consortium（一个专司倡导Python的组织）的领导人。最近一年多，他开始为Digital Creations（Zope 的公司）工作，担任PythonLabs 的领导人。目前他正在进行一个项目，叫做CP4E（Computer Programming For Everybody），计划把Python这套易学好用的语言推广给每个人。CP4E也正在设计一个好用的工具来帮助程序设计的初学者与高手使用 Python。<br />第四位偶像是Carl Sassenrath，他是REBOL科技公司的创始者，也是该公司的CTO，致力于简化程序设计和软件操作的复杂度。他认为MS-Windows、C++、TCP/IP、HTML等现在流行的技术都是junk（垃圾），这些垃圾的设计者总是把事情搞得太复杂。他的理念是：软件应该使用起来很直观，简单的事就该简单地做到，但仍要保有做到复杂的事的能力。我相当喜爱Carl Sassenrath设计出来的 REBOL，它的确是简单、占空间很小、跨平台、又有许多创意（比方说程序方言）。值得在程序语言、编译器设计、以及操作系统的教科书记上一笔。<br />在很早的时候，Carl Sassenrath就设计并实做出深受好评的AmigaOS（Motorola CPU上的多任务操作系统）。他并领先开发多套多媒体软件产品，包括了STB（Set-Top Box，视讯控制盒）、CDTV、程序语言、以及数字剪辑编辑工具……等。他任职过的公司包括Apple、Commodore Amiga、以及Hewlett-Packard。Carl有加州大学的电子工程和信息科学学士学位。<br />这四个偶像刚好都是属于不同的族裔，而且都是重要程序语言的设计者，贡献非常卓越。相较于这四位理论基础与实务经验都如此杰出的偶像，再反观我们自己，国内的偶像理论懂得不多，也没做过什么了不起的项目，莫名其妙就被奉为偶像（我说的是我自己，其它人请勿对号入座），真是怪事一桩。<br />现在出版业也有许多偶像，他们喜欢在新书发表时办签名会。O'Reilly可能是从这里得到灵感，他们告诉我，以后我如果在O'Reilly出版自己写的书，他们可以帮我在诚品书局举办新书签名会。对于他们这样的想法，我期期以为不可。都什么时代了，还在办 LKK 的签名会，实在是很落伍，我希望O'Reilly能顺应时代的潮流，让我把“签名会”改成“掴唱会”（“掴脸会”加上“签唱会”），移师西门町举行，相信自动来讨打的善男信女一定不少，我也一定会展现出“能掴善唱”的一面，边掴边唱，表现得令大家刮目相看的。<br /><br /><br /><br /><br />偶像崇拜（四）</p>
		<p>
				<br />受到美国和伊拉克战争所带来的恐怖威胁影响，今年的奥斯卡颁奖典礼破天荒地取消星光大道，让许多喜欢在红地毯旁欣赏偶像风采的影迷，大失所望。</p>
		<p>由张艺谋执导，颇受全球华人瞩目的电影英雄（Hero），入围今年奥斯卡最佳外语片。Hero 除了是「英雄」的意思，也常作「偶像」解，且比 idol 或 icon 更常用。例如，Bette Midler 在电影 Beaches（情比姊妹深）里面的那首「Wind Beneath My Wings」，有句歌词「Did you ever know that you're my hero? And everything I'd like to be?」，正是「偶像」的意思。</p>
		<p>这次的文章要介绍的几个偶像，正是我努力学习的对象（everything I'd like to be）。他们共同具备的特色是：能够与时俱进，不会在新技术出现后被淘汰。</p>
		<p>首先介绍的是大名鼎鼎的 Charles Petzold。他是 Windows 程序设计的鼻组，甚至是 OS/2 程序设计的鼻组。十多年前，在 Windows 3.0 的时代，我就已经开始买他的《Programming Windows》一书了，目前该书已经出版到第五版，我几乎是每一版都买，我甚至有幸在大学时期与人合译该书第三版。在进入 .NET 时代后，Charles Petzold 也写了一本《Programming Windows with C#》。这么多年过去了，Charles Petzold 依然维持 Windows GUI 程序设计首席作家的地位。 </p>
		<p>尽管 Charles Petzold 是 Windows GUI 程序设计首席作家，但是他显然对 MFC 很不捧场，他说：「I never like MFC. Ever since it was introduced, I thought it was poorly designed and barely object oriented.」（我从来就不喜欢 MFC，从一开始就不喜欢，我认为它的设计不良，且几乎不能算是对象导向）。也因此，他未曾写过 MFC 的书。</p>
		<p>许多人都以为 Charles Petzold 只写 Windows 的书，其实他也写了一本计算器概论的书，名为《Code》，等于是把信息系好几门课的精华浓缩在一起，写得相当浅显易懂。如果你不是信息系科班出身，我建议你可以读一读这本书，会有很大的帮助。</p>
		<p>第二位偶像是 Jeffrey Richter：Jeffrey Richter 是 Windows System 程序设计的头头。我记得他好像年轻时在 Borland 待过，但是未获重用，后来到 Microsoft 之后，反而开始窜红。从 Windows 3.0 开始到现在，Jeffrey 写书也超过十年了，每一本都对 Windows 核心有很精彩的剖析，显示出 Jeffrey Richter 真才实学，绝非光是吃技术老本或靠塑造形象的许多其它作家能比。</p>
		<p>Jeffrey Richter 的主要领域是 Windows System Programming，是该领域最重要的作家。Jeffrey 的书提供许多不凡的见解，深入的剖析，和第一手的数据，所以他的书一直都是我的最爱。我无法一一介绍他的每一本书，因为他的书相当多，而且每一本都很深入，带给我很大的收获。</p>
		<p>在进入 .NET 时代之后，Jeffrey Richter 依然以一本《Applied Microsoft .NET Framework Programming》让大家更深入了解 .NET，我认为这是 .NET 语言和 CLR 最重要的一本书。目前 Jeffrey Richter 是 Wintellect 的当家支柱。他经常在 MSDN 上发表文章，每一篇都是经典。</p>
		<p>第三位偶像是 Jeff Prosise，他从 DOS 时代就开始写书了，早期写了好几本 DOS 领域的书，在 MFC 正流行的时候，他写了一本 MFC 的书《Programming Windows 95 with MFC》（1996 年出版），现在则是写 .NET 的书《Programming Microsoft .NET》。我最喜欢的 MFC 的书正是 Jeff Prosise 写的这本，而不是 David J. Kruglinski 所著的《Inside Visual C++》，我觉得前者写得比后者更平顺、好读、清晰。</p>
		<p>Jeff Prosise 曾经写了一本《How Computer Graphics Work》，这是当时 Ziff-Davis 出版社很畅销的「How ...Works」系列。该系列以精致的插画，简单易懂的叙述著称，主要的读者对象是社会大众，而非信息专业人士。我想，或许「简单易懂」就是 Jeff Prosise 惯有的风格吧！</p>
		<p>进入 .NET 的时代，Jeff Prosise 的定位似乎比较偏向 ASP.NET。他写的那本《Programming Microsoft .NET》里面有大半的章节是和 ASP.NET 有关，应该改名为《Programming ASP.NET》。Jeff Prosise 现在已经不像 90 年代初期那样多产，最近的这本 .NET 书距离他的上一本书《Programming Windows 95 with MFC》居然有六年之久。但无论如何，我还是很高兴看到 Jeff Prosise 又重出江湖。</p>
		<p>第四位偶像是 Ted Neward。我超喜欢 Ted Neward 的，觉得有他一种亲切感，因为他的学习历程和我很像：先是 C++，然后 Win32，然后 Borland OWL，然后 Java，然后 Enterprise Java，然后 .NET。我常逛他的网站 The Mountain of Worthless Information，从哪儿得到不小的收获。我建议你有空也去逛逛。</p>
		<p>Ted Neward 是 Manning 出版社的元老级作者，Manning 最早出版的书正是 Ted Neward 的《Core OWL》与《Advanced OWL》（一本入门，一本进阶）。有趣的是，当 Ted Neward 的 OWL 这两本书快出版时，Borland 居然宣布停止开发 OWL。Ted Neward 花了这么多心血，居然换来这样的结果。OWL 本来市场就很小，又被 Borland 宣布死刑，Ted Neward 的这两本书卖得奇惨。</p>
		<p>后来，Ted Neward 转向 Java，在 Manning 出版了一本很受好评的 Server-Side Java 书籍。接着，Ted Neward 开始和 O'Reilly 合作，出版了好几本与他人合着的 .NET 书，包括了《C# in a Nutshell》、《VB.NET Core Classes in a Nutshell》、《C# Language Packet Reference》、《Shared Source CLI Essentials》。其中，《Shared Source CLI Essentials》一书是剖析 Rotor 的第一本书，2003 年三月底出版，目前我手上有此书的数个章节，读起来很过瘾，对于我的 .NET 功力提升也有帮助。</p>
		<p>这次介绍的四位技术作家，都是属于长青树，在软件技术圈子，这可是很不容易的。我常常觉得，等到哪天 Java 功成身退，被其它技术取代之后，我或许会变成一只玩不出新把戏的老狗，就这么会被淘汰了也说不定。</p>
		<p>想成为技术上的长青树，必须在既有的技术上持续钻研，还得随时留意新技术，并适时抛弃一些技术上既有的意识型态。唉！还真是挺辛苦的。</p>
		<p>
				<br />本文作者：蔡学镛<br />文章出处：Sleepless 2.0<br />张贴日期：2003/3/24<br /></p>
<img src ="http://www.blogjava.net/rosial/aggbug/57514.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 15:12 <a href="http://www.blogjava.net/rosial/articles/57514.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 图书篇 - 你说挑书就像挑老师一样，我说你乱有思想的 </title><link>http://www.blogjava.net/rosial/articles/57510.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57510.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57510.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57510.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57510.html</trackback:ping><description><![CDATA[
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">想学某项技术，于是到书局打算买书，但是面对书架上陈列出来琳琅满目的书籍，却又不知该如何选择起<span lang="EN-US">……。你一定也有过这样的经验。<br />我曾经在我以前的一本译作「细说 Java 虚拟机器」的序中，和读者分享我挑书的方法。我把它整理改写成这篇文章，希望能对喜欢看书的你有所助益。<br />信息科技变化相当快速，技术、规格不断地推陈出新，阅读计算机技术书籍是让自己不被信息洪流淹没的最好方法，因为：<?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 36pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-ascii-font-family: 'Times New Roman'">·</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; mso-spacerun: yes">  </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">规格书或软硬件手册虽然推出较早，且内容详细完备，极具参考价值。并非依照循序渐进的方式编排，所以不容易阅读。而计算机技术书籍有循序渐进的内容，可以按部就班地学习。</span>
				<span style="FONT-SIZE: 10pt">
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 36pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-ascii-font-family: 'Times New Roman'">·</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; mso-spacerun: yes">  </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">计算机技术书籍的内容相当务实，有许多范例和说明，适合自我学习。</span>
				<span style="FONT-SIZE: 10pt">
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 36pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-ascii-font-family: 'Times New Roman'">·</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; mso-spacerun: yes">  </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自我摸索的学习方式固然扎实，但也相对耗时费力。透过计算机技术书籍作者的经验传承，你可以轻易地从书上学到许多宝贵的知识，大大地缩短学习曲线。</span>
				<span style="FONT-SIZE: 10pt">
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">书籍不断地上架，在逛书局的时候，你会迅速地浏览一下你感兴趣的书，在这短短的几分钟之内，你希望能判断出你手上这本书值不值得买。你当然不会因为书的印刷精美、 价格不菲，就认定它是一本好书，毕竟这年头「金玉其外，败絮其中」的例子所在多有，轻忽不得。你用来据以判断购买书籍与否的因素可能有：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<b>
						<span style="FONT-SIZE: 10pt">书籍内容</span>
				</b>
				<span style="FONT-SIZE: 10pt">：内容讲的是操作还是程序设计？是用<span lang="EN-US"> C++ 还是 Java ？偏向网络还是数据库……？我有一个朋友想学 SQL Server 的操作，却不小心买了「SQL 的奥秘」，这是 一本专讲 SQL 语法的书，和 SQL Server 八竿子打不着，显然他没有评估到「书籍内容」，这本书注定要压箱底了。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">读者定位：读者需要有什么样的基础？这是一本入门书、进阶书、还是专家级的书？即使是再好的书，如果读者定位不适合你，太深或太浅，买了对你的帮助不大，只是瘦了荷包 罢了。一些经典且相当深入的书，在<span lang="EN-US"> Amazon.com 上面常常会有一些搞不清楚状况的读者给它极差的评价，因为他们程度还不到所以看不懂。而像 Deitel &amp; Deitel 的 「Java: How To Program」也常惹来有经验的 Java 程序员给予「没程度」之讥，他们却没想到这样的书对初学者有相当大的帮助。他们都是犯了没认清「读者定位」的毛病。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<b>
						<span style="FONT-SIZE: 10pt">作者背景</span>
				</b>
				<span style="FONT-SIZE: 10pt">：作者有哪些技术背景？过去著作的风评如何？有些作者相当爱惜羽毛，所写出来的书不但内容充实、文字洗炼，更要求出版社要印刷排版精美、校稿确实， 这种作者的名字比「<span lang="EN-US">CAS 优良肉品」的标记更让人放心，通常这种书我是不会错过的。但有的读者为了赶着让书「上市」（我觉得这里用「上市」一词比「问世」来得恰当）， 不惜瞎拼乱凑就送印了。如果我一时失察，误上贼船买了这种书，通常很快就扔进垃圾桶了。（送人？转卖？这不好吧！别让他继续危害人间。）<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<b>
						<span style="FONT-SIZE: 10pt">译者背景</span>
				</b>
				<span style="FONT-SIZE: 10pt">：如果这是中译本，又会有译者（除非是翻译软件翻出来的。我以前有个同学还真的用翻译软件来翻译书呢！不过封面倒是不敢注明「译者：译得妙<span lang="EN-US"> 1.0 beta 版」）。 翻译计算机技术书籍可不是翻译文学作品，如果译者没有技术背景，翻译出来的句子就很可笑；只有在译者是个技术专业人员的情况之下，才「有可能」掌握内容的精髓。我说「有可能」， 因为即使译者本身程度不错，但因为时间仓促，或者因为译者本身敬业态度不佳，翻译品质也就无法提升。关于译者不佳所翻译出来的可笑句子，我们见多了，却仍然无法习以为常。 再好的书籍，被不好的译者经手，仍是不忍卒睹的烂书一本。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<b>
						<span style="FONT-SIZE: 10pt">出版社</span>
				</b>
				<span style="FONT-SIZE: 10pt">：出版社是出版品的最后一道关卡。品质不好的稿件，出版社有责任退搞；排版有任何瑕疵，出版社有必要修正。差劲的出版社甚至会在作者或译者还没完全修正 稿件之前就「偷偷」送印，连作者或译者都被蒙在鼓里。可喜的是，国内的信息图书出版社似乎已经开始为品质把关。告诉你们一个实际的例子：欧莱礼的<span lang="EN-US"> Enterprise JavaBeans 和 Java 2D 的稿子在半年前就已经译妥，但在确定品质之前，他们宁可搁着不出版，直到最近我比较有空他们才请我当技术编辑，修饰这两本书的中文稿件。讲到这里，也请您参考一下 Elliotte Rusty Harold 所写的「我为什么喜欢由 O'Reilly 出版我的书」一文。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<b>
						<span style="FONT-SIZE: 10pt">出版年份</span>
				</b>
				<span style="FONT-SIZE: 10pt">：从软件上市的日期和书出版的日期来判断书的内容是否够新，常常可以让你筛选书籍的速度加快。在我使用<span lang="EN-US"> Java 1.1 的时候，我买 Java 原文书的第一件事 是翻开出版年份，如果是 1996 年出版的书，我马上放回书架。因为 Java 1.1 是在 1997 年初推出的，所以 1996 年出版的书肯定只有涵盖 Java 1.0。和买葡萄酒不同的是， 计算机书籍不会越陈越香，尽可能买新出版的书才是上策。那些过期很久的原文书，一本特价卖 x99，还能卖得掉，这就真的让我百思不得其解了。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<b>
						<span style="FONT-SIZE: 10pt">读书时间</span>
				</b>
				<span style="FONT-SIZE: 10pt">：如果你最近是个大忙人，有一堆事情要做，就先别急着买计算机书籍。计算机书籍更新的速度很快，可不比四书五经，可以祖传父、父传子， 代代受用不尽。以前我也常冲动之下买了好书回家，然后忙得没空读它，等到空闲下来时，新版本也已经出现了，懊悔不已！如果不急着用的书， 千万别急着买，不然可能还没来得及看这本书，新版本又出来了，信息界不流行考古的。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<b>
						<span style="FONT-SIZE: 10pt">书评推荐</span>
				</b>
				<span style="FONT-SIZE: 10pt">：好书是不寂寞的。有些人一看到好书，就会基于「呷好倒相报」的心理，广为推荐。有些原文书的封底或第一页会有杂志或期刊的主编或名作家的推荐， 这也可以作为「参考」。<span lang="EN-US">Bruce Eckel 的「Thinking in Java」，一打开书就看到近十页的推荐，声势吓人。不过，书评倒也不见得要尽信，还是有少数烂书会搞出一些睁着眼睛 说瞎话的书评或推荐当作促销手段。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<b>
						<span style="FONT-SIZE: 10pt">其它书籍</span>
				</b>
				<span style="FONT-SIZE: 10pt">：即使经过种种判断，你发现这是一本适合你的好书，「见猎心喜」是难免的，但是先别急着兴冲冲地去付钱，你应该再花一些时间看看是不 是有其它更好的书值得让你舍弃手上的这本。俗话说：「天外有天，人外有人」，我说：「书外有书」。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">我已经分析过买书时的判断方法，希望能减少你买书时的「天人交战」。下次买书时，你不妨试试看这些方法。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 15:07 <a href="http://www.blogjava.net/rosial/articles/57510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 软件工程篇 - 翻译工作与软件平台迁移</title><link>http://www.blogjava.net/rosial/articles/57509.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57509.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57509.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57509.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57509.html</trackback:ping><description><![CDATA[
		<p align="left">我当信息图书的兼职翻译者，已经有好长的一段时间了。我觉得，在信息产业当一个译者需要有三种技能： </p>
		<p align="left">第一：英文能力 </p>
		<p align="left">第二：中文能力 </p>
		<p align="left">第三：专业能力 </p>
		<p>专业能力会影响对于文章的理解，所以专业能力不足的人，即使英文能力很好，可能无法很好地理解原文。中文写作能力不好的人，即使英文能力和专业能力都很好，也无法很流畅地用中文表达出来。英文能力不好的人，即使中文能力和专业能力都很好，可能一开始就无法很好地理解原文。 </p>
		<p align="left">如果你问起这三者何者较重要，我认为依序是：专业能力大于中文能力大于英文能力。英文的听说读写不用样样精通，只要看得懂基本的英文句子就可以，反正随时可以查字典。中文能力就比英文能力重要了，表达成中文句子时，需要信、雅、达。而专业能力又比中文能力重要一些，特别是在文章的技术门坎很高时。 </p>
		<p align="left">而软件的迁徙（ migration ）也和翻译文章相彷佛。由于信息产业变动很快，技术改朝换代是常有的事。有时候我们想把旧技术换到新一代的技术（例如 Visual Basic 到 Visual Basic .NET ），有时候我们想把甲公司的技术换到乙公司的技术（例如 Java 到 C# ，或 Visual Basic 到 Java ），这些都算是软件的迁徙。不管你是从 Visual Basic 迁徙到 Java 或 Visual Basic .NET 或 C# 、或者从 Java 迁徙到 C# ，都必须具备三种能力： </p>
		<p align="left">第一：原始语言能力 </p>
		<p align="left">第二：目标语言能力 </p>
		<p align="left">第三：专业领域能力 </p>
		<p align="left">我认为这三者的重要性也是：专业领域能力大于目标语言能力大于原始语言能力。原始语言不需要太精通，只要能看得懂原始语言的程序逻辑就可以，反正随时可以查原始语言的 API 文件。目标语言能力就比原始语言能力重要了，而且还必须很熟悉目标语言的 API ，这一点非常麻烦，要花很多力气和时间。专业领域的能力是最重要的，该程序到底是涉及数据库、图学、 Web Services… 等，技术人员必须先具备该领域的知识。所以，对于负责进行软件迁徙的技术人原来说，首重目标语言能力和专业领域能力。 </p>
		<p align="left">软件迁徙的工作，如果需要技术人员一行一行地转换，就太辛苦了。所幸，市场上有许多工具可以帮忙转换，但是这样的转换工具并不能让我们高枕无忧，他们通常具有下面的特色： </p>
		<p align="left">? 通常能很完整的转换程序语言的逻辑 </p>
		<p align="left">? 通常者能转换一部份的 API </p>
		<p align="left">? 通常不能转换编程模型，与系统架构 </p>
		<p align="left">也因此，软件迁徙的难度颇高，必须审慎评估。甚至许多人为，重写一套会更简单。评估软件迁徙若有确切的必要性之后，除了择定工具之外，也可以寻求技术顾问公司的服务。例如 ArtinSoft 就有提供 Java 转 .NET 的技术服务。 </p>
		<p align="left">软件的迁徙绝对不是一件简单的事。我最近动手进行了一些例子，发现这需要高度的能力，也需要许多人投入。绝对是一件苦差事！ </p>
<img src ="http://www.blogjava.net/rosial/aggbug/57509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 15:04 <a href="http://www.blogjava.net/rosial/articles/57509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 软件工程篇 -  版本控制 </title><link>http://www.blogjava.net/rosial/articles/57508.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57508.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57508.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57508.html</trackback:ping><description><![CDATA[软体具有容易被改变的特质。软体开发过程中，任何程式员只要随手敲几个键，都会造成软体的改变。这样的改变，可能让软体变得更好，消除原有的 bug；也可能让软体变得更差，产生新的 bug。 <br /><br />你可能也遇过这样的例子：原本正常运作的软体，在你求好心切、以臻完美境地的修改之后，反倒距离完美越来越远，不能顺利执行。不巧的是，再过一个小时之后，你就必须向客户展示此软体，汗水汨汨而下的你，该如何交差呢？ <br /><br />这样的情节听起来不陌生，每个程式员都遇过，所以老一代的程式员常谆谆告诫我们「没坏的部分，就不要去乱动，免得出了乱子」，这个原则就是怕我们把程式越改越糟。但是时代不同了，现在的程式员却被鼓励「没坏的部分，只要你发现有任何不完美之处，还是要主动去修改」，以防积弊日久，一发不可收拾。Martin Fowler 称这种「没有错但只是不完美的程式码」为「bad smell」，嗅到 bad smell 就要马上处理，这就称为 refactoring。我现在使用的 Java IDE 是 IntelliJ IDEA，这套软体就是以其聪明的即时分析和方便的 refactoring 功能深获我所喜爱。 <br /><br />Martin Fowler 还认为 testing 对于 refactoring 很重要，我认为 version control 对 refactoring 也很重要。有了 version control 工具软体的辅助，你不用担心程式越改越糟，因为 version control 工具软体可以帮我们记录许多版本，你可以随时切换回任一个时刻的版本，就像是时光机器一般。 <br /><br />版本控制（version control）更宏观的称呼方式是 software configuration management，简称为 SCM。或者应该这么说，SCM 提供对版本控制的支援，但是 SCM 功能更完善。 <br /><br />我刚进入清华大学资讯工程系就读硕士班时，必须和许多同学一同开发 C 语言版本的 VOD 系统，当时经历了一场大灾难。回想起来，灾难的来源主要有下列两点： <br /><br />模组版本不一致的问题：因为计画参与者人数众多，同一个 Sub-system 由一个教授负责，这个教授又有数个学生参与，所以版本混乱，常常无法进行整合。 <br />改变程式之后，反而不能执行：原本已经可顺利执行的软体，在某些人更动一些「无关紧要」的程式码之后，反倒不能执行。 <br />不要小看这两个问题，这已经够让我们忙得团团转了。加上一个学长遗留下一些形同垃圾的程式码，更是彷彿不定时炸弹，随时会爆炸。（还好我们 VOD 小组内有一个很优秀的施同学，把那堆垃圾整个改写成井然有序的程式码，我实在很佩服他锲而不舍的努力）。加上我当时并不熟悉 VOD，我的学长竟然把所有的事情通通扔给我，我的压力很大，因为内分泌失调，我的整个脸和脖子都长满疹子，当时已经到了毁容的地步了。一想到那时的那些倒楣事，我到现在还是觉得一肚子气。 <br /><br />上述的两点问题都可以透过导入 SCM 而轻易解决。聪明人从自己的挫败中学习，更聪明的人从别人的挫败中学习。我已经告诉你，我过去因为欠缺 SCM 而导致了诸多问题，非常聪明的你，如果还没开始使用 SCM 的话，你应该要好好开始规划导入 SCM。 <br /><br />导入 SCM 可以说是难度最低的软体工程，但是收效良好。特别注意：SCM 是 CMM level 2 的要求之一，对于有意遵循 CMM 的建议来改进软体品质的公司而言，采行 SCM 无疑地是最值得最先采行的步骤。 <br /><br />目前 SCM 的产品众多，大多数人选择使用免费的 CVS，或者价格便宜的 Microsoft Visual SourceSafe，另外 MKS、Rational ClearCase、PVCS Dimensions、Oracle9i SCM 也是这样的产品，但显然功能比较高档。另外，有些 Java 开发工具也整合进相关的功能，例如 Borland JBuilder、Together ControlCenter： <br /><br />不只软体工程需要版本控制，在我看来，只要是更动频率很高的任何事物，都需要版本控制，例如我们的宪法，就需要版本控制。李登辉总统主政的后十年，宪法历经六次修改，修宪的频率之高，几乎已经到了一年一修的地步，乃至于到底我们的宪法精神目前是类似美国的总统制、类似英国的内阁制、类似法国的双首长制、或者是所谓的改良式双首长制，已经没人搞得清楚了。最近传出，陈水扁总统有意在下半年启动修宪工程，身为 SCM 爱好者的我，建议政府购买一套 PVCS 或 Rational ClearCase，以为修宪工程的版本控制之用。这么一来，如果修宪又修出一头权责失衡的宪政怪兽，而这只怪兽准备吞噬整个国家时，我们可以迅速地利用版本控制的回溯功能，恢复到旧版的宪法，以回归宪法秩序，免得祸国殃民。 <br /><br />「可是 SCM 软体都很贵，在政府财政困窘，债务高达近三兆之际，要用什么样的名目支出呢？」我说你实在是多虑了，我们可以从近来曝光的国安局秘密帐户的数十亿中，省下外交部长简又新两套西装的钱，就有十四万元了呀！还可以把帐全数赖到逃亡国外的刘冠军身上呢。 <br /><br />PS1. 最近唱片和电影业发起 404 反盗版大游行。有鉴于我的文章到处被乱 copy，所以我特别改编 IFPI 的话来呼吁大家：「今天你 copy 一篇文章，明天你将失去阅读好文章的机会。我是蔡学镛，我希望一直写文章给大家阅读。」如果你真的想把我的文章与他人分享，你可以利用 hyperlink 的方式，连结到该文章的 URL 即可。 <br /><br />PS2. 这是 Sleepless in Java 专栏开张三年以来，写得最痛苦的文章，因为写这篇文章的同时，住处旁一间「不知道祭祀何方神圣」的庙正进行庙会，他们把我们的街道整个堵住搭起棚架以做为酒席的场所。我担心我们这里万一发生火警，消防车根本没办法进来。更惨的是，他们还搭起了舞台，在台上演唱的不是我喜爱的孙燕姿，而是一个接着一个五音不全又爱现的人。即使我关在屋内仍清晰地听到那些可怕的歌声，逼得我把 Shakira 的「Whenever, Wherever」播放到最大声，用音量压过他们的「妈妈请你也保重」。文章写完了，我的耳朵也快聋了，我决定快快逃离这个人间炼狱，到天珑买书去。 <br /><img src ="http://www.blogjava.net/rosial/aggbug/57508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 15:02 <a href="http://www.blogjava.net/rosial/articles/57508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 软件工程篇 - 软件工程的吊诡</title><link>http://www.blogjava.net/rosial/articles/57507.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57507.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57507.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57507.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57507.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57507.html</trackback:ping><description><![CDATA[没人在乎软件工程——缺失<br /><br />长期以来，关于软件工程有许多吊诡之处，通过本文章，我对五个吊诡的问题提出我的看<br />法，希望也能因此解开你心中对软件工程价值的疑问。<br /><br /><br />Q: 软件工程到底有没有用？<br /><br />如果你上过软件工程的课，你很可能会怀疑软件工程有没有用，如果你有这样的怀疑，很<br />可能是因为你「遇人不淑」。事实上我就是如此，大学时我原本有选修软件工程的课，但<br />是上不了几次课我就退选了，因为老师教得奇差无比，加上老师本身不是研究软件工程的<br />（他根本就是研究硬件的），更没有业界的实务经验。没理论基础，没实务经验，没教学<br />热诚，遇到这样的教授我怎能不打退堂鼓。<br /><br />但千万不要让这种教授  丧了你对软件工程的信念。软件工程绝对是有用的，最佳的实例<br />就在印度。你只消看看印度的软件产业，如此讲究软件工程，而且开发软件的成绩如此辉<br />煌，你就应该知道：软件工程除了可以拿来发表论文帮助学生取得学位或帮助教授升等之<br />外，也确实是可以帮助软件工业的。<br /><br /><br />Q: 软件工程对谁重要？<br /><br />我们常常（特别是最近）会听到一派言论比较反对软件工程的说法，他们认为加强程序员<br />的能力比实施软件工程「更重要」。我不反对这样的说法，但问题是对谁比较重要？我认<br />为，软件工程对组织（公司）比对个别的程序员更重要。程序设计技巧的加强、以及新技<br />术的学习对程序员比较重要。采用软件工程，短期内对程序员带来的好处不多，甚至会为<br />程序员带来麻烦（被加诸许多限制）。<br /><br />对于公司来说，实施软件工程，除了可以因此掌握软件的品质之外，更可以避免一些风险<br />。即使目前的软件开发团队还算稳固，但是这些人未来可能会一个一个离职。没有好好实<br />施软件工程的公司，在重要的软件开发人员离职后，往往会让软件计划严重延宕，甚至停<br />摆（我们听过也看过太多这样的例子）。如果当初有实施软件工程，就可以一切井然有序<br />，可以不用花太多时间就让接替的人继续专案进度。<br /><br /><br />Q: 既然如此，程序员可以不要理会软件工程？<br /><br />既然程序员最重要的是加强程序能力，那么程序员应该忽略软件工程？当然不是。程序员<br />是公司的一份子，对公司有利的事，也会间接对程序员有利。再者，程序员是无法当一辈<br />子的，必须及早准备因应之道（请参见「软件人员的生涯规划」一文）。如果有心要在以后成为主管阶层，最好能先对软件工程和计划管理的相关知识做好准备。对程序员来说，<br />软件工程又比计划管理来得更急迫。<br /><br /><br />Q: 软件工程对哪类型的计划比较有用？<br /><br />对于小型计划来说，软件工程不见得有太大的用途（但也不至于有害）。对于中大型计划<br />来说，如果不采行软件工程，后果往往就会很严重，很可能会遭致一团混乱，导致计划失<br />败。就算完成计划，大概也是拼凑出来的，许多 bug 潜藏其中，软件的实用性很低，而且<br />无法维护。<br /><br /><br />Q: 那么小型计划不应该用软件工程？<br /><br />虽然使用软件工程与否，对于小计划的影响不大。但是我认为，即使是小型计划，最好也<br />要遵照软件工程的程序来进行。通过小计划来练习软件工程，让大家有机会熟悉软件工程<br />的运作，当在大计划中使用软件工程时，才不会手忙脚乱。一个公司如果没有从小计划开<br />始实施软件工程，就骤然在大计划中实施软件工程，那么失败的机会很高。而且第一次就<br />失败，往往会使得主管对于软件工程的信心大打折扣，连第二次尝试的机会都被抹杀了。<br /><img src ="http://www.blogjava.net/rosial/aggbug/57507.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 15:00 <a href="http://www.blogjava.net/rosial/articles/57507.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 软件工程篇 - 软件产业的大洪水 </title><link>http://www.blogjava.net/rosial/articles/57504.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57504.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57504.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57504.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57504.html</trackback:ping><description><![CDATA[
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">上周台北地区豪雨成灾，造成许多大楼的地下室淹水，有些地方水淹到三楼，甚至有多人不幸丧生。停水、停电、停话、连捷运与铁路的地下隧道都成了超大型下水道，号称首善之都的台北遭逢的是一场巨大的浩劫。<span lang="EN-US"><br /><br />事出必有因，这一方面是因为天灾所致（降雨频率破 150 年纪录，降雨量破 200 年记录，又恰逢涨潮期），另一方面则是人谋不臧的缘故。天灾不是我们能掌控，所以我就不多提了，但人谋不臧的部分，就相当值得检讨，包括了基隆河截弯取直的错误决策、许多河流的整治工程没做好、山坡地和河岸过度开发而忽略水土保持、盗采砂石造成桥墩裸露无法抵挡大水、大型货柜乱摆被冲入河中变成一枚枚不定时炸弹、都市排水系统或因规模小或因地势关系而无法发挥作用、抽水站本身不够高以至于大水冲垮龙王庙的事件一再上演 ...。诸多因素互相加乘，难怪一场雨就会酿成如此巨祸。台湾人不是最热衷金氏世界记录吗！这会儿可好，不需号召一堆糕饼师傅来做一个世界最大的月饼，不需要号召一堆人来做一个最长的人体骨牌，因为这几年来台湾不正在缔造一个最多人参与、最频繁、最不幸、最人谋不臧的金氏世界记录么？<br /><br />我无意在此发表太多后见之明，毕竟水文规划、排水系统、降雨预测 ... 不是我的专长，我还是少说两句。但人谋不臧的事件，又岂止出现在这些方面而已？我认为，台湾的软件产业也很有可能因为人谋不臧而在未来遭到洪水吞噬。基本的问题有三点：<?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
		</p>
		<ul type="disc">
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo9; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不重视研发</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo9; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不重视专利</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo9; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不重视软件工程</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
		</ul>
		<h4 style="LINE-HEIGHT: 150%">不重视研发<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">研发是一种长期的投资，因研发而来的收益往往要数年后才「有可能」逐渐看到成果，研发在短期内一定没有太多收益，长期也不一定会有收益（可能会研发失败，也有可能市场变迁）。「聪明的」台湾软件公司是不做赔本生意的，所以不会进行对他们来说犹如钱坑的研发。<span lang="EN-US"><br /><br />你可能对我的说法不以为然，因为许多公司都有研发部。是呀！我不否认有些公司的研发部的确是在做研发，但是大多数公司的研发部都只是一个自我陶醉（抑或自我安慰）的名称罢了，他们做的事情和研发沾不上边。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">不重视专利<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">手中握有许多实用的专利，会带来许多好处：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<ol type="1">
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l6 level1 lfo10; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">部署专利地雷，避免其它公司的竞争</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l6 level1 lfo10; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">别人要采用此专利，就必须付费给你</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l6 level1 lfo10; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">踩到别的公司的专利地雷时，或和其它公司竞争时，手上的专利可以作为谈判交换的筹码，而对方如果也踩到己方的专利地雷，更可以在法律上反控对方，以战逼和。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
		</ol>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">专利不难申请，但也不是每个申请到的专利都有价值。如果不仔细评估专利的价值，就胡乱申请专利，一点意义都没有。台湾的软件公司掌控多少有价值的专利？我不知道，我也鸵鸟心态地不愿意去查。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">不重视软件工程<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">台湾根本没几家软件公司把软件工程当一回事。不采行一套适当的软件工程程序（<span lang="EN-US">process），就不可能做出稳定的中大型软件系统。我知道的许多公司，软件工程几乎都只是拿来当做幌子，写在计画书里做做样子，实际上整个软件还是胡乱拼凑出来的。中国大陆的软件产业开始相当重视 CMM 的软件工程，反观我们呢？<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">不采行软件工程、懒得学<span lang="EN-US"> design pattern、不肯「浪费时间」refactor 软件、有一搭没一搭的 test...，这样子开发出来的软件，不会是「Write Once, Run Anywhere」(tm)，恐怕是「Write Everywhere, Run Nowhere」。<br /><br />在信息产业的硬件方面，我们就算没有研发能力，至少还能帮人代工，并透过代工来累积能力逐渐茁壮。软件产业方面，我们没有研发能力也就算了，连帮人代工的能力都没有，因为我们没有采行软件工程。专门帮欧美软件大厂代工的印度最大软件公司 Wipro 已经登陆台湾了，而 Wipro 已经是 CMM5（最高）的软件公司了，我们台湾的软件公司都还在睡觉，没一点自觉呢！<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">当洪水来袭<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">不重视研发、不重视专利、不重视软件工程，想一想，我们的软件产业还真是悲情，这正预言着我们的软件产业未来很可能会遭到洪水吞噬<span lang="EN-US"> ...... 如同台湾遭到此次纳莉（以及往后无数个纳莉）的豪雨吞噬一样。<br /><br />看多了洪水等灾难，我打算去买大楼逃生索以便发生大火时逃生（如果以后住的楼高十层以上，我还会考虑买降落伞）、买一个充气泳池以便被水围困时充当橡皮艇逃生，我还要在屋内囤积一周的粮食与水、备妥灭火器、电池、手电筒、雨衣、雨鞋、大型塑料袋（大火逃生时避免被浓烟呛倒）、打火机、蜡烛、皮鞭（别想歪了！皮鞭可是用来击退趁火打劫的人渣）。Hay! 不要笑我杞人忧天，毕竟这几年住在台湾，谁不是水里来火里去的，灾难发生在身边是迟早的事，别说我没警告过你。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:54 <a href="http://www.blogjava.net/rosial/articles/57504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 软件工程篇 - Design Pattern 新解 </title><link>http://www.blogjava.net/rosial/articles/57502.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:52:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57502.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57502.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57502.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57502.html</trackback:ping><description><![CDATA[
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">什么是<span lang="EN-US"> Design Pattern？许多人一讲到 Design Pattern，就会扯到什么建筑设计，因为他们全都是看四人帮的「Design Patterns」经典本的解释，没消化就照单全收。 如果不能用更生活化的方式解释 Design Pattern，我会怀疑他们是不是真的了解 Design Pattern 的真义。<?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">什么是<span lang="EN-US"> Pattern</span></span>
				<span lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt">Pattern 最简单的定义是：只要是一再重复出现的事物，就是 Pattern。依照此定义，生活中就可以找到一堆 Pattern 的例子：<o:p></o:p></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">第四台广告中的<span lang="EN-US"> Pattern：<o:p></o:p></span></span>
		</p>
		<ol type="1">
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo5; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原价</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> ...</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，现在购买只要</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> ...</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，还送你一组</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> ...</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，请马上来电</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> ...</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如忙线中请稍后再拨。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo5; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">利用分割画面显示出使用前使用后的差别，来加强说服力。例如：由</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> C </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">升级到</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> E</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（注：</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt">C </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> E </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不是指程序语言）。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo5; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">找人现身说法：「杰瑞！感谢你介绍这套欧莱礼</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Java </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系列，让我在短短的三个月内成为公司内首屈一指的</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Java </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">专家，这实在是太神奇了！」</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
		</ol>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">选举时的<span lang="EN-US"> Pattern：<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 36pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt">1. </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">质疑对手</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> A </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">钱或搞婚外情</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />2. </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把家人通通拉上台痛哭一场以示选情告急</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />3. </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开口唱「爱拼才会赢」</span>
				<span style="FONT-SIZE: 10pt">
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">其它像是金光党的手法，刮刮乐诈财的技俩<span lang="EN-US"> ... 等，也都具有一再重复出现的特性，所以都可算是 Pattern。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">电影中的<span lang="EN-US"> Pattern</span></span>
				<span lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">电影中也有大量的<span lang="EN-US"> Pattern，请看下面的例子。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">提高追杀时紧张程度的<span lang="EN-US"> Pattern<o:p></o:p></span></span>
		</p>
		<ol type="1">
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l4 level1 lfo6; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">坏人追杀好人时，好人躲进车子，却发现车子发不动，引擎嘎嘎作响，一面努力地继续发动，一面念念有词「</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt">Come on, Come one</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">」。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l4 level1 lfo6; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">坏人追杀好人时，好人冲进电梯，死命地押着</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> close </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按钮，脱口而出「</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt">Come on, Come one</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">」。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
		</ol>
		<p class="MsoNormal" style="MARGIN-LEFT: 36pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">许多电影都会使用上述两个</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> Pattern</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，虽然是老掉牙的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> Pattern</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，但每次看到这里，总是让我紧张得心脏病差点发作，我不得不承认这两个</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> Pattern </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实在是挺有效的。</span>
				<span style="FONT-SIZE: 10pt">
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">增加主角杀死坏人合理性的<span lang="EN-US"> Pattern<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 36pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">电影最后，坏人和好人大对决，最后好人胜利，但是好人如果直接把坏人宰了，那好人在观众心中的形象就会受损，所以好人先饶坏人一条生路，但是坏人却坏到骨子里了，</span>
				<span style="FONT-SIZE: 10pt">
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">偷偷拿出一把枪瞄准好人，说时迟那时快，好人机警地察觉，为了自保于是将坏人一枪毙命。这个</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> Pattern </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以让好人有人性，又让坏人死有余辜。</span>
				<span style="FONT-SIZE: 10pt">
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">床戏的<span lang="EN-US"> Pattern<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 36pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不管和剧情有没有关系，编剧和导演总爱加上一段激情的床戏。这个</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> Pattern </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相当困扰我和我的家人，因为每次看到这里，我们保守的一家人往往觉得很尴尬，我们所反应出来的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> Pattern </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是：借口倒茶水，上厕所，打电话</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> ... </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而离座避风头</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> ... </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但眼睛仍不时偷瞄。</span>
				<span style="FONT-SIZE: 10pt">
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">恐怖片的<span lang="EN-US"> Pattern<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 36pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无须我举例，电影惊声尖叫（</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Scream</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）第一集就为我们剖析出恐怖片的一大堆</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> Pattern</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				<span style="FONT-SIZE: 10pt">
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">公式化</span>
				<span lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">好莱坞的电影比较多<span lang="EN-US"> Pattern，而欧洲的电影比较少 Pattern。至于昆丁塔伦提诺（Quentin Tarantino）编导的电影，完全是不按排理出牌，很难找到 Pattern。正因为好莱坞的电影很容易就可以找出 Pattern，所以常常会有似曾相似的感觉。许多人批评好莱坞的电影很「公式化」。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">基本上，<span lang="EN-US">Pattern 就是一种公式化的表现。那么，究竟公式化是不是好事？<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">以艺术来说，公式化的结果会造成僵化，所以负面效果居多。电影号称是「第八艺术」，也是一种艺术创作，所以最好不要出现太多<span lang="EN-US"> Pattern，否则肯定被影评人痛批「了无新意」。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">以工程来说，公式化是好事。这些公式都是「千锤百炼」的结果，运用这些公式可以确保工程具备一定的品质，并加快工程的进行。而软件开发也是一项工程，也需要尽量运用公式。 （软件另有需要艺术的一面，这不在本文的讨论范围）。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">什么是<span lang="EN-US"> Design Pattern</span></span>
				<span lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">所以，<span lang="EN-US">Pattern 就是一种「千锤百炼」的智能结晶。有经验的专家和没经验的新手，差别就在于：有经验的专家知道如何在适当的时机，套用某些公式（Pattern）以解决特定 的问题，这是专家经年累月所培养出来的 Know-How（请参见「软件产业的知识经济」一文）。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">一般来说，对象导向软件开发的程序可以粗略分成<span lang="EN-US"> OOA（对象导向分析）、OOD（对象导向设计）、OOP（对象导向实作）。在 OOD（Object-Oriented Design）阶段所采用的 Pattern 就称为 Design Pattern。运用良好的 Design Pattern，可以使得系统架构更优良（也更快完成），对于后续的 OOP、测试、维护，都会有很大的 帮助。Design Pattern 会告诉你，什么情况下用 Delegation 而不要用继承、什么情况下用 Interface 而不要用 Class... 诸如此类的知识。这些都是软件界前辈的智能结晶。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">我要强调<span lang="EN-US"> Design Pattern 专指 Design 时期的 Pattern。但是 Coding 时的 Pattern（例如程序代码内缩）最好不要称为 Pattern，以免混淆。Coding 时期的 Pattern 最好称为 Coding Style（或 Code Style）。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt">Design Pattern 这个名词也可沿用到许多地方。我认为孙子兵法就是一本军事领域 Design Pattern 的书，它告诉你什么时候该采什么样的军事动作。至于怎么去砍人，则是属于 implementation 的部分，不属于孙子兵法的范围。<o:p></o:p></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">什么是<span lang="EN-US"> Anti-Pattern</span></span>
				<span lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">并非所有的<span lang="EN-US"> Pattern 都是好的，不好的 Pattern 称为 Anti-Pattern。如果你的系统中出现了 Anti-Pattern，就表示你犯了别人「常犯的典型错误」。简言之，Anti-Pattern 就是错误的示范，要尽量避免。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">让<span lang="EN-US"> Design Pattern 成为你的不时之需</span></span>
				<span lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">许多人在设计阶段才来喟叹：「<span lang="EN-US"> Pattern 到用时方恨少。」其实你可以避免这样的情况。现在市面上有许多本 Design Pattern 和 Anti-Pattern 的书。只要好好把这些书读过，体会每个 Pattern 的真正涵义，你可以在短短的时间内，功力激增一甲子。即使读过的 Design Pattern，如果比较少用，一阵子之后也可能会忘记。 所以最好能隔一阵子就把 Design Pattern 的书拿出来复习。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:52 <a href="http://www.blogjava.net/rosial/articles/57502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 《爪哇夜未眠》- 系统篇 - 编译、反编译、反反编译 </title><link>http://www.blogjava.net/rosial/articles/57501.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57501.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57501.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57501.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57501.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57501.html</trackback:ping><description><![CDATA[「盗版」的行为，天天都在我们的周遭上演，所以今年五月由 BSA（商业软体联盟）和法务部发起的「反盗版」活动，着实让大家风声鹤唳了好一阵子。但是，即使在这样诡谲的气氛之下，由大专院校学生为主的「反反盗版」活动，到也振振有词，轰轰烈烈地攻占媒体版面。有「盗版」，就有「反盗版」；有「反盗版」，就有「反反盗版」，这个世界就是这么一回事。 <br /><br />同样的道理，有「编译」（compile），就有「反编译」（decompile）；有「反编译」，就有「反反编译」。对于 Java 和 .NET 这种虚拟机器的中间码来说，尤其明显。<br /><br />Java 程式编译后的结果是 Java Bytecode，而 .NET 编译后的结果是 CIL（Common Intermediate Language），两者都具有下列的特性： <br /><script type="text/javascript"><!--









































google_ad_client = "pub-0139896083561460";









































google_ad_width = 336;









































google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text";
google_ad_channel ="";









































google_color_border = "870100";
google_color_bg = "FFFFFF";
google_color_link = "0033FF";
google_color_url = "999999";
google_color_text = "FF0099";









































//--></script><br /><br /><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
同为堆叠式（stack-based）指令集。 <br />同为高阶物件导向机器语言。 <br />和平台无关。 <br />Code Validation <br />Symbolic Link <br />上述任何一点特色，都可以让程式变得更容易反编译，全部五点结合起来更是不得了。所以要反编译 Java 和 .NET 可以说是相当容易的。网路上就到处流传着 Java 的反编译器（decompiler），可以把编译后的档案反推出原始码，相信不久之后 .NET 也会遇到一样的问题。（至少，喜欢搞破坏的我就正尝试着写一个 .NET decompiler。） <br /><br />试想，如果你将辛辛苦苦开发出来的 Java 和 .NET 程式交给别人（蔡学镛？），他只要透过反编译器，就可以推出原始码，你的智慧财产很可能会受到侵犯。 <br /><br />想要保护自己，你必须在 Java 或 .NET 软体出货前，进行反反编译，这个动作通常称为混淆（obfuscate）。被混淆过的程式码，依然遵照原来的档案格式和指令集，所以依然可以执行，执行结果也和混淆前一样。只是被混淆过的程式码变得更乱，更不容易被反编译成功。 <br /><br />有的 Java 开发工具（例如 JBuilder）有内附混淆器（obfuscator），或者你也可以购买功能更强大的混淆器。这些商业的混淆器通常只做三件事： <br />将每一个 method 内部用更乱的方式组织。 <br />将 Java Constant Pool，或 .NET metadata 内可以消除的 Symbolic Data 消除（例如 private method 的名字）。 <br />将 debug 资讯（例如 Java 的 LocalVariableTable 与 LineNumberTable）全部删除。 <br />Obfuscator 的作用如果只是如同上述一般，只有 method 局部的作用，效果不大。欲大幅度地增加反编译的难度，必须搭配下列的方式： <br />Class 内的混淆：将 class 内的 method 互相混淆。 <br />Class 之间的混淆：将 class 之间的关系混淆，例如将父类别和子类别合并或拆解等。 <br />有一些学术论文有对上述两点做出研究，但成效仍然不大，而且必须手动调整，无法由软体自动处理。这方面值得大家投入更深入的研究。 <br /><br />混淆过的程式会遇到下面的问题： <br />通常效率会变差。 <br />可能无法执行。我遇过这样的情况，有可能是混淆器的错，也有可能是 JVM 的错。 <br />如果进行「Class 之间的混淆」，稍有不慎，就很可能会无法执行。例如：Java 程式中如果有用到 instanceof，或者 C# 程式中有用到 is，就要很小心的进行「Class 之间的混淆」，否则后果不堪设想。 <br /><br />混淆的目的有两个层次： <br />让程式无法被自动反编译：例如做出一些特殊的跳跃（goto），让程式区块（block）的关系无法被找出特定的 pattern。 <br /><br />让程式就算被反编译成功，也不容易被程式员阅读理解：想办法加入一些不易被识破的程式码来欺骗程式员。 <br /><br />Obfuscator 不是万灵丹，如果遇上了一个精通 obfuscating 技术的人，佐以 profiling 工具，原始码还是会落入他的手中。所以，使用 obfuscator 时，你必须有这样的心理准备：「防君子，不妨小人；防笨蛋，不防聪明人」。尽可能将软体放在 server 改为提供 service，而不将软体卖到客户手上，这才是上策。 <br /><br /><!-- Body End --><script language="javascript" src="bodyend.js"></script><script src="http://www.google-analytics.com/urchin.js" defer="" type="text/javascript"></script><script defer="" type="text/javascript"><![CDATA[uacct = "UA-469010-2";urchinTracker();]]&gt;</script><img src ="http://www.blogjava.net/rosial/aggbug/57501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:51 <a href="http://www.blogjava.net/rosial/articles/57501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 《爪哇夜未眠》- 系统篇 - Shit™ Happens, Part II </title><link>http://www.blogjava.net/rosial/articles/57500.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57500.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57500.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57500.html</trackback:ping><description><![CDATA[
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">我在前面的「<span lang="EN-US">Shit™ Happens」一文中提到一个名为 Shit™ 的 RuntimeException，我用它来帮助找出自己因疏忽而造成的程序错误，但是这种方式毕竟有点麻烦，而且有一些伴随而来的问题。使用 Shit™ Exception 的缺点包括了：<?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
		</p>
		<ol type="1">
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l11 level1 lfo35; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序员要自行产生并丢出一个</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Shit™ </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象。</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt">  <o:p></o:p></span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l11 level1 lfo35; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发生这种问题时，通常是很严重的状况，不应该是</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Runtime Exception</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，应该是</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Error </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比较恰当。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l11 level1 lfo35; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span lang="EN-US" style="FONT-SIZE: 10pt"> </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">产品交付给客户之前，程序员必须手动将程序代码中所有的这些检查都删除，否则对于执行效率会有不好的影响。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
		</ol>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt">Java™ 2 SDK 1.4 新增的 assertion 功能，和 Shit™ Exception 的目的一样，但可以免去 Shit™ Exception 的这些缺点。所以我已经开始改用 assertion，而不再使用 Shit™ Exception 了。<br /><br />你可以在 Java™ 程序 method 内的任何地方插入 assertion 叙述来做检查。Assertion 叙述（statement）的方法是在 assert 这个关键词（keyword）之后加上一个布尔（boolean）判断式，然后以分号结束此叙述。如下例所示：<o:p></o:p></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt 36pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">assert size() == 0;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">程序中如果使用到<span lang="EN-US"> assertion，编译时必须加上「-source 1.4」的选项来告诉 javac 编译器，否则 javac 预设的状况是不支持 assertion 语法的。执行的时候必须以「-ea」的选项设定来告诉 JRE 必须执行 assertion，当程序执行到 assertion 叙述时，如果布尔判断式不成立，系统会丢出 AssertionError 的错误对象。如果不用「-ea」选项，执行时会忽略 assertion 叙述不予执行。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt">Assertion 看起来很神奇，其实骨子里很平庸。透过编译器和 class loader 的合作就可以达到 assertion 的支持，根本不需要 JVM 在指令集（instruction set）中新增 opcode。举例来说，「assert size() == 0;」这道叙述会被编译器当成下面的程序代码来编译：<o:p></o:p></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt 36pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">if (ea) {<br />   if( size() != 0 ) {<br />     throw new AssertionError();<br />   }<br />}</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">编译器并会在此<span lang="EN-US"> class 的 bytecode 中插入一个类似下面的私用静态合成字段（private static synthetic field）： <o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt 36pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">private static boolean ea = false;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">因为<span lang="EN-US"> ea（意思是 enable assertion）的默认值是 false，所以预设情况下是不会执行 assertion 的。如果你透过「-ea」选项来执行，那么 class loader 会在加载此 class 的时候，将 ea 设为 true，所以就能执行 assertion。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">执行程序时，如果把<span lang="EN-US"> assertion 功能打开，会造成执行时效率稍微变差，而且不管有没有透过「-ea」来把 assertion 功能打开，assertion 的程序代码都会一直存在 bytecode 中，会造成体积的增大，这两点是使用 assertion 要付出的代价，所以在程序中使用 assertion 的时机，仍须仔细斟酌。只要使用得宜，assertion 可以是程序员很好的除错帮手。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">商标声名：<span lang="EN-US"><br />Java™ is a trademark of Sun Microsystems.<br />Shit™ is a trademark of Jerry Tsai.<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:49 <a href="http://www.blogjava.net/rosial/articles/57500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 《爪哇夜未眠》- 系统篇 - Shit™ Happens ，1</title><link>http://www.blogjava.net/rosial/articles/57499.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57499.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57499.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57499.html</trackback:ping><description><![CDATA[
		<table width="90%" border="0">
				<tbody>
						<tr>
								<td>
										<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
												<span style="FONT-SIZE: 10pt">不要用鄙夷的眼光看待这个标题。其实「<span lang="EN-US">Shit Happens」是个名言，而且还是个具有禅意的名言。 电影阿甘正传（Forrest Gump）中，阿甘在跑步时踩到 shit，旁边一位失意的商人问他对此事的看法，阿甘表情轻松地说：「Shit Happens.」 ，这句话的意思是「人生偶而会有不顺遂的事发生，没什么值得大惊小怪的」。这个商人于是将「SHIT HAPPENS」做成标语，结果大卖。 电影下一幕镜头出现一台后面贴有「SHIT HAPPENS」标语的汽车，飞来横祸地被后面的另一台车子撞了……果真是「Shit Happens」。<?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
												<span style="FONT-SIZE: 10pt">「<span lang="EN-US">…… 这和本文章有什么关系？？？」别急，继续看下去吧！<o:p></o:p></span></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
												<span lang="EN-US" style="FONT-SIZE: 10pt">Java 程序员对于例外处理机制（exception handling mechanism）应该都不陌生，因为 Java 语言强制程序员必须使用例外处理来捕捉（catch）非执行时期（non-runtime）的例外。所以你一定用过 try，catch，finally 这三个 Java 语言的关键词，而且你也很有可能用过 throw 这个关键词来将未处理的例外再转出去给 call stack 的下一层 method。但是，你很有可能未曾主动 new 一个例外对象，然后将其丢出。你更有可能未曾定义过自己的例外类别。<o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
												<span style="FONT-SIZE: 10pt">在用<span lang="EN-US"> Java 设计中大型系统的时候，常常有必要定义自己的例外类别，并在适当时机主动地丢出例外。如此一来可以使得程序更稳固。<o:p></o:p></span></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
												<span style="FONT-SIZE: 10pt">对于定义自己的例外类别，我的习惯是：<span lang="EN-US"><o:p></o:p></span></span>
										</p>
										<ol type="1">
												<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l32 level1 lfo34; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
														<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果此例外属于</span>
														<span lang="EN-US" style="FONT-SIZE: 10pt"> runtime </span>
														<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">性质，且可以补救，则此例外继承自</span>
														<span lang="EN-US" style="FONT-SIZE: 10pt"> java.lang.RuntimeException</span>
														<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
														<span lang="EN-US" style="FONT-SIZE: 10pt">
																<o:p>
																</o:p>
														</span>
												</li>
												<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l32 level1 lfo34; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
														<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果此例外不属于</span>
														<span lang="EN-US" style="FONT-SIZE: 10pt"> runtime </span>
														<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">性质，且可以补救，则此例外继承自</span>
														<span lang="EN-US" style="FONT-SIZE: 10pt"> java.lang.Exception</span>
														<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
														<span lang="EN-US" style="FONT-SIZE: 10pt">
																<o:p>
																</o:p>
														</span>
												</li>
												<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l32 level1 lfo34; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
														<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果此例外不可以补救，则此例外继承自</span>
														<span lang="EN-US" style="FONT-SIZE: 10pt"> java.lang.Error</span>
														<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
														<span lang="EN-US" style="FONT-SIZE: 10pt">
																<o:p>
																</o:p>
														</span>
												</li>
										</ol>
										<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
												<span style="FONT-SIZE: 10pt">上述这三点完全是依照<span lang="EN-US"> Java 语言对于例外处理的建议，相当直觉，我也就不多解释了。除此之外，我还定义了一个我常用的例外类别，叫做 Shit，其定义如下：<o:p></o:p></span></span>
										</p>
								</td>
						</tr>
						<tr>
								<td style="PADDING-RIGHT: 1.5pt; PADDING-LEFT: 1.5pt; BACKGROUND: #e1e1e1; PADDING-BOTTOM: 1.5pt; WIDTH: 502.5pt; PADDING-TOP: 1.5pt" valign="top" width="670">
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">package com.skittles;<o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
														<br />public class Shit extends RuntimeException {<o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">    private String whatHappened;<o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">    private Shit() {}<o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">    public Shit(String whatHappened) {<o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">        this.whatHappened = whatHappened;<o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">   }<o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">   public String toString() {   <o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">       return whatHappened;<o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">   }<o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">}<o:p></o:p></span>
										</p>
										<p style="MARGIN: 2.25pt 0cm">
												<span style="FONT-SIZE: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">　</span>
												<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
						</tr>
						<tr>
								<td style="PADDING-RIGHT: 1.5pt; PADDING-LEFT: 1.5pt; BACKGROUND: white; PADDING-BOTTOM: 1.5pt; WIDTH: 502.5pt; PADDING-TOP: 1.5pt" valign="top">
										<p style="MARGIN: 0cm 0cm 0pt">
												<span lang="EN-US" style="FONT-SIZE: 10pt">
														<br />在程序中，对于一些我<b>认为绝对不可能</b>会发生的情况，我会丢出 Shit，代表程序出现了绝对不应该发生的状况。如果出现这个例外，表示程序内部有奇怪的错误。在测试程序时，如果 Shit Happens，我会去追查其源头，将错误找出来订正。<o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt">
												<span style="FONT-SIZE: 10pt">之所以让<span lang="EN-US"> Shit 继承自 RuntimeException，就是因为它应该不可能发生，将它定成 RuntimeException 可以使得程序不用去 catch 它。<o:p></o:p></span></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt">
												<span style="FONT-SIZE: 10pt">在程序的撰写与测试阶段，<span lang="EN-US">Shit Happens 是免不了的。但是，在程序交给客户或上线之后，就得确定程序正确无误。No more shit happens.<o:p></o:p></span></span>
										</p>
										<p class="MsoNormal">
												<span lang="EN-US"> <o:p></o:p></span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/rosial/aggbug/57499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:48 <a href="http://www.blogjava.net/rosial/articles/57499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 《爪哇夜未眠》- 系统篇 - 实现 Java 平台的三种方式 </title><link>http://www.blogjava.net/rosial/articles/57497.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57497.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57497.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57497.html</trackback:ping><description><![CDATA[
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">广泛地说，只要能执行<span lang="EN-US"> Java bytecode 者，就可以称为 Java 平台（Java platform）。大致上，实现 Java 平台的方式有三种，分别是： <?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
		</p>
		<ul type="disc">
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l17 level1 lfo15; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span lang="EN-US" style="FONT-SIZE: 10pt">Java </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虚拟机器（</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt">Java Virtual Machine</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt">JVM</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l17 level1 lfo15; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span lang="EN-US" style="FONT-SIZE: 10pt">Java </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作系统（</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt">Java Operating System</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l17 level1 lfo15; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span lang="EN-US" style="FONT-SIZE: 10pt">Java </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片（</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt">Java Chip</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
		</ul>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">以下就此三种<span lang="EN-US"> Java 平台提出解说，并比较之。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span lang="EN-US">Java 虚拟机器<o:p></o:p></span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">所谓的<span lang="EN-US"> Java 虚拟机器，指的是在操作系统上执行的一种程序，此程序可以解读 Java bytecode，并在操作系统的帮助下执行 Java bytecode。这样的执行架构，大致上可以分成四层，分别是：<o:p></o:p></span></span>
		</p>
		<ul type="disc">
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l15 level1 lfo16; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第一层（最上层）的</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Java bytecode <o:p></o:p></span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l15 level1 lfo16; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第二层的</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Java </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虚拟机器</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l15 level1 lfo16; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第三层的操作系统</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l15 level1 lfo16; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第四层（最底层）的芯片</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
		</ul>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">芯片执行上面的操作系统，操作系统执行上面的<span lang="EN-US"> Java 虚拟机器，Java 虚拟机器执行上面的 Java bytecode。对于 Java bytecode 来说，它只接触到 Java 虚拟机器，所以当然「误以为」Java 虚拟机器就是它的平台。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">实例：<span lang="EN-US">Pentium III Chip + Windows 2000 OS + Sun HotSpot Client VM + Together/ Java Application。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span lang="EN-US">Java 操作系统<o:p></o:p></span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">如果把<span lang="EN-US"> Java 虚拟机器整合进既有的操作系统中（例如：Mac OS X），或是打造一个全新的操作系统专门执行 Java bytecode（例如：JOS），这类能直接执行 Java bytecode 的操作系统也可视为 Java 平台。这样的执行架构，大致上可以分成三层，分别是：<o:p></o:p></span></span>
		</p>
		<ul type="disc">
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l1 level1 lfo17; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第一层（最上层）的</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Java bytecode <o:p></o:p></span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l1 level1 lfo17; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第二层的</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Java </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作系统</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l1 level1 lfo17; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第三层（最底层）的芯片</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
		</ul>
		<h4 style="LINE-HEIGHT: 150%">
				<span lang="EN-US">Java 芯片<o:p></o:p></span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">如果把<span lang="EN-US"> Java 操作系统和既有的芯片整合起来成为一组新的芯片（例如：ARM 7、ARM 9），或者打造一个全新的 Java 专用芯片（例如：aJile aJ-100）那么此一种类的芯片也是 Java 平台。这样的执行架构，大致上可以分成两层，分别是：<o:p></o:p></span></span>
		</p>
		<ul type="disc">
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l16 level1 lfo18; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第一层（最上层）的</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Java bytecode <o:p></o:p></span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l16 level1 lfo18; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第二层（最底层）的</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Java </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
		</ul>
		<h4 style="LINE-HEIGHT: 150%">三种方式的比较<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">这三种都是<span lang="EN-US"> Java 平台，各有优缺点，很难说那一种方式比较好，必须看你的需求而定。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">透过虚拟机器来执行<span lang="EN-US"> Java 是最常见的架构方式，一方面是因为虚拟机器的 Java 平台最容易被实作出来（相较于 Java 操作系统和 Java 芯片而言），二方面是因为只要有虚拟机器就可以让在不更动实体平台（操作系统和 CPU）的情况下多了执行 Java 程序的功能。目前，多数主流的实体平台（包括 Windows、Linux、Mac、Solaris、PalmOS、EPOC...）都已经有 Java 虚拟机器了。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">虚拟机器的架构因为分了太多层级，所以效率上当然会比较差，这是虚拟机器架构最为人所抨击的地方。但是由于虚拟机器的技术一直在进步，所以执行效率一直都有持续的提升。目前已经相当逼近<span lang="EN-US"> Java 操作系统的架构方式，所以虚拟机器的方式应该会继续成为 PC 上的 Java 平台主流。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">一般来说，透过<span lang="EN-US"> Java 操作系统来执行 Java bytecode，效率会比虚拟机器的方式好。所以 Java 虚拟机器被整合进操作系统中，来提升该操作系统的附加价值，这种作法有可能会成为一种趋势（例如 MacOS X 就把 Java 和操作系统作了很好的整合）。但如果设计一套只能执行 Java 的全新操作系统，可能不容易成功，因为全新的操作系统势必面临驱动程序（device driver）不足的严重困扰。因为此原因，加上事实证明操作系统的 Java 平台，比虚拟机器的 Java 平台效率提升不如预期多，所以 IBM 和 Sun 合作的纯 Java 操作系统「JavaOS」计画已经停摆。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">利用芯片的方式来实作<span lang="EN-US"> Java 平台，对于 Java 程序的执行速度会有很大的提升，毕竟硬件的速度比软件快许多。这种方式以后会成为嵌入式系统的主流，许多 Java 的 IA 产品（例如：Set-Top Box）都会开始使用 Java 芯片。但是这种方式已经把 Java 整个变成硬件平台，不适合再称为跨平台了。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:47 <a href="http://www.blogjava.net/rosial/articles/57497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 《爪哇夜未眠》- 系统篇 - 垃圾！</title><link>http://www.blogjava.net/rosial/articles/57495.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57495.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57495.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57495.html</trackback:ping><description><![CDATA[
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">台北市去年开始实施垃圾费随袋征收之后，垃圾量减少了许多，资源回收量也开始大增，大家都说这是个不错的政策。此次春节前，台北市政府为了便民，宣布两天开放不收垃圾费（不需专属垃圾袋），结果换来的是一场垃圾清运人员的噩梦。大量的垃圾堆积在各巷道路口，台北市成了垃圾城。<span lang="EN-US"><br /><br />不过这样的场景我可是处变不惊了。毕竟我的大学时代四年是在中坜度过，这四年中，中坜市不断地发生垃圾风波，有时候甚至整个桃园地区都浸在酸败腐臭的垃圾堆中，我常常骑车骑一半就要停在路边呕吐一番，然后晕眩着继续上路，到了目的地之后，整个人都虚脱了。经过了这样的大风大浪，你说我怎么会把台北市的这些垃圾放在眼里，更何况台北市的这些垃圾还大都是「新鲜」的，不像当时中坜的垃圾是一两周或一两个月的（写到这里，我打字的手颤抖起来）。<br /><br />垃圾问题在现实生活中令人头痛，垃圾问题在软件技术圈子同样令人头痛。<br /><br />自动内存管理也就是俗称的垃圾收集（garbage-collection），可以让程序员减轻许多负担，也减少程序员犯错的机会，所以相当受欢迎。从早期的 Smalltalk，Eiffel，到近期的 Java，C#，Python，REBOL，Ruby... 等，通通支持垃圾收集。垃圾收集差不多已经成了新一代高阶程序语言必备的功能。<br /><br />在 Java 中，你不需要主动删除对象，而是由 Java 虚拟机器代劳。Java 虚拟机器会「持续追踪」每个对象被使用的情形，如果某对象未被用到，Java 虚拟机器就会自动将其释放。而要如何「持续追踪」，实作细节留给 Java 虚拟机器的实作者发挥。<br /><br />在早期，许多虚拟机器只是将垃圾收集实作成一个执行绪，一再进行检查，遇到垃圾就释放其内存。因为垃圾收集应该尽量不要影响到原程序的执行，所以虚拟机器将此执行绪的优先权设为 0（最低）。如此一来，当系统有其它执行绪在运作时，就不会进行垃圾收集，所以常常很久才会收集到垃圾，造成内存不足。但又不能因此调高其优先权，否则对 Java 的执行效率是一大打击。所以，我们这些 Java 程序员的计算机 RAM 都要至少 256 MB，否则根本没办法顺利执行 JBuilder 或 VisualAge for Java 等 Java 开发工具，因为这些开发工具本身就是专门吃内存的 Java 程序。我甚至在我的笔记型计算机上装了 512MB 的 RAM。<br /><br />于是许多人怀念起 C/C++ 来了，他们认为如果 Java 能同时支持自动内存管理和手动内存管理，那么该有多好！他们甚至希望 Java 未来的版本能允许他们主动释放内存，比方说：<?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt 36pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MyBigObject obj = new MyBigObject();<br />// do something here...<br />delete obj;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">如果你也这么希望的话，我劝你早点死了这条心吧！<span lang="EN-US">Java 语言的主要精神之一是 robust，如果 Java 同时支持这两种内存管理的话，可能会造成程序中有许多潜在的 Bug，内存不当存取的问题会比 C/C++ 更严重，所以是不可能这么做的。<br /><br /></span></span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">java.lang.System.gc() </span>
				<span style="FONT-SIZE: 10pt">或 </span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">java.lang.Runtime.gc()</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> 的 </span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">gc</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> 指的就是 garbage-collection，不过根据文件的说明，它的作用只是「建议」Java 虚拟机器快去收垃圾，而不「保证」会去收垃圾。文件都写得如此谦虚了，你也不应该对它寄予太多厚望。对于内存资源消耗太多的缺失，目前你能做的是：<o:p></o:p></span>
		</p>
		<ol type="1">
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l5 level1 lfo11; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">改用一个内存管理方式好一点的虚拟机器：垃圾收集是一个丰富又庞大的主题。垃圾收集的算法有数百种可能，而且各有专长。许多虚拟机器采用的算法都不太一样，建议各位多去比较几家。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l5 level1 lfo11; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">少制造垃圾：许多时候你制造了一堆不该制造的垃圾，比方说：该用固定式数组的时候却用</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> Vector</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，该用</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> StringBuffer </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候却用</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> String...... </span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等等。这么会制造垃圾，再多内存也不够用。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l5 level1 lfo11; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不再使用的对象要尽早设定为</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> null</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，以便早点被当成垃圾清掉。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
				<li class="MsoNormal" style="LINE-HEIGHT: 150%; tab-stops: list 36.0pt; mso-list: l5 level1 lfo11; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">花钱多买一些</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt"> RAM</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（砸钱解决问题，这是我最爱用的方式）。</span>
						<span style="FONT-SIZE: 10pt">
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</li>
		</ol>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">垃圾，真的这么让人讨厌吗？那倒不尽然，我最喜欢的乐团之一就叫做垃圾（<span lang="EN-US">Garbage），主唱雪莉曼森（Shirley Manson）的声音真是迷死人了。比起名字很嚣张，但歌声是垃圾的那些偶像，这时候雪莉曼森的垃圾俨然成了一种讽刺。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:45 <a href="http://www.blogjava.net/rosial/articles/57495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 《爪哇夜未眠》- 系统篇 - Java 相关的编译技术</title><link>http://www.blogjava.net/rosial/articles/57496.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57496.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57496.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57496.html</trackback:ping><description><![CDATA[
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">除了<span lang="EN-US"> Java 的编译器和虚拟机器之外，还有一些相关的编译技术，本文章试图做一个简单的说明。<?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span lang="EN-US">JIT 编译器<o:p></o:p></span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">传统的<span lang="EN-US"> Java 虚拟机器很愚蠢，将一道 bytecode 的指令翻译成机器码之后，马上执行这些机器码，执行完这批机器码之后，就把这些机器码丢了，接着再翻译下一道 bytecode 的指令，继续下去 ...。即使下次执行到以前执行过的 bytecode 指令，依然要重新翻译成机器码才能执行，如此一来，效率当然不好。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">使用<span lang="EN-US"> JIT 编译器（Just-In-Time compiler）技术的虚拟机器比较聪明，会把常常执行的部分在第一次先翻译好放在内存，以后再次执行到这里时，就不用再翻译，直接从内存取出机器码即可执行。这么一来，只要你的内存够大，JIT 编译器的技术够好，你的 Java bytecode 执行速度也可以逼近纯编译式的程序。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">其它程序语言的编译器<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">任何档案只要符合<span lang="EN-US"> Java bytecode 的格式，就可以被 Java 虚拟机器执行。制造出 Java bytecode 的方式有许多种，不一定要使用 Java 语言来写程序，才能编译成 Java bytecode。Java 是语言也是平台，你可以不使用 Java 语言（也就是 Java 编译器），只使用 Java 平台（也就是 Java 虚拟机器）。只要某语言有提供编译器，能将该语言的原始码编译成 Java bytecode 格式，就可以在 Java 平台上执行。<br /><br />据我所知，目前已经有下列语言提供兼容于 Java 平台的编译器（以英文字母顺序排列）：Aardappel，Ada，Agora 98，BAMBOO，Basic，Bistro，Bolero，C，C++，CLIPS，COBOL，Correlate，Dawn，E，EcmaScript，Eiffel，Foo，Forth，Fortran，Funnel，Haskel，Hojo，JavaScript，Jickle，JIF，Jinni，Lisp，LL，LLP，Logo，Luck，MINERVA，Mini，ML，Modula-2，NetRexx，Nice，Oberon-2，Pascal，PLAN，Pnuts，Prolog，PS3I，Python，Sather，Scheme，SELF，Simkin，Small Talk，Tcl，WebL，Yassl，Yoix，Yoyo。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">原生编译器<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">如果你不在乎<span lang="EN-US"> Java 程序能否跨平台，你希望 Java 程序能如同 C/C++ 一般被编译成机器码而非 Java bytecode，那么你可以使用 Java 原生编译器（native compiler）。目前已经有不少这样的产品可以使用。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt">Java 原生编译器有两大类，一类可以把 Java 的原始码编译成机器码，另一类则可以把 Java bytecode 编译成机器码。<o:p></o:p></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">反编译与混淆器<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt">Java bytecode 因为档案格式简单，信息保留完整，且指令是最简单的堆栈式（stack-based）架构等因素，所以很容易被反编译（de-compilation）。反编译指的是和编译相反的过程，对 Java 来说，反编译就是把 Java bytecode 转换成 Java 原始码的过程。<o:p></o:p></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">为了防止你辛苦地开发出来的<span lang="EN-US"> Java bytecode 被他人反编译成原始码，你可以透过混淆器（obfuscator）将你的 Java bytecode 转换成更混乱的 Java bytecode，执行起来效果一样，但是被混淆过的 Java bytecode 比较不容易被反编译。你通常要为此付出一点代价，因为混淆过的程序执行速度通常会变慢。且混淆器只能增加反编译的难度，不能保证你的程序一定无法被反编译成功。毕竟道高一尺，魔高一丈，如果有人愿意花许多时间和精力反编译你的 Java bytecode，你根本就无法拦阻。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">组译与反组译<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">汇编语言（<span lang="EN-US">assembly）是一种非常接近机器码的语言。将汇编语言转成机器码的工具称为组译器（assembler），反过来将机器码转成汇编语言的工具称为反组译器（dissembler）<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">对于<span lang="EN-US"> Java 虚拟机器来说，Java bytecode 就如同它的机器码，有没有一种语言是很接近 Java bytecode 的呢？也就是说，Java 有没有的汇编语言呢？基本上，Sun 并未定义 Java 的标准汇编语言，但是有一些人定义了自己的 Java 汇编语言，并提供 Java 的组译器（甚至反组译器）。例如 Jasmin 以及 javaa 都是 Java 组译器。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">前处理器<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">前处理器（<span lang="EN-US">pre-processor）也称为前编译器（pre-compiler）或前翻译器（pre-translator），其目的在将源码中不符合语言规范的部分转换成符合语言规范的形式。比方说：我们可能在 Java 源码中除了使用 Java 语言之外，还穿插使用自订的语法。这些自订的语法无法被 Java 编译器处理，所以我们必须先透过一个前处理器来将自订语法的部分转换成 Java 语言，然后就可以交由 Java 编译器处理。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">目前有不少<span lang="EN-US"> Java 的前处理器，例如 iContract、SQLJ，都是用来扩充 Java 语言之用的。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">最佳化工具软件<span lang="EN-US"><o:p></o:p></span></h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">一般来说，最佳化有两种：<span lang="EN-US"><br />1. 让档案体积变小，可以节省储存空间并加快网络传送速度。<br />2. 让执行速度变快。<br />对于 Java 来说，还有第三种最佳化：<br />3. 让程序结构变乱，不容易被反编译。也就是前面提到过的混淆（obfuscation）。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">这三个目的之间常常互相排挤：结构变乱，通常会使得程序变慢，且体积变大；体积变小，通常会使得速度变慢，且结构变整齐；速度变快，通常会使得体积变大，且结构变整齐。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:45 <a href="http://www.blogjava.net/rosial/articles/57496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 励志篇 - 从美丽的菲奥莉娜说起 </title><link>http://www.blogjava.net/rosial/articles/57487.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57487.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57487.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57487.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57487.html</trackback:ping><description><![CDATA[
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 125%">
				<span style="FONT-SIZE: 10pt">「<span lang="EN-US">I'm in love」看着电视上出现的 HP 女总裁菲奥莉娜（Carly S. Fiorina），我感受到一股情愫正在内心滋长。<?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 125%">
				<span style="FONT-SIZE: 10pt">这次来台参加<span lang="EN-US"> WCIT（世界信息科技大会）的众多贵宾中，大家目光的焦点都集中在 HP 女总裁菲奥莉娜的身上。菲奥莉娜以女性的身份，领导着这样大型的公司，在男性为主的商场上实属不易。在看过菲奥莉娜的谈吐之后，更觉得她迷人，她还帮咱们台湾的信息产品拍摄形象广告呢！真是个好人。我觉得她可以说是集美丽、智能、优雅、亲切、还有大权于一身的女总裁。菲奥莉娜的现身台湾，一定可以让大家体会到：女性领导人不见得要集不美丽、不智能、不优雅、不亲切、还有黑脸于一身（嘿！我可没在影射谁）。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 125%">
				<span style="FONT-SIZE: 10pt">商场上的女性虽然少，但工程界的女性就更少了。以我比较熟的信息圈子来说，软件公司内部从事<span lang="EN-US"> coding 的女性比例很低，这到底是为什么呢？我认为原因可能有二：<o:p></o:p></span></span>
		</p>
		<p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 125%; tab-stops: list 36.0pt; mso-list: l1 level1 lfo7">
				<span lang="EN-US" style="FONT-SIZE: 10pt">1.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				<span style="FONT-SIZE: 10pt">传统的观念认为女生不适合读自然组，所以信息系的女生很少，一班通常只有<span lang="EN-US"> 0~5 个。 <o:p></o:p></span></span>
		</p>
		<p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 125%; tab-stops: list 36.0pt; mso-list: l1 level1 lfo7">
				<span lang="EN-US" style="FONT-SIZE: 10pt">2.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				<span style="FONT-SIZE: 10pt">偏偏这<span lang="EN-US"> 0~5 个女生又常常被班上当成宝，所以不太需要写程序，男生常常都会主动捉刀帮忙。 <o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 125%">
				<span style="FONT-SIZE: 10pt">这两个原因结合在一起就严重了。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 125%">
				<span style="FONT-SIZE: 10pt">况且，许多女生一直都有错误的观念，认为自己「逻辑观念又没男生强」，所以「程序作业当然是找男生帮忙」，也因此信息系的男学生都很抢手。大一时女生多的科系喜欢找男生当学伴（或称学友），因为他们认为男生可以帮他们写计算器概论的程序作业。没有学伴，或者学伴自己也写不出来，女生只好上网求救。这些求救的<span lang="EN-US"> post 分为几种风格：<o:p></o:p></span></span>
		</p>
		<p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 125%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo8">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				<span style="FONT-SIZE: 10pt">比较古典的标题「小女子有难，请程序高手拔刀相助」 <span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 125%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo8">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				<span style="FONT-SIZE: 10pt">比较新潮的标题「美眉需要各位葛格帮忙写一个程序」 <span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 125%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo8">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				<span style="FONT-SIZE: 10pt">比较淑女的标题「请各位大哥帮小妹解决程序问题好吗」 <span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 125%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo8">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				<span style="FONT-SIZE: 10pt">比较情色的标题「需要有人帮忙写程序，我愿意以身相许」 <span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 125%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo8">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				<span style="FONT-SIZE: 10pt">比较怨天的标题「我是女生，所以不会写程序，请帮帮忙」 <span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 125%; tab-stops: list 36.0pt; mso-list: l3 level1 lfo8">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				<span style="FONT-SIZE: 10pt">比较尤人的标题「老师出的程序好难，害人家都不会写」 <span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 125%">
				<span style="FONT-SIZE: 10pt">不管标题风格为何，这些女生无非是来要作业的，绝对不是自动自发练习时遇到问题为求甚解而主动发问。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 125%">
				<span style="FONT-SIZE: 10pt">女生真的比较不会写程序吗？我可不这么认为。女生学习外国语言的能力比较强，学习程序语言应当如是。而且女生的心思比较细腻，不若男生的粗心，所以写出来的程序可能比男生的程序<span lang="EN-US"> bug 更少。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 125%">
				<span style="FONT-SIZE: 10pt">诸位女性们，你们应该从今天起，卯起来写程序，好改变大家对你们既定的印象。让大家知道，女生也会写程序，甚至写得比男生更好。套句南方四贱客（<span lang="EN-US">South Park）电影的歌词：「You can do it, it's all up to you, Mmmkay!」。你们应该拿菲奥莉娜当榜样。<o:p></o:p></span></span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 125%">
				<span style="FONT-SIZE: 10pt">又提到了菲奥莉娜，她已经离台了，徒增我无限的思念<span lang="EN-US"> ......。忽然想起，我上个月刚买的激光打印机是 Epson EPL-5700L 而不是 HP 的，真是懊悔。Oh！菲，Forgive me，虽然 HP 的打印机比较贵，但是下一次，再贵我还是一定要买 HP 的，I promise。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:24 <a href="http://www.blogjava.net/rosial/articles/57487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 励志篇 - 职业敏感度</title><link>http://www.blogjava.net/rosial/articles/57486.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57486.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57486.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57486.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57486.html</trackback:ping><description><![CDATA[        对工作相当投入的人，往往会有很高的「职业敏感度」，而且敏感的范围扩及周遭，甚至是一天二十四小时无所不在。职业敏感度往往会造成学习的进步以及工作的突破。如果你也培养出了高职业敏感度，基本上这是件好事。<br /><br />        高职业敏感度的人有着把职业融入生活的本事。比方说，傅培梅女士上餐厅吃饭吃到一道好菜时，应该会不自觉地剖析起这道菜的素材和做法；David Foster（大卫佛斯特，名唱片制作人）在听到一首好歌时，应该会不自觉地剖析起唱腔、和弦、编曲技巧等。出版社的编辑平常在阅读书报时，应该会很眼尖地发现错别字以及文句不顺的地方。<br /><br />        如果你以为高职业敏感度的人都像 Woody Allen（伍迪艾伦，美国名导演）一般地神经质，那倒不尽然。不少高职业敏感度的人生活很随性、怡然自得，对他们来说，随时随地吸收与运用专业技能就像是呼吸一样地自然，没什么好紧张的。<br /><script type="text/javascript"><!--





























google_ad_client = "pub-0139896083561460";





























google_ad_width = 336;





























google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text";
google_ad_channel ="";





























google_color_border = "870100";
google_color_bg = "FFFFFF";
google_color_link = "0033FF";
google_color_url = "999999";
google_color_text = "FF0099";





























//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script><br />        有职业敏感度的人，每天都在不自觉地增加专业功力。许多工作上棘手的问题，甚至会在一觉过后就突然「悟出」解决之道。我也有过这样的经验，睡梦中梦到某一道指令可以解决我的程序问题，马上从床上跳起来冲向计算机，只不过，Oops！我很快地发现这道指令根本是不存在的 L<br /><br />        如何培养高度的职业敏感度？让自己暴露在大量相关的信息下是最自然的方式。比方说，如果你希望培养 Java 的职业敏感度，你不妨把浏览器的首页设定成 JavaSoft 或是 JavaLobby，每次打开浏览器就会有相关信息进入你脑海；订阅几份 Java 的 mailing list。如此一来，你就可以渐渐地把这些当成生活中的一部份。<br /><br />        我的职业敏感度也很高。使用计算机软件时，我常常会不自觉地剖析起这套软件是怎么开发出来的？那边需要用到执行绪？如何进行 GUI 的 Layout？事件如何在对象之间传递？这么一来，许多观念都能很快地在脑海中复习整理过一次。如果有一些问题自己无法确定，可以去写写测试程序，或查书，或者先不理会它，常常某天倏地自然就懂了。<br /><br />        当我在学习 Java 初期，我对于 Java 这个字很敏感，任何人只要说出「Java」这个字眼，都会引起我的注意，我甚至会像滤波器一样地将周围的其它声音滤掉，而将重要讯号加强，就怕漏听了些什么。连有一次，同学说出「加法」，还被我误听为「Java」，耳朵立刻竖起来 ...... 我实在太敏感了。<br /><br />        甚至，我以前连睡觉都会发挥职业敏感度。有一次，我因为失眠，所以开始数绵羊，但是身为 City Slicker 的我实在无法想象出绵羊的外观，更无法想象绵羊跳过栅栏的样子，所以我必须找一个绵羊的替代品。灵光乍现，我忽然想到在 Windows 上复制很大的档案时，不都会出现两个黄色的档案夹，纸张由左边的档案夹飞到右边的档案夹，刚好可以取代跳跃栅栏的绵羊。所以，我就开始数起来了 ....「有没有效？」唔！我不知道，因为数一会儿之后我就觉得自己很白痴，停了下来。<br /><br />        职业敏感度高，倒也不全然是好事。我最近去电影院看电影时常常都会不自觉地剖析起灯光师的位置、摄影师运镜的手法、以及导演剪接的技巧 ...... 等，反而无法融入电影剧情。唉！都怪我看了太多的卫视西片台和 HBO 的 Behind The Scene 这类介绍电影制作幕后花絮的节目。...... 奇怪！我只是个程序员，干嘛对电影制作有如此高的职业敏感度，难道是下意识在告诉我应该转行当导演？<br /><br />        你也开始培养职业敏感度吧！不过 ...... 可别走火入魔喔！<img src ="http://www.blogjava.net/rosial/aggbug/57486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:22 <a href="http://www.blogjava.net/rosial/articles/57486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 励志篇 - 如何进入程序设计的领域</title><link>http://www.blogjava.net/rosial/articles/57481.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57481.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57481.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57481.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57481.html</trackback:ping><description><![CDATA[
		<p>写程序,好好玩，缺失。<br /><br /></p>
		<p style="LINE-HEIGHT: 150%">
				<font face="宋体">
						<span style="FONT-SIZE: 9pt; COLOR: #1a1ae6; LINE-HEIGHT: 150%">本文摘自<span lang="EN-US">Access</span>中国网站版主李啸林的转帖与补充：</span>
						<span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">
						</span>
						<span lang="EN-US">
								<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">
						<font face="宋体">这一阵子，软件、网络大红，许多人对程序设计开始感兴趣，我收到好一些<span lang="EN-US"> Sleepless in Java</span>专栏读者的来信，不少读者共同的问题是：如何进入程序设计的领域？所以我选这 个主题当作<span lang="EN-US"> Sleepless in Java </span>专栏「复刊」的第一篇文章。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>写程序是很有趣的事，可以把自己的想法付诸实行。写程序的工具很简单，只要有一部<span lang="EN-US">PC</span>，适当的开发环境，就可以上工了。这样有限的工具却可以创造无限的可能，这也正是程序设计迷人的地方。只要你能力够，你可以将你脑海中的创意写成程序，变成一套软件。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>培养程序能力，不是一蹴可及的，下面提供我的一些建议，希望对有志进入程序设计领域的你有所帮助。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>
								<strong>培养兴趣</strong>
						</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>把程序设计当成兴趣可以让你学得更快乐，学习效果自然会更好。在我到一个单位面试时，主管看了我的履历之后问我：「你怎么有这么多时间学会这么多东西、做这么多事？」我的回答是：「把工作、学习、和娱乐结合在一起，时间就会是别人的三倍。」</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>我承认我很幸运，可以把程序设计当作赚钱的工作，学习的题材，以及茶余饭后的休闲活动。不是每个人都像我这般幸运，但是我相信至少大家都可以把它当成兴趣。相信我，调整你的心境，把它当成是兴趣，而非苦差事，你非发现你的「程序功力」与日俱增。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>
								<strong>慎选程序语言</strong>
						</font>
						<font face="宋体">
								<span lang="EN-US">
										<strong>
												<br />
												<br />
										</strong>
								</span>慎选程序语言很重要，一开始就学太难的程序语言很容易让你遭遇到挫折而放弃。你可以挑比较容易且有趣的语言下手，建议您可以从下面的语言中择一：</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />VB</span>：简单，好用，书籍多。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />REBOL：使用上非常简单自然，各个平台都支持，然后尚未流行，可以到www.rebol.com 上下载，也可以在此处找一些学习资料。<br />Java</span>：比<span lang="EN-US">VB</span>稍难，比<span lang="EN-US">C/C++</span>简单，书籍多，用途非常广，相当有前途。可以当作学习<span lang="EN-US">C++</span>的跳板。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />Python</span>：简单，好用，各个平台都支持（包括<span lang="EN-US">Windows</span>，<span lang="EN-US">Linux</span>，<span lang="EN-US">MacOS</span>，<span lang="EN-US">BeOS</span>，<span lang="EN-US">...</span>）。国外很红，国内较少人用。原文书不少，但中文书目前只有一本（欧莱礼出版）。我预期<span lang="EN-US"> Python </span>会是下一个热门的程序语言。</font>
						<font face="宋体">
								<span lang="EN-US">
										<a href="http://www.python.org">www.python.org</a>
										<br />
										<br />
								</span>这三个语言只是我给各位的建议，你也可以多听听别人的意见。在选定一个程序语言之后，就要执着，不可以很快放弃，又改学另一个程序语言，否则永远都只懂皮毛。有句谚语是这么说的：「<span lang="EN-US">A jack of all trades is master of none</span>」。如果你号称会<span lang="EN-US">C++</span>、<span lang="EN-US">Java</span>、…等十种程序语言，只不过每种程序语言都停留在<span lang="EN-US">Say Hello</span>的阶段，相信面谈主管很快就会 对你<span lang="EN-US"> Say Goodbye</span>。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>当你学精某程序语言，然后想再学另一个程序语言，你会发现有了前一个程序语言札实的根基，学任何新的程序语言都很快。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>
								<strong>使用适当的开发工具</strong>
						</font>
						<font face="宋体">
								<span lang="EN-US">
										<strong>
												<br />
										</strong>
										<br />
								</span>现在<span lang="EN-US">RAD</span>工具软件盛行，<span lang="EN-US">Visual Basic</span>、<span lang="EN-US">Delphi</span>、<span lang="EN-US">JBuilder</span>、<span lang="EN-US">VisualAge</span>、<span lang="EN-US">VisualCafe</span>都是。有了<span lang="EN-US">RAD</span>工具，只要「拉一拉，选一选」程序就完成一半了。许多硬底子的程序员颇不以为然，认为初学者使用<span lang="EN-US">RAD</span>工具不是好习惯，不过我倒不这么认为。我认为<span lang="EN-US">RAD</span>工具可以降低初学者学习的门槛，提高兴趣。只是，在你学会「拉一拉，选一选」的简单步骤之后，应该要找机会精进自己，弄懂内部的机制，不然不仅会有一种不踏实的感觉，甚至有许多程序会写不出来。我再强调一次：<span lang="EN-US">RAD</span>可以当初学者入门的工具，但小心不要使它变成让你停滞不前的借口。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>另外也要学会使用开发工具所附的诸多功能（特别是除错功能）。许多人买了昂贵的<span lang="EN-US"> Enterprise </span>版开发工具，却只用到<span lang="EN-US">copy-paste</span>功能，那么这套开发工具和<span lang="EN-US"> Windows </span>所附的 记事本就没有两样了。建议您开始使用一套新的开发工具前先花些时间把<span lang="EN-US"> User Guide </span>翻一翻。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>现在许多开发工具都有免费版本可以下载，初学者不妨多多利用。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>
								<strong>多读好书，少上课</strong>
						</font>
						<font face="宋体">
								<span lang="EN-US">
										<strong>
												<br />
												<br />
										</strong>
								</span>大量阅读好书，是精进自己的不二法门。在这种快餐时代，许多人没耐心读书，反而喜欢到处上课，所以现在到处都是计算机班。如果遇到厉害的好老师，当然上过他（或她）的课会收获很大，只是目前好老师的比例实在不高（虽然我自己也在开<span lang="EN-US"> Java/Enterprise Java/Java Swing </span>的课，但我还是得这么说）。我曾在网络上看到有人说：「没听过补习班教出什么程序高手」，这倒也有几分真实性。不过一方面要归咎老师之外，一方面也要归咎学生，因为我发现通常上课的学生会在家里读书和写程序练习的比例不高。 </font>
						<span lang="EN-US">
								<br />
								<br />
						</span>
						<font face="宋体">相较于上课动辄花费上万元的高代价，买书只需要区区几百上千，划算多了，更何况书上的内容又比上课来得多且详细。不过「买书容易，看书难」。怕自己偷懒的话，找志同道合的朋友组织「读书会」，彼此加油打气，还可以互相切磋。最好是像我前面提到的：把它变成兴趣。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>
								<strong>加强英文阅读能力</strong>
						</font>
						<font face="宋体">
								<span lang="EN-US">
										<strong>
												<br />
												<br />
										</strong>
								</span>加强英文和崇洋无关，而是有它实际的价值。许多信息都是要直接看英文的资料，因为没有中文版可看。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>「可是我的英文很烂！」</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>这不是理由。没人生下来就能阅读英文，都是一点一点累积起阅读能力的。给自己一个机会，找一本单字文法都比较简单、且页数又少的书籍下手，很快地，你会发现技术书籍的单字就是哪几个在重复出现，阅读这样的书一点都不难。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>请注意：原文书的写作风格也有相当大的差异，有的书的确是不好读。所以，如果你刚开始要尝试阅读原文书，不要挑到像<span lang="EN-US"> Bjarne Stroustrup </span>所写的<span lang="EN-US"> The C++ Programming Language </span>这类难懂的书……尽管它是经典。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>
								<strong>问人之前，先问自己</strong>
						</font>
						<font face="宋体">
								<span lang="EN-US">
										<strong>
												<br />
												<br />
										</strong>
								</span>遇到问题，可以到国内外的程序设计相关讨论区去请教别人，如果态度谦逊，且问题叙述清楚，相信许多有经验的前辈会很乐于参与讨论。不过，凡是遇到问题就发问，这不是好事，因为你会因此越来越依赖别人，而失去了自我解决问题的能力。自己应该尝试着查书、写程序测试、甚至阅读原始码，来找出答案。如此一来，真的没办法而请教别人时，也才能 比较深入地讨论。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>
								<strong>多写程序</strong>
						</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>学程序设计不可以只看书，将随书光盘的程序执行一次，就认为自己已经学会了。应该开始写一些程序，且由小到大，由简单到复杂。找一些有趣的题目（比方说：计算器，踩地雷，小画家，俄罗斯方块），可以提升写程序的动力。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>我看到许多学生大一的程序作业都是<span lang="EN-US">copy</span>同学的，失去了练习的机会。等到二年级之后，想开始写程序，却写不出来了。初学程序设计的阶段，应该给自己多一些机会写程序。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>
								<strong>向上延伸，向下延伸，向旁延伸</strong>
						</font>
						<font face="宋体">
								<span lang="EN-US">
										<strong>
												<br />
												<br />
										</strong>
								</span>当你发现你已经可以掌握此程序语言之后，你可以选择：</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>向上延伸：学习对象导向分析设计、<span lang="EN-US">Design Patterns</span>、以及软件工程。让自己具有做大型计划的能力。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>向下深入：深入了解内部底层的机制，例如操作系统（甚至硬件）内部。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>向旁延伸：学习不同的<span lang="EN-US">API</span>，例如：多媒体、数据库、企业运算…。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>另外，数据结构、算法等基础也很重要。</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
										<br />
								</span>
								<strong>结论</strong>
						</font>
						<font face="宋体">
								<span lang="EN-US">
										<br />
								</span>一分耕耘，一分收获，用对方法，持之以恒。每半年检阅自己这段期间以来的进步，相信你也会很高兴地说「我做到了」！ <span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">
						<font face="宋体">--------------------------------------------------------------------------------------------<o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%">
						<font face="宋体">李啸林的补充：<span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ansi-language: EN-US; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">   </span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ansi-language: EN-US; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">蔡先生是位编程高手。他写的这篇文章我已经看过许多遍。每一次都有新的启发。在这里我有一点补充，就是关于英语，也许在十年前学计算机不学英语是不可思议的事情，但是现在不同了，随着中国计算机书籍市场的不断扩大，几乎所有著名的计算机书都有了中译本，而且同步的速度也在不断加快。除非你想成为和蔡先生一样的顶尖高手（这是一定要会英语），一般的编程应用可以不用学英语。与其把大量时间花费在拗口难懂的英语学习上，还不如踏踏实实的编几个程序（当然，如果你喜欢英语，又当别论）。我这里说点题外话，其实搞普及性，全民英语教育，是中国教育最大失误之一。</span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 14:12 <a href="http://www.blogjava.net/rosial/articles/57481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 励志篇 - 学习，是一条漫长的道路</title><link>http://www.blogjava.net/rosial/articles/57473.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 05:44:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57473.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57473.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57473.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57473.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="left">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">    我在</span>
								<span lang="EN-US">Java 1.0</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正式问世前就开始学习</span>
								<span lang="EN-US">Java</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这么多年过去了，到现在我的</span>
								<span lang="EN-US">Java</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">学习历程还没有停过。我阅读原文书，研究原始码，撰写程序，自认为走得扎实，不奢望一步登天。像我这样老式的学习方式，显然和现在的快餐主义背道而驰。从许多读者的来信和学生的反映中，我发现大多数的人对于</span>
								<span lang="EN-US">Java</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的学习历程都差不多是：因为公司需要使用</span>
								<span lang="EN-US">Java</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来进行服务器的计画，所以急急忙忙地学习</span>
								<span lang="EN-US">Java</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语言，然后就开始使用</span>
								<span lang="EN-US">J2EE</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
								<span lang="EN-US">API</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，开始写起程序来了。如此急就章的学习方式，程序员基础能力根本就不够，对于对象导向精髓不能掌握，对于</span>
								<span lang="EN-US">Java</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语言内部的运作机制毫无所悉，对</span>
								<span lang="EN-US">API</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的整体连贯性懵懵懂懂。<br /></span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<br />   当然，我们也不好因此责怪程序员，毕竟软件技术变动得太快。公司不可能给程序员足够的训练之后才开始做计画。程序员一下子被指派使用</span>
								<span lang="EN-US">A</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术，还没弄懂</span>
								<span lang="EN-US">A</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术是怎么回事，又被指派使用</span>
								<span lang="EN-US">B</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术，而且都是缝缝补补的方式边学边用，每次都像是全新的开始，遑论技术能量的累积。</span>
								<span lang="EN-US">
										<br />
								</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<br />  我很庆幸的是，我不太有这样的困扰。因为我是资讯工程系出身（而且我大学时上课一向很认真），所以理论基础稳固，学习新技术对我来说不是难事。我就读大学时，周遭许多同学都瞧不起数据结构、程序语言、操作系统这些所谓「学院派」的课程，以为这些课程一点都不实用。他们认为到了外面公司，这些信息科系所学的一切都派不上用场，「只要会</span>
								<span lang="EN-US">Visual Basic</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和数据库就够了」。这种偏差的心态，恐怕会使得他们在知识经济时代吃足了苦头。</span>
								<span lang="EN-US">
										<br />
								</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<br />  另外还有一派同学很瞧不起程序设计工作，他们告诉我，像我这样会写程序的人，未来进了社会「还不是被他们这些走管理的人踩在脚下」。所以，他们很轻忽理工课程的学习，甚至还有人相当热衷「成功学」，认为这是迈向成功的快捷方式，却因此把学校的课业弃之不顾。我不敢相信有人竟然如此地本末倒置。</span>
								<span lang="EN-US">
										<br />
								</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<br />  前一类的人太过于短视近利，后一类的人太过于好高骛远。我一直很不能理解这些人的想法为什么会这样，或许是因为社会环境的风气使然。我很庆幸我到目前还没被社会的大染缸给玷污了（最好这辈子都不要）。我不认为我的学习方式是一种典范，但是一路走来，倒也颇有进展。许多读者来信问我的学习历程，虽然我个人的学习方式不见得适用于每个人，但或许还有一些参考价值（特别是对于那些有志进入信息行业的年轻学子），我想透过本文简短地叙述一下。</span>
								<span lang="EN-US">
										<br />
								</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<br />   我一向是采用先深后广（也称为</span>
								<span lang="EN-US">Bottom-Up</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
								<span lang="EN-US">Deep-First</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）的学习方式。比方说，当我在学</span>
								<span lang="EN-US">A</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术的时候，学到一半发现需要</span>
								<span lang="EN-US">B</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术的基础，我会到书局找出一两本</span>
								<span lang="EN-US">B</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术的书，然后把</span>
								<span lang="EN-US">A</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">先搁着，开始看起</span>
								<span lang="EN-US">B</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术的书。甚至，我在技术书籍上看到不太熟悉的英文句构时，我会找出一本英文文法书详细读过。这种先深后广的学习方式，适合学生时代全面地自我能力提升，但不适合业界人士。试想，老板要你开发的</span>
								<span lang="EN-US">ERP</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统已经延迟了，你怎有空研究</span>
								<span lang="EN-US">J2EE</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原文书中的英文文法。先深后广的好处是，学习很扎实；缺点是有时候会偏离主题太多。有一次我发现我原本是要学某软件技术，几次「先深后广」下来，我居然看起老子的道德经了。<br /></span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<br />  在技术上，我一直都是一个喜新厌旧的人，很少有软件技术能让我持续研究半年以上，我几乎每隔几个月就要换一次领域。</span>
								<span lang="EN-US">Java </span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">能让我持续这么久，也正是因为</span>
								<span lang="EN-US">Java</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的领域广。透过</span>
								<span lang="EN-US">Java</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，我的技术视野变开阔了。这些年来，我换过的</span>
								<span lang="EN-US"> Java </span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相关领域包括了：虚拟机器、数据库、企业运算、多媒体、</span>
								<span lang="EN-US">2D/3D</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图学、网络</span>
								<span lang="EN-US">.</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">…</span>
								<span lang="EN-US">..</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
								<span lang="EN-US">
										<br />
								</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<br />  我的学习完全是兴趣导向的，所以压力并不大。因为有兴趣，所以我会很想充分理解一切细节。又因为理解，所以许多原本片片断断的知识都可以渐渐互相融会贯通，累积技术能量，理论和实务之间的藩篱被打破了，学习效率倍增。</span>
								<span lang="EN-US">
										<br />
								</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<br />  我多年来的学习触觉很敏锐，我常常会抢先一步学好有前瞻性的技术。比方说，</span>
								<span lang="EN-US">Java</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还在</span>
								<span lang="EN-US">beta</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时、</span>
								<span lang="EN-US">UML</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还在</span>
								<span lang="EN-US">0.8</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时、</span>
								<span lang="EN-US">XML</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还在</span>
								<span lang="EN-US">draft</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，我都已经透过网络下载技术文件回来每天抱着猛读了。而在</span>
								<span lang="EN-US">Java</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
								<span lang="EN-US">UML</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
								<span lang="EN-US">XML</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当红之后，我已经差不多把这些技术都摸熟了。</span>
								<span lang="EN-US">
										<br />
								</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<br />  至于该学什么技术，我的判断方式是以技术的优劣来决定。优秀而有独到之处的技术是我的最爱，虽然这类的技术不见得会在市场上胜出，但学习这些技术所得到的启发，对于技术能量的累积与能力的提升会有相当大的助益。至于技术差，但市场需求甚殷者，我还是懒得碰。（好吧！我承认我曾因为市场需求的缘故而学过</span>
								<span lang="EN-US">MFC</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。越清楚</span>
								<span lang="EN-US">MFC</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的技术细节，越是讨厌它，这真是个不堪回首的经验。）</span>
								<span lang="EN-US">
										<br />
								</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<br />  我通常只看英文技术资料，毕竟大部分第一手的技术信息都是以英文来传播。所以我很早就开始阅读英文技术资料。读英文技术资料的好处是，就算没有学到书中的专业知识，至少也累积培养了英文阅读能力，我一直都是抱着这样的态度。一开始是正襟危坐的看英文技术书籍，字典、翻译机随侍在侧；几年下来，现在是躺着看、趴着看、很随性地看英文技术书籍，因为看英文技术书籍变成一种习惯了。现在，我可以用很快的速度吸收英文技术书籍的知识（有人叫我「吃书的机器」，我把这称号当作是一种恭维）。<br /></span>
								<span lang="EN-US">
										<span style="mso-spacerun: yes">   </span>
								</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="justify">
				<font size="4">
						<font color="#000000">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">  近年来，我花在写程序的时间不多，因为时间对我来说很宝贵，而写程序很浪费时间。对初学者来说，大量地写程序是必要的，但过了某个阶段之后，写程序所带来的技术能力成长已经到了极限，还不如多花一点时间看书，学新技术和新观念。</span>
								<span lang="EN-US">
										<span style="mso-spacerun: yes">  </span>
								</span>
						</font>
				</font>
		</p>
		<p align="justify">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<font color="#000000" size="4">  我从国小时期开始学习写程序，迄今已有近十八年的时间；采取上述的方式密集学习，迄今也有近十年的光景。迩来数年，我接触的领域越来越广，而且学习速度正在加快，我认为是以前那些努力植下的根苗开始成长了。看看现在的我，或许你会觉得羡慕，但回顾这段学习的岁月，何尝不是一条漫长的道路。</font>
				</span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 13:44 <a href="http://www.blogjava.net/rosial/articles/57473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- REBOL篇 - REBOL/Plug-in</title><link>http://www.blogjava.net/rosial/articles/57471.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57471.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57471.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57471.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57471.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57471.html</trackback:ping><description><![CDATA[   
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">      为了让网页浏览器（</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Web browser</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">）上能支持各式各样的程序，网页浏览器都会支持</span><span lang="EN-US" style="mso-bidi-font-weight: bold">plug-in</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">的接口（</span><span lang="EN-US" style="mso-bidi-font-weight: bold">interface</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">）。厂商只要遵照这个接口，写好</span><span lang="EN-US" style="mso-bidi-font-weight: bold">plug-in</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">软件，就可以如同将插头插入（</span><span lang="EN-US" style="mso-bidi-font-weight: bold">plug in</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">）插座一般，将其集成到浏览器中，如此一来，厂商自己制订的数据格式，就可以被浏览器内的</span><span lang="EN-US" style="mso-bidi-font-weight: bold">plug-in</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">软件所执行。</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">      根据最近的统计显示，最常见的浏览器</span><span lang="EN-US" style="mso-bidi-font-weight: bold">plug-in</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">是</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Macromedia</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">公司的</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Flash Player</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">（</span><span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'"><a href="http://www.macromedia.com/"><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">http://www.macromedia.com/</span></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">），安装率高达约</span><span lang="EN-US" style="mso-bidi-font-weight: bold">98%</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">以上，所以</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Flash</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">的</span><span lang="EN-US" style="mso-bidi-font-weight: bold">SWF</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">格式几乎已经成为多媒体</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Web client</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">的业界（</span><span lang="EN-US" style="mso-bidi-font-weight: bold">de facto</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">）标准。另外，</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Java Plug-In</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">【注】也算热门，约有七八成的安装率。</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p></o:p></span></font></p><p class="SIJ03" style="MARGIN: 8.4pt 0cm; mso-para-margin-top: .7gd; mso-para-margin-bottom: .7gd; mso-para-margin-right: 0cm; mso-para-margin-left: 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【注】在</span><span lang="EN-US">Java Plug-In</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">内执行的</span><span lang="EN-US">Java</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">程序，称为</span><span lang="EN-US">Java Applet</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">。对于</span><span lang="EN-US">Java</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">感兴趣者，可以造访</span><span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'; mso-fareast-font-family: 宋体"><a href="http://java.sun.com/"><span style="COLOR: windowtext; TEXT-DECORATION: none; mso-bidi-font-weight: bold; text-underline: none">http://java.sun.com/</span></a></span></font></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">      在</span><?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="3" year="2004"><span lang="EN-US" style="mso-bidi-font-weight: bold">2004/03/01</span></st1:chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">，</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">公开了</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/Plug-In alpha</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">版【注</span><span lang="EN-US" style="mso-bidi-font-weight: bold">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">】。让</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">也能像</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Flash SWF</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">或</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Java Applet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">一样，被嵌入（</span><span lang="EN-US" style="mso-bidi-font-weight: bold">embed</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">）到网页中。嵌入到网页的</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">，可以被称为</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">【注</span><span lang="EN-US" style="mso-bidi-font-weight: bold">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">】。目前的</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/Plugin alpha</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">是以</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/View 1.3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">版为基础，所以你会发现，在</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/Plugin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">上面执行的</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">程序，比起目前在</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/View 1.2.x</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">上执行的程序，更美观。</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p></o:p></span></font></p><p class="SIJ03" style="MARGIN: 9.6pt 0cm; mso-para-margin-top: .8gd; mso-para-margin-bottom: .8gd; mso-para-margin-right: 0cm; mso-para-margin-left: 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【注</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">】所谓的</span><span lang="EN-US">alpha</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">版，指的是非常早期的雏形版本，可能相当不稳定，所以使用上有风险。</span><span lang="EN-US">REBOL Technologies</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">公司提醒用户，使用此</span><span lang="EN-US">alpha</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">版必须“风险自负（</span><span lang="EN-US">at your own risk</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">）”。通常，</span><span lang="EN-US">alpha</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">版的软件不会发布给大众，而是在</span><span lang="EN-US">alpha</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">之后的</span><span lang="EN-US">beta</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">版才发布给大众，</span><span lang="EN-US">beta</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">版的质量通常已经很稳定。</span></font></font></p><p class="SIJ03" style="MARGIN: 0cm 0cm 12pt"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【注</span><span lang="EN-US">2</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">】英文单字字尾加上</span><span lang="EN-US">let</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">，表示“小”的意思。</span></font></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">      目前，在动画制作上，</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">远比不上</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Flash</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">方便，因为</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">没有动画制作辅助工具，我认为利用</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">取代</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Flash</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">，短期内并不恰当。但是对于程序员来说，</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">应该比</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Flash</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">好用，毕竟</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Flash</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">是美工导向，而</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">是程序导向。如果拿</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">和</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Java Applet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">比较，</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">在开发上比</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Java Applet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">更方便，</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/Plugin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">的启动时间比</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Java Plug-In</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">快，且</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">比</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Java Applet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">体积小许多倍，所以</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">相当适合取代</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Java Applet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">。虽然</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/Plug-In</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">的安装率是</span><span lang="EN-US" style="mso-bidi-font-weight: bold">0%</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">（哎哟！毕竟是新技术嘛！），但是可以随选下载（</span><span lang="EN-US" style="mso-bidi-font-weight: bold">download on demand</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">），而且只有数百</span><span lang="EN-US" style="mso-bidi-font-weight: bold">KB</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">，下载时间超短。</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p></o:p></span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">      目前，</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL Technologies</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">公司仅提供</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Windows/IE</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">版的</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/Plugin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">。其它操作系统与浏览器均未支持。如果你是</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Windows/IE</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">的用户，请到下面的网址：</span><span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'"><a href="http://www.rebol.net/plugin/tests/test.html"><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">http://www.rebol.net/plugin/tests/test.html</span></a></span><span lang="EN-US" style="mso-bidi-font-weight: bold"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">即可随选下载安装</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/Plugin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">【注】。在图</span><span lang="EN-US" style="mso-bidi-font-weight: bold">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">的对话框中，按下【是】，立刻开始下载与安装。</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p></o:p></span></font></p><span lang="EN-US" style="mso-fareast-font-family: PMingLiU; mso-bidi-font-weight: bold; mso-fareast-language: ZH-TW"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><p class="SIJ04" style="MARGIN: 12pt 0cm 0pt" align="center"><v:shape id="_x0000_i1025" style="WIDTH: 300pt; HEIGHT: 204.75pt" type="#_x0000_t75"><v:imagedata o:title="REBOL_09_REBOL_Plug-in_图1" src="file:///D:\DOCUME~1\刘伟\LOCALS~1\Temp\msohtml1\01\clip_image001.png"><font size="3"><img src="http://act.it.sohu.com/book/images/upload/5-3-image032.jpg" align="baseline" border="0" /></font></v:imagedata></v:shape></p><o:p></o:p></span><p class="SIJ04" style="MARGIN: 3.6pt 0cm 0pt; mso-para-margin-top: .3gd" align="center"><font size="2"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">图</span><span lang="EN-US">1<span style="mso-spacerun: yes">  </span></span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">下载</span><span lang="EN-US">REBOL/Plugin</span></font></p><p class="SIJ03" style="MARGIN: 12pt 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【注】</span><span lang="EN-US">REBOL/Plugin</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">是</span><span lang="EN-US">ActiveX</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">程序，所以你必须先确定，你的</span><span lang="EN-US">IE</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">设定允许执行</span><span lang="EN-US">ActiveX</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">。从菜单中选择【工具】</span><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">à</span></span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【</span><span lang="EN-US">Internet</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">选项】</span><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">à</span></span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【安全】，如果因特网（</span><span lang="EN-US">Internet</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">）的安全等级是【高安全性】（</span><span lang="EN-US">high</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">）的话，请调低一个等级到【中安全性】（</span><span lang="EN-US">medium</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">）。</span></font></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US" style="mso-bidi-font-weight: bold">            REBOL/Plugin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">安装完毕之后，你可以看到网页中间有一个如图</span><span lang="EN-US" style="mso-bidi-font-weight: bold">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">的画面，这正是一个</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">。以后逛到任何内嵌</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">的网页，</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/Plugin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">就会自动启动。</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p></o:p></span></font></p><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: PMingLiU; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-bidi-font-weight: bold; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA"><br style="PAGE-BREAK-BEFORE: always" clear="all" /></span><span lang="EN-US" style="mso-fareast-font-family: PMingLiU; mso-bidi-font-weight: bold; mso-fareast-language: ZH-TW"><p class="SIJ04" style="MARGIN: 6pt 0cm 0pt" align="center"><v:shape id="_x0000_i1026" style="WIDTH: 240.75pt; HEIGHT: 245.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///D:\DOCUME~1\刘伟\LOCALS~1\Temp\msohtml1\01\clip_image003.png"><font size="3"><img src="http://act.it.sohu.com/book/images/upload/5-3-image033.jpg" align="baseline" border="0" /></font></v:imagedata></v:shape></p><o:p></o:p></span><p class="SIJ04" style="MARGIN: 6pt 0cm 0pt" align="center"><font size="2"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">图</span><span lang="EN-US">2<span style="mso-spacerun: yes">  </span>REBOL/Plugin</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">的测试程序</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">      你可以在</span><span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'"><a href="http://www.rebol.net/plugin/demos/index.html"><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">http://www.rebol.net/plugin/demos/index.html</span></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">找到更多有趣的</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">。</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p></o:p></span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">      因为</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">本身就是源码，所以用户可以轻易地看到</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">源码内容。</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL Technologies</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">公司预计未来会发行</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL/Plugin Developer’s Kit</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">（开发人员套件），利用此工具，可以将</span><span lang="EN-US" style="mso-bidi-font-weight: bold">Reblet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">加密，让</span><span lang="EN-US" style="mso-bidi-font-weight: bold">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">源码比较不容易流出【注】。</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p></o:p></span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p><font size="3"> </font></o:p></span></p><p class="SIJ03" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'"><font style="BACKGROUND-COLOR: #cccccc" size="3">【注】我还是要提醒你，这只能增加难度，无法保证源码一定不会被他人取得。</font></span></p><p class="a" style="MARGIN: 0cm 5.65pt 0pt 0cm"><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 10.0pt"><o:p> </o:p></span></p><p class="a" style="MARGIN: 8.5pt 5.65pt 8.5pt 0cm; TEXT-INDENT: 20.4pt" align="right"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">发表日期：</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 10.0pt"> Mar. 28, 2004<o:p></o:p></span></p><img src ="http://www.blogjava.net/rosial/aggbug/57471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 13:30 <a href="http://www.blogjava.net/rosial/articles/57471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- REBOL篇 - REBOL/SDK</title><link>http://www.blogjava.net/rosial/articles/57470.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 05:29:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57470.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57470.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57470.html</trackback:ping><description><![CDATA[    
<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      对于专业的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序员，</span><span lang="EN-US">REBOL Technologies</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">公司推出了</span><span lang="EN-US">REBOL/SDK</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，可以解决原本</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一些小麻烦：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; tab-stops: list 45.25pt; mso-list: l0 level1 lfo1"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">           </span></span></span><font size="3"><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因为是解释型语言，所以源码就是执行文件，任何人取得</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的执行文件就等于取得</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的源码，完全不设防。如果你担心你的程序被人窥视，你需要利用</span><span lang="EN-US">REBOL/SDK</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来将程序加密处理。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; tab-stops: list 45.25pt; mso-list: l0 level1 lfo1"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">           </span></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当你把</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序交给别人时，别人可能因为没有</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器而无法执行。你可以利用</span><span lang="EN-US">REBOL/SDK</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来将</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器和</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序代码结合成一个执行文件，以方便执行。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; tab-stops: list 45.25pt; mso-list: l0 level1 lfo1"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">           </span></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序可能是由许多文件所组成，比较不方便传送给别人。你可以利用</span><span lang="EN-US">REBOL/SDK</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来将这些文件全都整合成一个文件。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">REBOL/SDK</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是商业软件，需要向</span><span lang="EN-US">REBOL Technologies</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">公司购买，请参考网页：</span><span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'"><a href="http://www.rebol.com/purchase.html"><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">http://www.rebol.com/purchase.html</span></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">REBOL/SDK</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的内部组成，如图</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所示。</span></font></p><p class="SIJ022" style="MARGIN: 12pt 0cm 0pt"><span lang="EN-US"><font face="Verdana" size="5">Kernel</font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">            REBOL/SDK</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US">Kernel</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内包括了三个精简版的解释器，分别是：</span><span lang="EN-US">/Base</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">/Pro</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">/Face</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（另有两个非精简的解释器：</span><span lang="EN-US">/Command</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与</span><span lang="EN-US">/CommandView</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。其中</span><span lang="EN-US">/Base</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是最简单的版本，比</span><span lang="EN-US">REBOL/Core</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">更小。而</span><span lang="EN-US">/Pro</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比</span><span lang="EN-US">/Base</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多了一些功能，</span><span lang="EN-US">/Face</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也比</span><span lang="EN-US">/Base</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多了一些功能，如图</span><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所示。</span></font></p><span lang="EN-US"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 0cm; TEXT-ALIGN: center" align="center"><v:shape id="_x0000_i1025" style="WIDTH: 252pt; HEIGHT: 146.25pt" type="#_x0000_t75"><v:imagedata cropbottom="7802f" o:title="" src="file:///D:\DOCUME~1\刘伟\LOCALS~1\Temp\msohtml1\01\clip_image001.emz" croptop="7022f"><font size="3"><img src="http://act.it.sohu.com/book/images/upload/5-3-image028.gif" align="baseline" border="0" /></font></v:imagedata></v:shape></p></span><p class="SIJ04" style="MARGIN: 6pt 0cm 0pt" align="center"><font size="2"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">图</span><span lang="EN-US" style="mso-bidi-font-weight: bold">1<span style="mso-spacerun: yes">  </span></span><span lang="EN-US">REBOL/SDK</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">的内部组成</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p></o:p></span></font></p><span lang="EN-US"><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 0cm; TEXT-ALIGN: center" align="center"><v:shape id="_x0000_i1026" style="WIDTH: 234pt; HEIGHT: 84pt" type="#_x0000_t75"><v:imagedata cropbottom="18465f" o:title="" src="file:///D:\DOCUME~1\刘伟\LOCALS~1\Temp\msohtml1\01\clip_image003.emz" croptop="17944f" cropright="4681f"><font size="2"><img src="http://act.it.sohu.com/book/images/upload/5-3-image029.gif" align="baseline" border="0" /></font></v:imagedata></v:shape></p></span><p class="SIJ04" style="MARGIN: 6pt 0cm 0pt" align="center"><font size="2"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">图</span><span lang="EN-US">2<span style="mso-spacerun: yes">  </span></span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">三个精简版</span><span lang="EN-US">Kernel</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">的关系</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">            REBOL/Core</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有太多东西，许多程序都用不到（例如辅助说明文件，各种通信协议），如果将这些用不到的功能通通包进执行文件，会导致执行文件体积太大。所以</span><span lang="EN-US">REBOL/SDK</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设计出此三个精简版的解释器，并将许多原本</span><span lang="EN-US">REBOL/Core</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span><span lang="EN-US">REBOL/View</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内建的功能和通讯协议以源码的方式公开（图</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span><span lang="EN-US">Source Code Module</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），需要这些功能或通信协议的话，将其含入（</span><span lang="EN-US">include</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）即可。</span></font></p><p class="SIJ022" style="MARGIN: 12pt 0cm 0pt"><span lang="EN-US"><font face="Verdana" size="5">Encapsulation</font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">           REBOL/SDK</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供许多工具，可以将</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本和</span><span lang="EN-US">REBOL Kernel</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包在一起，成为一个执行文件。这些工具统称为</span><span lang="EN-US">EnCap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，是</span><span lang="EN-US">Encapsulation</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（封装）的意思。</span><span lang="EN-US">EnCap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系列的工具命名方式一律以</span><span lang="EN-US">En</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开头，包括了：</span><span lang="EN-US">EnBase</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">EnPro</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">EnFace</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">EnCmd</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">EnCmdView</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，分别用来包装</span><span lang="EN-US">/Base</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">/Pro</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">/Face</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">/Command</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">/CommandView</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。包装的方式如图</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所示。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">     从图</span><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，我们可以发现，</span><span lang="EN-US">EnCap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序，会将主要脚本（</span><span lang="EN-US">Main Script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）、相关的文件（影像、声音或其它数据），连同</span><span lang="EN-US">REBOL/SDK</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一个</span><span lang="EN-US">Kernal</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及被含入的源码（</span><span lang="EN-US">included source</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），包在一起，成为一个执行文件。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 0cm; TEXT-ALIGN: center" align="center"><span lang="EN-US"><v:shape id="_x0000_i1027" style="WIDTH: 243pt; HEIGHT: 162pt" type="#_x0000_t75"><v:imagedata cropbottom="2697f" o:title="" src="file:///D:\DOCUME~1\刘伟\LOCALS~1\Temp\msohtml1\01\clip_image005.emz" croptop="4585f"><font size="3"><img src="http://act.it.sohu.com/book/images/upload/5-3-image030.gif" align="baseline" border="0" /></font></v:imagedata></v:shape></span></p><p class="SIJ04" style="MARGIN: 6pt 0cm 0pt"><font size="2"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">图</span><span lang="EN-US">3<span style="mso-spacerun: yes">  </span>EnCap</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">将程序执行时所需要的一切通通包进一个执行文件中</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">     比较特别的是，</span><span lang="EN-US">EnCap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会对这些包装内容进行压缩和加密<span style="mso-bidi-font-weight: bold">【注】</span>，所以也会把</span><span lang="EN-US">key</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和解密算法包进执行文件中。执行此程序时，会先将这些脚本和数据解密、解压缩、然后才执行。</span></font></p><p class="MsoToc1" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font size="3"> </font></o:p></span></p><p class="SIJ03" style="MARGIN: 0cm 0cm 6pt; mso-para-margin-top: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-right: 0cm; mso-para-margin-left: 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【注】还是要提醒你，这种加密其实效果不大。只能防一般人，不能防专家。千万别认为经由</span><span lang="EN-US">EnCap</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">处理过的程序可以绝对防止他人取得源码。</span></font></font></p><p class="a" style="MARGIN: 0cm 5.65pt 0pt 0cm"><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 10.0pt"><o:p> </o:p></span></p><p class="a" style="MARGIN: 8.5pt 5.65pt 8.5pt 0cm; TEXT-INDENT: 20.4pt" align="right"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">发表日期：</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 10.0pt"> Mar. 21, 2004<o:p></o:p></span></p><img src ="http://www.blogjava.net/rosial/aggbug/57470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 13:29 <a href="http://www.blogjava.net/rosial/articles/57470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- REBOL篇 - REBOL/IOS</title><link>http://www.blogjava.net/rosial/articles/57469.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57469.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57469.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57469.html</trackback:ping><description><![CDATA[    
<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">          REBOL Desktop</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，是通过</span><span lang="EN-US">Web server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序传回到</span><span lang="EN-US">client</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">端，在</span><span lang="EN-US">client</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">端执行</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序。有些时候，我们会希望某些</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序可以在</span><span lang="EN-US">server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上执行（例如处理数据）【注】，某些程序可以在</span><span lang="EN-US">client</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">端执行（例如画出图表）。</span><span lang="EN-US">REBOL/IOS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正是这样的架构。</span></font></p><p class="SIJ03" style="MARGIN: 12pt 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【注】利用</span><span lang="EN-US">CGI</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">或</span><span lang="EN-US">Fast-CGI</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">，也可以让</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">程序在</span><span lang="EN-US">Server</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">上执行。</span></font></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">          REBOL/IOS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是架构在</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术上的一个分布式系统（</span><span lang="EN-US">distributed system</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），</span><span lang="EN-US">IOS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span><span lang="EN-US">Internet Operating System</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的缩写。</span><span lang="EN-US">IOS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是商业软件，必须向</span><span lang="EN-US">REBOL Technologies</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">公司购买（可以申请试用），请参考网址：</span><span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'"><a href="http://www.rebol.com/express-form.html"><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">http://www.rebol.com/express-form.html</span></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">REBOL/IOS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的架构如图</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所示。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      在</span><span lang="EN-US">Client</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">计算机上安装</span><span lang="EN-US">REBOL/Link</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US">Web server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上安装</span><span lang="EN-US">REBOL CGI Proxy</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，商业逻辑（</span><span lang="EN-US">business logic</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）的计算机上安装</span><span lang="EN-US">REBOL/Express</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这刚好很接近目前最流行的四层式（</span><span lang="EN-US">4-tier</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）架构【注】：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo1"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第一层：</span><span lang="EN-US">REBOL/Link</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang="EN-US">Client</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">端程序在此执行）</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo1"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第二层：</span><span lang="EN-US">Web Server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang="EN-US">+ REBOL CGI Proxy</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo1"><span lang="PT-BR" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-ansi-language: PT-BR; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第三层：</span><span lang="PT-BR" style="mso-ansi-language: PT-BR">REBOL/Express Server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang="PT-BR" style="mso-ansi-language: PT-BR">Server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">端程序在此执行）</span><span lang="PT-BR" style="mso-ansi-language: PT-BR"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; mso-list: l0 level1 lfo1"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">第四层：数据库</font></span></p><span lang="EN-US"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 0cm; TEXT-ALIGN: center" align="center"><v:shape id="_x0000_i1025" style="WIDTH: 3in; HEIGHT: 153.75pt" type="#_x0000_t75"><v:imagedata cropbottom="3337f" o:title="" src="file:///D:\DOCUME~1\刘伟\LOCALS~1\Temp\msohtml1\01\clip_image001.emz"><font size="3"><img src="http://act.it.sohu.com/book/images/upload/5-3-image024.gif" align="baseline" border="0" /></font></v:imagedata></v:shape></p></span><p class="SIJ04" style="MARGIN: 6pt 0cm 0pt" align="center"><font size="2"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">图</span><span lang="EN-US">1<span style="mso-spacerun: yes">  </span>REBOL/IOS</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">的四层式架构</span></font></p><p class="SIJ03" style="MARGIN: 6pt 0cm 12pt; mso-para-margin-top: .5gd; mso-para-margin-bottom: 12.0pt; mso-para-margin-right: 0cm; mso-para-margin-left: 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【注】唯一的差别在于，一般我们提到四层的架构，指的都是第一层使用网页浏览器，而</span><span lang="EN-US">REBOL/IOS</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">则是使用自己的软件：</span><span lang="EN-US">REBOL/Link</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">。</span></font></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      除了图</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的四层式（</span><span lang="EN-US">4-tier</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）架构之外，也可以不经过</span><span lang="EN-US">Web Server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，改用</span><span lang="EN-US">Client-Server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的两层式架构【注】，如图</span><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所示。</span></font></p><p class="SIJ03" style="MARGIN: 12pt 0cm 6pt; mso-para-margin-top: 12.0pt; mso-para-margin-bottom: .5gd; mso-para-margin-right: 0cm; mso-para-margin-left: 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【注】其实，我刻意把图</span><span lang="EN-US">2</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">中的数据库拿掉，免得被误认为是三层的架构。通常三层的架构指的是：第一层浏览器，第二层</span><span lang="EN-US">Web</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">，第三层数据库。</span></font></font></p><span lang="EN-US"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; TEXT-ALIGN: center" align="center"><v:shape id="_x0000_i1026" style="WIDTH: 243pt; HEIGHT: 106.5pt" type="#_x0000_t75"><v:imagedata cropbottom="17530f" o:title="" src="file:///D:\DOCUME~1\刘伟\LOCALS~1\Temp\msohtml1\01\clip_image003.emz" croptop="9709f"><font style="BACKGROUND-COLOR: #cccccc" size="3"><img src="http://act.it.sohu.com/book/images/upload/5-3-image025.gif" align="baseline" border="0" /></font></v:imagedata></v:shape></p></span><p class="SIJ04" style="MARGIN: 6pt 0cm 0pt" align="center"><font size="2"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">图</span><span lang="EN-US">2<span style="mso-spacerun: yes">  </span>REBOL/IOS</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">的两层式架构</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">REBOL/Link</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">除了和</span><span lang="EN-US">Server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">连接之外，也可以和其它</span><span lang="EN-US">REBOL/Link</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">连接，成为</span><span lang="EN-US">Peer-To-Peer</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（点对点）的架构，如图</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所示。</span></font></p><span lang="EN-US"><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 0cm; TEXT-ALIGN: center" align="center"><v:shape id="_x0000_i1027" style="WIDTH: 198pt; HEIGHT: 27pt" type="#_x0000_t75"><v:imagedata cropbottom="35085f" o:title="" src="file:///D:\DOCUME~1\刘伟\LOCALS~1\Temp\msohtml1\01\clip_image005.emz" croptop="18535f"><font size="3"><img src="http://act.it.sohu.com/book/images/upload/5-3-image026.gif" align="baseline" border="0" /></font></v:imagedata></v:shape></p></span><p class="SIJ04" style="MARGIN: 6pt 0cm 0pt" align="center"><font size="2"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">图</span><span lang="EN-US">3<span style="mso-spacerun: yes">  </span>REBOL/IOS</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">的</span><span lang="EN-US">Peer-To-Peer</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">架构</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      在安装</span><span lang="EN-US">REBOL/Link</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，会同时安装</span><span lang="EN-US">IOS Desktop</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这样的感觉有点类似在安装</span><span lang="EN-US">REBOL/View</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，同时安装</span><span lang="EN-US">REBOL Desktop</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。事实上，</span><span lang="EN-US">REBOL/Link</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的功能和</span><span lang="EN-US">REBOL/View</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相差无几（但是</span><span lang="EN-US">REBOL/Link</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比起</span><span lang="EN-US">REBOL/View</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的功能更多），而且</span><span lang="EN-US">REBOL Desktop</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US">IOS Desktop</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也是很神似（但是</span><span lang="EN-US">IOS Desktop</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比起</span><span lang="EN-US">REBOL Desktop</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">更美观）。</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p></o:p></span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      想在</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本中判断你的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器是否为</span><span lang="EN-US">REBOL/Link</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，可以利用</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">link?</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">&gt;&gt; link?<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">== false<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><o:p><font size="3"> </font></o:p></span></p><p class="a" style="MARGIN: 8.5pt 5.65pt 8.5pt 0cm; TEXT-INDENT: 20.4pt" align="right"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">发表日期：</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 10.0pt"> Mar. 14, 2004<o:p></o:p></span></p><img src ="http://www.blogjava.net/rosial/aggbug/57469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 13:28 <a href="http://www.blogjava.net/rosial/articles/57469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- REBOL篇 - REBOL Desktop</title><link>http://www.blogjava.net/rosial/articles/57468.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57468.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57468.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57468.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57468.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 想写出GUI的程序，REBOL/Core是不够的，必须使用REBOL/View。REBOL/View具备Graphics与View+VID组件，用来支持GUI编程。除此之外，REBOL/View还具备一个Desktop（桌面）组件，提供一个简单的桌面环境。目前REBOL/View最新版是1.2.x。现在REBOL Technologies公司正积极进行1.3版的软件开发，估计今年就会推出。我们可以...&nbsp;&nbsp;<a href='http://www.blogjava.net/rosial/articles/57468.html'>阅读全文</a><img src ="http://www.blogjava.net/rosial/aggbug/57468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 13:27 <a href="http://www.blogjava.net/rosial/articles/57468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- REBOL篇 - REBOL的设置</title><link>http://www.blogjava.net/rosial/articles/57467.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57467.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57467.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57467.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57467.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57467.html</trackback:ping><description><![CDATA[     
<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      一般来说，</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不需要什么特别的设置（</span><span lang="EN-US">configuration</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），就可以执行。但是在某些环境下（特别是</span><span lang="EN-US">Unix</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），你可能需要设置</span><span lang="EN-US">REBOL_HOME</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">环境变量。另外，在某些窗口环境中，可以将扩展名为“</span><i><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 楷体_GB2312">.r</span></i><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”的文件，设置为</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器的关联文件，以方便执行。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">真正重要的是网络的设置与安全的设置，分成两小节来说明。</font></span></p><p class="SIJ022" style="MARGIN: 12pt 0cm 0pt"><span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana"><font face="Verdana" size="5">网络设置</font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      某些</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数需要知道网络相关的设置，否则无法运作。例如</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">send</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数可以用来发送电子邮件。如果使用</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">send</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就必须先设置好外寄电子邮件服务器（</span><span lang="EN-US">SMTP Server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。如果没设置电子邮件服务器，就试图送出</span><span lang="EN-US">email</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，会得到下面的结果：</span></font></p><p class="MsoToc1" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">&gt;&gt; send jerrytsai@shinewave.com.tw "Hello"<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></font></span></p><p class="MsoToc1" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">** User Error: No network server for smtp is specified<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">** Near: smtp-port: open [scheme: 'smtp]<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">either only<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      我们可以先设置网络，再执行</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">send</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就不会有问题了：</span></font></p><p class="MsoBodyTextIndent2" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">&gt;&gt; set-net [jerrytsai@shinewave.com.tw <br /><span style="mso-spacerun: yes">      </span>smtp.shinewave.com.tw]<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">&gt;&gt; send jerrytsai@shinewave.com.tw "Hello"<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">connecting to: smtp.shinewave.com.tw<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">     set-net</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个函数，后面需要一个区块（</span><span lang="EN-US">block</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）参数（所谓的区块，指的是：用中括号</span><span lang="EN-US">[ ]</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包围的一群值），区块内放置“至少”两个值，第一个值是寄件者的电子邮件信箱，第二个值是外寄电子邮件服务器（</span><span lang="EN-US">SMTP Server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。如果你不知道你的</span><span lang="EN-US">SMTP Server</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为何，可以从你的收信软件（例如：</span><span lang="EN-US">Microsoft Outlook</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）中找到这样的信息。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      如果每次使用</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">send</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前都要先利用</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">set-net</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来设置网络，也实在是太麻烦了。你可以将这道</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">set-net</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">描述</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">写在</span><i><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 楷体_GB2312">user.r</span></i><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中。前一节提到，</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器启动时，会自动读进</span><i><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 楷体_GB2312">user.r</span></i><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件内的</span><span lang="EN-US">REBOL script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并执行之。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">Set-net</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的参数区块内，最少要指定两个值，最多可以有六个值，这六个值的意义依序分别为：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; tab-stops: list 24.0pt; mso-list: l1 level1 lfo2"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font size="3">1.</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">电子邮件帐号</font></span></p><p class="MsoNormal" style="MARGIN: 3.6pt 0cm 0pt 45.35pt; TEXT-INDENT: -24.1pt; mso-para-margin-top: .3gd; tab-stops: list 24.0pt; mso-list: l1 level1 lfo2; mso-para-margin-bottom: .0001pt; mso-para-margin-right: 0cm; mso-para-margin-left: 45.35pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font size="3">2.</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">电子邮件发送服务器</font></span></p><p class="MsoNormal" style="MARGIN: 3.6pt 0cm 0pt 45.35pt; TEXT-INDENT: -24.1pt; mso-para-margin-top: .3gd; tab-stops: list 24.0pt; mso-list: l1 level1 lfo2; mso-para-margin-bottom: .0001pt; mso-para-margin-right: 0cm; mso-para-margin-left: 45.35pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font size="3">3.</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">电子邮件接收服务器</font></span></p><p class="MsoNormal" style="MARGIN: 3.6pt 0cm 0pt 45.35pt; TEXT-INDENT: -24.1pt; mso-para-margin-top: .3gd; tab-stops: list 24.0pt; mso-list: l1 level1 lfo2; mso-para-margin-bottom: .0001pt; mso-para-margin-right: 0cm; mso-para-margin-left: 45.35pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font size="3">4.</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><font size="3"><span lang="EN-US">proxy</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器</span></font></p><p class="MsoNormal" style="MARGIN: 3.6pt 0cm 0pt 45.35pt; TEXT-INDENT: -24.1pt; mso-para-margin-top: .3gd; tab-stops: list 24.0pt; mso-list: l1 level1 lfo2; mso-para-margin-bottom: .0001pt; mso-para-margin-right: 0cm; mso-para-margin-left: 45.35pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font size="3">5.</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><font size="3"><span lang="EN-US">proxy port</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（默认值是</span><span lang="EN-US">1080</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span></font></p><p class="MsoNormal" style="MARGIN: 3.6pt 0cm 0pt 45.35pt; TEXT-INDENT: -24.1pt; mso-para-margin-top: .3gd; tab-stops: list 24.0pt; mso-list: l1 level1 lfo2; mso-para-margin-bottom: .0001pt; mso-para-margin-right: 0cm; mso-para-margin-left: 45.35pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font size="3">6.</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><font size="3"><span lang="EN-US">proxy type</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（默认值是“</span><span lang="EN-US">socks</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”）</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      任何值如果不存在，可以利用</span><span lang="EN-US">none</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来表示。例如：</span></font></p><p class="URL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt"><font size="3">set-net [luke@rebol.com mail none our-proxy 1080 socks]<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      这六个值中，第四到第六的值是和</span><span lang="EN-US">proxy</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有关。如果你是直接利用调制解调器（</span><span lang="EN-US">modem</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）或以太网（</span><span lang="EN-US">ethernet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）联机到互联网（</span><span lang="EN-US">Internet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），你不需要设置这三个值。如果你不确定这三个值应该么设置，你可以从你的网页浏览器（</span><span lang="EN-US">Web browser</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）中找到这些设置。以微软的</span><span lang="EN-US">Internet Explorer</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">浏览器来说，在菜单中选择【工具】</span><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">à</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">【</span><span lang="EN-US">Internet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选项】</span><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">à</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">【连接】</span><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">à</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">【局域网设置】，即可找到</span><span lang="EN-US">Proxy</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的相关设置值。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      对于</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来说，</span><span lang="EN-US">proxy</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型可以是</span><span lang="EN-US" style="FONT-FAMILY: Arial; mso-font-kerning: 0pt">socks</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="FONT-FAMILY: Arial; mso-font-kerning: 0pt">socks5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="FONT-FAMILY: Arial; mso-font-kerning: 0pt">socks4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="FONT-FAMILY: Arial; mso-font-kerning: 0pt">generic</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">。其中</span><span lang="EN-US" style="FONT-FAMILY: Arial; mso-font-kerning: 0pt">generic</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">是</span><span lang="EN-US" style="FONT-FAMILY: Arial; mso-font-kerning: 0pt">generic CERN proxy</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">的意思。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      其实，</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">set-net</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个函数会将这六个设置值依序放到下面的六个系统变量中：</span></font></p><p class="MsoToc1" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">SYSTEM/USER/EMAIL<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">SYSTEM/SCHEMES/DEFAULT/HOST<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">SYSTEM/SCHEMES/POP/HOST<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">SYSTEM/SCHEMES/DEFAULT/PROXY/HOST<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">SYSTEM/SCHEMES/DEFAULT/PROXY/PORT-ID<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">SYSTEM/SCHEMES/DEFAULT/PROXY/TYPE<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      因此，我们也可以不使用</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">set-net</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数，而直接设置变量，例如：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">&gt;&gt; SYSTEM/USER/EMAIL: jerrytsai@shinewave.com.tw<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">&gt;&gt; SYSTEM/SCHEMES/DEFAULT/HOST: smtp.shinewave.com.tw<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">     请注意，利用这种方法来设置变量时，冒号“</span><span lang="EN-US">:</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”必须紧接在变量后面，而冒号后面必须要有空格。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">     你可以利用</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">print</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来查看这些变量的值，例如：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">&gt;&gt; print SYSTEM/SCHEMES/DEFAULT/HOST<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 楷体_GB2312">msa</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">.hinet.net<o:p></o:p></span></font></p><p class="SIJ022" style="MARGIN: 12pt 0cm 0pt"><span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana"><font face="Verdana" size="5">安全设置</font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">          REBOL script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行时必须通过</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器，而</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器可以进行安全把关，如果解释器发现</span><span lang="EN-US">script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">试图进行一些“有安全疑虑”的动作时，就会显示出类似图</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的对话框（</span><span lang="EN-US">dialog</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），警告用户。用户可以选择因应的方式：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; tab-stops: list 24.0pt; mso-list: l0 level1 lfo1"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><font size="3"><span lang="EN-US">Yes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：允许</span><span lang="EN-US">script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行此次动作，继续执行</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; tab-stops: list 24.0pt; mso-list: l0 level1 lfo1"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><font size="3"><span lang="EN-US">Allow all</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：允许</span><span lang="EN-US">script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行所有此类动作（以后不用再问了），继续执行</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; tab-stops: list 24.0pt; mso-list: l0 level1 lfo1"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><font size="3"><span lang="EN-US">No</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：不允许</span><span lang="EN-US">script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行此动作，继续执行。这会产生</span><span lang="EN-US">Security Violation</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（违反安全）的</span><span lang="EN-US">Access Error</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">存取错误）。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 45.25pt; TEXT-INDENT: -24pt; tab-stops: list 24.0pt; mso-list: l0 level1 lfo1"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore"><font size="3">l</font><span style="FONT: 7pt 'Times New Roman'">         </span></span></span><font size="3"><span lang="EN-US">Quit</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：将此</span><span lang="EN-US">script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">终止执行</span></font></p><span lang="EN-US" style="mso-fareast-font-family: PMingLiU; mso-fareast-language: ZH-TW"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><p class="SIJ04" style="MARGIN: 12pt 0cm 0pt" align="center"><v:shape id="_x0000_i1025" style="WIDTH: 258.75pt; HEIGHT: 90.75pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///D:\DOCUME~1\刘伟\LOCALS~1\Temp\msohtml1\01\clip_image001.png"><font size="3"><img src="http://act.it.sohu.com/book/images/upload/5-3-image012.jpg" align="baseline" border="0" /></font></v:imagedata></v:shape></p><o:p></o:p></span><p class="SIJ04" style="MARGIN: 6pt 0cm 0pt" align="center"><font size="2"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">图</span><span lang="EN-US">1<span style="mso-spacerun: yes">  </span>REBOL</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">解释器询问我们，如何处置有安全疑虑的动作</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      何谓“有安全疑虑”的动作？对于</span><span lang="EN-US">REBOL/Core</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">REBOL/View</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">REBOL/View/Pro</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">REBOL/Command</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">REBOL/Command/View</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这五个标准的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器来说，如果没有特别设置安全，在解释器预定的情况下，如果</span><span lang="EN-US">script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">试图修改磁盘内容或试图执行磁盘内的文件，就会出现上述的对话框（</span><span lang="EN-US">dialog</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），来让用户自行决定。藉此保护用户的文件系统，免于受到破坏。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      但是上述的安全设置，只有针对这五个标准的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器。对于</span><span lang="EN-US">REBOL/Base</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">REBOL/Pro</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、与</span><span lang="EN-US">REBOL/Face</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来说，完全没有安全的限制。因为这三个精简核心版（</span><span lang="EN-US">kernel</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）的解释器是给软件开发人员用的，而不是给一般的软件用户用的。软件开发人员只会使用</span><span lang="EN-US">REBOL/Base</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">REBOL/Pro</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、与</span><span lang="EN-US">REBOL/Face</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来测试自己开发出来的</span><span lang="EN-US">REBOL script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，而不会用它们来执行其它的</span><span lang="EN-US">REBOL script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">      如果精简核心版的解释器想要和标准版的解释器一样，藉此保护用户的文件系统，免于受到破坏，可以利用下面的叙述：</font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">secure [file [allow read<span style="mso-spacerun: yes">  </span>ask write<span style="mso-spacerun: yes">  </span>ask execute]]</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">【注】</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: MingLiU; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt"><o:p></o:p></span></font></p><p class="SIJ03" style="MARGIN: 9.6pt 0cm; mso-para-margin-top: .8gd; mso-para-margin-bottom: .8gd; mso-para-margin-right: 0cm; mso-para-margin-left: 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【注】</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体">secure</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">后面中括号内的文字，就是一种很简单的方言，由</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体">security</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">函数制订，专门用来描述对于网络和磁盘存取动作的限制。方言中出现的字，即使某些和</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">语言的函数一样（例如此处的</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体">read</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">、</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体">ask</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">、</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体">write</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">），但意义上完全是两回事。这就是方言！用来表达特殊领域，且不受到原本</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">语法的规范。</span></font></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      这里的意思是：对于文件的安全控管方式，允许文件被读（</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">allow read</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）、写入的时候需要询问用户（</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">ask write</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）、执行文件的时候需要询问用户（</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">ask execute</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      我们可以利用</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">security</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数来针对网络、整个文件系统、特定文件或目录，进行安全上的限制。为了方便起见，我们通常将安全设置的叙述，放在</span><i><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 楷体_GB2312">rebol.r</span></i><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">Security</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数后面可以跟着一个字或一个区块。如果是一个字，则表示网络和文件系统都采用此种安全处理方式。如果是一个区块，可以做比较细微的更动。例如：</span></font></p><p class="MsoToc1" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">Security ask<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">      上面表示，不管对于网络或磁盘系统的存取，都必须先询问用户，取得同意。</font></span></p><p class="MsoToc1" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">Security [ net quit file ask %./ allow ]<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      上面表示，对于网络的存取一概拒绝，且自动结束程序的执行。对于文件系统，必须先询问用户，取得同意。对于目前目录下（“</span><span lang="EN-US">%.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”表示目前的目录）的所有文件，一律允许存取。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">security</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数的详细用法，你可以利用</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">help</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数（或</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">?</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）来取得说明文件：</span></font></p><p class="MsoToc1" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">&gt;&gt; ? security<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      如果你想执行某个可信任的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本，想破除安全限制，你可以利用</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器的命令行选项“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">-s</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”【注】，如下所示。除了“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">-s</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”，还有一个“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">+s</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”的选项，其作用刚好和“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">-s</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”相反。</span></font></p><p class="MsoToc1" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">REBOL -s TrustWorthy.r<o:p></o:p></font></span></p><p class="SIJ03" style="MARGIN: 6pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-bottom: .5gd; mso-para-margin-right: 0cm; mso-para-margin-left: 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">【注】这年头，凡事还是小心一点好，建议你不要轻易使用“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体">-s</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">”。</span></font></font></p><p class="a" style="MARGIN: 8.5pt 5.65pt 8.5pt 0cm; TEXT-INDENT: 20.4pt" align="right"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">发表日期：</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 10.0pt"> Feb. 29, 2004<o:p></o:p></span></p><img src ="http://www.blogjava.net/rosial/aggbug/57467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 13:26 <a href="http://www.blogjava.net/rosial/articles/57467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- REBOL篇 - REBOL/Core安装与执行</title><link>http://www.blogjava.net/rosial/articles/57464.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57464.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57464.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57464.html</trackback:ping><description><![CDATA[   
<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">            REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有许多平台的版本，本文章以</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为主要的说明对象。如果你使用其它操作系统，作法也相仿，读者应该可以举一反三。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前述</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器依据功能的差异，有许多版本，其中</span><span lang="EN-US">REBOL/Core</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US">REBOL/View</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是免费的。本次先介绍</span><span lang="EN-US">REBOL/Core</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的安装使用，下一篇文章再介绍</span><span lang="EN-US">REBOL/View</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p><p class="SIJ022" style="MARGIN: 12pt 0cm 0pt"><span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana"><font face="Verdana" size="5"><strong>下载与安装</strong></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      你可以从</span><span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'"><a href="http://www.rebol.com/platforms.shtml">http://www.rebol.com/platforms.shtml</a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下载适合你的</span><span lang="EN-US">REBOL/Core</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本（请注意，此版本必须和你的操作系统相匹配）。</span><span lang="EN-US">REBOL/Core</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其实只有一个执行文件（</span><span lang="EN-US">exe file</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），你可以直接下载此一文件，或者你也可以下载压缩文件回来再解压缩。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      如果你下载的是一个执行文件，则此文件就是</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的解释器。如果你下载的是</span><span lang="EN-US">ZIP</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span><span lang="EN-US">GZ</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等压缩文件，就需要解压缩。此压缩文件内除了具有执行文件（解释器）之外，还有附上说明文件，以及几个简单的</span><span lang="EN-US">REBOL script</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序。只有执行文件是重要的，其它文件都不重要，只要有解释器，就能使用</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语言。本节假设你取得的执行文件为</span><i><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 楷体_GB2312">rebol.exe</span></i><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（也有可能是其它文件名称，例如</span><i><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 楷体_GB2312">rebol031.exe</span></i><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span></font></p><p class="SIJ022" style="MARGIN: 12pt 0cm 0pt"><span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana"><font face="Verdana" size="5"><strong>执行与结束</strong></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      直接用鼠标双击（</span><span lang="EN-US">double-click</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span><span lang="EN-US">rebol</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释器的图标（</span><span lang="EN-US">icon</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），就可以进入</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US">console</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">画面。你也可以在</span><span lang="EN-US">DOS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令行窗口（</span><span lang="EN-US">command-line console</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）中下达命令来执行</span><span lang="EN-US">rebol</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如下所示：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">rebol<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      如果你是采用下达命令的方式，你还可以指定选项（</span><span lang="EN-US">options</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）和参数（</span><span lang="EN-US">arguments</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），如下所示：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">rebol –q myScript.r<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      其中“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">-q</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”是选项，“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">myScript.r</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”是参数。如果你想知道可以用的选项和参数有哪些，可以用“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">-?</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”或“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">--help</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”选项，如下所示：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">rebol -?<o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      你也可以在进入</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US">console</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之后，再利用</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">usage</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数（</span><span lang="EN-US">function</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），来取得此信息。如下所示：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'"><font size="3">&gt;&gt; usage <o:p></o:p></font></span></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">rebol</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的选项有许多，后面的文章将会在适当的时机陆续介绍这些选项。</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US">REBOL console</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个文字模式的交互接口，在默认（</span><span lang="EN-US">default</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）的状况下，提示符号（</span><span lang="EN-US">prompt</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）是“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">&gt;&gt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”，若有返回值（</span><span lang="EN-US">return value</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），则返回值的符号是“</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">==</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">【注】</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。请看下面的例子：</span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 楷体_GB2312">&gt;&gt; 1 + 2 </span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">（注意：</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 楷体_GB2312">1</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">与</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 楷体_GB2312">+</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">与</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 楷体_GB2312">2</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">之间，都必须要有空格）</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 楷体_GB2312"><o:p></o:p></span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 楷体_GB2312"><font size="3">== 3<o:p></o:p></font></span></p><p class="SIJ03" style="MARGIN: 12pt 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">【注】提示符号和返回值的符号不一定要是</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">「</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">&gt;&gt;</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">」和「</span><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">==</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">」</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">。以后我会介绍修改它们的方式。</span><span lang="PT-BR" style="mso-ansi-language: PT-BR"><o:p></o:p></span></font></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">利用</span><span lang="PT-BR" style="FONT-FAMILY: 'Courier New'; mso-ansi-language: PT-BR">quit</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数或</span><span lang="PT-BR" style="FONT-FAMILY: 'Courier New'; mso-ansi-language: PT-BR">q</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">【注】</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以结束</span><span lang="PT-BR" style="mso-ansi-language: PT-BR">REBOL console</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">，</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如下所示</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">：</span><span lang="PT-BR" style="mso-ansi-language: PT-BR"><o:p></o:p></span></font></p><p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt"><span lang="PT-BR" style="FONT-FAMILY: 'Courier New'; mso-ansi-language: PT-BR"><font size="3">&gt;&gt; quit<o:p></o:p></font></span></p><p class="SIJ03" style="MARGIN: 12pt 0cm"><font size="3"><font style="BACKGROUND-COLOR: #cccccc"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">【注】特别提醒，</span><span lang="PT-BR" style="mso-ansi-language: PT-BR">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">提供</span><span lang="PT-BR" style="FONT-FAMILY: 'Courier New'; mso-ansi-language: PT-BR">exit</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">函数</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">，</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">但</span><span lang="PT-BR" style="FONT-FAMILY: 'Courier New'; mso-ansi-language: PT-BR">exit</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">函数另做其它途之用</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">，</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">而不是用来结束</span><span lang="PT-BR" style="mso-ansi-language: PT-BR">REBOL console</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'; mso-ansi-language: PT-BR">的</span><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">。</span></font></font></p><p class="a" style="MARGIN: 8.5pt 5.65pt 8.5pt 0cm; TEXT-INDENT: 20.4pt" align="right"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">发表日期：</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 10.0pt"> Feb. 15, 2004<b style="mso-bidi-font-weight: normal"><o:p></o:p></b></span></p><img src ="http://www.blogjava.net/rosial/aggbug/57464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 13:22 <a href="http://www.blogjava.net/rosial/articles/57464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- REBOL篇 - REBOL Console</title><link>http://www.blogjava.net/rosial/articles/57465.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57465.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57465.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57465.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一进入REBOL console，你会看到一大串文字描述，包含了版本声明、组件列表（component list）、预先执行的脚本（pre-executed script）以及授权信息。下面分别说明。产品与版本      一开启console就会显示下面的版权说明：REBOL/Core 2.5.6.3.1Copyright 1997-2003 REBOL TechnologiesREBOL is ...&nbsp;&nbsp;<a href='http://www.blogjava.net/rosial/articles/57465.html'>阅读全文</a><img src ="http://www.blogjava.net/rosial/aggbug/57465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 13:22 <a href="http://www.blogjava.net/rosial/articles/57465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- REBOL篇 - REBOL的特色</title><link>http://www.blogjava.net/rosial/articles/57463.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 05:21:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57463.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57463.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57463.html</trackback:ping><description><![CDATA[     
<p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">从计算机科学（</span><span lang="EN-US">computer science</span><span style="FONT-FAMILY: 宋体">）的角度来看，</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">是一个高度动态（</span><span lang="EN-US">dynamic</span><span style="FONT-FAMILY: 宋体">）、多态（</span><span lang="EN-US">polymorphic</span><span style="FONT-FAMILY: 宋体">）、反射（</span><span lang="EN-US">reflective</span><span style="FONT-FAMILY: 宋体">）、脉络相关（</span><span lang="EN-US">context-dependent</span><span style="FONT-FAMILY: 宋体">）、符式（</span><span lang="EN-US">symbolic</span><span style="FONT-FAMILY: 宋体">）、功能性（</span><span lang="EN-US">functional</span><span style="FONT-FAMILY: 宋体">）的语言【注】。这些学院派的名词，留着给教授们细细品味。在本文章，我要用白话的方式来解释</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">。</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">是</span><span lang="EN-US">Relative Expression-Based Object Language</span><span style="FONT-FAMILY: 宋体">的缩写（</span><span lang="EN-US">abbreviation</span><span style="FONT-FAMILY: 宋体">）。顾名思义，</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">是一种</span><span lang="EN-US">Relative Expression-Based Language</span><span style="FONT-FAMILY: 宋体">，也是一种</span><span lang="EN-US">Object-Based Language</span><span style="FONT-FAMILY: 宋体">，本节会解释这两者的意义。除此之外，我也说明</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">的一些特殊之处。总而言之，</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">是一个打破传统，不同流俗的编程语言【注】。</span></p><p class="SIJ03"><span style="FONT-FAMILY: 楷体_GB2312">【注】正因为</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312">不同流俗，所以已经有编程经验的人，在学习</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312">的初期，可能会有一些不适应。我给你们建议是，学习</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312">时，最好暂时忘了其它语言。</span></p><p class="SIJ022" style="MARGIN-TOP: 18pt"><span style="FONT-FAMILY: 方正粗圆简体"><strong>方言</strong></span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">所谓的</span><span lang="EN-US">Relative Expression</span><span style="FONT-FAMILY: 宋体">就是“方言”（</span><span lang="EN-US">dialect</span><span style="FONT-FAMILY: 宋体">）的意思，</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">能够如此简洁，一半功劳要归于方言。例如：写一个程序，来打开一个窗口（</span><span lang="EN-US">window</span><span style="FONT-FAMILY: 宋体">），窗口上面显示红色的“</span><span lang="EN-US">Hello REBOL</span><span style="FONT-FAMILY: 宋体">”字样，以及一个“</span><span lang="EN-US">OK</span><span style="FONT-FAMILY: 宋体">”按钮（</span><span lang="EN-US">button</span><span style="FONT-FAMILY: 宋体">），按下按钮之后，窗口会立刻关闭。对许多语言来说（包括</span><span lang="EN-US">Java</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 宋体">），要写出这样的程序，少则需要十几行源码，多则需要数十行源码。但是</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">利用</span><span lang="EN-US">VID</span><span style="FONT-FAMILY: 宋体">（</span><span lang="EN-US">Visual Interface Dialect</span><span style="FONT-FAMILY: 宋体">视觉接口方言）只要下面一行就可以做到【注】，执行画面如图</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体">所示。</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">view layout [ Title "Hello REBOL" red Button "OK" [quit] ]</span></p><p class="SIJ03" style="MARGIN-TOP: 9pt"><span style="FONT-FAMILY: 楷体_GB2312">【注】如果你想动手试试这一行程序，请记得使用含</span><span lang="EN-US">View</span><span style="FONT-FAMILY: 楷体_GB2312">功能的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312">版本。也请注意，</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312">不区分英文字母大小写。</span></p><p class="SIJ04" style="MARGIN-TOP: 9pt"><span lang="EN-US"><img height="137" src="http://act.it.sohu.com/book/data/book/05/5/3.files/image007.jpg" width="202" /></span></p><p class="SIJ04" style="MARGIN-TOP: 9pt"><span style="FONT-FAMILY: 楷体_GB2312">图</span><span lang="EN-US">1  </span><span style="FONT-FAMILY: 楷体_GB2312">只要一行，就可以写出这样的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312">程序</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">这就是方言的威力。不同的应用领域（</span><span lang="EN-US">application domain</span><span style="FONT-FAMILY: 宋体">）会有不同的方言，也就是行话（</span><span lang="EN-US">jargon</span><span style="FONT-FAMILY: 宋体">）。例如：律师有律师的行话，建筑业有建筑业的行话，音乐家有音乐家的行话。这些行话不受一般语法的约束规范，自成一套体系，行话通常比正常的语言来得简洁、有力。举例来说，</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">（</span><span lang="EN-US">Structured Query Language</span><span style="FONT-FAMILY: 宋体">）就可以算是一种方言，而不是一般的编程语言，</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">专门用来进行数据库查询。拿</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">来做别的事（例如设计游戏软件），</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">一定做不好，但是拿</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">来和数据库进行沟通，却没有其它编程语言（</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">Java</span><span style="FONT-FAMILY: 宋体">）可以做得比</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">好，因为</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">的应用领域在数据库查询（</span><span lang="EN-US">query</span><span style="FONT-FAMILY: 宋体">）。</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">已经有许多方言，每个方言的规模都不大，很容易学，最有名的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">方言是</span><span lang="EN-US">VID</span><span style="FONT-FAMILY: 宋体">（</span><span lang="EN-US">Visual Interface Dialect</span><span style="FONT-FAMILY: 宋体">），可以让我们很轻易地设计出窗口程序。除了</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">内建（</span><span lang="EN-US">built-in</span><span style="FONT-FAMILY: 宋体">）的方言之外，编程员也可以建立自己的方言。例如：有人用</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">建立了一个</span><span lang="EN-US">REBOL/Flash</span><span style="FONT-FAMILY: 宋体">方言，可以用来产生</span><span lang="EN-US">Flash</span><span style="FONT-FAMILY: 宋体">的</span><span lang="EN-US">SWF</span><span style="FONT-FAMILY: 宋体">档案格式（</span><span lang="EN-US">file format</span><span style="FONT-FAMILY: 宋体">），请看网址：</span><span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'">http://sweb.cz/oliva.david/swf/</span><span style="FONT-FAMILY: 宋体">。</span></p><p class="SIJ022" style="MARGIN-TOP: 18pt"><span lang="EN-US"><strong>Object</strong></span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">是</span><span lang="EN-US">object language</span><span style="FONT-FAMILY: 宋体">，因为它具备封装（</span><span lang="EN-US">encapsulation</span><span style="FONT-FAMILY: 宋体">）的概念，可以把数据和动作包装在一个对象（</span><span lang="EN-US">object</span><span style="FONT-FAMILY: 宋体">）中。但是</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">只能算是</span><span lang="EN-US">object-based language</span><span style="FONT-FAMILY: 宋体">，不是</span><span lang="EN-US">Object-Oriented Language</span><span style="FONT-FAMILY: 宋体">（</span><span lang="EN-US">OOL</span><span style="FONT-FAMILY: 宋体">），因为它不具有继承和多态【注】。学院派的定义是：同时具备封装、继承、多态的语言，才是</span><span lang="EN-US">OOL</span><span style="FONT-FAMILY: 宋体">。</span></p><p class="SIJ03" style="MARGIN-TOP: 9pt"><span style="FONT-FAMILY: 楷体_GB2312">【注】本节一开始提到</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312">是一种多态的语言，这里却又说</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312">不具备多态。我没有自相矛盾，因为此多态非彼多态。</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312">支持参数式多态（</span><span lang="EN-US">parametric polymorphism</span><span style="FONT-FAMILY: 楷体_GB2312">），也就是通称的</span><span lang="EN-US">Overloading</span><span style="FONT-FAMILY: 楷体_GB2312">。但是</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 楷体_GB2312">不支持</span><span lang="EN-US">OO</span><span style="FONT-FAMILY: 楷体_GB2312">要求的多态（也就是</span><span lang="EN-US">Overriding / Virtual Method</span><span style="FONT-FAMILY: 楷体_GB2312">）。</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span lang="EN-US">OO</span><span style="FONT-FAMILY: 宋体">是近年的显学，似乎大家都喜欢</span><span lang="EN-US">OO</span><span style="FONT-FAMILY: 宋体">。乍闻</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">不支持继承和多态，还真是让人无所适从，担心</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">会不会是一个残缺不全的语言？事实上，因为</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">设计的非常巧妙，没有继承和多态并无大碍。继承和多态的好处在于：程序代码的复用（</span><span lang="EN-US">code reuse</span><span style="FONT-FAMILY: 宋体">），以及设计的复用（</span><span lang="EN-US">design reuse</span><span style="FONT-FAMILY: 宋体">）。</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">虽然不支持继承和多态，但是这两点都做得到。所以有没有支持继承和多态，也就不重要了。反倒因为不支持继承和多态，</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">变得相当容易学习，因为继承和多态（特别是多态）一直都是</span><span lang="EN-US">OO</span><span style="FONT-FAMILY: 宋体">编程入门者会遭遇到的学习瓶颈。</span></p><p class="SIJ022" style="MARGIN-TOP: 18pt"><span style="FONT-FAMILY: 方正粗圆简体"><strong>丰富的数据类型</strong></span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span lang="EN-US">C</span><span style="FONT-FAMILY: 宋体">语言支持的类型有</span><span lang="EN-US">int</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">char</span><span style="FONT-FAMILY: 宋体">等近十种，</span><span lang="EN-US">Java</span><span style="FONT-FAMILY: 宋体">支持类型的数目稍多一点，</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 宋体">支持类型的数目又比</span><span lang="EN-US">Java</span><span style="FONT-FAMILY: 宋体">更多一点，但还是比不上</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">。</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">所支持的类型超过</span><span lang="EN-US">50</span><span style="FONT-FAMILY: 宋体">个，传统的整数、浮点数（</span><span lang="EN-US">floating point number</span><span style="FONT-FAMILY: 宋体">）、字符（</span><span lang="EN-US">character</span><span style="FONT-FAMILY: 宋体">）、字符串（</span><span lang="EN-US">string</span><span style="FONT-FAMILY: 宋体">）当然</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">都有提供，更特别的是，</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">提供许多现代化的类型，例如</span><span lang="EN-US">e-Mail</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">URL</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">HTML</span><span style="FONT-FAMILY: 宋体">的卷标（</span><span lang="EN-US">tag</span><span style="FONT-FAMILY: 宋体">）等，都是类型。请看下面的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">例子：</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">&gt;&gt; myEmail: xy.cai@msa.hinet.net</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">&gt;&gt; type? myEmail</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">== email!</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">我将</span><span lang="EN-US">myEmail</span><span style="FONT-FAMILY: 宋体">设定为</span><span lang="EN-US">xy.cai@ msa.hinet.net</span><span style="FONT-FAMILY: 宋体">，然后问</span><span lang="EN-US">myEmail</span><span style="FONT-FAMILY: 宋体">的类型（</span><span lang="EN-US">type</span><span style="FONT-FAMILY: 宋体">）为何，得到的答案正是</span><span lang="EN-US">email!</span><span style="FONT-FAMILY: 宋体">类型。</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">想知道</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">支持哪些类型吗？在</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">的</span><span lang="EN-US">console</span><span style="FONT-FAMILY: 宋体">中输入：</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt"><span lang="EN-US" style="FONT-FAMILY: 'Courier New'">&gt;&gt; help datatype!</span></p><p class="SIJ022" style="MARGIN-TOP: 18pt"><span lang="EN-US">Reflectivity</span><span style="FONT-FAMILY: 方正粗圆简体">打破数据和程序的藩篱</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">在</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">里面，一切都是“值（</span><span lang="EN-US">value</span><span style="FONT-FAMILY: 宋体">）”，也就是数据。程序代码（</span><span lang="EN-US">code</span><span style="FONT-FAMILY: 宋体">）和数据（</span><span lang="EN-US">data</span><span style="FONT-FAMILY: 宋体">）之间没有明确的分际。这样的观念并非</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">首创，毕竟早在</span><span lang="EN-US">1959</span><span style="FONT-FAMILY: 宋体">年诞生的</span><span lang="EN-US">Lisp</span><span style="FONT-FAMILY: 宋体">语言就是如此，只是这样的作法并非主流。</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span lang="EN-US">Reflectivity</span><span style="FONT-FAMILY: 宋体">（反射）是一面照妖镜，所有事物的内在无所遁形。</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">具有高度动态的</span><span lang="EN-US">reflectivity</span><span style="FONT-FAMILY: 宋体">，所以数据和程序码的分际无须存在，数据可以是程序，程序也可以是数据，一切都被</span><span lang="EN-US">reflectivity</span><span style="FONT-FAMILY: 宋体">所掌控，就好像孙悟空再怎么变，仍逃不出如来佛的掌心。</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">请先牢记一句话：任何东西，只要没被求值（</span><span lang="EN-US">evaluate</span><span style="FONT-FAMILY: 宋体">）【注】，就只是数据，而不是程序代码。</span></p><p class="SIJ022" style="MARGIN-TOP: 18pt"><span style="FONT-FAMILY: 方正粗圆简体"><strong>内建分析器</strong></span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">内建分析器（</span><span lang="EN-US">parser</span><span style="FONT-FAMILY: 宋体">），这个分析器相当好用，而且比</span><span lang="EN-US">Perl</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">Java</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 宋体">等语言所使用的</span><span lang="EN-US">Regular Expression</span><span style="FONT-FAMILY: 宋体">【注】更简单易懂，还可以搭配</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">的数据类型来使用。</span></p><p class="SIJ03" style="MARGIN-TOP: 9pt"><span style="FONT-FAMILY: 楷体_GB2312">【注】</span><span lang="EN-US">Regular Expression</span><span style="FONT-FAMILY: 楷体_GB2312">的功能强大，没人会否认；但是</span><span lang="EN-US">Regular Express</span><span style="FONT-FAMILY: 楷体_GB2312">不好学、容易忘记、容易犯错，这也没人能否认。</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">有了此分析器，搭配</span><span lang="EN-US">reflectivity</span><span style="FONT-FAMILY: 宋体">，就能轻易地设计出方言解译器。如果你是其它语言的使用者，你可以告诉朋友，“我写了一个不错的</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 宋体">程序库，你想不想试试？”。在</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">世界，我们喜欢告诉朋友，“我设计了一个不错的</span><span lang="EN-US">REBOL</span><span style="FONT-FAMILY: 宋体">方言，你想不想试试？”酷！</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">关于方言的其它解说，请参考本文章第一小节的叙述。</span></p><p class="MsoNormal" style="MARGIN-TOP: 9pt; TEXT-INDENT: 21pt"><span lang="EN-US"></span> </p><p class="a" style="MARGIN: 8.5pt 5.65pt 8.5pt 0cm; TEXT-INDENT: 20.4pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">发表日期：</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'"> Feb. 8, 2004</span></p><img src ="http://www.blogjava.net/rosial/aggbug/57463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 13:21 <a href="http://www.blogjava.net/rosial/articles/57463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- REBOL篇 - REBOL是什么？</title><link>http://www.blogjava.net/rosial/articles/57462.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 10 Jul 2006 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/57462.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/57462.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/57462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/57462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/57462.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">BASIC</span>
				<span style="FONT-FAMILY: 宋体">是我的初恋，当时我才小学五年级，懵懵懂懂，就这么发生了关系。然后我交往过</span>
				<span lang="EN-US">Clipper</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">C</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">x86 Asm</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">C++</span>
				<span style="FONT-FAMILY: 宋体">，直到我认识</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体">之后，才定了下来，并且“以身相许”。恩爱的日子，随着时间淡去而逐渐乏味，我和</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体">没熬过七年之痒。其间我曾经出轨，喜欢过</span>
				<span lang="EN-US">Python</span>
				<span style="FONT-FAMILY: 宋体">，但是这段时间太短，差不多只能算是一夜情。现在，</span>
				<span lang="EN-US">C#</span>
				<span style="FONT-FAMILY: 宋体">被许配给我，但造化弄人，我心中真正喜欢的却是</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">！白天我和</span>
				<span lang="EN-US">C#</span>
				<span style="FONT-FAMILY: 宋体">在一起，晚上我私会</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span style="FONT-FAMILY: 宋体">我为什么喜欢</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">，因为她独特、单纯、娇小、善解人意还精通多种方言。我想要完成的事，她总是很快就帮我达成。与她在一起，每每让我体验到前所未有的愉悦快感。我祈求上天，不要让她离开我。我唯一的希望是，她能早一点学会中文，更快融入我们的社会。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">是一个编程语言（</span>
				<span lang="EN-US">programming language</span>
				<span style="FONT-FAMILY: 宋体">）。由于</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">程序执行时，需要解释器（</span>
				<span lang="EN-US">interpreter</span>
				<span style="FONT-FAMILY: 宋体">），所以</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">可以被视为是一种脚本语言（</span>
				<span lang="EN-US">scripting language</span>
				<span style="FONT-FAMILY: 宋体">）。利用</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">写出来的程序（</span>
				<span lang="EN-US">program</span>
				<span style="FONT-FAMILY: 宋体">），也称为脚本（</span>
				<span lang="EN-US">script</span>
				<span style="FONT-FAMILY: 宋体">）。【注】</span>
		</p>
		<p class="SIJ03">
				<span style="FONT-FAMILY: 楷体_GB2312">【注】</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 楷体_GB2312">脚本的扩展名，通常是“</span>
				<span lang="EN-US">.r</span>
				<span style="FONT-FAMILY: 楷体_GB2312">”。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">第一版诞生于</span>
				<span lang="EN-US">1997</span>
				<span style="FONT-FAMILY: 宋体">年，当时支持三个操作系统。现在是</span>
				<span lang="EN-US">2004</span>
				<span style="FONT-FAMILY: 宋体">年，</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">已经推出</span>
				<span lang="EN-US">2.5.x</span>
				<span style="FONT-FAMILY: 宋体">版，支持</span>
				<span lang="EN-US">43</span>
				<span style="FONT-FAMILY: 宋体">个</span>
				<span lang="EN-US">CPU+OS</span>
				<span style="FONT-FAMILY: 宋体">平台（</span>
				<span lang="EN-US">platform</span>
				<span style="FONT-FAMILY: 宋体">），且具备</span>
				<span lang="EN-US">GUI</span>
				<span style="FONT-FAMILY: 宋体">、数据库存取等功能。</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">不是玩具语言，</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">已经具备项目开发（</span>
				<span lang="EN-US">project development</span>
				<span style="FONT-FAMILY: 宋体">）的能力。</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">也推出一个轻量级的（</span>
				<span lang="EN-US">light-weighted</span>
				<span style="FONT-FAMILY: 宋体">）操作平台，名为</span>
				<span lang="EN-US">IOS</span>
				<span style="FONT-FAMILY: 宋体">（</span>
				<span lang="EN-US">Internet Operating System</span>
				<span style="FONT-FAMILY: 宋体">，网络操作系统）。</span>
		</p>
		<span lang="EN-US" style="FONT-SIZE: 16pt; FONT-FAMILY: Verdana">
		</span>
		<p class="SIJ022" style="MARGIN-TOP: 18pt">
				<span style="FONT-FAMILY: 方正粗圆简体">
						<strong>历史</strong>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">语言的设计者是</span>
				<span lang="EN-US">Carl Sassenrath</span>
				<span style="FONT-FAMILY: 宋体">，你可以在下列的网址看到他的详细自传：</span>
				<span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'">http://www.rebol.com/bio-carl.html</span>
				<span style="FONT-FAMILY: 宋体">。</span>
				<span lang="EN-US">Carl Sassenrath</span>
				<span style="FONT-FAMILY: 宋体">任职过</span>
				<span lang="EN-US">HP</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">Apple</span>
				<span style="FONT-FAMILY: 宋体">等公司，他也是</span>
				<span lang="EN-US">Amiga OS</span>
				<span style="FONT-FAMILY: 宋体">的设计者。</span>
				<span lang="PT-BR">Amiga OS</span>
				<span style="FONT-FAMILY: 宋体">是</span>
				<span style="FONT-FAMILY: 宋体">八十</span>
				<span style="FONT-FAMILY: 宋体">年代</span>
				<span style="FONT-FAMILY: 宋体">（</span>
				<span lang="PT-BR">1985</span>
				<span style="FONT-FAMILY: 宋体">年</span>
				<span style="FONT-FAMILY: 宋体">）</span>
				<span style="FONT-FAMILY: 宋体">最早出现的</span>
				<span lang="PT-BR">PC</span>
				<span style="FONT-FAMILY: 宋体">多任务（</span>
				<span lang="EN-US">multi-tasking</span>
				<span style="FONT-FAMILY: 宋体">）操作系统。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">Carl Sassenrath</span>
				<span style="FONT-FAMILY: 宋体">学习过数十种编程语言，也开发过许多语言的编译器（</span>
				<span lang="EN-US">compiler</span>
				<span style="FONT-FAMILY: 宋体">）或解释器。这样的经验，使得他想要创造出一个与众不同的语言，而</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">正是这样的产物。他也为此在</span>
				<span lang="EN-US">1996</span>
				<span style="FONT-FAMILY: 宋体">年创立了一家公司“</span>
				<span lang="EN-US">REBOL Technologies</span>
				<span style="FONT-FAMILY: 宋体">”，成为这家公司的</span>
				<span lang="EN-US">CTO</span>
				<span style="FONT-FAMILY: 宋体">与总裁。</span>
				<span lang="NL">REBOL Technologies </span>
				<span style="FONT-FAMILY: 宋体">的网址是：</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'">http://www.rebol.com/</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">“</span>
				<span lang="NL" style="LETTER-SPACING: 0.2pt">Get The Message®</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">”</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">是</span>
				<span lang="NL" style="LETTER-SPACING: 0.2pt">REBOL Technologies</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">公司的企业口号</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">（</span>
				<span lang="NL" style="LETTER-SPACING: 0.2pt">slogan</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">），</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">他们甚至将此口号申请为注册商标</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">，</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">可见</span>
				<span lang="NL" style="LETTER-SPACING: 0.2pt">messaging</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">（消</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">息传送</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">）</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">对于</span>
				<span lang="NL" style="LETTER-SPACING: 0.2pt">REBOL</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">语言来说</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">，</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">是一个多么重要的概念。</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">REBOL Technologies</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">公司认为，</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">REBOL</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">是一种消息传送语言（</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">messaging language</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">），可以用来作为程序和程序、人和人、人和程序之间的沟通桥梁。</span>
		</p>
		<p class="SIJ022" style="MARGIN-TOP: 18pt">
				<span style="FONT-FAMILY: 方正粗圆简体">
						<strong>架构</strong>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span style="FONT-FAMILY: 宋体">刚刚也提到，利用</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">语言写出来的程序，称为</span>
				<span lang="EN-US">REBOL script</span>
				<span style="FONT-FAMILY: 宋体">，必须通过</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">解释器才能执行。</span>
				<span lang="EN-US">REBOL Technologies</span>
				<span style="FONT-FAMILY: 宋体">公司已经为</span>
				<span lang="EN-US">REBOL/Core</span>
				<span style="FONT-FAMILY: 宋体">设计了许多平台的解释器，可以在下面的网址免费取得：</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'">http://www.rebol.com/platforms.shtml</span>
				<span style="FONT-FAMILY: 宋体">
						<span class="msoDel">
								<del cite="mailto:方%20%20舟" datetime="2004-03-11T17:20">
										<font color="#ff0000">。</font>
								</del>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span style="FONT-FAMILY: 宋体">有了这些解释器，</span>
				<span lang="EN-US">REBOL script</span>
				<span style="FONT-FAMILY: 宋体">可以在许多不同的平台上执行。如图</span>
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体">所示。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">除了不同平台的</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">REBOL</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">解释器之外，还有不同功能的</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">REBOL</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">解释器。目前常见的</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">REBOL</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">解释器的版本有</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">REBOL/Core</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">、</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">REBOL/View</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">、</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">REBOL/View/Pro</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">、</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">REBOL/Command</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">、</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">REBOL/Command/View</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">。每个版本的功能都不一样，如图</span>
				<span lang="EN-US" style="LETTER-SPACING: 0.2pt">2</span>
				<span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt">所示。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span style="FONT-FAMILY: 宋体">图</span>
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体">只是一个很简略的功能比较图。除了这里所列出的五个解释器之外，还有一个名为</span>
				<span lang="EN-US">REBOL/Link</span>
				<span style="FONT-FAMILY: 宋体">的产品，必须搭配</span>
				<span lang="EN-US">IOS</span>
				<span style="FONT-FAMILY: 宋体">使用。另外，在</span>
				<span lang="EN-US">REBOL/SDK</span>
				<span style="FONT-FAMILY: 宋体">产品中，还有一些特殊的解释器（例如：</span>
				<span lang="EN-US">REBOL/Base</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">REBOL/Face</span>
				<span style="FONT-FAMILY: 宋体">）。</span>
		</p>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">
				<br style="PAGE-BREAK-BEFORE: always" clear="all" />
		</span>
		<p class="MsoNormal" style="MARGIN-TOP: 12pt; TEXT-INDENT: 0cm; TEXT-ALIGN: center" align="center">
				<span lang="EN-US">
						<img height="195" src="http://act.it.sohu.com/book/data/book/05/5/3.files/image003.gif" width="329" />
				</span>
		</p>
		<p class="SIJ04" style="MARGIN-TOP: 12pt">
				<span style="FONT-FAMILY: 楷体_GB2312">图</span>
				<span lang="EN-US">1  </span>
				<span style="FONT-FAMILY: 楷体_GB2312">有了</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 楷体_GB2312">解释器，</span>
				<span lang="EN-US">REBOL script</span>
				<span style="FONT-FAMILY: 楷体_GB2312">可以在不同的平台上执行</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 12pt; TEXT-INDENT: 0cm; TEXT-ALIGN: center" align="center">
				<span lang="EN-US">
						<img height="223" src="http://act.it.sohu.com/book/data/book/05/5/3.files/image004.gif" width="329" />
				</span>
		</p>
		<p class="SIJ04" style="MARGIN-TOP: 9pt">
				<span style="FONT-FAMILY: 楷体_GB2312">图</span>
				<span lang="EN-US">2  </span>
				<span style="FONT-FAMILY: 楷体_GB2312">随着功能不同，</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 楷体_GB2312">解释器分成五种</span>
		</p>
		<p class="SIJ022" style="MARGIN-TOP: 18pt">
				<span style="FONT-FAMILY: 方正粗圆简体">
						<strong>优缺点</strong>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">具有下列的优点：</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">1. </span>
				<span style="FONT-FAMILY: 宋体">跨平台：</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">跨越的平台不会比</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体">少，请看此网址：</span>
				<span lang="EN-US">
						<br />       </span>
				<span lang="PT-BR" style="FONT-FAMILY: 'Arial Narrow'">http://www.rebol.com/platforms.shtml</span>
				<span style="FONT-FAMILY: 宋体">
						<span class="msoDel">
								<del cite="mailto:方%20%20舟" datetime="2004-03-11T17:20">
										<font color="#ff0000">。</font>
								</del>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">2. </span>
				<span style="FONT-FAMILY: 宋体">简单好学：</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">比起</span>
				<span lang="EN-US">Perl</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">C#</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体">等目前流行的语言更容易学习。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">3. </span>
				<span style="FONT-FAMILY: 宋体">易用好写：许多人（包括我自己）发现，</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">写出来的程序，长度只有</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体">的五分之一左右，大幅地提高生产力（</span>
				<span lang="EN-US">productivity</span>
				<span style="FONT-FAMILY: 宋体">）。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">4. </span>
				<span style="FONT-FAMILY: 宋体">内建许多</span>
				<span lang="EN-US">Internet</span>
				<span style="FONT-FAMILY: 宋体">通信协议（</span>
				<span lang="EN-US">protocol</span>
				<span style="FONT-FAMILY: 宋体">）：包括</span>
				<span lang="EN-US">TCP</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">UDP</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">POP</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">FTP</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">HTTP</span>
				<span style="FONT-FAMILY: 宋体">等十多个通讯协议，这使得处理网络的工作变得相当简单。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">5. </span>
				<span style="FONT-FAMILY: 宋体">免费：</span>
				<span lang="EN-US">REBOL/Core</span>
				<span style="FONT-FAMILY: 宋体">与</span>
				<span lang="EN-US">REBOL/View</span>
				<span style="FONT-FAMILY: 宋体">是免费的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">6. </span>
				<span style="FONT-FAMILY: 宋体">核心很小：</span>
				<span lang="EN-US">200+ KB</span>
				<span style="FONT-FAMILY: 宋体">，比起</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体">的数十</span>
				<span lang="EN-US">MB</span>
				<span style="FONT-FAMILY: 宋体">，</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">小了</span>
				<span lang="EN-US">100</span>
				<span style="FONT-FAMILY: 宋体">倍。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">7. </span>
				<span style="FONT-FAMILY: 宋体">效率高：</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">虽然是解释型语言，但是执行效率相当不错，这一点也让我很惊讶。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">8. </span>
				<span style="FONT-FAMILY: 宋体">安全（</span>
				<span lang="EN-US">security</span>
				<span style="FONT-FAMILY: 宋体">）：</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">解释器内建安全管理器。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">9. </span>
				<span style="FONT-FAMILY: 宋体">适合写</span>
				<span lang="EN-US">server</span>
				<span style="FONT-FAMILY: 宋体">程序：</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">本来就相当适合处理</span>
				<span lang="EN-US">Internet</span>
				<span style="FONT-FAMILY: 宋体">和文字，又能进行数据库存取，可以利用</span>
				<span lang="EN-US">CGI</span>
				<span style="FONT-FAMILY: 宋体">或</span>
				<span lang="EN-US">Fast-CGI</span>
				<span style="FONT-FAMILY: 宋体">来开发</span>
				<span lang="EN-US">Web</span>
				<span style="FONT-FAMILY: 宋体">应用。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">10. </span>
				<span style="FONT-FAMILY: 宋体">适合写</span>
				<span lang="EN-US">client</span>
				<span style="FONT-FAMILY: 宋体">程序：</span>
				<span lang="EN-US">REBOL/View</span>
				<span style="FONT-FAMILY: 宋体">可以用来开发</span>
				<span lang="EN-US">GUI</span>
				<span style="FONT-FAMILY: 宋体">程序，而且</span>
				<span lang="EN-US">VID</span>
				<span style="FONT-FAMILY: 宋体">方言使得</span>
				<span lang="EN-US">GUI</span>
				<span style="FONT-FAMILY: 宋体">程序相当容易开发。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">为我带来的最大好处就是，节省时间，提高生产力。利用</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">，我可以更快完成一些程序。一样的程序，如果改用</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体">来写，通常需要花费数倍的时间。使用</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">所提升的生产力，有一点不可思议。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span style="FONT-FAMILY: 宋体">但是</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">并不完美，我觉得目前</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">有以下的缺点：</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">1. GUI</span>
				<span style="FONT-FAMILY: 宋体">组件（</span>
				<span lang="EN-US">component</span>
				<span style="FONT-FAMILY: 宋体">）尚未齐备，欠缺一些组件（例如：</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">没有</span>
				<span lang="EN-US">menu</span>
				<span style="FONT-FAMILY: 宋体">与</span>
				<span lang="EN-US">tree</span>
				<span style="FONT-FAMILY: 宋体">），欠缺常用对话框（例如打开文件、选择颜色），且未具备操作系统</span>
				<span lang="EN-US">GUI</span>
				<span style="FONT-FAMILY: 宋体">组件的外观（</span>
				<span lang="EN-US">look-and-feel</span>
				<span style="FONT-FAMILY: 宋体">）。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">2. GUI</span>
				<span style="FONT-FAMILY: 宋体">绘图功能相当阳春，例如：不支持粗线、贝兹曲线（</span>
				<span lang="EN-US">Bezier</span>
				<span style="FONT-FAMILY: 宋体">）等。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">3. </span>
				<span style="FONT-FAMILY: 宋体">不支持中文。</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">的核心仍是单字节（</span>
				<span lang="EN-US">single-byte</span>
				<span style="FONT-FAMILY: 宋体">），而不是双字节（</span>
				<span lang="EN-US">double-byte</span>
				<span style="FONT-FAMILY: 宋体">）。因为</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">不支持</span>
				<span lang="EN-US">Unicode</span>
				<span style="FONT-FAMILY: 宋体">，所以在</span>
				<span lang="EN-US">REBOL/Core</span>
				<span style="FONT-FAMILY: 宋体">中处理中文变得很麻烦，甚至在</span>
				<span lang="EN-US">REBOL/View</span>
				<span style="FONT-FAMILY: 宋体">中，任何中文字一律变成乱码，无法正确显示出来。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">4. </span>
				<span style="FONT-FAMILY: 宋体">欠缺</span>
				<span lang="EN-US">Web server</span>
				<span style="FONT-FAMILY: 宋体">模块，目前只能使用</span>
				<span lang="EN-US">CGI</span>
				<span style="FONT-FAMILY: 宋体">和</span>
				<span lang="EN-US">Fast CGI</span>
				<span style="FONT-FAMILY: 宋体">来写</span>
				<span lang="EN-US">Web</span>
				<span style="FONT-FAMILY: 宋体">应用。</span>
				<span lang="EN-US">REBOL Technologies</span>
				<span style="FONT-FAMILY: 宋体">公司一直未推出</span>
				<span lang="EN-US">REBOL/Apache</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">5. </span>
				<span style="FONT-FAMILY: 宋体">相当欠缺文件。文件过时（</span>
				<span lang="EN-US">out of date</span>
				<span style="FONT-FAMILY: 宋体">）与欠缺的问题，相当严重。这对于推广</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">相当不利。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span style="FONT-FAMILY: 宋体">其中第一点和第二点（</span>
				<span lang="EN-US">GUI</span>
				<span style="FONT-FAMILY: 宋体">），在</span>
				<span lang="EN-US">REBOL/View 1.3</span>
				<span style="FONT-FAMILY: 宋体">中应该会有很大的改进（目前</span>
				<span lang="EN-US">REBOL/View</span>
				<span style="FONT-FAMILY: 宋体">的版本是</span>
				<span lang="EN-US">1.2.x</span>
				<span style="FONT-FAMILY: 宋体">）。我认为</span>
				<span lang="EN-US">REBOL/View 1.3</span>
				<span style="FONT-FAMILY: 宋体">应该在</span>
				<span lang="EN-US">2004</span>
				<span style="FONT-FAMILY: 宋体">年会推出。而关于第三点（</span>
				<span lang="EN-US">Unicode</span>
				<span style="FONT-FAMILY: 宋体">），最近</span>
				<span lang="EN-US">REBOL Technologies</span>
				<span style="FONT-FAMILY: 宋体">公司给我的答案是，在</span>
				<span lang="EN-US">REBOL/View 1.3</span>
				<span style="FONT-FAMILY: 宋体">推出之后，可能会开始进行</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">核心的改写，以支持</span>
				<span lang="EN-US">Unicode</span>
				<span style="FONT-FAMILY: 宋体">。我希望华人的读者，也能向他们施加压力，以促使他们加速支持</span>
				<span lang="EN-US">Unicode</span>
				<span style="FONT-FAMILY: 宋体">。对</span>
				<span lang="EN-US">REBOL</span>
				<span style="FONT-FAMILY: 宋体">公司有任何建议，到可以利用下面的网页发表意见：</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US" style="FONT-FAMILY: 'Arial Narrow'">http://www.rebol.com/feedback.html</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN-TOP: 9pt">
				<span lang="EN-US">
				</span> </p>
		<p class="a" style="MARGIN: 8.5pt 5.65pt 8.5pt 0cm; TEXT-INDENT: 20.4pt">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">发表日期：</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'"> Feb. 1, 2004</span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/57462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-10 13:19 <a href="http://www.blogjava.net/rosial/articles/57462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 《爪哇夜未眠》- 程序设计学习篇 - Debug</title><link>http://www.blogjava.net/rosial/articles/56349.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 03 Jul 2006 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/56349.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/56349.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/56349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/56349.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/56349.html</trackback:ping><description><![CDATA[
		<font face="宋体">     吃烧饼不免会掉芝麻，写程序不免会有</font>
		<span lang="EN-US">bug</span>
		<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。再怎么高明的程序员，也不敢保证写出来的程序不会有</span>
		<span lang="EN-US">bug</span>
		<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。当发现程序有误，</span>
		<span lang="EN-US">bug</span>
		<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">隐身其中时，就是</span>
		<span lang="EN-US">debugger</span>
		<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">出动的时候了。越是高明的程序员，越是能够灵巧地使用</span>
		<span lang="EN-US">debugger</span>
		<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，让</span>
		<span lang="EN-US">bug</span>
		<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无所遁形。</span>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span lang="EN-US">       Debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的过程分成两个步骤：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 2.4pt 0cm 0pt 42.55pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; mso-para-margin-bottom: .0001pt; mso-para-margin-top: .2gd; mso-para-margin-right: 0cm; mso-para-margin-left: 42.55pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings">
						<span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"><font size="3">         </font></span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">找到</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所在地</span>
				<span lang="EN-US">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 2.4pt 0cm 0pt 42.55pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; mso-para-margin-bottom: .0001pt; mso-para-margin-top: .2gd; mso-para-margin-right: 0cm; mso-para-margin-left: 42.55pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings">
						<span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"><font size="3">         </font></span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修正</span>
				<span lang="EN-US">bug </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      事实上，真正困难的地方在第一点，如果你能找到</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所在地，应该就知道怎么修正</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了。本文章简单地介绍</span>
				<span lang="EN-US">debugger </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的用法，希望你再次遇到</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，能够不慌不忙地把这些技巧派上用场。</span>
		</p>
		<p class="SIJ022" style="MARGIN: 9.6pt 0cm 0pt; mso-para-margin-top: .8gd">
				<span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana">
						<font face="Verdana">
								<strong>调整步伐</strong>
						</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      最不花脑筋的</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式就是：逐行执行，每执行一行程序代码就暂停，立刻观察这一行的执行结果是否如你所预期，没问题的话就继续执行下一行。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      当你在逐行执行的时候，如果遇到了</span>
				<span lang="EN-US">method invocation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（方法调用），你可以选择要跳进此</span>
				<span lang="EN-US">method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者不跳进此</span>
				<span lang="EN-US">method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。欲跳进此</span>
				<span lang="EN-US">method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就使用</span>
				<span lang="EN-US">step in</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；欲一口气执行完此</span>
				<span lang="EN-US">method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就使用</span>
				<span lang="EN-US">step over</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。至于要不要跳进去，你可以有自己的考量。一般来说，如果你认定该</span>
				<span lang="EN-US">method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应该不会有问题时，你就使用</span>
				<span lang="EN-US">step over</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，否则使用</span>
				<span lang="EN-US">step in</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      如果已经在某</span>
				<span lang="EN-US">method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内，但是认为此</span>
				<span lang="EN-US">method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后面的程序代码不会有</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，你可以透过</span>
				<span lang="EN-US">step out</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来往上跳，跳离开这个</span>
				<span lang="EN-US">method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      在</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，前进的步伐很重要，</span>
				<span lang="EN-US">step over</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">step in</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">step out</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">三者必须好好搭配使用，才不会“自乱阵脚”。</span>
		</p>
		<span lang="EN-US" style="FONT-SIZE: 16pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 方正粗圆简体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-font-width: 120%">
				<br style="PAGE-BREAK-BEFORE: always" clear="all" />
		</span>
		<p class="SIJ022" style="MARGIN: 6pt 0cm 0pt; mso-para-margin-top: .5gd">
				<span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana">
						<font face="Verdana">
								<strong>控制疏密</strong>
						</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      光靠上面三种</span>
				<span lang="EN-US">step</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式，要找到</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就如同海底捞针一样，并不容易。你还需要</span>
				<span lang="EN-US">breakpoint</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（断点）的辅助。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      你应该先透过经验来判断，</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最有可能出现在哪些地方。然后在这些地方的前后分别设定</span>
				<span lang="EN-US">breakpoint</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。为了加快</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的速度，我们经常同时在程序中设定多个断点。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      在</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式下执行程序时，遇到断点，程序就会暂停，我们可以利用这个机会检视目前的执行结果是否符合预期，如果有差池的话，就表示刚才执行过的程序代码有问题，你已经找到了</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的区域，立刻停止此次的</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行模式。接着再重来一次，继续缩小范围。当范围已经很小时，可以改用</span>
				<span lang="EN-US">step</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的方式来找</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="SIJ022" style="MARGIN: 6pt 0cm 0pt; mso-para-margin-top: .5gd">
				<span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana">
						<font face="Verdana">
								<strong>分析观察</strong>
						</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      不管是肇因于</span>
				<span lang="EN-US">breakpoint</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>
				<span lang="EN-US">step</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，程序在</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式下暂停时，我们都需要“观察”（</span>
				<span lang="EN-US">watch</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）程序目前的状态（</span>
				<span lang="EN-US">state</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），据以判断方才的执行过程有无错误。程序状态其实就是数据的集合，所以我们的“观察”对象就是程序中的变量值。</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工具可以让我们很方便地观察程序中各个变量的值，有些</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工具还可以让我们输入由变量组成的计算式（</span>
				<span lang="EN-US">expression</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），输出计算结果以方便我们观察。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      某些</span>
				<span lang="EN-US">debugger</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">甚至具有修改变量值的功能，可以让你在程序暂停时，修改程序状态，然后继续执行。</span>
		</p>
		<p class="SIJ022" style="MARGIN: 6pt 0cm 0pt; mso-para-margin-top: .5gd">
				<span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana">
						<font face="Verdana">
								<strong>理清头绪</strong>
						</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      对于多线程（</span>
				<span lang="EN-US">multi-thread</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）程序，</span>
				<span lang="EN-US">debugger</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">依然能进行上述的</span>
				<span lang="EN-US">step</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">breakpoint</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">watch</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。通常</span>
				<span lang="EN-US">debugger</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会在</span>
				<span lang="EN-US">watch</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">窗口中以树状结构区分出线程，然后才个别列出各个线程的区域变量，以免混淆。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      为了因应撰写</span>
				<span lang="EN-US">client/server</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序的需求，有些</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工具甚至可以同时帮助多个</span>
				<span lang="EN-US">process</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行除错。</span>
		</p>
		<p class="SIJ022" style="MARGIN: 6pt 0cm 0pt; mso-para-margin-top: .5gd">
				<span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana">
						<font face="Verdana">
								<strong>隔空抓药</strong>
						</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      “捎来药丸的，可是白胡子的老公公？”我们姑且相信这个妖妇</span>
				<a title="" style="mso-footnote-id: ftn1" href="http://act.it.sohu.com/book/admin/editor_alt.html#_ftn1" name="_ftnref1">
						<span class="MsoFootnoteReference">
								<span lang="EN-US">
										<span style="mso-special-character: footnote">
												<span class="MsoFootnoteReference">
														<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
																<font size="3">[1]</font>
														</span>
												</span>
										</span>
								</span>
						</span>
				</a>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的确具备隔空抓药的本事，但提到这样的本事，许多</span>
				<span lang="EN-US">debugger</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也不多让。越来越多的</span>
				<span lang="EN-US">debugger</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开始支持</span>
				<span lang="EN-US">remote debugging</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，让程序员可以在一部</span>
				<span lang="EN-US">PC</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上，</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另一部</span>
				<span lang="EN-US">PC</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上的程序。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      以</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来说，最早支持</span>
				<span lang="EN-US">remote debugging</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的是</span>
				<span lang="EN-US">VisualCafe</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。现在，</span>
				<span lang="EN-US">Sun</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">JVM </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都支持</span>
				<span lang="EN-US">JVMDI</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				<span lang="EN-US">Java VM Debug Interface</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）以及</span>
				<span lang="EN-US">JDWP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				<span lang="EN-US">Java Debug Wire Protocol</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），所以想设计出一个能隔空抓药的标准</span>
				<span lang="EN-US">remote debugger</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也不难，主流的</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发工具也开始支持</span>
				<span lang="EN-US">remote debugging</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="SIJ022" style="MARGIN: 12pt 0cm 0pt">
				<font face="Verdana">
						<strong>
								<span lang="EN-US">de </span>
								<span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana">程序中的</span>
								<span lang="EN-US">bug</span>
								<span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana">，也</span>
								<span lang="EN-US">de</span>
								<span style="FONT-FAMILY: 方正粗圆简体; mso-ascii-font-family: Verdana">生活中的</span>
								<span lang="EN-US">bug</span>
						</strong>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      我们除了</span>
				<span lang="EN-US">de</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序中的</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，也要</span>
				<span lang="EN-US">de</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">生活中的</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（窃听器也被称做</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。军政要人的座机可能被装满</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，美凤姊姊的座车和手机内也被装了</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。越是重要的人，周遭的</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就会越多，越是需要常常进行</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      如果无法确定生活中毫无</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，请各位务必要做最坏的打算，试图干扰任何可能存在的</span>
				<span lang="EN-US">bug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，做法很简单，例如：放大电视机音量、关灯，都很有效。那也就是为什么，我向亲近好友坦承“关灯版”的男主角其实就是我，至今仍然没有人相信的缘故。</span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/56349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-03 14:45 <a href="http://www.blogjava.net/rosial/articles/56349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 程序设计学习篇 - OOOO</title><link>http://www.blogjava.net/rosial/articles/56348.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 03 Jul 2006 06:43:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/56348.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/56348.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/56348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/56348.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/56348.html</trackback:ping><description><![CDATA[
		<p>
				<br />
				<strong>学镛小辞典</strong>
		</p>
		<p>单字：OOOO（Obsessive-Object-Orientation Obliquity）<br />发音：KK: [O`OOO] DJ: /O`OOO/<br />解释：n. 【医学】【计算机】过度对象导向偏颇症，是一种过度使用对象导向（Object-Orientation）的病症，好发于年轻的程序员身上。属于接触性传染，带原者包括了不良的程序设计书籍和不够专精的程序设计老师及同事同学。<br /><br />例句： </p>
		<p>1.      OO Advocates tend to be OOOO patients.（OO 拥护者很容易就会变成 OOOO 的病人。） </p>
		<p>2.      People with a good understanding of computer science can get rid of OOOO.（对于信息科学有深入的了解可以避免 OOOO。） </p>
		<p>3.      Most OO experts used to be OOOO victims.（大部分 OO 专家都曾经是 OOOO 的受害者。） </p>
		<p>为了要有模有样，我发明 OOOO 这个词时，还特别参考了心理学的强迫症（obsessive-compulsive disorder），原本想叫做 obsessive-object-orientation disorder（OOOD），只是我不喜欢在这个词的最后使用 disorder，我于是用 O 开头的单字 obliquity 来取代 disorder，刚好形成四连 O 的词。</p>
		<p>当今 OOOO 的感染者人数众多，数量直逼想靠乐透彩发大财的愚夫愚妇。他们常常有严重的幻想，认为全世界最了不起的东西就是 OO，成天开口闭口都是 OO，写程序时只管大用特用 OO，完全不管 OO 所带来的负面影响。</p>
		<p>许多错误的信息，是造成 OOOO 普遍的原因。例如下面的说法，在许多书上都看得到：</p>
		<p>对象导向是很自然的，教导一个小孩对象导向比教导一个计算机教授更简单，因为教授已经太熟悉计算机内的运作，所以比较难建立正确的对象导向观念。</p>
		<p>上述的说法并不正确，但是许多人却都以为这样的说法是对的。我认为这样的说法错在于： </p>
		<p>1.      只要对于计算机运作原理的认知不够，很难真的学会 OO，因为 OO 毕竟是用在计算机上的。许多人通常只能了解封装，对于继承不能完全掌握，对于多型更是难以捉摸。 </p>
		<p>2.      只要对于计算机运作原理的认知不够，规划出来的 OO 一点都不实用。可能是效率太差，可能是弹性太差，问题很多。 </p>
		<p>OOOO 患者写出来的程序常常会有下列的病征： </p>
		<p>1.      太多类别：每个类别重用率极低，造成内存浪费太多。通常这样的状况，必须适当地利用继承来改写，或把功能类似的数个类别浓缩成一个类别。 </p>
		<p>2.      太多继承：继承固然可以提高重用率，但是也会使得对象体积变大许多，而且执行效率也会变差。继承被误用的情况一直很严重。更糟的是，继承是一种静态的关连，使得程序的弹性变差。许多时候，继承可以用 associate 来改写。 </p>
		<p>3.      太多物件：通常前述的「太多类别」会造成太多对象的状况，但是即使类别不多，也有机会造成太多对象的状况。一个程序使用太多对象会造成内存浪费。其实在许多时候，对象可以彼此共享的。 </p>
		<p>4.      太多短命物件：这会造成建构（construct）和回收（reclaim）花的时间太多，对于系统效率有很不好的影响。许多程序员的程序中有许多短命对象，但他们却完全不自觉。可以使用 Object Pool 等方式来改写。 </p>
		<p>5.      太多视觉组件：「太多对象」已经很不好了，如果这些对象是视觉组件，更是雪上加霜。视觉组件需要耗费 CPU 大量的运算能力。 </p>
		<p>6.      太多执行绪：其实从 OO 至上的角度来看，每个对象都是一个执行绪是最 OO 的，但是这样显然实际上不可行，因为占用太多 OS 的资源，效率会变很差。 </p>
		<p>想摆脱 OOOO，你需要花好几年的时间。建议各位好好研究 Java Swing，这是一个将 OO 发挥到极致又不失弹性和效率的 API。上述的六个 OOOO 的病征，Swing 完全都没有，足见 Swing 设计的巧妙。</p>
		<p>OOOO 固然不好，但千万不要因噎废食而不用 OO，毕竟 OO 还是好东西，只是再好的东西都要适量。想摆脱 OOOO，您不妨多学习一些好的 design pattern，并认识操作系统、编译器、以及程序语言内部的原理。<br /></p>
<img src ="http://www.blogjava.net/rosial/aggbug/56348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-03 14:43 <a href="http://www.blogjava.net/rosial/articles/56348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 程序设计学习篇 - 语言、平台、链接库</title><link>http://www.blogjava.net/rosial/articles/56344.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 03 Jul 2006 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/56344.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/56344.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/56344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/56344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/56344.html</trackback:ping><description><![CDATA[
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">语言、平台、链接库，这三者之间有很密切的关系。本文尝试着以链接库为中心，探讨它们之间的现况。<span lang="EN-US"><?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">
						<font color="#000000">语言与链接库</font>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">语言通常会伴随着链接库，没有链接库的语言，差不多什么程序都写不出来。比方说，用<span lang="EN-US"> C 语言写出一个印出 Hello 的小程序，你需要用到 stdio 的链接库。用 Python 写 GUI 程序，你需要 Tkinter 链接库。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">
						<font color="#000000">平台与链接库</font>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">平台通常也会伴随着链接库，没有链接库的平台，等于是摆明了不希望别人开发此平台的程序。比方说，你想用<span lang="EN-US"> Visual C++ 6 开发 Windows 程序，你需要用到 GDI32 以及 USER32 或 MFC 等链接库。写 Mac OS 9 的程序，需要 Carbon 链接库。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">
						<font color="#000000">平台的链接库<span lang="EN-US"> vs 语言的链接库</span></font>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">在<span lang="EN-US"> A 平台上用 B 语言开发软件，你会同时面对 A 平台的链接库和 B 语言的链接库，此二链接库因为是不同厂商所提供的，所以可能无法百分之百契合，特别是牵涉到内存管理、资源管理、执行绪等和操作系统有密切关系的主题时。如果你想进行的某功能在 A 平台的链接库和 B 语言的链接库都有提供，那么你应该使用 A 平台链接库的版本，通常比较安全些。比方说，用 C 语言开发 Windows 平台的程序，如果你想配置内存，那么你应该呼叫 Win32 API 的版本（比方说 GlobalAlloc()），而非 C 语言的版本（比方说 malloc()）。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">
						<font color="#000000">跨平台的链接库</font>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">你为某平台所开发的程序，为什么不能在别的平台上重新编译之后就能执行？问题就出在平台的链接库上。比方说，你用<span lang="EN-US"> C 语言搭配 C 的标准链接库和 Win32 链接库，在 Windows 平台上开发出一个演示文稿软件 WeakPoint 2000；你将 WeakPoint 2000 的原始程序拿到 Linux 上编译，却无法编译成功，问题就出在 Linux 没有 Win32 的链接库。<br /><br />那么，如果有一个链接库将各个主要平台的链接库萃取（abstract）出一个共通的链接库，不就可以解决这个问题了。例如 Qt 正是这么做，你的 C++ 程序如果只使用标准的 C++ 链接库和 Qt 链接库，你就可以把程序重新编译之后在不同的平台（Linux，Unix，Windows）上执行。<o:p></o:p></span></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">
						<font color="#000000">语言<span lang="EN-US"> + 平台 + 链接库</span></font>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt">Java 就更了不起了，不但将链接库统一起来，更将平台统一起来，也就是说程序不用重新编译，就可以直接执行。但是也因此，多了一层 JVM，牺牲了一部分的效率。<o:p></o:p></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">
						<font color="#000000">跨语言的链接库</font>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt">Borland 的 VCL 链接库是在 Windows 平台上相当受好评的一套链接库，可以被 C++ 和 Object Pascal（Delphi）使用。其实「跨语言的链接库」不是一种很好的说法，毕竟许多语言都可以连结外部原生链接库，两者不需要是同一种语言。但是这样的连结是否需要大费周章，则有相当大的差异。而 Delphi 和 C++ Builder 使用 VCL 则是相当方便的。<br /><br />即将在本月底问世的 Mac OS X，提供了 Cocoa 链接库。Cocoa 链接库可以被 Objective-C 和 Java 语言使用。Objective-C 和 Java 语言版的 Cocoa 链接库相似性在九成以上。Java 在 Mac OS X 的原生程序设计上被简化成一个纯语言，完全不使用 Java 的 API，只使用 Cocoa 链接库，这倒是挺特别的。（当然 Mac OS X 也另外会有 JVM 来支持一般的 J2SE）<o:p></o:p></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">
						<font color="#000000">语言规格<span lang="EN-US"> + 平台 + 链接库 = 包山包海 ?</span></font>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 10pt">.NET 比 Java 的眼光更高，甚至准备将语言规格也统一起来。.NET 有一个 CLS（common language specification），任何语言只要符合 CLS 这个标准，就可以轻易地整合进 .NET 平台，享用 .NET 平台的资源。这一点就是 Java 比不上的。虽然别的语言一样可以设计出编译器来将程序编译成 Java bytecode，在 JVM 上执行，但 Java 并没有提供直接的支持，所以要移植一个语言到 Java，比移植一个语言到 .NET 来得困难。<br /><br />.NET 虽然允许各种语言，但是为了因应 CLS，所以各个语言常常需要做出妥协更改语言本身，比方说 Visual Basic 的更改幅度就很大（Visual Basic 7 差不多是一个新的语言了），而 JScript 和 Visual C++ 的语言也都有改变。这种方式的语言中立性，无疑是削足适履。有了 CLS 的规范，这些语言会趋于一致，思维模式如出一辙，只有一些微不足道的小差异。历史会证明，C# 会是 .NET 平台上独大的语言，.NET 上的其它语言都将沦为点缀，这么一来，跨语言的宣示，竟成了一个幌子。虽然我对 .NET 的语言中立性这点颇有疑异，但我倒是挺喜欢 .NET framework 的，我忍不住竖起大拇指称赞 .NET framework 是「歹竹出好笋」。<br /><br />.NET 的语言规格和链接库都是统一的。命运多舛的 Eiffel 将 .NET 视为救命的浮木，准备将 Eiffel 移植到 .NET，但这么一来，Eiffel 势必得放弃自行开发的 Windows 专用链接库 WEL（Windows Eiffel Library）与跨平台的链接库（比方说 EiffelVision 等）。难道 Eiffel 没有发现它所以为的浮木，其实是鳄鱼伪装的？<br /><br />同样的问题也会发生在 Delphi 上，如果 Delphi 准备移植到 .NET，也必须更改一部分的语言特性，并可能要放弃在 .NET 上使用 VCL（CLX）。Delphi 这么做一点好处都没有。<o:p></o:p></span>
		</p>
		<h4 style="LINE-HEIGHT: 150%">
				<span style="COLOR: green">
						<font color="#000000">最乱的时代，最好的选择</font>
				</span>
		</h4>
		<p style="MARGIN: 0cm 0cm 12pt; LINE-HEIGHT: 150%">
				<span style="FONT-SIZE: 10pt">看完这篇文章，你可能已经头昏脑胀了。没关系，你只要记得下面这句话就好了：最乱的时代，最好的选择<span lang="EN-US"> ...Java。<o:p></o:p></span></span>
		</p>
<img src ="http://www.blogjava.net/rosial/aggbug/56344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-03 14:39 <a href="http://www.blogjava.net/rosial/articles/56344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《爪哇夜未眠》- 程序设计学习篇 - 你该学什么程序语言？</title><link>http://www.blogjava.net/rosial/articles/56343.html</link><dc:creator>rosial</dc:creator><author>rosial</author><pubDate>Mon, 03 Jul 2006 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/rosial/articles/56343.html</guid><wfw:comment>http://www.blogjava.net/rosial/comments/56343.html</wfw:comment><comments>http://www.blogjava.net/rosial/articles/56343.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosial/comments/commentRss/56343.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosial/services/trackbacks/56343.html</trackback:ping><description><![CDATA[
		<span style="FONT-SIZE: 10pt">
				<font size="3">除非你像我一样学程序语言只是为了到处献宝，否则你在学一套程序语言前，应该先仔细评估到底要学哪一套。每个程序语言的用途都有很大的差异，走了冤枉路可能会耽误到计画实作的进程。</font>
				<span lang="EN-US">
						<br />
						<br />
						<font size="3">我大致上把程序语言分成五类，分述如下：<br /><br /><font color="#000000"><span style="COLOR: green"><font color="#000000"><strong>Web Page Script Languages<br /></strong></font></span><br /></font>用来做网页的语言，可以对网页做控制。如果你希望设计出很炫的网页，光靠 HTML 是不够的，你还得学一套 Web Page Script Language，比方说 JavaScript（ECMAScript）和微软的 JScript。不过两者都是系出同门，所以差不多。WML Script（WAP 手机的 script）也是袭自 JavaScript。<br /><br />许多人知道我不会 JavaScript 之后，都会大吃一惊地反问：「可是你不是会 Java，怎么不顺便学 JavaScript，两个语言不是差不多」。如果依照此推理，我看我差不多每个语言都要学了，因为除了 REBOL 和汇编语言比较特殊之外，我觉得其它语言的语法都差不多（但用途差很多）。<br /><br />不过我最近的确是有打算开始学 JavaScript，因为我发现用到它的机会还不少。除了网页会用到之外，我最近所接触的 SVG（Scalable Vector Graphics）就使用 JavaScript 来达到动画效果。<br /><br /><strong><span style="COLOR: green"><font color="#000000">Interpreted Languages（直译式语言）<br /></font></span><br /></strong>这类直译式的语言包括了 Perl、Python、REBOL、Ruby... 等，也常被称为 script 语言，通常是用来取代批次档和 shell script 以便和底下的操作系统沟通。基本上，每个人至少都应该要会一套这类的语言，当你需要做某件简单的工作，你可以透过直译式的语言来轻易地办到，这么一来，你就可以不必大张旗鼓地使用 Java 和 C++ 等工具了。<br /><br />直译式的语言通常比较高阶，程序比较好写，往往简短地几行程序就抵得过 Java 或 C++ 的一堆程序代码。因为不用编译而且高阶，所以这类语言的程序效率通常很差，又因为原始程序代码暴露在外，所以拿它来写写工具程序自己用可以，但是拿来开发软件产品比较不恰当（除非你不在乎原始码外流）。目前这类语言最常被用来开发网页服务器端的程序，或者是设计软件的 prototype。<br /><br />Python 有一些不错的语言特性，目前在国外算是满热门的；Ruby 是日本一位教授设计的，但是这语言太新了，目前好象只有 Addison Wesley 的一本英文书和 O'Reilly 的一本日文书可供参考；REBOL 则是我近期最喜欢的程序语言，非常特别，REBOL 语言的思维和别的语言差异非常大，许多时候很接近英文句子。至于 Perl，我就没有研究了，台湾欧莱礼公司已经有 Perl 的专家了，如果我现在去学 Perl 的话，短期内是不可能超越他的，所以我看算了 :(<br /><br /><br /><span style="COLOR: green"><strong><font color="#000000">Hybrid Languages（混合式语言）</font><br /></strong></span><br />Java，C# 都是混合式语言，介于直译式语言和编译式语言之间（不管是在执行效能上或程序简单性上）。<br /><br />C# 的语言有许多奇怪的特色，但也有一些不错的特色。C# 的学习使用上的难度介于 Java 和 C/C++ 之间。C# 是 Microsoft .NET 平台上最重要的语言，值得我们持续观察其后续发展。至于 Java 我就不用多说了，相信 Sleepless in Java 的读者们应该都知道 Java 是怎么一回事。<br /><br />至于 Visual Basic，在 .NET 平台主推 C# 语言，而 VisualBasic .NET 的语言又比以前复杂许多的情况下， Visual Basic 的前途似乎很不看好。<br /><br /><span style="COLOR: green"><font color="#000000"><strong>Compiling Languages（编译式语言）<br /></strong></font></span><br />C/C++，Delphi（Object Pascal）都是编译式语言。这几年来，C++ 已经变得越来越庞大了，大多数的 C++ 程序员只用到（也只懂）C++ 功能的一小部份。想成为 C++ 语言真正的高手，没有耗上三五年是不可能的。虽然 C++ 很复杂，但是真正想成为程序高手的人应该都要懂 C/C++，重要的 API 都会有 C/C++ 的版本，由此可见 C/C++ 的重要性。至于 Delphi，在 Microsoft .NET 推出之后会对 Delphi 造成一些打击（Microsoft .NET 的语言名单中连 Scheme、Eiffel 和 Mercury 这种少用的语言都出现了，独缺 Delphi），但是 Delphi 能透过 Kylix 来跨越 Windows 和 Linux，又是一个很大的吸引力，如果你想要跨 Linux 和 Windows 平台的 RAD 工具（语言），目前 Delphi 似乎是最好的选择。<br /><br /><span style="COLOR: green"><font color="#000000"><strong>Assembly Languages（汇编语言）<br /></strong></font></span><br />使用汇编语言，你将尝试到一砖一瓦堆砌出程序的乐趣（或痛苦）。汇编语言可以说是最接近硬件的语言，学会汇编语言，就可以对计算机的运作有相当程度的了解。不过，目前连开发驱动程序都不太需要用到汇编语言了。恐怕只有做 DSP 和 OS 等极少部份的人需要用到汇编语言。我也好久没写汇编程序了，以前 DOS 时代，我还用汇编语言写过一个 PE 2。<br /><br /><span style="COLOR: green"><font color="#000000"><strong>程序语言学习顺序的建议</strong></font><br /></span><br />通常 Web Script 最简单，直译式语言其次，接着是混合式语言，和编译式语言，最麻烦的是汇编语言。如果你完全没有程序经验，想开始学程序设计的话，你可以从 JavaScript 着手，等到程序基础观念建立得差不多了，再往下学习直译式语言，然后再学习混合式语言 ...，以此类推。<br /><br />希望这篇文章能解决读者们选择程序语言的困扰。<?xml:namespace prefix = o /?><o:p></o:p></font>
				</span>
		</span>
<img src ="http://www.blogjava.net/rosial/aggbug/56343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosial/" target="_blank">rosial</a> 2006-07-03 14:37 <a href="http://www.blogjava.net/rosial/articles/56343.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>