<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_止于至善</title><subtitle type="text">软件之美在于她的外在功能、内部结构和团队创建她的过程。</subtitle><id>http://feed.cnblogs.com/blog/u/11704/rss</id><updated>2011-12-29T02:56:57Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/11704/rss"/><entry><id>http://www.cnblogs.com/wxx/archive/2011/11/21/2257061.html</id><title type="text">周鸿袆：从程序员创业谈起</title><summary type="text">离开雅虎中国后的周鸿袆现在的身份是IDG公司的投资合伙人，手中拿着五亿美金用来做风投的他自然对创业有着说不完的话题。由于周鸿袆出身程序员，也一直是本刊的忠实读者，他希望一方面站在投资商的角度，同时以一种过来人的身份来探讨“程序员创业”这个话题。一个周五的傍晚，在北京光华路的一个酒吧中，本刊约到周鸿袆进行这次对话。从昌平远道赶来的周鸿袆由于塞车而晚到了半个小时。由于开会讲了一天的话，他的声音有些嘶哑。不过在草草的吃了晚饭后，周鸿袆仍然用其快速的语调表达了自己的观点。记者：我已经看到您在其它的媒体上接受了一些采访，也谈到了很多关于创业的话题。面对程序员这个群体，讲创业有什么特别的地方呢？周鸿袆：的</summary><published>2011-11-21T04:54:00Z</published><updated>2011-11-21T04:54:00Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wxx/archive/2011/11/21/2257061.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/archive/2011/11/21/2257061.html"/><content type="html">&lt;p&gt;离开雅虎中国后的周鸿袆现在的身份是IDG公司的投资合伙人，手中拿着五亿美金用来做风投的他自然对创业有着说不完的话题。由于周鸿袆出身程序员，也一直是本刊的忠实读者，他希望一方面站在投资商的角度，同时以一种过来人的身份来探讨&amp;ldquo;程序员创业&amp;rdquo;这个话题。&lt;/p&gt;&#xD;
&lt;p&gt;一个周五的傍晚，在北京光华路的一个酒吧中，本刊约到周鸿袆进行这次对话。从昌平远道赶来的周鸿袆由于塞车而晚到了半个小时。由于开会讲了一天的话，他的声音有些嘶哑。不过在草草的吃了晚饭后，周鸿袆仍然用其快速的语调表达了自己的观点。&lt;/p&gt;&#xD;
&lt;p&gt;记者：我已经看到您在其它的媒体上接受了一些采访，也谈到了很多关于创业的话题。面对程序员这个群体，讲创业有什么特别的地方呢？&lt;/p&gt;&#xD;
&lt;p&gt;周鸿袆：的确如此，最近由于我的身份，只接受创业方面的话题。关于程序员创业，我之所以愿意谈我的观点，是因为我是程序员出身，也是从小公司做起来的，我自认为对待很多程序员个人包括共享软件作者和一些小网站还是很好的。我希望和他们分享一些经验和体会。&lt;/p&gt;&#xD;
&lt;p&gt;首 先，我想说的是聪明人不一定能成功，很多程序员很聪明，但我一看就知道他们不会成功。因为我看到了一些问题，而且现在太多程序员存在很多误解。因此，我希 望把我的观点告诉程序员。或许有一些程序员能够清醒，某个人可能因为我的某一句话有了感觉，对他以后的成长产生了帮助，这就足够了。&lt;/p&gt;&#xD;
&lt;p&gt;要知道，程序员总是以为自己优秀所以就能成功，其实不是。中国的程序员大部分是盲目的：看看CSDN的论坛就能够感觉到，要么有一群人自我感觉极端的良好，以专家自居，要么就是一群蓝领埋怨公司和社会环境不行，待遇不好。&lt;/p&gt;&#xD;
&lt;p&gt;应该说，中国程序员创业的成功率也是很低的。放眼望去，中国互联网成功的人士有几个是真正写过十年软件的。事实上，现状和我们所能听到的媒体宣传的故事很不一样。&lt;/p&gt;&#xD;
&lt;p&gt;很多程序员的最高理想就是写一个共享软件，一年可以挣几百万。但我希望谈的不是告诉程序员如何挣钱，挣钱很容易，而是要告诉程序员如何去创业。比如虽然FlashGet的作者收入很高，衣食无忧，但从创业的角度看，它并没有以商业公司的方式创业成功。&lt;/p&gt;&#xD;
&lt;p&gt;记者：那根据您的观察，中国的程序员在创业方面欠缺哪些？&lt;/p&gt;&#xD;
&lt;p&gt;周鸿袆：首先，我看到中国程序员的合作心态非常缺乏，我认为这是中国程序员最大的问题，当然这是有很多原因的。&lt;/p&gt;&#xD;
&lt;p&gt;大 家经常说这句话：态度决定一切。但事实上好程序员基本上都比较傲气，因为程序员往往会觉得自己在做世界上一件十分伟大的事情，这就是驱动机器，修改一行代 码，机器就能够工作，可以产生各种不同的行为。这很容易会让程序员产生一种错觉，认为自己可以Control Everything。程序员的自信在编程上是非常需要的，但不是适合一切场合。如果我们不说这些，可能很多程序员到现在还不知道自己错在哪里，仍然认为 自己是King of the World。&lt;/p&gt;&#xD;
&lt;p&gt;事实上，程序员的能力只是控制了一个机器。但创业仅仅具备了和机器打交道这一种能力是绝 对不够的，他还需要和合作伙伴、竞争对手、投资人、员工甚至整个社会环境打交道。很多程序员因为已经习惯了和机器打交道，不善于也不愿意其它的工作。很多 程序员会内心认为&amp;ldquo;营销不是很简单嘛，市场很简单啊，管理也很简单啊，&amp;rdquo;我认为这种心态是非常害人的。&lt;/p&gt;&#xD;
&lt;p&gt;程序员还是一个很固执的人群，他觉得自己是机器的统帅，因此不会灵活，不会妥协。我当时也喜欢写程序，但我知道如果自己沉迷于写程序，肯定没戏，所以是逼着自己改变角色。&lt;/p&gt;&#xD;
&lt;p&gt;记者：在做公司的过程中，您应该也经常和不同层次的程序员打交道吧？有什么深刻的故事和印象？&lt;/p&gt;&#xD;
&lt;p&gt;周 鸿袆：这两天，我收到几封程序员的来信。有一封信中大意说&amp;ldquo;我是个如此优秀的程序员，为什么我就不能成功呢，请你指点。这里有我的blog地址，看完你就 会了解我了。&amp;rdquo;我想说的是：如果真的希望别人帮忙，就要把情况真实的说出来，而不是上来就说自己很优秀，这种语言就会让别人觉得很不舒服，不是很好的交流 方式。我还真看了那个blog，但看完之后，觉得这个程序员就是一个空想狂。&lt;/p&gt;&#xD;
&lt;p&gt;可以说，很多程序员实际上是优秀带来了自负，这种自负使得其不要说创业，可能在在公司中工作也会遇到问题。所以，我甚至认为程序员在创业方面遇到的困难比其它类型的人员更大。如果程序员希望主导一个创业，可能首先就要逼自己不是一个程序员。&lt;/p&gt;&#xD;
&lt;p&gt;记者：所以我们不能只单纯谈程序员创业，而是要从程序员创业谈起。为了避免这些问题，要做哪些转变呢？&lt;/p&gt;&#xD;
&lt;p&gt;周 鸿袆：是的，要从创业谈起。程序员首先要学会和别人合作。提到这点，很多程序员都会说&amp;ldquo;我正在带着其他程序员写程序啊，我会合作啊。&amp;rdquo;但这种合作是片面 的，我所谈的不仅仅是程序员和程序员之间的合作，而是包括了程序员和其它各种角色之间的合作。程序员相亲，他们的语言比较能够容易理解。但作为一个程序 员，你能不能商业人员、销售人员很好的合作呢。&lt;/p&gt;&#xD;
&lt;p&gt;我这些年还看到很多这样的例子：程序员动不动就把目标定为比尔&amp;middot;盖茨。其实，比尔盖茨 不应该成为程序员崇拜的目标对象，这会让程序员迷失方向，因为微软另外一个创始人保罗&amp;middot;艾伦才是真正的程序员。再看其它一些例子，Google的第20名 程序员都可以获得五亿美元。Adobe公司两个创始人也是一个精通技术，一个对商业精通，这样的搭配才能够更好的成功。因此，对于很多程序员来说，一定要 找准真正的榜样，不要被外界的故事迷惑了头脑。如果剖开一些故事的外表，你会发现国外很多成功的程序员，背后一定有一个很强大的商业感觉的人或者一个团 队。&lt;/p&gt;&#xD;
&lt;p&gt;记者：那也就是说，程序员应该作为一种创业的参与者，而不一定要做主导者了？&lt;/p&gt;&#xD;
&lt;p&gt;周鸿袆：程序员的商业感觉其实并 不是很好。即便有商业感觉，其实这只是一个灵感，一个创意，但要要做成、做大还需要一系列的管理、市场、运营，这些对于程序员是不可想象的。程序员要明 白，在自己不擅长的领域，找到一个可以弥补自己缺陷的合作团队才是出路。加入一个创业团队，可能个人占10%，但因为更容易成功，而且团队可以做100分 的事情。而如果只是一个人做，很可能就失败了。&lt;/p&gt;&#xD;
&lt;p&gt;这方面，国外的程序员对自己的长短比较清楚。在硅谷，很多程序员技术上都很牛，但他们 都非常知道自己只是在技术这个领域水平比较高，出了这个领域，自己什么都不是。正因为有了这种心态，他们特别懂得与人合作。我认为国外的程序员已经普遍意 识到了这点，他们很愿意成为创业团队中的一员而并非自己创业。&lt;/p&gt;&#xD;
&lt;p&gt;因此，程序员需要调整心态，不要把自己当作精英人物，要承认自己在编程方面是优秀的，但永远有人比自己更优秀，对于其它的领域，很可能自己很无知。要知道，其实程序员的选择其实是最少的，因此抱有开放的心态是最重要的。&lt;/p&gt;&#xD;
&lt;p&gt;记者：你认为国内的程序员在哪些地方还与创业的要求存在一定差距？&lt;/p&gt;&#xD;
&lt;p&gt;周 鸿袆：我认为现在的很多程序员经验过于不足，他没有认真踏实做过很多工作就奢谈创业。如果一个程序员没有在编程方面深入过，没有积累，也就是半瓶子醋。这 样的程序员我接触过很多，他们自己也不清楚问题出在哪里，让人感觉又爱又恨。我认为程序员既然要凭借自己的技术，那就一定要踏实，要能够实现任何创意。&lt;/p&gt;&#xD;
&lt;p&gt;但现在一些程序员自己没有商业意识，却又很自负，不相信别人，不理解的事情就不做。我遇到过很多程序员，他们对公司做什么方向都质疑。他 们希望自己先想清楚，可是一想就浪费了很长时间。很多程序员就可悲在这里，积累的不多，看不到方向，但他也不相信自己的公司和老板，这是一个悖论，需要程 序员深刻反省。要知道，每个公司都有懂商业的人。&lt;/p&gt;&#xD;
&lt;p&gt;就这样，一些程序员极端自负，另外有一些程序员碰了很多钉子之后，感觉很自卑，于是便认为国内软件业不行，最后出国或者打工，很少有程序员能对自己能做公正的评价。&lt;/p&gt;&#xD;
&lt;p&gt;记者：您是否认为国内的环境是造成程序员浮躁的因素呢？&lt;/p&gt;&#xD;
&lt;p&gt;周鸿袆：这个倒问住我了，我以前没有仔细考虑过这点。但我想，不管怎样，程序员需要先从自身找问题，因为大环境就是这样了。我承认一个现实：程序员生存状态并不是很好，但程序员很多报怨其实是一种不切实际的期望值和自身的缺陷产生的反差。&lt;/p&gt;&#xD;
&lt;p&gt;首 先，产品没有大小，只有市场的大小。很多人总是觉得这也小，那也看不上。认为公司做的产品很无聊，要做就要像CSDN论坛中某些人宣扬那样：做游戏一定要 做3D引擎，好像只有这样才够牛。这其实就是一种浮躁。很多程序员写软件总是很多bug，基础知识也不牢固，没有参加几个项目，没有写过十万行代码，就奢 谈做大项目，这有价值吗？&lt;/p&gt;&#xD;
&lt;p&gt;而且我还发现有些程序员特别愤青，骂环境，骂老板，其实这只能把自己的心态搞的很坏。很多人刚进公司时做的 很差，虽然工资少，但他没有想到给公司增加了很多bug，公司实际上是在给他出学费。论坛上大家都在讨论哪里活干得少钱拿的多。甚至还有人列了一些黑名 单。这种做法的结果就是程序员自己将周围环境搞的乌烟瘴气了。&lt;/p&gt;&#xD;
&lt;p&gt;有的程序员还非常喜欢指点江山，指点公司。我个人觉得这不是不可以，但 指责别的公司对个人没有什么好处，因为存在就是合理的。如果看不到，恰恰证明是自己看不到。我看到很多程序员也写blog，技术交流的我认为非常好，但有 些人是写评论。我是觉得程序员不要做评论家，中国不缺评论家，最缺的是实干家。&lt;/p&gt;&#xD;
&lt;p&gt;总之，程序员一般过于自我。总生活在自我的世界中，就不可能真正了解世界是什么。我很早就意识到了这些问题，也努力的去客服。我的经验就是看别人如何做的好，为什么能够做的好，什么是我所不能理解。程序员要学会慢慢站在别人立场上看问题。&lt;/p&gt;&#xD;
&lt;p&gt;记者：您对希望创业的程序员有哪些建议呢？&lt;/p&gt;&#xD;
&lt;p&gt;周 鸿袆：对程序员来说，现在要做的也很简单，这就是需要大量的实践，要慢慢培养对产品，对商业的感觉。我的建议说出来可能有些忠言逆耳。对绝大多数程序员来 说，自己一个人成功的机率是很小的，所以我认为加入一个创业的团队可能更为合适。现在有很多初期创业的公司，也需要很多优秀的程序员加盟。如果有理想，可 以选择加入一个团队，也有相应的股份，这方面我可以充当一个桥梁。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wxx/aggbug/2257061.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wxx/archive/2011/11/21/2257061.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wxx/archive/2011/10/30/2229378.html</id><title type="text">什么是XCode</title><summary type="text">Xcode 是用于构建 Mac OS X 及 iOS 应用程序的完整工具集 - Xcode 4 的工具经过重新设计，它们的性能更优秀、使用更容易，能带给用户前所未有的助益。Xcode IDE 能够理解所有的工程细节，可以识别代码中的语法及逻辑错误，甚至能够帮助您修正代码中的错误。 简言之，Xcode 4 能够帮助您编写更好的代码。 Xcode 4 具有全新的用户界面，而且它赖以构建的技术也得到了充分的验证。一方面，苹果公司自身就是通过这些技术构建 Mac OS X 以及 iOS；再者，开发者利用这些技术已生产出超过 25 万个 Mac OS X 及 iOS 应用程序。 Xcode 4的...</summary><published>2011-10-30T08:47:00Z</published><updated>2011-10-30T08:47:00Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229378.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229378.html"/><content type="html">&lt;div&gt;Xcode 是用于构建 Mac OS X 及 iOS 应用程序的完整工具集 - Xcode 4  的工具经过重新设计，它们的性能更优秀、使用更容易，能带给用户前所未有的助益。Xcode IDE  能够理解所有的工程细节，可以识别代码中的语法及逻辑错误，甚至能够帮助您修正代码中的错误。 简言之，Xcode 4 能够帮助您编写更好的代码。&lt;br /&gt; &lt;br /&gt; Xcode 4 具有全新的用户界面，而且它赖以构建的技术也得到了充分的验证。一方面，苹果公司自身就是通过这些技术构建 Mac OS X 以及 iOS；再者，开发者利用这些技术已生产出超过 25 万个 Mac OS X 及 iOS 应用程序。&lt;br /&gt; &lt;br /&gt; Xcode 4的新特性&lt;br /&gt; &lt;br /&gt; &amp;#9679; 单窗口&lt;br /&gt; &lt;br /&gt; 如果是有经验的 Xcode 用户，则首先会注意到 Xcode 4 把以前执行日常开发任务的多个窗口合并成一个。Xcode 4  的工作区含有数个极具特色的 UI 元素。有了它们，操作多个不同任务，甚至多个工程就变得非常容易，再也不会把工作区弄得凌乱不堪。在使用 Xcode  4 的过程中，编辑器总是位于屏幕前方中心处。&lt;br /&gt; 导航器&lt;br /&gt; Xcode 4  的左边是一些导航器，包括一个工程文件列表、已排序的符号、一个居中的搜索界面、正在跟踪的问题、带有可压缩栈纪录的调试数据、激活及未及激活的断点以及 一些可以长期保存的日志。通过这些导航 UI 联合在一起，用户便可对工程的内容以及搜索结果进行实时过滤，这样就可以把精力集中于当前的任务。&lt;br /&gt; 跳转栏&lt;br /&gt; 编辑面板上方是路径栏，它显示当前文件的相对位置。点击路径中的某一位置就可立刻跳转到对应路径层次的其他文件。这一功能即所谓的跳转栏，当您将整个桌面用于显示编辑源代码，跳转栏可有效应用于不同文件的快速跳转。&lt;br /&gt; &lt;br /&gt; &amp;#9679; 内置的 Interface Builder&lt;br /&gt; &lt;br /&gt; 在 Xcode 4 中，Interface Builde 已彻底整合至 Xcode IDE - 不再是独立的应用程序。&lt;br /&gt; 选取一份工程中的界面文件（具有 .nib/.xib 后缀的文件）就能打开 Xcode 的 IB  编辑器。打开右手边的工具区，就可以看到整个界面观察器、控件库以及 UI 对象。在开发 Mac OS X 或者 iOS  应用程序的时候，您可以从控件库拖出控件， 将之放置在程序的画布上，并可设定它的位置，从而实现程序的布局。&lt;br /&gt; 最好的功能：您可以直接把连接从 UI 设计区域拖到源代码区域。Xcode 4  新型的分隔式编辑器布局大大简化动作和插座变量的编写。只要把连接拖到现有的代码即可-一个手势即可搞定。如果还没有编写连接所需要的代码呢？在这种情况 下，Xcode 将会为您创建一个新的插座变量或动作。只要将连接拖动至源文件的空白区域，Xcode 就能生成相应代码。&lt;br /&gt; &lt;br /&gt; &amp;#9679; Assistant&lt;br /&gt; &lt;br /&gt; 不管是编写代码还是设计界面，任何修改都不可能孤立变化。哪怕是一个最小的编辑动作，都可能在工程中产生级联效应。通常情况下，您不仅需要看到当前文件，还需要看到与之相关的文档。&lt;br /&gt; Xcode 4 的双面板编辑器布局搭配上 Xcode Assistant 之后，其功能强大得让人惊讶。当您在工作的时候打开  Assistant，IDE 会预测您需要查看那些其他的文件。如果您正在编辑一个新的派生类，Assistant  将会为您显示父类代码。如果您正在编写新的实现代码，Assistant 会自动为您显示头文件。如果您正在设计一个界面，Assistant  会自动为您显示恰当的控制器，这样可以让拖放代码连接变得极其简单。如果您正在设计数据模型，Assistant 又会把一些可支持模型的类显示在您眼前  - 一切都自动进行。&lt;br /&gt; &lt;br /&gt; &amp;#9679; Apple LLVM 编译器 2.0&lt;br /&gt; &lt;br /&gt; Apple LLVM 是下一代编译器技术，它是 Xcode 4 如此强大的力量之源。Apple LLVM 以 LLVM.org  项目为基础，该项目是苹果的工程师领导的优秀的开源项目。此外，Apple LLVM 编译器采纳最新的思想，并针对 iPhone、 iPad  以及多核 Mac 进行优化。&lt;br /&gt; Apple LLVM 执行速度很快，其编译代码的速度比 GCC 快两倍，生成应用程序运行速度也更快（相比 GCC  生成的应用程序）。整个编译器被构建成为一组高度优化的库，使用方便且易于优化，并专门针对当前最新的芯片架构进行设计。在 Xcode 4 当中，整个  Apple LLVM 编译器栈&amp;#8212;从千对解析器到后端代码优化器&amp;#8212;都对 C、 Objective-C 以及 C++ 有极佳的支持。&lt;br /&gt; Xcode 4 的语法高亮、代码补全以及其他所有的索引驱动的功能都通过 LLVM 解析器进行处理。编译器知道的符号， Xcode IDE  都知道。它在代码编辑期间就对于 C、 Objective-C 以及 C++ 有很好的理解。其精确程度不逊于链编期编译器对它们的理解。&lt;br /&gt; &lt;br /&gt; &amp;#9679; Fix-it 和 Live Issues&lt;br /&gt; &lt;br /&gt; Apple LLVM 引擎会在后台不断地分析您写的代码，理解其含义。在您输入代码的时候， 编辑器新增的 Live Issues  功能可以利用引擎对代码的理解，向您报告编码错误。其工作方式与文字处理工具高亮拼写错误类似，不需要先点击  &amp;#8216;build&amp;#8217;命令，便可高亮出常见的编码错误。&lt;br /&gt; 自动修正错误&lt;br /&gt; IDE 非常聪明，不仅能够报告错误，甚至可以修改错误。在许多情况下， Xcode  除了报告错误，还向您提供解决方案。只要点击其报告的错误，就可以看到它提供的解决办法，例如把赋值符号修改为比较操作，修正某个拼写有误的符号或者添加 一个缺失的分号。只需按一个键盘快捷键就可立即修正错误，然后继续编码。&lt;br /&gt; Fix-it 指 Analyze 会在您输入代码的同时执行严格检测，这是一种极其有用的功能。 Xcode  静态分析器将会遍历成千上万条代码路径，查找不具有预期行为的代码（在代码合乎语法规则的前提下），例如查找代码是否有内存分配错误，是否存在永远不会被 运行的声明，是否有未正确构造的循环。&lt;br /&gt; 只要把 Fix-it 和 Xcode Analyze 的功能结合起来，您发现程序错误的时间将远远早于用户。&lt;br /&gt; &lt;br /&gt; &amp;#9679; 版本编辑器&lt;br /&gt; &lt;br /&gt; 通过使用 Xcode 4 的版本编辑器，在一个实时编辑器同时查看任意两个版本的源代码变得易如反掌。更重要是，版本编辑器是在 IDE  中对源代码进行控制管理的新方式，因为比较视图同时也是一条时间轴，拖动视图中间的滑动条，您就可以按时间回溯工程，比较任意两个版本的源代码。&lt;br /&gt; 版本编辑器也可以向您显示已发生事件的详细日志，可以对 check-in 责任进行追踪。很多复杂的 SCM  命令都由它在幕后管理，不需要您操心。它甚至可以在一个 Xcode 4  工作空间中管理多个工程（例如，它可以管理两个分别由不同版本控制系统管理的工程，一个由 Subversion 管理，另一个则由 Git  管理），并且所有的工程能够自动更新。&lt;br /&gt; &lt;br /&gt; &amp;#9679; 新调试器&lt;br /&gt; &lt;br /&gt; Xcode 4 引入 LLDB，这是一个全新的调试引擎，由苹果公司捐献给 LLVM.org 开源项目。和 LLVM 类似，LLDB 引擎从一开始就被设计成为消耗内存非常少且具有极佳性能的应用。&lt;br /&gt; 新的 LLDB 调试引擎可以和 Xcode 4  的调试界面完美结合。在程序运行的时候，导航器会向您显示栈纪录。在调试的时候，您可以对栈纪录进行扩展或压缩，以此来显示或隐藏栈帧。在单步运行的时 候，您甚至可以锁定某个线程，然后再点击&amp;#8220;continue&amp;#8221;，这样可以跟踪特定线程的执行。在 Xcode 4 里面，多核调试和具有代码块以及  Grand Central Dispatch 的多核编码同样简单。&lt;br /&gt; &lt;br /&gt; &amp;#9679; Xcode 4 的仪器&lt;br /&gt; &lt;br /&gt; 仪器、跳转栏以及 Xcode 4 UI 中的栈压缩都具有最新式的界面。通过 Xcode4  的新启动方案，开发者很容易就能为运行在仪器中的程序创建一套健全测试装置。新的启动方案包括以&amp;#8220;延时模式&amp;#8221;启动仪器，不让收集数据的界面显示在屏幕上， 把系统资源节省下来留给运行和计量应用程序所需。&lt;br /&gt; Xcode 4 新增了一些数据收集仪器，包括用于跟踪 iPhone 图形性能的 OpenGL ES  仪器，可发现非预期内存增长的内存分配监视仪器，只需要很低消耗便可收集数据样本的 iOS 系统 Time  Profiler，用于了解所有系统进程如何交互的 System Trace。&lt;br /&gt; 不同功能的仪器正在增多，而且它们耗费的系统资源越来越少，因而，能够带给用户前所未有的助益。 &lt;/div&gt;&lt;div&gt;&lt;div id="p_fullcontent"&gt;  &lt;p&gt;&lt;img src="http://www.oschina.net/uploads/img/200906/26133312_Nmvh.png" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.oschina.net/uploads/img/200906/26133552_evis.png" alt="" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/wxx/aggbug/2229378.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229378.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wxx/archive/2011/10/30/2229376.html</id><title type="text">携云而来的iOS 5</title><summary type="text">昨日，就在iPhone 4S面世后的一周，Apple 为开发者和用户正式发布了iOS 5，该版本适用于iPhone 3Gs之后的iPhone以及iPod系列产品。本次升级主要带来了原生的Twitter支持、使用iCloud为应用和用户创建的文档提供备份服务、在 无需PC的情况下，通过无线来更新操作系统等特性。 以开发者的角度来看，借助iCloud和iMessage提供的API，可以进行数据保存以及同其他用户进行通信，包含在应用中进行群组聊天（例如 提供了即时反馈的机制）。既可通过单独应用发布Twitter消息，也可使用Twitter提供的短URL服务来进行发送。同时还为开发者提供了模拟 GP.</summary><published>2011-10-30T08:43:00Z</published><updated>2011-10-30T08:43:00Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229376.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229376.html"/><content type="html">&lt;div&gt;&lt;p&gt;昨日，就在&lt;a target="_blank" href="http://www.apple.com/pr/library/2011/10/04Apple-Launches-iPhone-4S-iOS-5-iCloud.html"&gt;iPhone 4S面世后的一周&lt;/a&gt;，Apple 为开发者和用户正式发布了iOS 5，该版本适用于iPhone  3Gs之后的iPhone以及iPod系列产品。本次升级主要带来了原生的Twitter支持、使用iCloud为应用和用户创建的文档提供备份服务、在 无需PC的情况下，通过无线来更新操作系统等特性。&lt;/p&gt; &lt;p&gt;以开发者的角度来看，借助iCloud和iMessage提供的API，可以进行数据保存以及同其他用户进行通信，包含在应用中进行群组聊天（例如 提供了即时反馈的机制）。既可通过单独应用发布Twitter消息，也可使用Twitter提供的短URL服务来进行发送。同时还为开发者提供了模拟 GPS定位导航服务的工具，以及检测泄漏的工具。&lt;/p&gt; &lt;p&gt;在图像支持的方面，主要包括OpenGl ES 2.0版本的升级以及新增的GLKit，GLKit  API主要被用来开发图形类游戏。开发工具升级到了Xcode 4.2版本，此版本中带来了大量的改进，包含自动引用计数（ARC，Automatic  Reference Counting），ARC  提供了类似于codebase的一种垃圾回收器，但不同的是，出于性能的考虑，现在常用的retain，release操作将不允许开发者使用。AV  Foundation框架允许应用将流媒体输出到Apple TV或其他支持AirPlay的设备上。&lt;/p&gt; &lt;p&gt;iOS 5已经可以下载，面向开发者的开发文档及下载地址可通过&lt;a target="_blank" href="http://developer.apple.com/technologies/ios5/"&gt;开发者网站&lt;/a&gt;进行下载。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;查看英文原文：&lt;/strong&gt;&lt;a target="_blank" href="http://www.infoq.com/news/2011/10/ios5-cloud"&gt;iOS 5 Brings Cloud to All&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/wxx/aggbug/2229376.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229376.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wxx/archive/2011/10/30/2229374.html</id><title type="text">WPF与Silverlight的关键区别？</title><summary type="text">当WPF和Silverlight越来越受到.NET开发人员重视的时候，两者间的界限也越来越模糊。回顾六月，Wintellect发布了鲜为人知但极其重要的“微软WPF和Silverlight之异同白皮书”。我们建议GUI开发人员要通读全部69页，我们会列出主要的观点及其对相关业务范围开发人员的影响。 依赖关系属性是两个平台的重要组成部分，使用PropertyMetadata可代替普通字段来保存属性。Silverlight仅提供了该类，而WPF却有若干子类型可用。 UIPropertyMetadata添加了一个标识符，用于决定“在使用了元数据实例的地方，是否应该禁播依赖关系属性的动画”Framew</summary><published>2011-10-30T08:39:00Z</published><updated>2011-10-30T08:39:00Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229374.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229374.html"/><content type="html">&lt;div&gt;&lt;p&gt;当WPF和Silverlight越来越受到.NET开发人员重视的时候，两者间的界限也越来越模糊。回顾六月，&lt;a id="btwz" title="Wintellect" href="http://www.wintellect.com/"&gt;Wintellect&lt;/a&gt;发布了鲜为人知但极其重要的&amp;#8220;&lt;a id="p-.r" title="微软WPF和Silverlight之异同白皮书" href="http://wpfslguidance.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28278"&gt;微软WPF和Silverlight之异同白皮书&lt;/a&gt;&amp;#8221;。我们建议GUI开发人员要通读全部69页，我们会列出主要的观点及其对相关业务范围开发人员的影响。&lt;/p&gt; &lt;p&gt;依赖关系属性是两个平台的重要组成部分，使用&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.propertymetadata%28VS.100%29.aspx"&gt;PropertyMetadata&lt;/a&gt;可代替普通字段来保存属性。Silverlight仅提供了该类，而WPF却有若干子类型可用。&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.uipropertymetadata%28VS.100%29.aspx"&gt;UIPropertyMetadata&lt;/a&gt;添加了一个标识符，用于决定&amp;#8220;在使用了元数据实例的地方，是否应该禁播依赖关系属性的动画&amp;#8221;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadata%28VS.100%29.aspx"&gt;FrameworkPropertyMetadata&lt;/a&gt;添加一个标识符来指示影响管道的那些属性，包括控制管理、测量和呈现。它也可用于指示属性是否允许数据绑定以及默认的类型。由于Silverlight不支持该类，因此所有的数据绑定在默认情况下都是单向的。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Silverlight不支持隧道事件。两个平台都支持Direct事件和Bubbling事件。&lt;/p&gt; &lt;p&gt;WPF支持多种类型的触发器。一个简单的触发器附加到依赖关系属性后，当触发器条件满足的时候便会自动修改样式。除了简单触发器以外，WPF也支持可响应路由事件或使用数据绑定的触发器。&lt;/p&gt; &lt;p&gt;Silverlight使用&lt;a id="ddj6" title="觉状态管理器" href="http://timheuer.com/blog/archive/2008/06/04/silverlight-introduces-visual-state-manager-vsm.aspx"&gt;视觉状态管理器&lt;/a&gt;代替触发器。WPF当前并不提供该技术，但会在WPF 4.0中添加。&lt;/p&gt; &lt;p&gt;Silverlight仅支持若干标记扩展。除了通用的StaticResource、Binding和TemplateBinding扩展以 外，WPF还添加了DynamicResource、RelativeSource、x:Type、x:Static和x:Array。&lt;/p&gt; &lt;p&gt;有很多键盘和鼠标事件仅在WPF中可用。由于为数众多的关系，我们稍后会列出完整列表。&lt;/p&gt; &lt;p&gt;关于UIElement类和IInputElement接口。当某个控件被禁用的时候，WPF使用它们来禁用所有的子控件。Silverlight不提供这种功能，所以开发人员不得不手动遍历控件树。&lt;/p&gt; &lt;p&gt;在通信方面，Silverlight仅限于BasicHttpBinding和PollingDuplexHttpBinding。当然，WPF支持所有的绑定。&lt;/p&gt; &lt;p&gt;最后，打印功能在两者之间也完全不同。WPF可直接打印可视化树而Silverlight则依赖浏览器实现。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;查看英文原文：&lt;/strong&gt;&lt;a href="http://www.infoq.com/news/2009/11/WPF-Silverlight"&gt;WPF vs. Silverlight &amp;#8211; What Really is the Difference?&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/wxx/aggbug/2229374.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229374.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wxx/archive/2011/10/30/2229371.html</id><title type="text">顶级脚本语言：PHP、Ruby、Python</title><summary type="text">Evans Data发布了脚本语言调查结果。在500多名开发者和IT专家心目中，PHP、Ruby、Python是他们最爱的语言。随着时间推移，企业中脚本语言的应用也发生着变化，这份调查列举出了每种语言的优缺点。Richard Dice（Perl基金会主席）在近期的采访中表示，脚本语言在企业里面正在呈现上升趋势，不仅仅用于简单任务或是原型构建。它们的应用范围更加广阔。 在调查中，用户要根据以下种种特性（源自调查问卷）给语言评分： 易于使用异常处理扩展可维护/可读跨平台移植社区可用的工具工具质量性能内存管理客户端脚本安全 所调查的语言包括：Actionscript、Flex、Javascript、</summary><published>2011-10-30T08:38:00Z</published><updated>2011-10-30T08:38:00Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229371.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229371.html"/><content type="html">&lt;p&gt;Evans Data发布了&lt;a href="http://www.evansdata.com/reports/viewRelease_download.php?reportID=18" target="_blank"&gt;脚本语言调查&lt;/a&gt;结果。在500多名开发者和IT专家心目中，PHP、Ruby、Python是他们最爱的语言。随着时间推移，企业中脚本语言的应用也发生着变化，这份调查列举出了每种语言的优缺点。Richard Dice（&lt;a href="http://www.perlfoundation.org/" target="_blank"&gt;Perl&lt;/a&gt;基金会主席）在近期的&lt;a href="http://www.cio.com/article/446829/PHP_JavaScript_Ruby_Perl_Python_and_Tcl_Today_The_State_of_the_Scripting_Universe" target="_blank"&gt;采访中&lt;/a&gt;表示，脚本语言在企业里面正在呈现上升趋势，不仅仅用于简单任务或是原型构建。它们的应用范围更加广阔。&lt;br /&gt; 在调查中，用户要根据以下种种特性（源自调查问卷）给语言评分：&lt;/p&gt; &lt;ul&gt;&lt;li&gt;易于使用&lt;/li&gt;&lt;li&gt;异常处理&lt;/li&gt;&lt;li&gt;扩展&lt;/li&gt;&lt;li&gt;可维护/可读&lt;/li&gt;&lt;li&gt;跨平台移植&lt;/li&gt;&lt;li&gt;社区&lt;/li&gt;&lt;li&gt;可用的工具&lt;/li&gt;&lt;li&gt;工具质量&lt;/li&gt;&lt;li&gt;性能&lt;/li&gt;&lt;li&gt;内存管理&lt;/li&gt;&lt;li&gt;客户端脚本&lt;/li&gt;&lt;li&gt;安全&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;所调查的语言包括：Actionscript、Flex、Javascript、Microsoft F#、Microsoft Powershell、Perl、PHP、Python、Ruby、VB Script。最终根据用户的意见生成调查报告。&lt;/p&gt; &lt;p&gt;综合评分（包括权重）将PHP、Ruby 、Python推到了首位。&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://www.infoq.com/resource/news/2009/03/top-scripting-languages-php-ruby/en/resources/scripting_language_overall_satisfaction.png" border="0" /&gt;&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;在这次调查中，最优秀的语言是那些开源语言，它们以符合自然发展规律的方式进化。而那种私有的Microsoft语言，虽然背后有着软件巨头的强力支持，也有众多资源，但并未像开源语言一样受到用户好评。&lt;/blockquote&gt; &lt;p&gt;在用户眼中，Ruby和PHP的易用性最好，Python的扩展性则评分最高。在这三种语言中，Ruby的社区力量尤为显著：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;Ruby社区相当小，但每个人都积极参与，勇于表达自己观点。&lt;/blockquote&gt; &lt;p&gt;报告中也提到了一个常见的争论：Ruby的性能。&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; 即便是最热衷于Ruby的用户也会对Ruby应用的性能有所怀疑，而且有些广为人知的用Ruby编写的Web 2.0应用，性能和扩展性方面已经暴露出了很严重的问题。&lt;/blockquote&gt; &lt;p&gt;&lt;img alt="" src="http://www.infoq.com/resource/news/2009/03/top-scripting-languages-php-ruby/en/resources/scripting_language_performance.png" border="0" /&gt;&lt;/p&gt; &lt;p&gt;报告中也突出了另一个问题：开发者对安全的关注还是一如既往的低。&lt;/p&gt; &lt;p&gt;最后来看，Ruby的评分从高到低分别是：易于使用、社区、跨平台移植、可维护/可读、异常处理。&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://www.infoq.com/resource/news/2009/03/top-scripting-languages-php-ruby/en/resources/scripting_language_ruby_satisfaction.png" border="0" /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://antoniocangiano.com/2009/03/23/rubys-biggest-challenge-for-2009/" target="_blank"&gt;Antonio Cangiano&lt;/a&gt;和&lt;a href="http://www.rubyinside.com/" target="_blank"&gt;Peter Cooper&lt;/a&gt;对09年中Ruby面对的挑战持有异议，他们认为，Ruby面对的真正挑战来自于技术或是传道。EDC调查报告显示，Ruby平台需要在客户端脚本（这方面JavaScript的得分最高）和工具（质量和可用性）。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;查看英文原文&lt;/strong&gt;： &lt;a id="t9qu" href="http://www.infoq.com/news/2009/03/top-scripting-languages-php-ruby" title="Top Scripting Languages: PHP, Ruby, Python"&gt;Top Scripting Languages: PHP, Ruby, Python&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wxx/aggbug/2229371.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229371.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wxx/archive/2011/10/30/2229369.html</id><title type="text">观点：Rails还是PHP？适合才是最好</title><summary type="text">随着大举进军Rails号角的吹响，Rails成为Web 2.0中小型站点开发的框架新宠。一夜间rails与敏捷开发的思想逐步深入人心，在这个技术浪潮中涌现出的成功站点也不在少数。然而，Derek Sivers最近在O’Reilly站点上发表的一篇名为两年RoR开发付之东流，重返PHP的七大理由的文章，激起了rails开发者们强烈的反响。 Derek Sivers是CD Baby以及HostBaby的创建者，自CD Baby站点于1998年创建以来，经历了数次代码重写，从最初的HTML到之后的PHP，两年前Derek又将站点用rails重写，而如今又重新回归 到PHP语言上来。缘何如此？Der.</summary><published>2011-10-30T08:37:00Z</published><updated>2011-10-30T08:37:00Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229369.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229369.html"/><content type="html">&lt;p&gt;随着&lt;a href="http://www.javaeye.com/topic/21595"&gt;大举进军Rails&lt;/a&gt;号角的吹响，Rails成为Web 2.0中小型站点开发的框架新宠。一夜间rails与敏捷开发的思想逐步深入人心，在这个技术浪潮中涌现出的成功站点也不在少数。然而，Derek Sivers最近在O&amp;#8217;Reilly站点上发表的一篇名为&lt;a href="http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.html"&gt;两年RoR开发付之东流，重返PHP的七大理由&lt;/a&gt;的文章，激起了rails开发者们强烈的反响。&lt;/p&gt; &lt;p&gt;Derek Sivers是CD Baby以及HostBaby的创建者，自CD  Baby站点于1998年创建以来，经历了数次代码重写，从最初的HTML到之后的PHP，两年前Derek又将站点用rails重写，而如今又重新回归 到PHP语言上来。缘何如此？Derek在文中写道：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   2005年1月份，我在O&amp;#8217;Reilly的Blog上撰文宣布，将放弃cdbaby.com站点原先十万行杂乱的PHP代码，并准备从头开始使用 Rails将站点的代码重写。于是我雇用了当时最好的Rails程序员，开始着手这个庞大的计划...最初的几个月进展非常顺利，但是在后续的开发过程 中，需求开始与Rails实现显得有些冲突，并且使项目陷入窘境，有时我不得不问自己放弃原先的计划而使用Rails是否真是值得的...两年之后，我们 在rails开发上经历了各种挫折，最终发现总共才完成了期望工作量的一半。 &lt;/blockquote&gt; &lt;p&gt;Derek一直在思考这个问题&amp;#8220;有没有什么是Rails能做而PHP做不到的？&amp;#8221;答案是否定的，于是Derek决定摒弃两年来使用Rails编写的代码，重新使用一直熟悉的PHP来将网站全部重写。Derek在文中写道：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; 仅仅用了两个月，只有我一人进行开发，并且没有使用任何框架，仅是在vi编辑器之下，使用PHP重新编写了CD Baby整站的代码，而且效果出乎意料的好。这应该是我写出过最好的PHP代码，完全遵循&lt;a href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;MVC&lt;/a&gt;和&lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt;（Don't Repeat Yourself）的准则，这些获益应归功于使用Rails开发过程中得到的经验和智慧。 &lt;/blockquote&gt; &lt;p&gt;Derek进而总结了从Rails转回到PHP的七个原因：&lt;/p&gt; &lt;ul&gt;&lt;li&gt;有什么是Rails能做而PHP做不到的？...没有；&lt;/li&gt;&lt;li&gt; 我们整个公司的Web代码都是用PHP写成的，请别忽视应用间的整合问题；&lt;/li&gt;&lt;li&gt; 别要你不需要的额外功能；&lt;/li&gt;&lt;li&gt; PHP小巧而快速；&lt;/li&gt;&lt;li&gt; PHP代码完全按照我自己的方式运作；&lt;/li&gt;&lt;li&gt; 我喜欢直接使用SQL；&lt;/li&gt;&lt;li&gt; 语言就像女朋友：你觉得新的更好那是因为你有了进步。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;当然，Derek并没有否定Rails框架的好处，并总结了Rails为开发者带来的益处，当然更重要的是Rails经验为开发者带来的对问题看法的转变和技术的提高等。这些Rails的益处包括：&lt;/p&gt; &lt;ul&gt;&lt;li&gt;通过Active Record将数据封装在模型类中，通过接口向Web应用提供数据，符合Martin Fowler提出的Active Record模式思想；&lt;/li&gt;&lt;li&gt;具备自动加载（&lt;a href="http://www.php.net/autoload"&gt;__autoload&lt;/a&gt;）机制；&lt;/li&gt;&lt;li&gt; 真正的MVC分层设计；&lt;/li&gt;&lt;li&gt;所有的HTML代码来自于抢有力的模板机制；&lt;/li&gt;&lt;li&gt;极度简化的代码量。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Rails与PHP是面向敏捷Web开发的两种主要语言。针对两者在Web开发领域中的关系，JavaEye的站长robbin也曾&lt;a href="http://www.javaeye.com/topic/21595?page=3"&gt;做出过这样的评价&lt;/a&gt;：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;  根据我的观察，其实现在互联网应用，PHP仍然是当仁不让的第一开发语言，占据了最大的市场份额。这是有内在的原因的，因为PHP超级简单易用，是当前  web开发技术当中，学习起来最快的了。有点编程基础的人，学习一天，第二天就可以干活了。对于互联网开发来说，速度是第一重要的事情，拖拖拉拉做不出来 网站，机会就永远丧失掉了，对于熟练的开发人员来说，RoR可以提供比PHP还要快的开发速度，这就注定RoR肯定会流行。 &lt;/blockquote&gt; &lt;p&gt;在一篇名为&amp;#8220;漫谈rails与php&amp;#8221;的帖子中，从框架和语言、MVC、ORM以及各自优缺点等各方面都做了评论，axgle在结尾处&lt;a href="http://www.javaeye.com/topic/38887"&gt;这样写道&lt;/a&gt;：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; 我想说的是php将继续发展下去，已经发布了的php5以及正在发展中的php6也将有一些新的特性加入。而rails也在不断发展中。我相信rails和php一道，都有各自的一席之地。 &lt;/blockquote&gt; &lt;p&gt;其实，语言或开发框架相关的争论并不鲜见，然而争论的最终结果往往是选择合适的语言或框架才是最正确的。在接触新技术的初期，不能仅靠对技术的热情 而对不熟悉的领域主观臆断，因事先估计不足而使得结果事与愿违。程序的编写不仅要靠设计良好的语言和框架，靠经验的积累和技巧的沉淀有时才是最重要的。&lt;/p&gt;    	    	    		&lt;p&gt;&lt;em&gt;	    				    				    					&lt;strong&gt;&lt;a href="http://www.infoq.com/cn/author/%E9%AB%98%E6%98%82" f_taxonomyeditor=""&gt; 高昂&lt;/a&gt; &lt;/strong&gt;    				    				是IEEE-CS、CCF会员，博士研究生，关注开源软件发展与进步。    			&lt;/em&gt;    		&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wxx/aggbug/2229369.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229369.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wxx/archive/2011/10/30/2229367.html</id><title type="text">ASP.NET vs. PHP，哪个更快？</title><summary type="text">上个月Joe Stagner在博客上发表了一系列文章比较了PHP和ASP.NET的执行性能，引起了来自双方程序员的大量回应。Joe表示，他会将这样的测试持续下去，并寻求更为合适的方式，以获得对实际项目来说尽可能有参考价值的结论。 Joe表示： 一般来说，作性能测试的目的是要尝试证明一方比令一方要快。我受雇于微软，同时编写PHP和ASP.NET代码。我在.NET出现之前就在使用PHP，两个东西我都很喜欢。 所以，我很难说出哪个更好。当我说PHP好话时，我的微软同事们会写信来批评我，而当我发表倾向于ASP.NET的言论时，我的PHP朋友们会说我是微软的托。 我进行这...</summary><published>2011-10-30T08:36:00Z</published><updated>2011-10-30T08:36:00Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229367.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229367.html"/><content type="html">&lt;p&gt;上个月&lt;a href="http://misfitgeek.com/"&gt;Joe Stagner&lt;/a&gt;在博客上发表了一系列文章比较了PHP和ASP.NET的执行性能，引起了来自双方程序员的大量回应。Joe表示，他会将这样的测试持续下去，并寻求更为合适的方式，以获得对实际项目来说尽可能有参考价值的结论。&lt;/p&gt;  &lt;p&gt;Joe表示：&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;    &lt;p&gt;一般来说，作性能测试的目的是要尝试证明一方比令一方要快。我受雇于微软，同时编写PHP和ASP.NET代码。我在.NET出现之前就在使用PHP，两个东西我都很喜欢。&lt;/p&gt;     &lt;p&gt;所以，我很难说出哪个更好。当我说PHP好话时，我的微软同事们会写信来批评我，而当我发表倾向于ASP.NET的言论时，我的PHP朋友们会说我是微软的托。&lt;/p&gt;     &lt;p&gt;我进行这个测试是因为每个人都对PHP的性能有自己的看法（Windows vs. Linux &amp;amp; 5.2 vs. 5.3），却没人能给出明确的数据。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;根据Joe的描述，测试环境如下：&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;所有的测试都在同一台机器上运行（拥有4G内存和60G 7200转硬盘的Toshiba Tecra M5）。 &lt;/li&gt;&lt;li&gt;Ubuntu 9和Windows Server 2008标准版分别安装于独立（但相同）的硬盘中。 &lt;/li&gt;&lt;li&gt;Linux使用Apache2，Windows使用IIS 7作为各自的Web服务器。 &lt;/li&gt;&lt;li&gt;双方的操作系统都进行了完整的patch或升级。 &lt;/li&gt;&lt;li&gt;双方的系统和运行时都没有进行额外的性能增强。&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;从&lt;a href="http://www.misfitgeek.com/pages/Perf_Stat_0809.htm"&gt;实验结果&lt;/a&gt;上看，PHP在Linux和Windows的执行性能各有千秋：&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;纯粹的语句执行在Windows上表现更好。 &lt;/li&gt;&lt;li&gt;函数调用在Windows上更快。 &lt;/li&gt;&lt;li&gt;对象的创建和访问，对于PHP 5.2来说在Linux上更快，但是对于PHP 5.3来说则是Windows更快。 &lt;/li&gt;&lt;li&gt;类库调用在Linux上快得多（如在Ubuntu上进行加密要比Windows要快3到5倍）。 &lt;/li&gt;&lt;li&gt;在Linux上访问文件性能略高于Windows，不过Windows上文件复制的性能要比Linux慢60%，可能是ACL高级安全的缘故。 &lt;/li&gt;&lt;li&gt;在Linux上访问MySQL要比Windows快不少，而且在Windows上运行PHP 5.3的情况则更为恶劣（不过从下面PostgreSQL的情况上来看，这应该是糟糕实现的缘故）。 &lt;/li&gt;&lt;li&gt;PostgreSQL在两个平台上的性能非常接近（1000个操作的差距在0.06秒之内）&amp;#8212;&amp;#8212;无论是PHP 5.3还是PHP 5.2，Windows上表现都略胜一筹。 &lt;/li&gt;&lt;li&gt;Windows上PHP 5.2访问MS SQL Server的性能稍逊于在Linux上访问MySQL（此时还没有面向PHP 5.3的SQL Server支持）。&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Joe认为，这表示：&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;我们可以这么认为，对于纯粹的PHP执行性能来说，Linux和Windows相差无几，这不会成为选择Linux或Windows作为部署平台的决定性因素。 &lt;/li&gt;&lt;li&gt;如果你在构建一个应用程序，那么PostgreSQL可能是更好的选择。因为它在两个平台上的表现都很优秀。 &lt;/li&gt;&lt;li&gt;如果你的应用程序必须使用MySQL，那么选择Windows就需要早些计划扩展性问题了（个人认为Sun不太可能为Windows优化MySQL的性能）。 &lt;/li&gt;&lt;li&gt;PHP的第一个版本的SQL Server驱动程序要比MySQL或PostpreSQL要慢一些，但这应该不会成为问题。第二个版本的驱动器正在开发之中，它会带来性能提升。&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;在Joe看来，全面来看，PHP和IIS团队在执行性能上已经做的非常成功，接下来就需要各开源程序的团队（Drupal、WordPress、Joomla等等）为各平台进行性能优化了。&lt;/p&gt;  &lt;p&gt;不过，除了文件复制操作之外，ASP.NET在性能方面全面领先于PHP（无论部署在Linux还是Windows上面）：&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Linux上访问MySQL的性能稍稍优于Windows上访问SQL Server的性能（使用普通的数据类型和SELECT语句）。但是这里的差距几乎可以忽略不计。 &lt;/li&gt;&lt;li&gt;ASP.NET（C#）操作，如对象使用，类库调用等等，其性能都远高于PHP。&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;对于这个测试结果，Joe补充道：&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;    &lt;p&gt;我知道我的一些PHP朋友和Linux伙计们要跳出来驳斥我的测试和结果了。:)&lt;/p&gt;     &lt;p&gt;我一直在思考，这样的性能比较是否需要加入一些高级的优化选项。不过.NET方面也有例如多线程，异步请求，和各种缓存方式可以使用&lt;/p&gt;     &lt;p&gt;请注意&amp;#8212;&amp;#8212;我并没有说&amp;#8220;ASP.NET更快，所以你不应该使用PHP！&amp;#8221;，我使用认为，PHP过于简单导致对某些高级应用来说有些举步维艰，就像ASP.NET在项目早期会有学习方面的复杂性。&lt;/p&gt;     &lt;p&gt;对我来说，PHP最令人兴奋的地方不是它的语言/平台，而是成千上万聪明的PHP开发人员，以及各种优秀的项目（如Drupal、Joomla、WordPress、PHPBB、Nuke等等）。&lt;/p&gt;     &lt;p&gt;可以这么认为，PHP在Windows和Linux上的性能处于同一个水平上，我现在终于可以为Windows编写那些我盼望着许多年的PHP类库了。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Joe还公开了测试代码。他表示，如果你对这个测试的结果有疑义，可以亲自进行这个实验，或是编写你自己的测试代码进行试验。&lt;/p&gt;  &lt;p&gt;文章发布之后，许多网友对这一测试结果发表了看法。Joe基本上&lt;a href="http://misfitgeek.com/blog/aspnet/comments-on-my-recent-benchmarks/"&gt;逐一回复了其中的主要观点&lt;/a&gt;：&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;    &lt;p&gt;&amp;#8220;我使用ASP.NET只是因为我喜欢Visual Studio IDE&amp;#8221;&amp;#8212;&amp;#8212;我个人认为Visual  Studio是最有生产力的开发工具。但是，PHP的有不错的选择。我使用Zend Studio，PHPEd，Komodo，Delphi for  PHP，这些都很不错。我讨厌Eclipse，不过Zend也在这方面为PHP开发做了不少扩展。&lt;/p&gt;     &lt;p&gt;应该比较ASP的性能&amp;#8212;&amp;#8212;不用了，谢谢。旧式的ASP与目前的PHP与ASP.NET差距太大了。做这种比较，似乎是在建议使用ASP开发新项目，我强烈不建议你这么做。&lt;/p&gt;     &lt;p&gt;32位与64位系统之间的比较&amp;#8212;&amp;#8212;这些测试的目的并不是为了体现64位系统上的性能差距。今后的测试我会增加64位的场景。&lt;/p&gt;     &lt;p&gt;&amp;#8220;PHP丑陋至极&amp;#8221;&amp;#8212;&amp;#8212;哦，我不同意。旧式ASP要丑陋多了。你可以写出非常可怕而丑陋的PHP代码，也可以写出丑陋而可怕的C#或VB代码。同样，你也可以写出优雅的C++样式的PHP。这完全只和开发人员的技能有关。&lt;/p&gt;     &lt;p&gt;应该使用Windows上的Apache进行测试&amp;#8212;&amp;#8212;Apache是Linux上的服务器，不过我认为如果你在Windows上不使用IIS 7则会损失太多太多东西了。&lt;/p&gt;     &lt;p&gt;&amp;#8220;有办法在Win2K8中，在不损失安全性的前提下加快文件复制性能吗？&amp;#8221;&amp;#8212;&amp;#8212;似乎不行。我认为这涉及到Windows服务器上的ACL系统。我以后可能会测试通过数据流读取文件的性能，有些东西的性能可能会有所改善。不过，Web应用程序一般不会编程来复制大量文件。&lt;/p&gt;     &lt;p&gt;&amp;#8220;PHP一直是，也永远只是一个半专业性质的环境&amp;#8221;&amp;#8212;&amp;#8212;这种说法狗屁不通。PHP平台上有许多专业的，高质量的应用程序，也有很多我非常尊敬的开发人员。是否专业是开发人员的问题，不是PHP或ASP.NET的问题。&lt;/p&gt;     &lt;p&gt;&amp;#8220;我认为比较没有opcode缓存的PHP很不公平，.NET是编译执行的，而PHP需要每次都解释并&amp;#8216;编译&amp;#8217;页面&amp;#8221;&amp;#8212;&amp;#8212;我同意这个测试可能不够完 整，但是我不认同这个逻辑。我测试PHP的方式，就和下载安装的方式一样。我的虚拟主机也没有安装op-code缓存。而事实上，ASP.NET自带这个 特性也并不意味着测试是不公平的，这是因为PHP缺少这个特性&amp;#8212;&amp;#8212;不过这个要求很合理，我正在准备新的测试。&lt;/p&gt;     &lt;p&gt;&amp;#8220;说PHP不是一个&amp;#8216;专业的&amp;#8217;语言很没道理，因为几乎所有最大的站点都是用PHP构建的&amp;#8221;&amp;#8212;&amp;#8212;这种说法是没道理，不过说那些站点&amp;#8220;几乎都是&amp;#8221;用PHP构建的也是错误的。有些是，有些不是。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Joe补充道：&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;    &lt;p&gt;如果你们看到这一数据之后对ASP.NET信心倍增我自然很高兴。如果我不认为.NET是开发Web应用程序来说是一种更好的选择&amp;#8212;&amp;#8212;至少不属于其它平台，那么我也不会在微软工作了。&lt;/p&gt;     &lt;p&gt;但是&amp;#8230;&amp;#8230;如果你因为这些数据而忽视PHP，也是错误且幼稚的行为。&lt;/p&gt;     &lt;p&gt;从纯技术角度来说，我认为.NET远比PHP强大，但这并不意味着PHP不够强大。在我看来，PHP的力量体现在众多的应用程序以及可用的框架。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;大约一周以后，Joe公开了第二次测试的结果。与前一个测试相比，第二个测试主要有以下两个改变：&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;为Linux和Windows上安装了op-code缓存，并重新运行了大部分测试。&lt;/li&gt;&lt;li&gt;由于一些依赖项的问题，PHP 5.3 + APC的测试平台变成了Debain 5操作系统。&lt;/li&gt;&lt;/ol&gt;  &lt;p&gt;对于&lt;a href="http://www.misfitgeek.com/pages/Perf_Tests_PHP_v2_08122009.html"&gt;第二次测试及其结果&lt;/a&gt;，Joe解释到：&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;    &lt;p&gt;从结果上看，Ubuntu和Debian上运行PHP的性能差距可以忽略不计。部分条目的性能有些细小的改进，有些则有25%的提高，但是总体来说其效果比我想象中要来得低。&lt;/p&gt;     &lt;p&gt;使用APC之后，一些条目的运行反而变慢了，不过我认为这只是机器所造成的误差。请注意，表格中显示的不是第一次的结果，都是经过两次刷新，确认是在缓存命中时得到的结果。&lt;/p&gt;     &lt;p&gt;我认为现在的测试非常公平。&lt;/p&gt;     &lt;p&gt;空的循环测试和空的函数执行非常重要，因为这反映了语言或平台的基础消耗。这是处页面传输等性能开销外的性能消耗，是一个重要的考虑方面。&lt;/p&gt;     &lt;p&gt;我的一些PHP朋友也认可这个测试的准确性，不过给出了非常有见解的补充：&lt;/p&gt;     &lt;ul&gt;&lt;li&gt;ASP.NET在性能上的领先不会对我有什么影响。PHP是我的最爱，我的应用程序已经足够快了。&lt;/li&gt;&lt;li&gt;没错，ASP.NET在基础性能上是比较快，但是我的应用程序可以通过优秀的页面实现和JavaScript实践把这部分性能补回来。&lt;/li&gt;&lt;li&gt;我在进行Drupal开发，我对PHP最熟悉，因此我宁愿多花一些硬件来保持更好的开发效率。&lt;/li&gt;&lt;/ul&gt;     &lt;p&gt;这些都是很不错的评论！&lt;/p&gt;     &lt;p&gt;此外，根据上一次实验的结果，在Windows平台上运行PHP时，在MySQL和文件的访问上有一些性能问题，微软许多团队都向我获取了相关信息。希望这些数据都够转变为切实的改进。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Joe表示，他将&lt;a href="http://misfitgeek.com/contact/"&gt;收集&lt;/a&gt;大家认为更公平，更有意义的测试场景。以下是他所计划的测试项目：&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;实际页面测试：循环，寒暑调用和对象操作是一类测试，不过页面的整体呈现则是另一种有意义的测试。&lt;/li&gt;&lt;li&gt;负载测试：哪一个环境可以同时处理更大量的请求。&lt;/li&gt;&lt;li&gt;在负载测试中，哪一方的性能会下降地更快。&lt;/li&gt;&lt;li&gt;在各种情况下，64位平台的表现如何。&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;国内也曾经进行过PHP在Linux和Windows平台上的性能测试。InfoQ曾经&lt;a href="http://www.infoq.com/cn/news/2009/08/php-on-iis-7"&gt;报道过&lt;/a&gt;微软在WordCamp China 2009大会上公开了之前与康盛创想合作进行的&lt;a href="http://cid-fa447a56f6b57df5.skydrive.live.com/self.aspx/PHP/LAMPvsWIMP.COMSENZ.ppt"&gt;性能评估结果&lt;/a&gt;：在Windows Server 2008 + IIS上运行PHP，从平均相应时间，每秒处理的请求数，以及数据吞吐量等多方便均优于Linux + Apache的托管方式。&lt;/p&gt;  &lt;p&gt;您的看法如何？您希望看到什么样的测试呢？&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wxx/aggbug/2229367.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229367.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wxx/archive/2011/10/30/2229366.html</id><title type="text">企业级开发，PHP准备好了吗？</title><summary type="text">虽然PHP是Web应用开发中最广泛使用的环境，但它还是一度被认为无缘企业级开发。InfoQ组织了一个虚拟座谈小组来讨论语言/平台的演变及PHP在企业环境下的适用性。 相关厂商内容 Flash Builder 4.5高级版试用版免费高速下载 参加此次虚拟座谈小组的人有： Zeev Suraski，Zend Technologies公司创始人，该公司主要关注PHP的进展，Rob ...</summary><published>2011-10-30T08:35:00Z</published><updated>2011-10-30T08:35:00Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229366.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229366.html"/><content type="html">&lt;p&gt;虽然PHP是Web应用开发中&lt;a href="http://www.php.net/usage.php"&gt;最广泛使用的环境&lt;/a&gt;，但它还是一度被认为无缘企业级开发。InfoQ组织了一个虚拟座谈小组来讨论语言/平台的演变及PHP在企业环境下的适用性。&lt;/p&gt;  		          &lt;div&gt; 	&lt;p&gt;&lt;strong&gt;相关厂商内容&lt;/strong&gt;&lt;/p&gt; 	 	 	 	 	 	 		 			 		 		&lt;p f_vcrembed=""&gt;&lt;a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1445"&gt; 				Flash Builder 4.5高级版试用版免费高速下载 			&lt;/a&gt; 		&lt;/p&gt; 	  	 	 		 		 	 	 	 	 	 		 			 		         	 &lt;/div&gt;           	 &lt;p&gt;参加此次虚拟座谈小组的人有：&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;strong&gt;Zeev Suraski&lt;/strong&gt;，Zend Technologies公司创始人，该公司主要关注PHP的进展，&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Rob Nicholson&lt;/strong&gt;，高级技术研员, 曾为IBM编写过程序设计语言运行时，&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Derick Rethans&lt;/strong&gt;，PHP开发小组成员，eZ组件的项目负责人&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;InfoQ&lt;/strong&gt;&lt;strong&gt;：企业软件的一个关键元素就是互操作性，它可以让软件与其他平台交换信息。大家都认为PHP在这方面表现欠佳，因为它的WS-*支持相对来说比较新且功能较少，成熟度不高。关于这点你们是怎么考虑的？它会不会有所改变？&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Zeev&lt;/strong&gt;：我觉得相比WS-*而言，互操作性涉及的要更加多些。事实上，我们只看到了很少的基于SOAP的Web服务请求，而更多的 则来自于其他标准，这主要是因为部署SOAP的过程较为复杂。PHP极好地支持了互操作，并且为此提供了很多不同的接口（REST，优秀的XML支 持，SOAP，以及为web服务提供的  ZF组件等等）。据说PHP从2004年开始就为SOAP提供了非常好的基础支持，从2006年开始就通过Axis2扩展为WS-*提供了广泛的支持。我 只能说我还从没有碰到过用户抱怨缺乏互操作性的情况，如果真的有，那也一定是赞美吧。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Rob&lt;/strong&gt;：我觉得这只是部分人的观点。PHP源于其简单性。它是一门只需必要的复杂度，就能&amp;#8220;解决web问题&amp;#8221;的语言。因此PHP程序 员会更多的选择REST  而不是SOAP。传统的企业软件正逐步向位于中间的PHP靠拢。比方说，IBM的许多企业级软件产品在去年都提供了RESTful交互支持，包括Atom   发布协议，这样的话就多了一个选择。在该用WS-*的地方使用它，而在开发的简单性和速度至关重要时，应使用REST。我们也饶有兴趣的看到了PHP被用 来直接加强企业连通性。IBM的Message  Broker可以当作一个&amp;#8220;万能转换器&amp;#8221;，它能够将一个东西连接到另外一个东西，而现在它的消息转化流中也提供了对PHP计算节点的支持。所以现在是可以 在企业软件内部中使用PHP语言简单而又强大的语法和语句的。我们最近为IBM的CISC事务处理器发布了一个SupportPac，用以支持PHP语 言。CISC正如软件一样，具有&amp;#8220;企业级&amp;#8220;的性质。它运行于主机上，可以由一些像银行，政府和医疗保健部门的组织来使用，用以处理一些最重要的可能影响到 日常生活的事务。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Derick&lt;/strong&gt;：我觉得这里没什么太大问题。PHP已经为所有的WS技术如SOAP，XML-RPC和JSON提供了支持。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;InfoQ&lt;/strong&gt;&lt;strong&gt;：过去的几年里，将脚本语言移植到JVM中并以利用它丰富的监控，安全等功能已经成为了一种趋势。这对于PHP开发而言并不陌生，因为现实世界中存在好些个运行在JVM中的PHP应用。制造商们对于提升性能的话题各抒己见。你们是怎么看待这种趋势的？&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Zeev&lt;/strong&gt;：我们在.Net中也看到了类似的趋势，但是这些脚本语言并没有很远地脱离原始的实现。我想对于JVM上的PHP也是同样的 道理。事实上我们可以看到原生实现的PHP相比综合改造后的PHP所拥有的性能优势&amp;#8212;&amp;#8212;尤其是对内存的需要以及在现实世界中长期运行的表现。尽管如此，标 准实现最大的优势是在于它所拥有的强大社区支持（包括在代码贡献和使用上），这是其他实现所缺少的一个东西。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Rob&lt;/strong&gt;：它的一切都令人如此兴奋，我相信它会有很好的未来。在数以千计的已经被实现的语言中，只有少量语言在自然选择过程中幸存下 来，原因是它们特别适合于某个用途。因此开发者改进创新某种语言的实现是一个很自然的事情。如果我们看看Ruby社区就会发现，这门语言的成功归因于至少 半打以上的实现，还有这些实现中的共享测试和性能调整，它们帮助明确了语言的规范，而相互间&amp;#8221;最快Ruby&amp;#8220;头衔的竞争也功不可没。我想我们正在PHP上 见证同样的事情发生。我们已经看到了PHP实现间协作所带来的巨大好处，例如在过去两年里由社区产生了大量的全新测试用例以及为改善某些API而作的努 力，我相信这种现象在未来会持续下去。我现在正工作于PHP在JVM上的一个实现，它已经用在了IBM的ProjectZero孵化器 （incubator ）中，WebSphere sMush产品，以及我前面提到的CISC PHP  SupportPac和MessageBroker计算节点中。我认为对于某些类型的问题，在JVM上运行PHP会非常有意义。我们看到我们的合作伙伴和 客户正在使用它来耦合现有的基于Java的系统，这样做他们可以在轻松重用Java库和API的同时，享受PHP所带来的便捷。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Derick&lt;/strong&gt;：尽管性能方面&amp;#8220;可能&amp;#8221;会有所提高，但是可扩展性却始终是个问题。PHP的整体思想是在无共享架构的情况下轻松实现可扩展性。在JVM上跑PHP会移除掉它的无共享架构。不幸的是PHP社区中只有一个叫做PHP-on-JVM的项目在尽可能的贡献着测试用例。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;InfoQ&lt;/strong&gt;&lt;strong&gt;：从PHP 4到PHP 5的升级不是一个简单的迁移过程。关于那些犹豫是否对即将发布的PHP 6进行投资的公司，你们想说些什么？&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Zeev&lt;/strong&gt;:  实际上我并不同意关于4-&amp;gt;5迁移是个非常困难过程的说法。整个过程并没有太多的兼容性破坏问题，而只是相对简单地修补应用程序。事实上想要利用新 的功能，多花一点工作是在所难免的，也是意料之中的。在6的版本中我们实际上更多的考虑了兼容性破坏问题&amp;#8212;&amp;#8212;目前这个问题在6中要比在5中更具实质性。这 就是我们需要花时间去做的事情。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Rob&lt;/strong&gt;：我认为PHP5在今后很长一段时间都会存在。即将发布的5.3版本已经尽可能的设计为无痛升级，且增加了原本定在 PHP6.0中的几乎全部的功能，只差移除掉一些不用的功能和增加PHP  6.0中的unicode了。我非常渴望看到unicode版本的的PHP，因为它可以让基于PHP的JVM具有更加直接的兼容性，之所以更加直接是因为  JVM原生地采用了unicode来表示字符串，但是我怀疑采纳过程在PHP 5和PHP 6中都将会非常缓慢且持续许多年。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Derick&lt;/strong&gt;：虽然大家对此总是怀疑，但是我们会努力减少这些问题，通过引入向前兼容的功能来转移到PHP 6。如果大家能够向我们反馈一下自己在当前开发版本中碰到的问题的话，那么可以帮助我们将迁移过程变得更加简单。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;InfoQ&lt;/strong&gt;&lt;strong&gt;：在所有的建立的语言中，社区中的人们都推动增加了许多高级的功能。而另一方面PHP一直被认为易学的功能较少。你们认为这种情况需要改变吗？ &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Zeev&lt;/strong&gt;v：我绝对不认为它应该改变，因为它是PHP成功的一个关键因素。希伯来语中有句谚语大致这么说&amp;#8220;给的越多，拿的越多&amp;#8221;，我 坚信这句话对于  PHP是适用的，至少在语言结构与语法上如此。通过使用扩展和框架，PHP可以无止境的扩展，在我来看，这些扩展和框架正是PHP最佳和最有趣的&amp;#8220;最后前 沿&amp;#8221;。我觉得完全使用PHP的大型复杂网站（Facebook，Yahoo，Flickr），完全基于PHP的复杂现有应用 （SugarCRM，OpenPro，CMS's），以及公司网站或内部系统依赖于PHP的企业证明了这样一个事实：PHP的功能集已经成熟，并且我们应 该朝着这个方向走下去。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Rob&lt;/strong&gt;：在我们着手为IBM的脚本产品WebSphere  sSmash选择脚本语言时，就因为PHP如此广泛的使用面而特别选择了它。我们希望能够让数以百万的PHP程序员们能与企业或者企业软件紧密联系在一 起，并且我们希望支持一种能够让新人程序员快速上手的语言。PHP的强大在于它的简单性。一门语言如果不想灭亡的话就一定需要不断的演变。如果PHP  5没有支持面向对象编程的话，肯定会丧失很多吸引力。伴随着PHP  5.3的发布，PHP肯定可以在这些新的特性上潜在的增加其复杂性。我想未来更多的工作是去了解怎样使用它们和在此之上形成的语句。鉴于新版本被采纳的滞 后性，因此在大部分主流应用程序转移到使用5.3功能之前，还需要等上若干年，我想在这段时间里PHP程序员将会用大量实例来掌握这些新功能，并将它们用 在简化常见的编程任务上。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Derick&lt;/strong&gt;：不，它不需要改变，这两类开发人员都存在。增加新功能并不一定需要提高入门的门槛。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;InfoQ&lt;/strong&gt;&lt;strong&gt;：PHP作为一门语言，在这些年里一直追随优秀的范型而演变，并从一个简单的预处理器演变成了一个强大的OO语言。随着函数式编程风格崭露头角，你们觉得这种这种范式是否会走进未来PHP的世界？ &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Zeev&lt;/strong&gt;：不会。PHP仍然支持过程式开发，并且不太可能会消失；我们早在启动PHP（PHP  3）中就增加了OO的支持，虽然它现在跨越到了PHP  5中。lambda大概是最接近函数式范式的东西了，而这正是我们需要完成的。这也映衬了我前面回答的一个问题&amp;#8212;&amp;#8212;我们不想要一个一劳永逸的语言，只是想 要一个能够完成工作的简单语言。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Rob&lt;/strong&gt;：这在一定程度上已经发生了。PHP  5.3中闭包的概念就是来源于函数式编程的世界里。PHP社区混杂了大量经过&amp;#8220;经典训练&amp;#8221;的计算机科学专业人员以及一些业余自我训练的程序员。看到这个多 样的社区中闭包的诞生和常用语句的演化其实是一件很有趣的事。我相信我们最终会完成一套被广泛接受的模式和语句，它可以很优雅的解决web开发中的常见问 题，而程序员在使用时都不会想到其实这一切都源于函数式编程。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Derick&lt;/strong&gt;：我不确定，我认为它不会特别合适。但是如果它对PHP应用程序有意义的话，也许可以找到进入PHP的出路。PHP在集成其他语言中有趣和有用的理念方面一直做得很优秀。&lt;/p&gt; &lt;p&gt;你是怎么认为的呢，选择&lt;strong&gt;&lt;a href="http://www.infoq.com/php"&gt;PHP&lt;/a&gt;&lt;/strong&gt;是企业的明智之举吗？&lt;/p&gt; &lt;p&gt;&lt;strong&gt;查看英文原文：&lt;/strong&gt;&lt;a href="http://www.infoq.com/articles/enterprise-php"&gt;Is PHP Ready for the Enterprise?&lt;/a&gt;&lt;/p&gt; &lt;hr /&gt; &lt;p&gt;感谢&lt;a target="_blank" href="http://www.infoq.com/cn/bycategory.action?authorName=%E9%9C%8D%E6%B3%B0%E7%A8%B3"&gt;霍泰稳&lt;/a&gt;对本文的审校。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wxx/aggbug/2229366.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229366.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wxx/archive/2011/10/30/2229364.html</id><title type="text">MVC框架Fuel PHP</title><summary type="text">如今，MVC模式已经基本上占据了面向客户的职业网站设计全部江山。虽然单文件脚本仍然适合个人站点，像ASP.NET Web Form这样的表单构建技术能够提供快速开发能力，对于需要在大型团队中工作，同时仍需对生成的HTML有精密控制的人来说，看起来MVC找到了正确的平 衡点。Fuel PHP框架，希望能够借鉴诸如CodeIgniter、Zend Framework、Symphony、Ruby on Rails等早期MVC框架的工作。 像大多数MVC框架一样，文件组织结构有其意义。资源、视图、控制器和模型都对应特定文件夹。此外还有地方可以放置通用的应用代码和框架包。Route可以配置，不过默认有.</summary><published>2011-10-30T08:34:00Z</published><updated>2011-10-30T08:34:00Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229364.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229364.html"/><content type="html">&lt;div&gt;&lt;p&gt;如今，MVC模式已经基本上占据了面向客户的职业网站设计全部江山。虽然单文件脚本仍然适合个人站点，像ASP.NET Web  Form这样的表单构建技术能够提供快速开发能力，对于需要在大型团队中工作，同时仍需对生成的HTML有精密控制的人来说，看起来MVC找到了正确的平 衡点。&lt;a href="http://fuelphp.com/"&gt;Fuel PHP框架&lt;/a&gt;，希望能够借鉴诸如CodeIgniter、Zend Framework、Symphony、Ruby on Rails等早期MVC框架的工作。&lt;/p&gt; &lt;p&gt;像大多数MVC框架一样，文件组织结构有其意义。资源、视图、控制器和模型都对应特定文件夹。此外还有地方可以放置通用的应用代码和框架包。Route可以配置，不过默认有一个URL会映射到控制器类的名字和action方法上。&lt;/p&gt; &lt;p&gt;要做任何事情，都要多写额外的代码，这是对于MVC风格框架常见的反对意见。使用单一文件脚本，人们可以以简单、线性的方式处理一切，从请求处理到 HTML生成。与之相比，MVC至少需要一个控制器和试图，很多时候，还需要模型在互相之间传递数据。因此，脚手架（scaffolding）这种代码生 成的方式，变得很普遍。为了达到该目的，在Fuel PHP中，应用被称为&amp;#8220;油（oil）&amp;#8221;。&lt;/p&gt; &lt;p&gt;在Nettuts+网站上， &lt;a href="http://net.tutsplus.com/tutorials/php/getting-started-with-the-fuel-php-framework/"&gt;Philip Sturgeon做的概览&lt;/a&gt;也覆盖了表单生成和数据验证。同样，这些都算是标准技术，其他平台的MVC开发人员都很熟悉。Fuel附带一个基本的数据库抽象层，还有一个&lt;a href="http://fuelphp.com/docs/packages/orm/intro.html"&gt;可选的ORM包&lt;/a&gt;，供喜欢这种数据访问方式的人使用。ORM主要基于ActiveRecord，但是也受到其他ORM方式的影响。&lt;/p&gt; &lt;p&gt;Fuel以MIT协议发布，目前处于第一个候选版本，而且未来至少还规划了一个版本。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;查看英文原文：&lt;/strong&gt; &lt;a href="http://www.infoq.com/news/2011/09/Fuel-PHP"&gt; InfoQ: Fuel PHP: An MVC Framework &lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/wxx/aggbug/2229364.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229364.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wxx/archive/2011/10/30/2229362.html</id><title type="text">缅怀Steve Jobs对软件行业的贡献</title><summary type="text">我想说这么一个故事。在Steve回Apple之前，我和他在NeXT有一次会面。当时去的还有我们公司的首席科学家。开完会出来，我们两个人在那里复盘 刚才的辩论，想找出Steve的漏洞——他肯定不能对嘛。结果没成功。我俩站在停车场说话，让他从办公室瞧见了，又跑过来接着和我们辩。那时候说的是跟 Objective-C编程语言有关的一个技术问题。我也不知道他为什么对这问题那么上心。我从来没见过这种热情劲头。（Eric Schmidt） 很多人会因为Steve Jobs和他的团队推出、推广的杰出产品而记住他：Apple II、Macintosh、激光打印机、NeXT工作站、数字动画电影、iMac、...</summary><published>2011-10-30T08:32:00Z</published><updated>2011-10-30T08:32:00Z</updated><author><name>业精于勤，止于至善</name><uri>http://www.cnblogs.com/wxx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229362.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229362.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;  我想说这么一个故事。在Steve回Apple之前，我和他在NeXT有一次会面。当时去的还有我们公司的首席科学家。开完会出来，我们两个人在那里复盘 刚才的辩论，想找出Steve的漏洞&amp;#8212;&amp;#8212;他肯定不能对嘛。结果没成功。我俩站在停车场说话，让他从办公室瞧见了，又跑过来接着和我们辩。那时候说的是跟 Objective-C编程语言有关的一个技术问题。我也不知道他为什么对这问题那么上心。我从来没见过这种热情劲头。（&lt;a href="http://www.businessweek.com/magazine/eric-schmidt-on-steve-jobs-10062011.html"&gt;Eric Schmidt&lt;/a&gt;） &lt;/blockquote&gt; &lt;p&gt;很多人会因为Steve Jobs和他的团队推出、推广的&lt;a href="http://bcove.me/m1m54mg1"&gt;杰出产品&lt;/a&gt;而记住他：Apple II、Macintosh、激光打印机、NeXT工作站、数字动画电影、iMac、iPod、iPhone、iPad。在过去的35年间，很多人的生活因为Steve的贡献而变得更美好。&lt;/p&gt; &lt;p&gt;从1985年到1997年，Steve在他离开Apple的12年里，参与推广了不少软件技术和编程范式，后来成为当前计算行业、编程语言和软件工 程实践的基础要素。可以说，软件成为今天这个样子，也有他的一份功劳，虽然很少有人注意到这一点。我们InfoQ的众人，希望在此回顾他那些比较不为人 知，但同样影响深远的贡献，以此作为我们最后的致敬。&lt;/p&gt; &lt;p&gt;就在Mac刚出来的时候，人们还普遍认为编写带有图形用户界面和多任务功能的软件（多任务在1987年面市），比起在&lt;a href="http://en.wikipedia.org/wiki/Apple_II_series"&gt;Apple II&lt;/a&gt;、&lt;a href="http://en.wikipedia.org/wiki/TRS-80"&gt;TRS-80&lt;/a&gt;或者&lt;a href="http://en.wikipedia.org/wiki/IBM_Personal_Computer"&gt;IBM PC&lt;/a&gt; 5150的BASIC解释器上面编程，要困难得多。到八十年代中期，&lt;a href="http://en.wikipedia.org/wiki/Borland"&gt;Borland&lt;/a&gt;已经开始普及&lt;a href="http://en.wikipedia.org/wiki/Turbo_Pascal"&gt;Turbo Pascal&lt;/a&gt;等带有强大类库和灵便编辑器的语言。虽然我们不能确切地肯定Steve Jobs离开Apple之前是否已经着手Mac OS System 5，但最终Mac OS System 5的核心特性完全落入他的构想：多任务和&lt;a href="http://en.wikipedia.org/wiki/HyperCard"&gt;HyperCard&lt;/a&gt;。后者是一种革命性的软件建造新方法，采取了&amp;#8220;面向对象&amp;#8221;和&amp;#8220;模型驱动&amp;#8221;的开发范式：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;HyperCard里面的编程语言叫做HyperTalk，它是面向对象的。对象置身于消息传播的路径所构成的一个层级结构之中，响应由用户或者系统本身产生的各种消息。&lt;/p&gt; &lt;p&gt;HyperCard的基本概念是一&amp;#8220;叠&amp;#8221;虚拟的&amp;#8220;卡片&amp;#8221;。卡片上记载着数据，就像真的索引卡片簿一样。它的布局引擎概念上近似于现在快速开发 （RAD）环境中所谓的&amp;#8220;窗体&amp;#8221;[&amp;#8230;&amp;#8230;]  它有一个特殊的&amp;#8220;Home&amp;#8221;叠（后来网站首页的雏形）用来启动各种应用，有一个代码仓库存放各种共享脚本，还有一个配置各种首选项的设施。&lt;/p&gt; &lt;p&gt;HyperCard不仅仅是一个数据库系统。每张卡片可以有自己的独特布局，好比你在真的索引卡片上面也可以填写规定以外的信息。希望在同一叠的所 有卡片上都显示的元素，可以放进一个特殊的背景层里面；也可以把背景相同的卡片归为一组，共享背景层。背景的内容除了图片（背景最开始的用途就是&amp;#8220;背景图 片&amp;#8221;）、对象，还可以包含字段、按钮、（静态）文本、（可编辑的）文本框等等常见的&lt;a href="http://en.wikipedia.org/wiki/GUI"&gt;GUI&lt;/a&gt;元素。然后每张卡片可以在它的文本字段、图片字段里面容纳各种数据，就像数据库一样。&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;到了1985年Steve创立&lt;a href="http://en.wikipedia.org/wiki/NeXT"&gt;NeXT&lt;/a&gt;之后，这些概念才算真正羽翼丰满。被昵称为&amp;#8220;the cube&amp;#8221;的第一款NeXT工作站于1989年推出市场。&lt;a href="http://www.w3.org/QA/2011/10/steve_jobs.html"&gt;Tim Berners-Lee对此有这样的评价&lt;/a&gt;：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;  NeXT是一台非凡的机器。NeXT一下子引入了许多（甚至太多）新事物&amp;#8212;&amp;#8212;可替换的光存储、Objective-C、针对音响和电影的DSP、Mach 核心、PC上的unix、Display  Postscript显示系统、InterfaceBuilder等等。确实它的价格一直很贵，光盘也被证明不可靠。可到最后，拯救Apple的还是 Steve和NeXTSTEP。这说明认准了好东西就应该坚持，谁知道哪天它就成了主流呢。 &lt;/blockquote&gt; &lt;p&gt;他还说道：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; 在NeXT上面编写WorldWideWeb客户端异常简单。系统本身就带了&lt;em&gt;Text Object&lt;/em&gt;模块，这是 一个可编辑、多字体的编辑器。我只需要子类化出来一个超文本对象，然后加上互联网相关代码就行了。设计软件菜单什么的完全不费吹灰之力，也就是在 InterfaceBuilder里面拖放几下子。应用程序的代码框架是自动生成的。这就是平台的作用：在平台上面做出来的东西，没了它不是完全做不了， 但那可就辛苦多了。 &lt;/blockquote&gt; &lt;p&gt;InfoQ的编辑Alex Blewitt在上世纪九十年代初有过一台NeXTStation，&lt;a href="http://alblue.bandlem.com/2011/10/one-last-thing.html"&gt;他是这么说的&lt;/a&gt;：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;a href="http://en.wikipedia.org/wiki/NEXTSTEP"&gt;NeXTSTEP&lt;/a&gt;的 操作系统功能已经十分完善，它能播放视频、录制声音、内嵌对象。相比之下，NeXTSTEP首发的时候，Windows的第3版还没出来。NeXT的硬件 虽然不怎么实惠，但都是高标准的。标配以太网、24位色的显示器、16位声卡、内置麦克风和音箱（别忘了当时SoundBlaster还没变成通用 API，才是一种刚刚发布的产品而已）。它是价超所值没错&amp;#8212;&amp;#8212;可偏偏第一版的HTTP就是在NeXT机器上面写的。 &lt;/blockquote&gt; &lt;p&gt;Steve挑选当时能找到的最好的软硬件，打造了一台划时代的万能机器，几乎领先时代十年之多。这台机器的操作系统&lt;a href="http://en.wikipedia.org/wiki/NEXTSTEP"&gt;NeXTSTEP&lt;/a&gt;是当时一些革命性组件的结合体：&lt;/p&gt; &lt;ul&gt;&lt;li&gt;基于&lt;a href="http://en.wikipedia.org/wiki/Mach_kernel"&gt;Mach核心&lt;/a&gt;的&lt;a href="http://en.wikipedia.org/wiki/Unix-like"&gt;类Unix&lt;/a&gt;操作系统，外加来自&lt;a href="http://en.wikipedia.org/wiki/Berkeley_Software_Distribution"&gt;BSD&lt;/a&gt;的源代码&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Display_PostScript"&gt;Display PostScript&lt;/a&gt;显示系统和窗口引擎&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Objective-C"&gt;Objective-C&lt;/a&gt;语言及其运行时&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Object-oriented_programming"&gt;面向对象&lt;/a&gt;（OO）应用层，内含多个&amp;#8220;工具套装（kits）&amp;#8221;&lt;/li&gt;&lt;li&gt;针对OO层的开发工具（如Interface Builder）&lt;/li&gt;&lt;li&gt;第一个动态HTML服务器（&lt;a href="http://en.wikipedia.org/wiki/WebObjects"&gt;WebObjects&lt;/a&gt;）&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Mach核心原先是在卡耐基&amp;#183;梅隆大学，为了支持分布式计算和并行计算而发展起来的一个先进的操作系统。虽然Mach保持与Unix兼容，但它的目 标之一是绕开Unix&amp;#8220;一切都是文件&amp;#8221;的概念，因为这个概念被日渐证明不符合实际。从作为Mach前身的Accent项目开始，进程间通信（IPC）就极 受重视，最终Mach针对性地提出了我们现在非常熟悉的&lt;a href="http://en.wikipedia.org/wiki/Mach_%28kernel%29"&gt;一套新概念&lt;/a&gt;：&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&amp;#8220;&lt;a href="http://en.wikipedia.org/wiki/Task_%28computing%29"&gt;任务&lt;/a&gt;&amp;#8221;是&amp;#8220;线程&amp;#8221;运行所需若干系统资源组成的一个对象。&lt;/li&gt;&lt;li&gt;&amp;#8220;&lt;a href="http://en.wikipedia.org/wiki/Thread_%28computer_science%29"&gt;线程&lt;/a&gt;&amp;#8221;是单一的执行单元，存在于任务的上下文之中，并且共享任务的资源。&lt;/li&gt;&lt;li&gt;&amp;#8220;&lt;a href="http://en.wikipedia.org/wiki/Computer_port_%28software%29"&gt;端口&lt;/a&gt;&amp;#8221;是用于任务之间通信的受保护的&lt;a href="http://en.wikipedia.org/wiki/Message_queue"&gt;消息队列&lt;/a&gt;；任务拥有各自端口的发送和接收权限&lt;/li&gt;&lt;li&gt;&amp;#8220;&lt;a href="http://en.wikipedia.org/wiki/Message_%28computer_science%29"&gt;消息&lt;/a&gt;&amp;#8221;是带类型的数据对象的集合，它们只能被发送到端口，而不能指定发送到具体的任务或线程。&lt;/li&gt;&lt;/ul&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;  它和UNIX有一个重要的区别，UNIX下的工具处理文件，而Mach下的工具处理&amp;#8220;任务&amp;#8221;。Mach把更大部分的操作系统代码移出内核，放入用户空间，结果形成一个大大缩小了的内核，术语&amp;#8220;&lt;a href="http://en.wikipedia.org/wiki/Microkernel"&gt;微内核&lt;/a&gt;&amp;#8221;随之兴起。Mach的进程&amp;#8212;&amp;#8212;或者叫&amp;#8220;任务&amp;#8221;&amp;#8212;&amp;#8212;有别于传统的操作系统，可以由很多的线程组成。虽然对于现在系统来说非常普通，但Mach是第一个这样定义任务和线程的系统。 &lt;/blockquote&gt; &lt;p&gt;还有一样根本区别：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; 端口概念和对IPC的运用，可能是Mach与传统内核最根本的区别所在。UNIX下的内核调用由所谓的&lt;a href="http://en.wikipedia.org/wiki/Syscall"&gt;&lt;em&gt;syscall&lt;/em&gt;&lt;/a&gt;或者&lt;a href="http://en.wikipedia.org/wiki/Signal_%28computing%29"&gt;&lt;em&gt;trap&lt;/em&gt;&lt;/a&gt;操作构成。程序通过&lt;a href="http://en.wikipedia.org/wiki/Library_%28computer_science%29"&gt;库&lt;/a&gt;在内存中的规定位置放置数据，然后引发一个&lt;a href="http://en.wikipedia.org/wiki/Fault_%28computing%29"&gt;&lt;em&gt;fault&lt;/em&gt;&lt;/a&gt;&amp;#8212;&amp;#8212; fault是一种错误。系统一开始启动的时候就设置好内核作为所有fault的&amp;#8220;负责人&amp;#8221;，所以当程序引发fault的时候，内核就会接管过来，首先检查 传递给它的信息，然后执行指令。[&amp;#8230;&amp;#8230;]利用IPC来传递消息有利于线程和并发。因为任务由多个线程组成，使用IPC机制的代码又被放在线程内部，所以 Mach可在消息处理前后冻结和解冻线程。这种设计有利于把系统分布到多个处理器之上，既可以像大多数Mach消息那样直接通过共享内存来传递，也可以在 必要的时候增加一点代码把消息复制到别的处理器上。传统内核不好实现这样的分布式构造，因为系统要保证不同处理器上的不同程序不会写入同一块内存。 Mach实现起来却很容易而且概念清晰，因为它把&amp;#8220;访问消息所在那块内存&amp;#8221;的过程，变成了&amp;#8220;端口&amp;#8221;这个系统基本元素。 &lt;/blockquote&gt; &lt;p&gt;Display PostScript（DPS）是一套屏幕显示系统，由Adobe和NeXT在1987年合作开发，同时它也是Adobe的一个正式产品。顾名思义，DPS利用&lt;a href="http://en.wikipedia.org/wiki/PostScript"&gt;PostScript&lt;/a&gt;（PS） 图像处理模型和语言来生成屏幕上的图形，不过因应用户交互的需要做了一定的改动。如今在Apple的OS  X操作系统里面，中央窗口服务器只把窗口图形缓存为PDF，已经不再执行PostScript代码。而在当时，PostScript提供的高级图形语言给 开发者带来极大的好处，很容易就能创建出高质量、带交互能力的文本和图形显示，显示结果还能原样生成PostScript文档并最终打印出来。对于当时正 为打印应用程序生成的WYSIWYG文档而困扰的人们来说，这是革命性的创造。&lt;/p&gt; &lt;p&gt;iPhone让&lt;a href="http://en.wikipedia.org/wiki/Objective-C"&gt;Objective-C&lt;/a&gt;和NeXTSTEP类库（带NS前缀的那些）焕发了第二春。在1989年的时候，这可是远远超前于时代的一个软件开发环境，直到两年之后才开始遇到像样的竞争对手&lt;a href="http://en.wikipedia.org/wiki/PowerBuilder"&gt;PowerBuilder&lt;/a&gt;。 Objective-C是Brad Cox和Tom  Love在上世纪八十年代初期发明的一种反射式、面向对象的编程语言，相当于在C语言上面增加了Smalltalk风格的消息机制。NeXT开发的 AppKit和Foundation Kit类库内含丰富功能，比如非常完善的容器类。&lt;a href="http://en.wikipedia.org/wiki/Interface_Builder"&gt;Interface Builder&lt;/a&gt;这个模型驱动、基于MVC的图形用户界面设计器则堪称NeXT开发环境的基石。&lt;/p&gt; &lt;p&gt;Interface Builder最早于1988年作为NeXTSTEP 0.8的一部分出现。它的创造者是&lt;a href="http://en.wikipedia.org/wiki/Jean-Marie_Hullot"&gt;Jean-Marie Hullot&lt;/a&gt;，一开始是用Lisp开发的。Interface Builder属于头一批允许通过鼠标来排布&lt;a href="http://en.wikipedia.org/wiki/Button_%28computing%29"&gt;按钮&lt;/a&gt;、&lt;a href="http://en.wikipedia.org/wiki/Menu_%28computing%29"&gt;菜单&lt;/a&gt;、&lt;a href="http://en.wikipedia.org/wiki/Windows_%28computing%29"&gt;窗口&lt;/a&gt;等界面对象的商品化应用程序。&lt;a href="http://en.wikipedia.org/wiki/Tim_Berners-Lee"&gt;Tim Berners-Lee&lt;/a&gt;开发&lt;a href="http://en.wikipedia.org/wiki/WorldWideWeb"&gt;WorldWideWeb&lt;/a&gt;网络浏览器算是Interface Builder早期一个著名的使用例子。&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;a href="http://en.wikipedia.org/wiki/Apple_Computer"&gt;Apple Computer&lt;/a&gt;公司1996年收购NeXT之后，在其新操作系统&lt;a href="http://en.wikipedia.org/wiki/Mac_OS_X"&gt;Mac OS X&lt;/a&gt;中采用了OpenStep环境。其中除了Objective-C，还包括NeXT的Objective-C开发工具&lt;a href="http://en.wikipedia.org/wiki/Project_Builder"&gt;Project Builder&lt;/a&gt;（后来经过扩展，成为现今的&lt;a href="http://en.wikipedia.org/wiki/Xcode"&gt;Xcode&lt;/a&gt;）和界面设计工具&lt;a href="http://en.wikipedia.org/wiki/Interface_Builder"&gt;Interface Builder&lt;/a&gt;。即便是&lt;a href="http://en.wikipedia.org/wiki/Cocoa_%28API%29"&gt;Cocoa API&lt;/a&gt;这个当前最重要、开发最活跃的Objective-C环境，仍然大部分建基于OpenStep的界面对象。 &lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/WebObjects"&gt;WebObjects&lt;/a&gt;同样是相当领先时代的创新。这个史上第一的动态HTML应用服务器由Bruce Ong、Nico Popp、Charles d&amp;#8217;Harcourt和Fran&amp;#231;ois  Jouaux&lt;a href="http://www.mactech.com/articles/mactech/Vol.16/16.08/Not-So-InfiniteLoop/index.html"&gt;四个人用Objective-C开发而成&lt;/a&gt;。它在数据库访问方面非常依赖Enterprise Object  Framework。作为对比，同样做应用服务器的Kiva公司1995年创立，1997年被Netscape收购；一家名为Weblogic的初创小企业在1997年末&lt;a href="http://en.wikipedia.org/wiki/Oracle_WebLogic_Server"&gt;向市场上推出Tengah服务器&lt;/a&gt;。&lt;/p&gt; &lt;p&gt;有一些现在常见的浏览器特性和&lt;a href="http://en.wikipedia.org/wiki/Keyboard_shortcuts"&gt;快捷键组合&lt;/a&gt;可以追溯到NeXTSTEP的惯例。&lt;a href="http://en.wikipedia.org/wiki/HTML"&gt;HTML&lt;/a&gt; 1.0和2.0的基本布局选项源自NeXT的Text类的特性。&lt;a href="http://en.wikipedia.org/wiki/Doom_%28video_game%29"&gt;&lt;em&gt;Doom&lt;/em&gt;&lt;/a&gt;游戏的关卡设计器WAD是在NeXT机器上面开发的。先进的电子表格软件&lt;a href="http://en.wikipedia.org/wiki/Lotus_Improv"&gt;Lotus Improv&lt;/a&gt;是在NeXT机器上开发的。有个叫Altsys Virtuoso的软件也是在NeXT机器上开发的，它的第2版被移植到Mac OS和Windows，成了&lt;a href="http://en.wikipedia.org/wiki/Macromedia_FreeHand"&gt;Macromedia FreeHand&lt;/a&gt;第4版。MCI电信公司的&amp;#8220;&lt;a href="http://www.allbusiness.com/technology/software-services-applications-programming/7099649-1.html"&gt;朋友家庭计划&lt;/a&gt;&amp;#8221;用NeXTSTEP开发后台的支撑软件。甚至连控制半导体层积这样的工作，也可以找到NeXTSTEP的身影，比如&lt;a href="http://dodreports.com/pdf/ada324216.pdf"&gt;Riber公司的Accessible软件&lt;/a&gt;（第2.5节）和休斯实验室的&lt;a href="http://www.dtic.mil/cgi-bin/GetTRDoc?Location=U2&amp;amp;doc=GetTRDoc.pdf&amp;amp;AD=ADA400110"&gt;EpiCenter软件&lt;/a&gt;。&lt;/p&gt; &lt;p&gt;到NeXTSTEP开发告一段落的时候，它成功地运行在Motorola 68000系列、Intel x86、Sun SPARC和HP PA-RISC等不同体系的处理器上；以它为基础的&lt;a href="http://en.wikipedia.org/wiki/Mac_OS_X"&gt;OS X&lt;/a&gt;操作系统也在2001年正式发布。&lt;/p&gt; &lt;p&gt;InfoQ采访了&lt;a href="http://blogs.msdn.com/b/jackgr/"&gt;Jack Greenfield&lt;/a&gt;，他曾任Rose的总架构师，现任Microsoft的Principal Architect ，于1989到1994年间就职于NeXT，领导&lt;a href="http://en.wikipedia.org/wiki/Enterprise_Objects_Framework"&gt;Enterprise Object Framework&lt;/a&gt;的开发工作。Enterprise Object Framework是最早的的对象-关系映射工具之一。&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;当InfoQ让我简短总结一下当年在NeXT的经历，当作对Steve的追思，我就知道这是一件吃力不讨好的事情。怎么可能几句话就向不曾躬逢其会 的人解释清楚那个地方、那个时候的神奇之处？但在这样的时刻面对这样的请求，哪怕再费劲我也要试试。于是我想了一下，大概像我这样的工程师大概都希望知道 给Steve干活是怎么样子吧。&lt;/p&gt; &lt;p&gt;每个人都知道他有极深刻的洞察力，但这么说还不能表达其万一。当Steve走进房间的时候，一切都会变得不一样。我记得有一次，我们在谈持久化对象 存储的事情，说来说去都是对象的序列化和访问机制。然后Steve过来呆了几分钟，领着我们遨游天外，想象用那些工具可以创造出什么样的世界。到他嘴里， 说的就成了图片、视频、声音怎么联系到一起，怎么搜索，怎么合成文档，怎么跟朋友共享。当他离开房间的时候，我们就好像看完一场电影刚亮灯的时候，你要左 右看一会儿，才想起自己在哪里，刚才做了些什么。最后我们的成果是近似于JSON的东西，超前二十年就已经扎根在OpenStep里头，到现在它的衍生产 物还在左右着iOS上的用户体验，Steve当时描绘的一切都已经成为现实。&lt;/p&gt; &lt;p&gt;毫无疑问，他的远见极具启迪力量，但这么说还不足以形容和他共事的感觉。NeXT的每一个人都天资聪颖，拿出优秀的成果是理所当然的事情。一般的领 导看了会流口水，流眼泪或者两者一起流的的成果，Steve却可能不为所动。在Steve身边，你只能做出前无古人，乃至后无来者的产品。其中的关键是他 并不会直接这么告诉你，但只要没达到他认为有可能达到的高度，就会被认为一文不值。他有办法撩动工程师渴望卓越成果的雄心，然后他会一直激励你，暗示你现 在努力得还不够，但他对你有信心。当你把东西拿给他看的时候，他说出来的几个字，或者根本不用说，就让你知道自己还能做得更好，也必须做得更好。当他喜欢 你拿出来的东西，你会有站立在众山之巅的感觉，不仅因为他喜欢，还因为你知道自己是实现了自我突破才能站上那个高度。&lt;/p&gt; &lt;p&gt;Steve是独一无二的人物。我再没遇过任何环境能跟他在NeXT创造的氛围相比拟。那里不只是公司，有点像实验室，有点像游乐场，有点像兄弟会 社，有点像战场，有点像大学图书馆，有点像现代艺术馆，有点像探险基地。我后来在很多地方工作过，不少地方也能激发我的热情和精力，但没有一个地方能达到 NeXT的高度。&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://www.wired.com/epicenter/2011/10/jobs"&gt;Wired如此总结&lt;/a&gt;:&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; Steve  Jobs留下的全部遗产还要很长时间才能计算清楚。起初员工们都带着贬义来谈论他的&amp;#8220;现实扭曲力场&amp;#8221;，指的是他那种凭借说服力和个人魅力令人信奉歪理的特 殊技能。但到了某个时刻，Steve  Jobs脑中的世界观突然不再是扭曲的，反而成了一种自我实现的预言。Apple公司的新产品一个接一个地破土而出，一个接一个地改变着我们的行为。 Steve Jobs的&amp;#8220;力场&amp;#8221;变成了真实的世界，而我们都生活在其中。 &lt;/blockquote&gt; &lt;p&gt;不少人对Steve有着负面的看法，但不管怎样，他是过去35年间一直不屈不挠地给无数工程师提出新挑战的一个人，这样的人屈指可数。他激励着工程师们去实践那些冒险的创新念头，取得超越想象的成功。如果没有Steve，今天的个人计算机和电话会变成什么样子？&lt;/p&gt; &lt;p&gt;我们将会记住你。&lt;/p&gt; &lt;p&gt;Think Different。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;查看英文原文：&lt;/strong&gt;&lt;a href="http://www.infoq.com/news/2011/10/steve-jobs-contribution"&gt;A Tribute to Steve Jobs' Contribution to Software Engineering&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wxx/aggbug/2229362.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wxx/archive/2011/10/30/2229362.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
