今天从éšæ‰‹ç¿»çœ‹ç¬¬ä¸ƒæœŸçš„《程åºå‘˜ã€‹ï¼Œå‘现其ä¸ã€Šé™©æ¶çš„ä¸å›½äº’è”网》一文的作者é²å¿—云,åå—怎么看起æ¥è¿™ä¹ˆçœ¼ç†Ÿï¼Œç¿»åˆ°æ–‡ç« 最åŽçœ‹åˆ°ç…§ç‰‡ï¼ŒOrz,就是他。去年他去美国之å‰ï¼Œå°±å在我附近。原æ¥æ¤äººè¿˜æœ‰è¿™ç§èƒŒæ™¯ã€‚é‚å°†æ¤å‘现告知周围的åŒäº‹ï¼ŒæŸè€manager云:当时我去é¢è¯•ä»–,他é€æˆ‘一份礼物,曰:“这是我大å¦æ—¶å€™ç¿»è¯‘的一本书â€ã€‚æ¤ä¹¦ä¸ºã€ŠOODå¯ç¤ºå½•ã€‹ã€‚
这个世界ä¸ç¼ºå°‘牛人,缺少的是å‘现牛人的眼ç›ã€‚嗯。
标签:
“就是è¦Always keep eyes and ears open,看和å¬å‘¨å›´çš„世界,然åŽæœ‰ä¸€äº›Action,很多事情就是这么åšå‡ºæ¥çš„。年轻人,大有å‰é€”。â€
— 陪公å¸æŸArchitectureåƒé¥ï¼Œå¸é—´ä¸€å¸è¯ï¼Œèƒœè¯»å年书。
标签:
ä»Šå¤©å› ä¸ºä¸€ä¸ªå®¢æˆ·çš„é—®é¢˜ï¼Œæ—©ä¸Š7点开始WebEx,åªå¥½6:20起床赶到公å¸ã€‚
清晨阳光ä¸é”™ï¼Œç©ºæ°”也ä¸é”™ã€‚
而且美洲æ¯å¼€å§‹äº†ï¼Œæ—©ç¡æ—©èµ·ã€‚
标签:
本文æºäºŽbyte在上é¢ä¸€ç¯‡blog当ä¸å›žå¤ï¼Œæœ¬æ¥é¢˜ç›®å†™æˆï¼šã€Šæµè§ˆå™¨ï¼šWeb时代的平å°ã€‹ï¼ŒåŽæ¥è¶Šæ¥è¶Šè§‰å¾—ä¸å¯¹ï¼Œç„¶åŽæ”¹æˆäº†ã€Šæµè§ˆå™¨ï¼šWeb时代的用户接å£ã€‹ï¼Œæœ€åŽå†™ç€å†™ç€ï¼ŒçœŸçš„å˜æˆäº†æ‚谈,索性题目就改æˆäº†çŽ°åœ¨è¿™ä¸ªã€‚
诚如byte所说,微软一定ä¸ä¼šæ”¾å¼ƒæµè§ˆå™¨è¿™ä¸ªå¸‚场。事实上,相信没有任何一个软件公å¸æ•¢è½»è§†æµè§ˆå™¨ï¼Œå’Œäººä»¬ä»Žæµè§ˆå™¨å½“ä¸çœ‹åˆ°çš„东西:Web。
Googleæ— ç–‘æ˜¯Web时代的一个最大的æˆåŠŸè€…,这个公å¸ä½¿ç”¨HTTPå’ŒHTMLæŠŠè‡ªå·±é”€å”®åˆ°äº†å…¨ä¸–ç•Œã€‚å› ä¸ºGoogle,过去我们必须在机器上完æˆçš„å·¥ä½œçŽ°åœ¨å‡ ä¹Žéƒ½å¯ä»¥ä½¿ç”¨Web完æˆï¼Œä»Žé‚®ä»¶ï¼Œæ–°é—»ç»„,RSSè¿™äº›ä¼ ç»Ÿçš„ç½‘ç»œæœåŠ¡ï¼Œåˆ°å³æ—¶é€šè®¯è¿™ç§ä¼ 统上的富客户端系统,å†åˆ°æœ€ä¼ 统的桌é¢åŠžå…¬è½¯ä»¶å’Œæ—¥ç¨‹ç®¡ç†ï¼Œä¼¼ä¹Žæˆ‘们需è¦åœ¨å•æœºä¸Šå®Œæˆçš„很多æ“作,都å¯ä»¥åœ¨æµè§ˆå™¨å½“ä¸å®Œæˆäº†ã€‚æ£å¦‚很多人所说:Googleæ£åœ¨ä½¿ç”¨Web蚕食计算机桌é¢å¸‚场,需è¦åœ¨å¼ºåŠ²çš„机器上本机完æˆçš„工作,似乎åªå‰©ä¸‹äº†æ¸¸æˆã€‚
å¦‚æžœè¿™æ ·å‘展下去,通过æµè§ˆå™¨ä¹Ÿè®¸å¯ä»¥åšæ›´åŠ 有æ„æ€çš„一件事情:通过æµè§ˆå™¨æž¶æž„çš„IDE和版本控制系统,我们甚至å¯ä»¥åœ¨æµè§ˆå™¨å½“ä¸å†™ç¨‹åºï¼Œç¼–译æ交,并且ä¸åœ¨éœ€è¦ä½¿ç”¨cvs/svn,一切的åˆä½œéƒ½å¯ä»¥åœ¨æµè§ˆå™¨å½“ä¸å®Œæˆã€‚也许更进一æ¥ï¼ŒåŽå°ç³»ç»Ÿå¯ä»¥ç›´æŽ¥å¸®æˆ‘们åšäº†daily build,跑Automation测试,收集Bug Tracker,甚至直接帮我们把程åºå‘布在托管æœåŠ¡å™¨ä¸Šï¼ˆå¦‚果这是Web程åºçš„è¯ï¼‰ã€‚è¿™ç§æ–°çš„å¼€å‘模å¼ï¼Œç›¸ä¿¡ä¼šå¾—到很多人的喜爱。而一旦这个系统å¯ä»¥å®Œæˆï¼Œå…¶èƒŒåŽå°†æ˜¯åºžå¤§çš„å¼€å‘者团队,和他们的代ç ,以åŠå¤©ç„¶çš„在这个系统控制下的更多的系统。这个系统也许Googleå¯ä»¥åšåˆ°ã€‚
说起æ¥è¿™ä¸ªideaçš„åˆæ¥åŽŸåž‹åœ¨ä¸€å¹´åŠä¹‹å‰ï¼Œæˆ‘还在å¦æ ¡çš„时候就有å°è¯•ï¼Œåªæ˜¯åŽæ¥ä¸´è¿‘毕业,æ‚事太多,慢慢的就é—忘了。我离开å¦æ ¡ä¹‹åŽï¼Œmsclub也把这个系统从æœåŠ¡å™¨ä¸Šé¢æ‹¿æŽ‰äº†ã€‚想想当时没有能够充分利用msclub这个平å°çœŸçš„比较失败。
我大三那年去微软å‚åŠ å¤ä»¤è¥ï¼Œè¿˜æœ‰åŽæ¥å’Œå¾®è½¯çš„很多次接触都å‘现,微软对自己的定ä½å¾ˆæœ‰æ„æ€ï¼šæˆ‘是一个平å°å…¬å¸ã€‚这也是微软的èªæ˜Žä¹‹å¤„:把自己å˜æˆå¹³å°ï¼šè¶Šå¤šçš„人需è¦ä¾èµ–这个平å°ï¼Œå¾®è½¯å°±è¶Šèƒ½å¤Ÿç¨³å®šå’Œå£®å¤§ã€‚但是“æˆä¸ºå¹³å°â€ç»å¯¹æ²¡æœ‰è¯´è¯´è¿™ä¹ˆç®€å•ï¼Œè¿™éœ€è¦æ›´å¤šçš„应用的支æŒï¼Œè°æ¥å†™è¿™äº›åº”用?是开å‘者,事实è¯æ˜Žå¾®è½¯ä¸€ç›´åœ¨åšçš„很多事情其实都是在å–悦开å‘者:æ供便利的IDE,æ供完备的文档,æ供强大的框架和大é‡çš„例程,甚至为了å–悦开å‘è€…è€Œç‰ºç‰²æ ‡å‡†ï¼ˆæ¯”å¦‚IEå’ŒC++/CLI当ä¸çš„很多东西对开å‘者éžå¸¸å‹å¥½ï¼Œä½†æ˜¯éƒ½æˆ–å¤šæˆ–å°‘çš„é€ æˆäº†å¯¹æ ‡å‡†çš„ä¸å…¼å®¹ï¼‰ã€‚æ£æ˜¯è¿™äº›ä¸œè¥¿èµ¢å¾—了大é‡çš„Windows Only/IE Only的应用程åºï¼Œè¿™äº›ç¨‹åºæŽ¨åŠ¨äº†Windowså¹³å°çš„å‘展和普åŠï¼ŒWindowså¹³å°çš„æµè¡Œåˆå过æ¥è®©æ›´å¤šçš„å¼€å‘è€…åŠ å…¥ï¼Œå¦‚æ¤è‰¯æ€§å¾ªçŽ¯ï¼Œå¾®è½¯æ‰å¾—以巩固其平å°ã€‚
Google现在也在åšç€ç›¸åŒçš„事情:把自己å˜æˆå¹³å°ã€‚所以Google也需è¦æ‹‰æ‹¢å¼€å‘者为他的平å°å¼€å‘应用程åºã€‚微软的平å°æ˜¯Windowså’ŒOffice,那么Googleçš„å¹³å°å°±æ˜¯GFSå’Œæµè§ˆå™¨ã€‚GFS解决了大数æ®é‡çš„å˜å‚¨å’Œå¤„ç†çš„问题,而æµè§ˆå™¨åˆ™æ供了这个系统跟用户交互的接å£ã€‚访问GFS的便利的接å£Googleæ£åœ¨ä¸€ä¸ªä¸€ä¸ªçš„开放,å³Google API,å‰é¢å‡ 篇blog当ä¸æ到的Google Safe Browsing API也是其一。然åŽå°±æ˜¯æµè§ˆå™¨ã€‚Googleæ£åœ¨æŽ¨Firefoxè¿™æ˜¯ä¼—äººçš†çŸ¥çš„ç§˜å¯†ï¼ŒåŽŸå› ä¹Ÿæ˜¯å› ä¸ºGoogle需è¦ä¸€ä¸ªèƒ½å¤ŸæŽ§åˆ¶çš„æµè§ˆå™¨å¹³å°â€”—这个当然ä¸ä¼šæ˜¯å¾®è½¯çš„IE或者苹果的Safari,而Firefoxçš„å¼€æºå±žæ€§å’Œæ‰©å±•æ€§æ£ç¬¦åˆäº†Google的需è¦ï¼ŒGoogle当然è¦æŽ¨å®ƒã€‚
接下æ¥çš„就很明显了:决定Googleå’ŒMS在Web时代的生å˜çš„,也许就是他们控制的æµè§ˆå™¨èƒ½å¤Ÿæœ‰å¤šå¤§çš„å¯æ‰©å±•æ€§ï¼Œä»¥åŠä»–们的åŽå°æœåŠ¡èƒ½å¤Ÿå¤šå®¹æ˜“的被使用了。至少就目å‰æ¥è¯´ï¼ŒGoogle似乎走在了å‰é¢ã€‚当然微软的æœåŠ¡å™¨æ“作系统平å°ï¼Œä»¥åŠæ–°ç‰ˆæœ¬çš„IE,也有迎头赶上的趋势。去åšåŽå°ï¼Œè¿™ä¸ªå¹¶éžæˆ‘ç‰å¯ä¸ºï¼Œä½†æ˜¯æŠ“ä½æµè§ˆå™¨è¿™ä¸ªå¹³å°åšç‚¹äº‹æƒ…,也许会颇有å‰é€”。
标签:
一个壳ååŠ ä¸Šä¸€å¨çš„XUL+JS+CSS组æˆçš„。
请在地å€æ 输入:
chrome://browser/content/browser.xul
看看效果。
å¾ˆå¤šçš„åŠŸèƒ½ï¼Œæ¯”å¦‚æ ‡ç¾æµè§ˆå’Œèœå•å…¶å®žéƒ½æ˜¯é€šè¿‡XUL+JS的模å¼å½¢æˆçš„,å¯æ‰©å±•æ€§å¢žåŠ çš„åŒæ—¶ï¼Œé€Ÿåº¦éš¾æ€ªå¦‚æ¤çš„慢。
标签:
一个是为了能够在切æ¢æ ‡ç¾çš„时候自动切æ¢è¾“å…¥æ³•ã€‚å› ä¸ºæˆ‘çŽ°åœ¨æœ‰è‹±æ–‡ã€ä¸æ–‡å’Œæ—¥æ–‡ä¸‰ä¸ªè¾“入法,ç»å¸¸ä¸åŒçš„æ ‡ç¾é¡µå½“ä¸éœ€è¦è¾“å…¥ä¸åŒçš„è¯è¨€ï¼Œå› 为目å‰Firefox似乎åšä¸åˆ°è‡ªåŠ¨è®°ä½å„ä¸ªæ ‡ç¾é¡µçš„é…置并切æ¢è¾“入法,所以感到ä¸å¤ªæ–¹ä¾¿ï¼ˆä¹Ÿè®¸æ˜¯æˆ‘土,有è°çŸ¥é“有什么方法的告诉我一声)。我期望这个东西å¯ä»¥è¿™æ ·å·¥ä½œï¼šæˆ‘æ£åœ¨å†™spaceçš„æ ‡ç¾é¡µé¢å½“ä¸ï¼ŒçŽ°åœ¨æ˜¯ä¸æ–‡è¾“入法,当我切æ¢åˆ°åˆ«çš„页é¢çš„时候,或者当我按下了Ctrl+Dï¼Œæˆ–è€…ç”¨é¼ æ ‡ç§»åŠ¨åˆ°åœ°å€æ 的时候,自动切æ¢æˆè‹±æ–‡è¾“入法。一旦我在一个页é¢ä¸Šé¢æŠŠè¾“入法切æ¢æˆäº†éžè‹±æ–‡ï¼Œè¿™ä¸ªè¾“入法就å¯ä»¥è®°å½•ä¸‹é¢ï¼Œä¸‹æ¬¡æˆ‘æ¢åˆ°è¿™ä¸ªæ ‡ç¾é¡µé¡µå¯ä»¥è‡ªåŠ¨çš„切æ¢æˆç›¸åº”的输入法。这还是很方便的。
å¦ä¸€ä¸ªæ˜¯å› 为VeryCD上é¢çš„资æºæ›´æ–°ã€‚å› ä¸ºæˆ‘ç»å¸¸ä¼šè¿½ä¸€äº›æ–°çš„动漫,想è¦çŸ¥é“一个å‘布页é¢æ˜¯ä¸æ˜¯å·²ç»æ›´æ–°äº†è¿˜æ˜¯æ¯”较麻烦的——VeryCD的索引页虽然有但是毕竟ç»å¸¸é›ªå´©ä¼¼çš„å‡ºä¸€å¤§å †æ›´æ–°ï¼Œç„¶åŽä¸€é¡µæ”¾ä¸ä¸‹ï¼Œå¯èƒ½ä¼šé”™è¿‡å¾ˆå¤šã€‚åŽæ¥æˆ‘就把这些å‘布页é¢æ”¾åœ¨æ”¶è—夹当ä¸ï¼Œç„¶åŽä¸€ä¸ªä¸ªç‚¹å¼€çœ‹ï¼ŒåŽŸæ¥æ•°æ®é‡å°çš„时候还好æžå®šï¼ŒåŽæ¥è¶Šæ¥è¶Šå¤šï¼Œéº»çƒ¦çš„ä¸€ç±³ï¼ŒåŠ ä¸Šæˆ‘åˆå¾ˆæ‡’,考虑是ä¸æ˜¯å¯ä»¥åœ¨æˆ‘打开Firefox的时候或者点了æŸä¸ªèœå•é¡¹çš„时候直接去检查所有的这些页é¢æœ‰æ²¡æœ‰æ›´æ–°ï¼Œç„¶åŽè‡ªåŠ¨æŠŠæ›´æ–°çš„页é¢æ‰“开。
ç ”ç©¶ä¸€ä¸‹Firefoxçš„Extension,看看有没有å¯èƒ½ã€‚第二个想起æ¥åº”该ä¸éš¾å®žçŽ°ã€‚
标签:
翻看自己space的统计信æ¯ï¼Œå‘现了两个æ¥è‡ªäºŽæœç´¢å¼•æ“Žçš„æ¥æºï¼š
Google struct tm mktime
Baidu 超级玛丽.nes
而且排å都比较é å‰ï¼Œå°¤å…¶æ˜¯å‰è€…,帖å早上å‘的,现在就已ç»æŽ’到了google结果的第一ä½ã€‚è¿™ç§äº‹æƒ…在csdnå’Œblogdriver上é¢éƒ½æ˜¯ä¸æ›¾æœ‰è¿‡çš„。
å—¯ï¼Œå¤§æ ‘åº•ä¸‹å¥½ä¹˜å‡‰ã€‚
标签:
http://www.microsoft.com
看æ¥çœŸçš„å¦‚ä¼ è¨€æ‰€è¯´ï¼Œå¾®è½¯å·²ç»å°†è‡ªå·±çš„官方网站架构在Windows Server 2008 Beta 3上é¢äº†ã€‚没准微软真的打算在这个上é¢æŠ•å…¥ç‚¹å¤§ç²¾åŠ›äº†ã€‚
ä¸è¿‡ï¼ŒWindows Server 2008 Beta 3çš„Server Core安装模å¼çœŸçš„很诱人~。
标签:
昨天连åŒä»Šå¤©ï¼Œä»ç„¶ç»§ç»åŸ¹è®ï¼Œæ¯å¤©ä»Žä¸‹åˆä¸¤ç‚¹åˆ°æ™šä¸Šå…«ç‚¹ã€‚昨天主è¦è®²Pool Allocation(这个东西æƒä¸”算是一个Patternå§ï¼Œä½†æ˜¯æˆ‘觉得算ä¸ä¸ŠDesign Pattern),今天下åˆä»ç„¶æ˜¯Pool Allocation。到了晚上主è¦æ˜¯Command模å¼ã€‚
Pool Allocationè¿™ä¸ªä¸œè¥¿æˆ‘è§‰å¾—æ²¡æœ‰ä»€ä¹ˆå¤ªå€¼å¾—ç ”ç©¶çš„ï¼Œä»Šå¤©è®²çš„ä¸€äº›æ¯”è¾ƒå‡ºå的实现(Loki,SGI STLå’Œboost)所用的算法都很简å•ä¸”有效,基本上一个å¯ç”¨çš„poolå°±æ˜¯è¿™æ ·å†™å‡ºæ¥çš„。本æ¥è¿™ç§å†…å˜å½“ä¸çš„pool一般ä¸å¤ªåœ¨æ„å°½å¯èƒ½å‡å°‘éšæœºè®¿é—®ï¼Œä½†æ˜¯å‰äº›å¤©å·¥ä½œéœ€è¦å†™è¿‡ä¸€ä¸ªåŸºäºŽæ–‡ä»¶çš„pool,用æ¥ç®¡ç†æµè¿‡MTA的所有邮件或者HTTP Proxy的所有contentï¼Œå› ä¸ºéœ€è¦æŠŠä»–们å˜ä¸‹æ¥æ‰«æã€‚åŸºäºŽæ–‡ä»¶çš„åŽŸå› æ˜¯æˆ‘ä»¬å¿…é¡»ä¿æŒè¿™ä¸ªä¿¡æ¯åœ¨ç¨‹åºcrash之åŽçš„å¯æ¢å¤æ€§ã€‚这个pool对于éšæœºè®¿é—®å°±å¾ˆæ•æ„Ÿäº†ï¼Œè¿™ç§ä¸œè¥¿çš„算法,也许å¯ä»¥æ€»ç»“一下。
其实这三天最大的收获在于,N本书拿过去ç¾å,然åŽè¿˜æœ‰æœ€åŽçš„ä¸€å¼ åˆå½±ã€‚
标签:
应该是公å¸èŠ±äº†ä¸å°‘钱请æ¥çš„,虽然æ®ä»–说他和趋势一直ä¿æŒç€è‰¯å¥½çš„关系。
今天第一天,åŽé¢è¿˜æœ‰ä¸¤å¤©ï¼Œé¢˜ç›®å…³äºŽDesign Patterns。第一天总体感觉ä¸é”™ï¼Œjjhou确实是一个文å—的高手,也å¯èƒ½æ˜¯çœ‹å¾—多了,翻得多了,写得多了,讲得多了也就自然æˆäº†é«˜æ‰‹ã€‚旧的东西从新的人å£ä¸è®²å‡ºæ¥ï¼Œå¾€å¾€å¯ä»¥æœ‰æ›´å¤šçš„认识。
今天主è¦è®²çš„是一些比较简å•çš„OOæ¦‚å¿µå’Œå‡ ä¸ªç®€å•çš„模å¼ï¼Œè®²æ¨¡å¼ä»ŽTemplate Method开始,引出é‡ç”¨çš„基石:延迟实现;然åŽä»Žå…¶ä¸è¶³å¼•å‡ºStrategy,然åŽè§£é‡ŠOO当ä¸çš„delegation。这个门入的éžå¸¸cool。我们也在åšDesign Patterns的讨论ç,从Factory模å¼å¼€å§‹ï¼Œç»“æžœå‘现éžå¸¸éš¾äºŽå…¥é—¨â€”—ä¸å¤ªç†Ÿæ‚‰çš„人都在问:为什么我们è¦ç”¨Factoryæ¥åˆ›å»ºå¯¹è±¡ï¼Ÿä»Šå¤©å‘现,结构型模å¼ï¼Œå°¤å…¶æ˜¯Template Method确实是一个ä¸é”™çš„切入点。而且jjhou也说,Factory一定程度上也是由于Template Method产生的——当算法骨架当ä¸éœ€è¦åˆ›å»ºobject的时候。
然åŽæ˜¯Adapter。本æ¥æˆ‘一直认为Adapteréžå¸¸çš„简å•ï¼Œå› 而从æ¥æ²¡æœ‰æ·±å…¥çš„考虑过Adapter更深层的东西。今天jjhou的例åå´è®©æˆ‘打开了一个新看待Adapter的视角:STLçš„functor adapter(事åŽæŸ¥äº†ä¸€ä¸‹ã€ŠSTLæºç 剖æžã€‹ï¼Œå‘现其ä¸æœ‰è®²ï¼‰ã€‚其实interfaceä¸ä¸€å®šæ˜¯çº¯è™šåŸºç±»ï¼Œstd::unary_function也是一ç§interface,考虑template meta programming,当ä¸çš„typedef也是一ç§interfaceï¼cool。原æ¥adapterçœŸçš„æ— å¤„ä¸åœ¨ã€‚
åƒè¿‡æ™šé¥ä¸€ç›´åœ¨è®²Reference Countingï¼Œä¼ è¯´ä¸çš„æ¥è‡ªäºŽMore Effective C++。这本书在大二的时候æµè§ˆè¿‡ä¸€ç•ªï¼ŒåŽæ¥å°±å†ä¹Ÿæ²¡æœ‰é‡è¯»ï¼ˆé‚£ä¸ªæ—¶å€™è¿˜ä¸çŸ¥é“什么是Design Patterns)。现在回头å†åŽ»è¯»ä¸€ä¸‹ï¼Œå‘现确实有一些ä¸åŒçš„收获。一个Reference Countingçš„ä¸œè¥¿è®²äº†è¿™ä¹ˆä¹…æ˜¯å› ä¸ºä¾‹å。例å应该还是æ¥è‡ªäºŽä»–的《STLæºç 剖æžã€‹ï¼ŒæºäºŽSGI STL(å¤è€çš„用于写书的那个版本)当ä¸çš„string实现,ä¸é—´ç©¿æ’有copy on write。整个讲述的过程当ä¸æ€è·¯éžå¸¸å¥½ï¼Œå¦‚æžœæ€è·¯è·Ÿçš„上(其实以他讲的速度基本上都å¯ä»¥è·Ÿå¾—上),å¬èµ·æ¥çš„ç¡®æœ‰è¶£ï¼Œå’Œä»–çš„ä¹¦ä¸€ä¸ªé£Žæ ¼ï¼Œä»Žæ•…äº‹å¼€å¤´å¨“å¨“é“æ¥ï¼Œæ·±å…¥æµ…出。ä¸è¿‡æˆ‘一直在考虑这个东西用在string上é¢çš„æ„义。Reference Counting用在string上é¢çš„最大问题在于éžé€æ˜Žæ€§â€”—尤其对于é—留下æ¥çš„代ç çš„å¤ç”¨ï¼šè¯•æƒ³ä¸€ä¸ªç”¨C实现的程åºéœ€è¦ä¸€ä¸ªchar*æŒ‡é’ˆï¼Œå¦‚æžœè¿™ä¸ªæ—¶å€™ä¼ å…¥äº†ä¸€ä¸ªç”¨Reference Counting实现的string.c_str()得到的东西,那么å有八ä¹ä¼šå‡ºçŽ°é—®é¢˜ã€‚é—留下æ¥çš„C程åºå¹¶ä¸çŸ¥é“这个东西是ä¸æ˜¯è¢«share了,或者他的Reference Countingæ˜¯å¤šå°‘ã€‚æœ‰äººè¯´â€œä½ ä¸ç”¨c代ç ä¸å°±è¡Œäº†â€ï¼Œæ²¡é”™ï¼Œéžå¸¸å¥½ï¼Œä½†æ˜¯åœ¨å¤§åž‹é¡¹ç›®å½“ä¸å‡ 乎åšä¸åˆ°ï¼šå¤§åž‹é¡¹ç›®æœ‰å¾ˆå¤šé—留代ç å’Œæ— æ³•æŽ§åˆ¶çš„ç¬¬ä¸‰æ–¹åº“ï¼Œä½ å¯ä»¥åœ¨é‡å†™å’Œå¤ç”¨ä¹‹é—´æƒè¡¡ï¼Œä½†æ˜¯ä¸€æ—¦é€‰æ‹©äº†å¤ç”¨ï¼Œæƒ³è¦ä¸å‡ºé—®é¢˜ï¼Œæ¦‚率大概和å—京一整天ä¸å‡ºçŽ°è½¦ç¥¸çš„å‡ çŽ‡å·®ä¸å¤šï¼ˆå¤§æ¦‚<0.1%)。所以VC8çš„std::stringå·²ç»å½»åº•æŠ›å¼ƒæŽ‰äº†Reference Countingï¼Œå¤§æ¦‚ä¹Ÿå°±æ˜¯å› ä¸ºWindowså¹³å°ä¸Šå¦‚æ¤å¤šçš„é—留程åºå’Œè½¯ä»¶é€ æˆçš„。
但是stringçš„Reference Counting的问题ä¸è¶³ä»¥æŽ©ç›–Reference Counting的价值。但是一个好的Reference Counting的代ç 太难写了,尤其是è¦ä¿è¯çº¿ç¨‹å®‰å…¨çš„时候(比如CComObjectRootå’ŒCComMultiThreadedModel)。感觉还是éžä¾µå…¥å¼çš„Reference Counting比较安全一点,例如shared_ptr,这个应该明天会讲。
仔细想想为什么Reference Counting + Copy on Write这么难æžå®šï¼Œç›´æŽ¥åŽŸå› æ˜¯å› ä¸ºçŽ°å®žå’Œç†æƒ³ä¹‹é—´çš„å·®è·ï¼šå› 为cé£Žæ ¼çš„å—符串处ç†å‡½æ•°æ— 处ä¸åœ¨â€”—虽然guru们建议我们ä¸è¦ç”¨å®ƒä»¬ï¼Œä½†æ˜¯é‚£ä¹‹å‰çš„历å²æ›´é•¿ã€‚而cé£Žæ ¼çš„å—符串处ç†å‡½æ•°æœ‰ä¸€ä¸ªå‡è®¾ï¼Œå³å—符串的二进制布局:以å•å—节零结尾的连ç»å†…å˜ç©ºé—´ã€‚但是string没有这个å‡è®¾ã€‚至于这ç§å¯¹äºŽäºŒè¿›åˆ¶å¸ƒå±€çš„æ”¾å¼ƒï¼Œç¡®å®žå¢žåŠ äº†stringçš„çµæ´»æ€§ï¼Œä½†åŒæ—¶ä¹Ÿå¢žåŠ 了互æ“作性的难度。我感觉在现在的环境当ä¸æ¥çœ‹ï¼Œåœ¨C++程åºå‘˜å¯¹äºŽâ€œç”¨const引用替æ¢ä¼ 值调用â€å·²æˆä¸ºä¸€ç§æ€ç»´å®šåŠ¿ï¼Œå¹¶ä¸”编译器有了更强的优化能力的情况下,在string上é¢ä½¿ç”¨Reference Counting真的是弊大于利。Reference Counting解决的是å‡å°‘å¤åˆ¶string对象的内å˜åˆ†é…开销,而一旦使用了Reference Counting,为了ä¿æŒstring的行为,修改两个共享å˜å‚¨çš„string对象当ä¸çš„任何一个都必须使用Copy-on-Write。但是,当C++程åºå‘˜å¤åˆ¶ä¸€ä¸ªstring对象的时候,他的目的在ç»å¤§å¤šæ•°æ—¶å€™éƒ½æ˜¯ä¸ºäº†ä¿®æ”¹å®ƒï¼ˆæˆ‘相信对于大多数有ç»éªŒçš„C++程åºå‘˜æ¥è¯´ï¼Œè¿™ä¸ªå‘½é¢˜åŸºæœ¬æˆç«‹ï¼‰ï¼Œå¦‚果这个å‡è®¾æˆç«‹çš„è¯ï¼ŒReference Counting的作用其实并ä¸å¤ªå¤§ã€‚ä¸è¿‡ä»ç„¶å˜åœ¨ç€å…¶ä»–çš„å¯èƒ½æ€§ï¼Œä¾‹å¦‚作为类æˆå‘˜çš„string object。ä¸è¿‡æˆ‘认为这ç§ä¸œè¥¿ä¸åº”该会是性能的瓶颈:如果人们需è¦é¢‘ç¹çš„æ‹·è´ä¸€ä¸ªå…·æœ‰stringæˆå‘˜å˜é‡çš„类实例,这ç§è®¾è®¡å¾€å¾€å°±æœ‰é—®é¢˜ï¼Œæœ‰ç»éªŒçš„C++程åºå‘˜åº”该会é¿å…的。剩下的能够从stringçš„Reference Counting当ä¸å¾—利的,也就是很少的一部分case了。这ç§æ—¶å€™åŽ»å¯»æ‰¾ä¸€ä¸ªç”¨Reference Counting实现的专用版本的string,看起æ¥ä¼¼ä¹Žæ›´åŠ åˆç†ã€‚
在我看æ¥ï¼ŒC++ä»Žä¸€å¼€å§‹å°±æ”¾å¼ƒå¯¹äºŒè¿›åˆ¶å’Œçº¿ç¨‹æ¨¡åž‹çš„æ ‡å‡†åŒ–ä¹Ÿè®¸æ˜¯ä¸€ä¸ªé”™è¯¯ï¼ˆè™½ç„¶è¿™æ ·ç¡®å®žè®©C++å¯ä»¥åœ¨æ›´å¤šçš„å¹³å°ä¸Šå‘æŒ¥ä½œç”¨ï¼‰ã€‚å› ä¸ºæ²¡æœ‰äºŒè¿›åˆ¶å’Œçº¿ç¨‹æ¨¡åž‹ï¼ŒC++æ‰ä¸å¾—ä¸åœ¨ç¼–译期åšæ–‡ç« ,于是æ‰æœ‰äº†æ¨¡æ¿å…ƒç¼–程和很多的编译期优化手段。但是对于强调è¿è¡ŒæœŸçš„å¯é…制性的产å“,编译期的手段很难有用æ¦ä¹‹åœ°ã€‚è¿™ç§çŽ¯å¢ƒå½“ä¸ï¼Œæ›´åŠ 动æ€çš„,å¯ä»¥åœ¨è¿è¡ŒæœŸå˜åŒ–的方案更å—欢迎。这么æ¥çœ‹ï¼Œä»‹äºŽç¼–译型è¯è¨€å’Œè„šæœ¬è¯è¨€ä¹‹é—´çš„方案会很有å‰é€”,比如.NETçš„IL+JIT。
标签: