﻿<?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-Snowdream</title><link>http://www.blogjava.net/zellux/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 14:31:49 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 14:31:49 GMT</pubDate><ttl>60</ttl><item><title>慎用xen的make world...</title><link>http://www.blogjava.net/zellux/archive/2009/04/02/263462.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Wed, 01 Apr 2009 17:38:00 GMT</pubDate><guid>http://www.blogjava.net/zellux/archive/2009/04/02/263462.html</guid><wfw:comment>http://www.blogjava.net/zellux/comments/263462.html</wfw:comment><comments>http://www.blogjava.net/zellux/archive/2009/04/02/263462.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zellux/comments/commentRss/263462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zellux/services/trackbacks/263462.html</trackback:ping><description><![CDATA[写了好几天的代码因为还有bug没de掉，没commit到svn上<br /><br />然后不知怎么的在make的时候生成的kernel没变化，于是直接make world，然后发现linux kernel目录被清空了。。。<br /><br />只能明天靠记忆慢慢补了，皑皑。<br /><img src ="http://www.blogjava.net/zellux/aggbug/263462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zellux/" target="_blank">ZelluX</a> 2009-04-02 01:38 <a href="http://www.blogjava.net/zellux/archive/2009/04/02/263462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内存模型相关的资料</title><link>http://www.blogjava.net/zellux/archive/2009/03/25/261953.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Wed, 25 Mar 2009 14:14:00 GMT</pubDate><guid>http://www.blogjava.net/zellux/archive/2009/03/25/261953.html</guid><wfw:comment>http://www.blogjava.net/zellux/comments/261953.html</wfw:comment><comments>http://www.blogjava.net/zellux/archive/2009/03/25/261953.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zellux/comments/commentRss/261953.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zellux/services/trackbacks/261953.html</trackback:ping><description><![CDATA[yifanw大牛半个月前发在c++版上的，怕以后忘了看先放在这备个忘吧<br /><br />白话入门<br />http://www.newsmth.net/bbscon.php?bid=335&amp;id=250203<br /><br />白话解决方案<br />http://www.newsmth.net/bbscon.php?bid=335&amp;id=250237<br /><br />白话参考文献<br />http://www.newsmth.net/bbscon.php?bid=335&amp;id=250260<br /><img src ="http://www.blogjava.net/zellux/aggbug/261953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zellux/" target="_blank">ZelluX</a> 2009-03-25 22:14 <a href="http://www.blogjava.net/zellux/archive/2009/03/25/261953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安全方面的经典论文：A Logic of Authentication</title><link>http://www.blogjava.net/zellux/archive/2009/03/18/260359.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Tue, 17 Mar 2009 19:10:00 GMT</pubDate><guid>http://www.blogjava.net/zellux/archive/2009/03/18/260359.html</guid><wfw:comment>http://www.blogjava.net/zellux/comments/260359.html</wfw:comment><comments>http://www.blogjava.net/zellux/archive/2009/03/18/260359.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zellux/comments/commentRss/260359.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zellux/services/trackbacks/260359.html</trackback:ping><description><![CDATA[最近有点忙，今天总算在某个课题deadline前把论文憋出来交上去了。跑这儿来推荐两篇上个月看到的比较有意思的paper，都比较偏理论，也很老。<br /><br />今天写介绍下第一篇，剑桥大学的A Logic of Authentication，中了SOSP '89，整理后发在1990年的ACM Transactions on Computer Systems上。<br />http://www.csie.fju.edu.tw/~yeh/research/papers/os-reading-list/burrows-tocs90-logic.pdf<br /><br />（另一篇是Safe Kernel Extensions Without Run-Time Checking，改天再写点介绍）<br /><br />这篇paper的主要工作是通过构造一种多种类的模态逻辑(many-sorted model logic)，来检查网络中验证协议的安全性。<br /><br />基础的逻辑分三部分：<br />原语，如验证双方A和B，以及服务器S，下文用P Q R泛指<br />密钥，如K_ab代表a和b之间的通讯密钥，K_a代表a的公钥，{K_a}^{-1}代表对应的私钥，下文用K泛指<br />公式（或者陈述），用N_a, N_b等表示，下文用X Y泛指<br /><br />接下来定义以下约定（constructs）<br />P 信任 X: 原语P完全信任X<br />P 看到 X: 有人发送了一条包含X的信息给P，P可以阅读它或者重复它（当然通常是在做了解密操作后）<br />P 说了 X: 原语P发送过一条包含X的信息，同时也可以确定P是相信X的正确性的<br />P 控制 X: P可以判定X的正确与否。例如生成密钥的服务器通常被默认为拥有对密钥质量的审核权。<br />X 是新鲜的: 在此之前X没有被发送过。这个事实可以通过绑定一个时间戳或者其他只会使用一次的标记来证明。<br />P &lt;-K-&gt; Q: P和Q可以通过共享密钥K进行通讯，且这个K是好的，即不会被P Q不信任的原语知道。<br />K-&gt; P: P拥有K这么一个公钥，且它对应的解密密钥K^{-1}不会被其他不被P信任的原语知道。<br />P &lt;=X=&gt; Q: X是一个只被P和Q或者P和Q共同信任的原语知道的陈述，只有P和Q可以通过X来相互证明它们各自的身份，X的一个例子就是密码。<br />{X}_K: X是一个被K加密了的陈述<br />&lt;X&gt;_Y: 陈述X被Y所绑定，Y可以用来证明发送X的人的身份<br /><br />好了，总算把这些约定列完了，然后来看看通过这些约定能推出一些什么东东：<br /><u>如果 P 相信 (P &lt;-K-&gt; Q), 且 P 看到 {X}_K，那么 P 相信 Q 说了 X。</u><br />这个例子很简单，既然P Q有安全的密钥K，那么P看到通过K加密后的X肯定认为就是Q发出的。<br /><br />又比如，<br /><u>如果 P 相信 Q 控制 X，P 相信 (Q 相信 X)，那么 P 相信 X</u><br />也很容易理解，既然 P 相信 Q 的判断，那么 Q 相信什么 P 自然也就相信了。<br /><br />再举一个例子<br /><u>如果 P 相信 Y 是新鲜的，那么 P 相信 (X, Y) 也是新鲜的。</u><br />这里(X, Y)表示 X 和 Y 的简单拼接，也很容易理解，既然 Y 之前没出现过，那么 X 和 Y 的组合自然也没出现过。<br /><br />一个协议要被定义为安全，最起码要满足<br />A 相信 A &lt;-K-&gt;B，B 相信 A &lt;-K-&gt;B<br />即双方要互相信任密钥是安全的<br /><br />再健壮一点的协议，还要满足<br />A 相信 (B 相信 (A 相信 A &lt;-K-&gt;B))，反之一样<br />
即A B不仅相信密钥，也相信对方相信自己对密钥的信任。<br /><br />有了这些简单却强大的工具后，接下来这篇paper开始着手分析一些协议，包括Kerberos协议，Andrew Secure RPC 握手协议等，还指出了其中的一些问题和改进措施，例如CCITT X.509 协议中可以通过重复发送一条老的信息来模仿成加密双方中的一员。<br /><br />
具体的分析不贴上来了，一方面对于我这个不熟悉TeX的人来说码公式实在麻烦，另一方面我实在困死了 =_=<br /><br />建议有兴趣的朋友好好看看这篇经典paper<br /><img src ="http://www.blogjava.net/zellux/aggbug/260359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zellux/" target="_blank">ZelluX</a> 2009-03-18 03:10 <a href="http://www.blogjava.net/zellux/archive/2009/03/18/260359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lock-Free 算法的几个链接</title><link>http://www.blogjava.net/zellux/archive/2009/03/17/260323.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Tue, 17 Mar 2009 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/zellux/archive/2009/03/17/260323.html</guid><wfw:comment>http://www.blogjava.net/zellux/comments/260323.html</wfw:comment><comments>http://www.blogjava.net/zellux/archive/2009/03/17/260323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zellux/comments/commentRss/260323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zellux/services/trackbacks/260323.html</trackback:ping><description><![CDATA[
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta name="ProgId" content="OneNote.File" />
		<meta name="Generator" content="Microsoft OneNote 12" />
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">Some notes on
lock-free and wait-free algorithms </p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">
				<a href="http://www.audiomulch.com/%7Erossb/code/lockfree/">http://www.audiomulch.com/~rossb/code/lockfree/</a>
		</p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;"> </p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">
				<span lang="zh-CN">NOBLE</span>
				<span lang="en-US"> -</span>
				<span lang="zh-CN"> a library of non-blocking synchronization
protocols</span>
		</p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">
				<a href="http://www.cs.chalmers.se/%7Enoble/">http://www.cs.chalmers.se/~noble/</a>
		</p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;"> </p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">
				<span lang="zh-CN">An
optimistic approach to lock-free FIFO queues</span>
				<span lang="en-US">
(Distributed Computing 2008)</span>
		</p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">
				<a href="http://people.csail.mit.edu/edya/publications/OptimisticFIFOQueue-journal.pdf">http://people.csail.mit.edu/edya/publications/OptimisticFIFOQueue-journal.pdf</a>
		</p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;"> </p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">High performance
dynamic lock-free hash tables and list-based sets</p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">
				<a href="http://portal.acm.org/citation.cfm?id=564870.564881">http://portal.acm.org/citation.cfm?id=564870.564881</a>
		</p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;"> </p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">Concurrent
Programming Without Locks</p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">
				<a href="http://www.cl.cam.ac.uk/research/srg/netos/papers/2007-cpwl.pdf">http://www.cl.cam.ac.uk/research/srg/netos/papers/2007-cpwl.pdf</a>
		</p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;"> </p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">
				<span lang="zh-CN">Simple,
Fast, and Practical Non-Blocking and Blocking</span>
				<span lang="en-US">
				</span>
				<span lang="zh-CN">Concurrent Queue Algorithms</span>
		</p>
		<p style="margin: 0in; font-family: Calibri; font-size: 10pt;">
				<a href="http://www.research.ibm.com/people/m/michael/podc-1996.pdf">http://www.research.ibm.com/people/m/michael/podc-1996.pdf</a>
		</p>
<img src ="http://www.blogjava.net/zellux/aggbug/260323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zellux/" target="_blank">ZelluX</a> 2009-03-17 20:48 <a href="http://www.blogjava.net/zellux/archive/2009/03/17/260323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>10 Papers Every Programmer Should Read</title><link>http://www.blogjava.net/zellux/archive/2009/03/02/257392.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Mon, 02 Mar 2009 10:24:00 GMT</pubDate><guid>http://www.blogjava.net/zellux/archive/2009/03/02/257392.html</guid><wfw:comment>http://www.blogjava.net/zellux/comments/257392.html</wfw:comment><comments>http://www.blogjava.net/zellux/archive/2009/03/02/257392.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zellux/comments/commentRss/257392.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zellux/services/trackbacks/257392.html</trackback:ping><description><![CDATA[抓抓大牛的博客(http://www.cnblogs.com/JeffreyZhao)上看到的链接，原文地址是<br /><a href="http://blog.objectmentor.com/articles/2009/02/26/10-papers-every-programmer-should-read-at-least-twice">http://blog.objectmentor.com/articles/2009/02/26/10-papers-every-programmer-should-read-at-least-twice</a><br /><br />貌似我只读过那篇Reflections on Trusting Trust，水木的Programming版搜索作者为modico的帖子的前四篇就是介绍这篇paper的。<br /><br />先贴个列表，改天好好读一读<br /><ol><li><a href="http://sunnyday.mit.edu/16.355/parnas-criteria.html">On the criteria to be used in decomposing systems into modules</a> – David Parnas</li><li><a href="http://research.sun.com/techrep/1994/abstract-29.html">A Note On Distributed Computing</a> – Jim Waldo, Geoff Wyant, Ann Wollrath, Sam Kendall</li><li><a href="http://portal.acm.org/citation.cfm?id=365257">The Next 700 Programming Languages</a> – P. J. Landin</li><li><a href="http://portal.acm.org/citation.cfm?id=359579">Can Programming Be Liberated from the von Neumann Style?</a> – John Backus</li><li><a href="http://cm.bell-labs.com/who/ken/trust.html">Reflections on Trusting Trust</a> – Ken Thompson</li><li><a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.6083">Lisp: Good News, Bad News, How to Win Big</a> – Richard Gabriel</li><li><a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.29.363">An experimental evaluation of the assumption of independence in multiversion programming</a> – John Knight and Nancy Leveson</li><li><a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.7565">Arguments and Results</a> – James Noble</li><li><a href="http://c2.com/doc/oopsla89/paper.html">A Laboratory For Teaching Object-Oriented Thinking</a> – Kent Beck, Ward Cunningham</li><li><a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.31.562">Programming as an Experience: the inspiration for Self</a> – David Ungar, Randall B. Smith</li></ol><br />作者博客后面还新增了对它们的简要评论<br /><img src ="http://www.blogjava.net/zellux/aggbug/257392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zellux/" target="_blank">ZelluX</a> 2009-03-02 18:24 <a href="http://www.blogjava.net/zellux/archive/2009/03/02/257392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PieTTY中按Ctrl+S导致挂起的问题解决</title><link>http://www.blogjava.net/zellux/archive/2009/02/17/255061.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Tue, 17 Feb 2009 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/zellux/archive/2009/02/17/255061.html</guid><wfw:comment>http://www.blogjava.net/zellux/comments/255061.html</wfw:comment><comments>http://www.blogjava.net/zellux/archive/2009/02/17/255061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zellux/comments/commentRss/255061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zellux/services/trackbacks/255061.html</trackback:ping><description><![CDATA[2009-01-08<br /><br /><div class="post-entry"><p>以前碰到这个问题都得先重启PieTTY然后用screen -x恢复到原来的工作界面，今天不知怎么的emacs里C-x C-s按了就挂起，只能google。</p><p>传说中，早期的终端会遇到显示字符的速度慢于接收字符的速度，为了解决这个问题，C-s用于先挂起当前终端，在数据传输之后用C-q恢复显示。所以最简单的解决方法就是在挂起后按C-q。</p><p>不过我的WinXP中C-q已经和快速启动工具（寝室里是Turbo Launcher，实验室的是Launchy）绑定了，也懒得为了这么个问题改操作习惯，于是再次google，终于找到一个一劳永逸的方法，以bash为例，在~/.bashrc中加入一行</p><p>stty -ixoff -ixon</p><p>即可。另外这样设置后似乎恢复了C-s在bash中正向增量查找的功能。恩。</p></div><br /><img src ="http://www.blogjava.net/zellux/aggbug/255061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zellux/" target="_blank">ZelluX</a> 2009-02-17 12:12 <a href="http://www.blogjava.net/zellux/archive/2009/02/17/255061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Finding and Reproducing Heisenbugs in Concurrent Programs</title><link>http://www.blogjava.net/zellux/archive/2009/02/17/255048.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Tue, 17 Feb 2009 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/zellux/archive/2009/02/17/255048.html</guid><wfw:comment>http://www.blogjava.net/zellux/comments/255048.html</wfw:comment><comments>http://www.blogjava.net/zellux/archive/2009/02/17/255048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zellux/comments/commentRss/255048.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zellux/services/trackbacks/255048.html</trackback:ping><description><![CDATA[
		<p>今年的ASPLOS '09上zhou yuanyuan也有一篇关于如何concurrent program中发现隐藏的atomicity violation bugs的paper，里面提到了这篇paper<br /></p>
		<p>2008-11-30<br /></p>
		<p>OSDI '08上MSR发的paper，针对并发编程中难以发现的bug问题。</p>
		<p>paper的内容主要分两大块。</p>
		<p>一是如何在发现bug的时候记录下线程的运行先后(thread
interleaving)，途径是在线程API和用户程序多写一层wrapper
functions，这里还有一些其他的问题，比如只记录下了thread interleaving的话出现data race怎么解决等。</p>
		<p>另外一块内容是如何遍历出给定程序运行后所能产生的结果的集合，加入这个能实现的话那就能把所有隐藏的bug都找出来了。但是这个搜索空间很大，是
指数级的，的一个结论就是：给定一个程序有n个的线程，所有线程共完成k条指令，那么c次占先调度后线程的排列情况数的复杂度是<img src="http://10.132.140.73/wordpress/wp-content/cache/tex_d7c6a39b544e9306f24feffdc769cfc7.gif" class="tex" alt="k^{c}" align="absmiddle" />的，所以在实现遍历代码的时候必须有效的降低k和c的值。</p>
<img src ="http://www.blogjava.net/zellux/aggbug/255048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zellux/" target="_blank">ZelluX</a> 2009-02-17 11:30 <a href="http://www.blogjava.net/zellux/archive/2009/02/17/255048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu 8.10 浏览网页不稳定的解决方法</title><link>http://www.blogjava.net/zellux/archive/2009/01/29/252674.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Wed, 28 Jan 2009 16:30:00 GMT</pubDate><guid>http://www.blogjava.net/zellux/archive/2009/01/29/252674.html</guid><wfw:comment>http://www.blogjava.net/zellux/comments/252674.html</wfw:comment><comments>http://www.blogjava.net/zellux/archive/2009/01/29/252674.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zellux/comments/commentRss/252674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zellux/services/trackbacks/252674.html</trackback:ping><description><![CDATA[问题现象：上校内、一些国内论坛时经常出现连接重置(Connect reset)错误，而上google baidu等网站却没什么问题。ping那些有问题的网站的结果很正常。<br /><br />google了一堆关键词后终于发现问题出在MTU上，至少在偶的本本上运行<br />sudo ifconfig eth1 mtu 1412<br />就没问题了（eth1是无线网卡）<br /><br />p.s 多谢万熊  XD<br /><br /><img src ="http://www.blogjava.net/zellux/aggbug/252674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zellux/" target="_blank">ZelluX</a> 2009-01-29 00:30 <a href="http://www.blogjava.net/zellux/archive/2009/01/29/252674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zz]苏南经济模式兴衰亲历记</title><link>http://www.blogjava.net/zellux/archive/2009/01/21/252214.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Wed, 21 Jan 2009 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/zellux/archive/2009/01/21/252214.html</guid><wfw:comment>http://www.blogjava.net/zellux/comments/252214.html</wfw:comment><comments>http://www.blogjava.net/zellux/archive/2009/01/21/252214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zellux/comments/commentRss/252214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zellux/services/trackbacks/252214.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 发信人: linelf (水水), 信区: Real_Estate<br>标  题: 苏南经济模式兴衰亲历记zz<br>发信站: 日月光华 (2009年01月15日20:39:22 星期四)<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/zellux/archive/2009/01/21/252214.html'>阅读全文</a><img src ="http://www.blogjava.net/zellux/aggbug/252214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zellux/" target="_blank">ZelluX</a> 2009-01-21 14:47 <a href="http://www.blogjava.net/zellux/archive/2009/01/21/252214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么Python中的self必须保留？</title><link>http://www.blogjava.net/zellux/archive/2008/11/15/240713.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Sat, 15 Nov 2008 11:58:00 GMT</pubDate><guid>http://www.blogjava.net/zellux/archive/2008/11/15/240713.html</guid><wfw:comment>http://www.blogjava.net/zellux/comments/240713.html</wfw:comment><comments>http://www.blogjava.net/zellux/archive/2008/11/15/240713.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zellux/comments/commentRss/240713.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zellux/services/trackbacks/240713.html</trackback:ping><description><![CDATA[
		<p>Bruce Eckel的一篇日志建议把self从方法的参数列表中移除，并把它作为一个关键字使用。<br /><a href="http://www.artima.com/weblogs/viewpost.jsp?thread=239003" target="_blank">http://www.artima.com/weblogs/viewpost.jsp?thread=239003</a></p>
		<p>Guido的这篇日志说明了self作为参数是必不可少的。<br /><a href="http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html" target="_blank">http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html</a></p>
		<p>第一个原因是保证foo.meth(arg)和C.meth(foo, arg)这两种方法调用的等价（foo是C的一个实例)，关于后者可以参见Python Reference Manual 3.4.2.3。这个原因理论上的意义比较大。</p>
		<p>第二个原因在于通过self参数我们可以动态修改一个类的行为：</p>
		<p>
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 128, 0);">#</span>
				<span style="color: rgb(0, 128, 0);"> Define an empty class:</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 255);">class</span>
				<span style="color: rgb(0, 0, 0);"> C:<br /></span>
				<span style="color: rgb(0, 0, 255);">pass</span>
				<span style="color: rgb(0, 0, 0);">
						<br /> <br /></span>
				<span style="color: rgb(0, 128, 0);">#</span>
				<span style="color: rgb(0, 128, 0);"> Define a global function:</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 255);">def</span>
				<span style="color: rgb(0, 0, 0);"> meth(myself, arg):<br />myself.val </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> arg<br /></span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> myself.val<br /> <br /></span>
				<span style="color: rgb(0, 128, 0);">#</span>
				<span style="color: rgb(0, 128, 0);"> Poke the method into the class:</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">C.meth </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> meth</span>
		</div>
		<br />
		<p>这样类C就新增了一个meth方法，并且所有C的实例都可以通过c.meth(newval)调用这个方法。</p>
		<p>前面两个原因或许都可以通过一些workaround使得不使用self参数时实现同样的效果，但是在存在decorator的代码中Bruce的方法存在致命的缺陷。(关于decorator的介绍可以参见<a href="http://www.python.org/dev/peps/pep-0318/%EF%BC%89" target="_blank">http://www.python.org/dev/peps/pep-0318</a>/)</p>
		<p>根据修饰对象，decorator分两种，类方法和静态方法。两者在语法上没有什么区别，但前者需要self参数，后者不需要。而Python在实
现上也没有对这两种方法加以区分。Bruce日志评论中有一些试图解决decorator问题的方法，但这些方法都需要修改大量底层的实现。</p>
		<p>最后提到了另一种语法糖实现，新增一个名为classmethod的decorator，为每个方法加上一个self参数，当然这种实现也没必要把self作为关键字使用了。不过我觉得这么做还不如每次写类方法时手工加个self =_=</p>
		<br />
<img src ="http://www.blogjava.net/zellux/aggbug/240713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zellux/" target="_blank">ZelluX</a> 2008-11-15 19:58 <a href="http://www.blogjava.net/zellux/archive/2008/11/15/240713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>