锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍦ㄨ繖閲屽凡緇忓啓浜嗗揩浜斿勾鐨勫崥瀹? 鎰熻阿cppblog 榪欎簺騫存潵涓鐩存彁渚涚殑浼樿川鏈嶅姟, 浠ヨ嚦浜庢垜閮藉繕浜嗕粬浠殑瀛樺湪--鍥犱負瀹炲湪娌℃湁浠涔堜笉鐥涘揩鐨勪簨鎯呰鎶曡瘔鍙嶉鐨?涓嶈繃,浼間箮鐩墠瀵筩hrome鐨勬敮鎸佸茍涓嶅お濂? 鎴戞瘡嬈″啓鍗氬閮介渶瑕佸垏鎹㈠埌Firefox涓婇潰,甯屾湜鑳芥湁鏀瑰杽.
]]>
涓鐩翠互鏉ユ兂鎵炬満浼氳皥璋堢洰鍓嶈繖涓」鐩粍鍐呴噰鐢ㄧ殑浠g爜鎻愪氦鍒跺害,浠婂ぉ鏁寸悊涓涓?
鍒嗗涓嬪嚑涓祦紼?
1) 鍦╰rac緋葷粺涓婂緩绔媡icket,鍐欏ソ榪欎釜浠誨姟鐨勭洰鐨?騫朵笖accept榪欎釜ticket.
2) 淇敼浠g爜,鎶婄浉鍏崇殑淇敼榪囩殑浠g爜(涓鑸繕搴斿寘鎷浉鍏崇殑嫻嬭瘯鐢ㄤ緥鐨勪唬鐮?鍚庨潰浼氬姞浠ヨ鏄?鎻愪氦鍒皉eview board涓?
3) 鍦╮eview board涓婂~鍐欏涓嬪嚑涓繀瑕佺殑淇℃伅:
a)絎?)姝ュ緩绔嬬殑ticket鐨勫彿鐮?鍙互鏈夊ソ鍑犱釜,涔熷氨鏄竴嬈′慨鏀瑰彲浠ラ拡瀵瑰ソ鍑犱釜浠誨姟),浠ユ槑紜繖嬈℃彁浜ら拡瀵圭殑鏄摢涓換鍔?
b)鍐欎笅嫻嬭瘯浜嗗摢鍑犱釜嫻嬭瘯鐢ㄤ緥,瀵硅繖嬈$殑鎻愪氦鍐欎竴孌墊弿榪?
c)鍐欎笅緇欏摢浜涗漢鍋歳eview.reviewer鐨勮鑹插垎涓轟袱縐?涓縐嶆槸璐熻矗浜?鍙︿竴縐嶅氨鏄櫘閫氱殑緇勫憳.姣忎竴嬈℃彁浜?蹇呴』淇濊瘉reviewer涓湁鑷沖皯涓涓礋璐d漢,騫朵笖闇瑕佹墍鏈夌殑reviewer閮介氳繃浜嗚繖嬈′慨鏀?鎵嶈兘鍚戜唬鐮佸簱鎻愪氦浠g爜.reviewer浼氶拡瀵規彁浜ょ殑浠g爜榪涜鎵規敞鍥炲.
4)涓鑸儏鍐典笅,浠g爜涓嶄細鍦ㄧ涓嬈℃彁浜ゅ氨鑳介氳繃review,澶у鏁版儏鍐典細琚墦鍥炰慨鏀?浜庢槸2)-4)涓変釜姝ラ灝嗗驚鐜繘琛屼笅鍘葷洿鍒頒唬鐮侀氳繃review涓烘.
5) 鎻愪氦浜嗕唬鐮佷箣鍚?1)涓緩绔嬬殑ticket浼氳鑷姩鍏抽棴,騫朵笖灝嗗湪ticket鐨勫洖澶嶈嚜鍔ㄥ啓涓婃湰嬈℃彁浜や慨鏀圭殑鏂囦歡浠ュ強svn revision鍙?榪欐牱浠ュ悗鍐嶇湅璧鋒潵灝辯煡閬撴槸鍝鎻愪氦騫朵笖淇敼浜嗗摢浜涙枃浠墮拡瀵圭殑鍙堟槸鍝釜鍔熻兘浜?
6) 鏈変竴鍙版湇鍔″櫒涓撻棬浣滀負buildbot鏈哄櫒, 榪欏彴鏈哄櫒鍦ㄦ瘡嬈℃彁浜や簡浠g爜涔嬪悗,
灝嗚嚜鍔ㄦ竻絀哄師鏉ョ殑浠g爜鐩綍,鏇存柊鏈鏂扮殑浠g爜,閲嶆柊緙栬瘧,鐒跺悗鎶婇噷闈㈢殑嫻嬭瘯鐢ㄤ緥鍏ㄩ儴璺戜竴閬?鎴戜滑鐨勯」鐩嬌鐢ㄧ殑tcmalloc,浼氭鏌ュ唴瀛樻硠婕?鎵浠ュ湪嫻嬭瘯鐢ㄤ緥嫻嬭瘯澶辮觸,浠ュ強鏈夊唴瀛樻硠婕忕殑鏃跺?buildbot閮戒細澶辮觸.闇瑕佽ˉ鍏呬竴鐐圭殑鏄?闄や簡姣忔鎻愪氦浠g爜浼氬鑷碽uildbot閲嶆柊緙栬瘧鏂扮殑浠g爜,鍦ㄦ瘡鏅氱殑涓涓浐瀹氭椂闂?鍗充嬌娌℃湁鏇存柊浠g爜,涔熶細鍋氱浉鍚岀殑鍔ㄤ綔.buildbot鐨勫瓨鍦?灝辨槸涓轟簡涓嶆柇鐨勬竻絀虹紪璇戞枃浠墮噸鏂扮紪璇戝啀璺戞祴璇曠敤渚?浠ュぇ閲忕殑嫻嬭瘯娑堥櫎闅忔満鎬т繚璇佹紜?
浠ヤ笂鏄暣涓唬鐮佹彁浜ゆ満鍒剁殑澶т綋嫻佺▼璇存槑,涓嬮潰璋堥噷闈㈢殑緇嗚妭.
1)涓婇潰鐨勭1)姝ヤ腑,寤虹珛trac鐨則icket鏃?闇瑕佹寚瀹氫竴涓猰ilestone,涓鑸垜浠蹇呴』鍋氱殑浜嬫儏鏄瘡鍛ㄤ互鏃ユ湡鍛藉悕寤虹珛涓涓猰ilestone,榪欐牱,浣犲仛鐨勪換鍔″氨浼氳嚜鐒剁殑鍙樻垚姣忓懆鍙互鍘昏窡榪涚殑浠誨姟.
2)絎?)姝ヤ腑,鍐欐祴璇曠敤渚嬮拡瀵圭殑鏄瘡涓被鎴栬呮瘡涓ご鏂囦歡瀵瑰鏆撮湶鐨凙PI鎺ュ彛,姣斿瀵瑰鐨凙PI c浣跨敤鍐呴儴鐨勫嚱鏁癇,閭d箞鏄病鏈夊姙娉曞鍑芥暟B緙栧啓嫻嬭瘯鐢ㄤ緥鐨?鎴戜滑鐨勮姹傛槸, 浠諱綍鐨勪竴涓柊澧炵殑API閮介渶瑕佸啓閽堝瀹冭繘琛屾祴璇曠殑嫻嬭瘯鐢ㄤ緥,涓嶄竴瀹氬彧鏈変竴涓?鍥犱負闇瑕佽冭檻鐨勬儏鍐靛彲鑳藉緢澶?鎬昏岃█涔?灝藉彲鑳界殑鑰冭檻榻愬叏.鍋囧鏈淇敼淇敼浜嗗唴閮ㄥ嚱鏁癇,閭d箞渚濊禆浜庡嚱鏁癇鐨凙PI c瀹冪殑嫻嬭瘯鐢ㄤ緥涔熷氨闇瑕佸啀嫻嬭瘯浜?榪欎簺嫻嬭瘯鐢ㄧ殑浠g爜涔熶細涓騫舵彁浜ゅ埌浠g爜搴撲腑,鍥犱負榪欐牱鎵嶈兘淇濊瘉buildbot鏇存柊涔嬪悗涔熸寜鐓ф渶鏂扮殑嫻嬭瘯鐢ㄤ緥榪涜嫻嬭瘯.
3) 浠g爜鎻愪氦鍒皉eviewboard涔嬪墠,榪橀渶瑕佽繃lint榪欎竴鍏?瀵瑰熀鏈殑浠g爜椋庢牸榪涜媯鏌?鎴戜滑浣跨敤鐨勬槸google c++ code style.
4) reviewer涓殑璐熻矗浜鴻鑹插緢閲嶈, 璧風潃鐪嬮棬浜虹殑浣滅敤,浠諱綍鐨勪竴嬈′慨鏀規彁浜?閮藉繀欏昏嚦灝戠粡榪囦竴涓礋璐d漢鐨剅eview, 鎵浠ュ浠栫殑瑕佹眰灝辯浉瀵歸珮浜涗簡,闄や簡瑕佸畬鎴愯嚜宸辯殑宸ヤ綔澶?榪橀渶瑕佽鐪焤eview浠栦漢鐨勪唬鐮?鑰岃review浠栦漢鐨勪唬鐮佸茍涓旂粰鍑哄ソ鐨勬剰瑙佹潵,鍙堣姹備粬鏈漢闄や簡緙栫爜鑳藉姏澶?榪樿鍦ㄤ笟鍔″眰闈㈠鍒漢鐨勫伐浣滄湁澶т綋鐨勪簡瑙?涓嶇劧娌℃硶review浜?
5) 浠庡墠鏂囧彲浠ョ湅鍑?review瀹炲湪鏄竴涓箒鏉傜殑宸ヤ綔,寰堟湁鍙兘鍦╮eview闃舵琚墦鍥炰慨鏀逛唬鐮?灝辨垜鐨勭粡楠岃岃█,鎻愪氦review鐨勪漢瑕佸皢鎻愪氦鐨勪換鍔″敖閲忕殑鍒掑垎鐨勭粏涓浜涘氨鏉ョ殑寰堥噸瑕佷簡.鍦ㄦ彁浜eview鐨勬椂鍊?鎴戜竴鐩村潥鎸丏OTDIW鍘熷垯(Do One Thing,Do It Well).鐩稿弽鐨勪緥瀛?鎴戜滑緇勬湁涓悓浜?鍋氫簡涓涓緢澶х殑鍔熻兘,鍏夋槸瀹屾垚榪欎釜澶х殑鍔熻兘,灝辮姳璐瑰ソ鍑犲懆鐨勬椂闂?鎻愪氦review鐨勬椂鍊欎唬鐮侀噺澶?鏈変釜鍑犲崈琛岀殑,榪欐牱鍒漢review璧鋒潵涔熸參,鑰屼笖涓鏃︿笉閫氳繃闇瑕佷慨鏀?鍙堟槸涓涓嫤鍔涙椿鍎?榪欐牱涓鎶樿吘,涓涓湀鏃墮棿榪囧幓浜?濡傛灉褰撴椂鑳藉鏁翠綋鐨勫姛鑳芥湁涓妸鎻?鎳傚緱鍒掑垎妯″潡灞傛,閫愪釜鎻愪氦,涔熻浼氬ソ浜?褰撶劧,澶ц妯$殑浠g爜鎻愪氦鏈夋椂騫朵笉鑳藉畬鍏ㄧ殑閬垮厤,姣斿涓涓瘮杈冨ぇ鐨勯噸鏋?鐗典竴鍙戣屽姩鍏ㄨ韓鐨?鎴戝彧鏄濡傛灉鍙兘,搴斿敖閲忛伩鍏嶅ぇ瑙勬ā浠g爜鐨勬彁浜?騫朵笖鏈閲嶈鐨勬槸:姣忔鎻愪氦鏈濂戒粎閽堝涓涓姛鑳界偣.
浠ヤ笂鏄嫻佺▼浠庢暣浣撳埌緇嗚妭鐨勬弿榪?鐜板湪璋堣皥鎴戠殑鐪嬫硶.
鍏堟潵璋堜紭鐐?
1) 閫氳繃codereview鍒跺害,淇濊瘉浜嗛」鐩粍鎴愬憳涔嬮棿鑳藉鍦ㄤ唬鐮佸眰闈笂鐩存帴鐨勮繘琛屼氦嫻?鎴戞兂榪欎竴鐐規槸鏈閲嶈鐨?娌℃湁涔嬩竴.
濡傛灉浣犳槸涓涓按騫沖樊涓浜涚殑紼嬪簭鍛?閭d箞鏈夋瘮浣犵墰鍙夌殑浜哄府浣爎eview,鐩稿綋浜庢槸璇諱功鐨勬椂鍊欐湁鑰佸笀甯綘闃呭嵎淇敼浣滀笟,鍙互鎸囨浣犵殑闂鎵鍦?鎴戝湪琚漢review鐨勮繃紼嬩腑灝卞惉鍒頒簡鍒漢瀵規垜寰堝鐨勬剰瑙?鑰屽鏋滄槸涓涓按騫寵緝楂樼殑浜?鏄笉鏄姘村鉤宸殑浜鴻繘琛宑odereview灝辨槸嫻垂浠栫殑鏃墮棿浜嗗憿?鎴戜釜浜鴻涓?榪欎釜浜嬫儏鍒嗘庝箞鐪?浠庡洟闃熺殑瑙掑害鐪?鎸夌収鏈ㄦ《鐞嗚,鏈鐭殑鐭澘寰寰鍐沖畾浜嗚兘杈懼埌鐨勬按騫?鎬諱笉鑳芥寚鏈涙墍鏈夌殑浜嬫儏閮界敱鑰侀笩瀹屾垚,鎵浠ヨ佷漢鍦ㄥ府鏂頒漢review浠g爜鐨勬椂鍊欓棿鎺ョ殑甯姪浜嗘柊浜虹殑鎴愰暱,鍚屾椂浣滀負欏圭洰緇勪腑璧勫巻姣旇緝娣辯殑浜?涔熷簲璇ュ欏圭洰澶氳垂涓浜涙椂闂磋繘琛屾妸鍏?鎴戣寰楄繖涓鐐規棤鍙帤闈?鍚屾椂,鍗充嬌鏄柊浜?閫氳繃闃呰浠栦漢鐨勪唬鐮佸茍涓斾氦嫻?涔熷彲浠ュ涔犲埌鍒漢鐨勬濇兂.
codereview鍒跺害浠庝笂闈㈢殑瑙掑害涓婁繚璇佷簡欏圭洰鎴愬憳鍙互鐩存帴閫氳繃浠g爜榪涜浜ゆ祦,綆鍗曠殑璇?璋佸啓鐨勪唬鐮佽川閲忓浣?涓鍒頒簡review,涓鐩簡鐒?鍐欑殑濂界殑閫氳繃鐨勫揩,鍐欑殑涓嶅ソ琚墦鍥炰慨鏀瑰浜嗚嚜宸變篃浼氶暱璁版?榪樺彲浠ュ鐪嬪埆浜虹殑浠g爜榪涜瀛︿範.榪欐牱,鍦ㄤ竴瀹氬眰闈笂鍙互浣塊」鐩粍鎴愬憳鐨勮兘鍔涘敖鍙兘鐨勬帴榪?鎴戣兘鍔涢暱浜嗕竴綰?鐩稿簲鐨勪篃浼氭媺鍔ㄩ」鐩粍涓殑浜哄崌綰?
2) 嫻嬭瘯鐢ㄤ緥.鎴戜箣鍓嶆彁鍒扮殑嫻嬭瘯椹卞姩寮鍙?鎯蟲硶灝辨潵鑷簬欏圭洰緇勪腑緙栧啓嫻嬭瘯鐢ㄤ緥+buildbot鎵ц嫻嬭瘯鐢ㄤ緥鐨勫仛娉?濡備綍璇佹槑涓涓狝PI鏄‘瀹氭棤璇殑?鎴戣寰楄繖涓棶棰樹技涔庨潪甯擱毦.闄や簡涓浜涘彲浠ラ氳繃鏁板涓婇昏緫涓婅瘉鏄庣殑鎯呭喌澶?榪橀渶瑕佽冭檻寰堝鍏朵粬鐨勯殢鏈烘儏鍐?姣斿綰跨▼鐨勫垏鎹㈡槸闅忔満鐨?鏌愪釜鏂囦歡澶規伆濂藉瓨鍦ㄦ槸闅忔満鐨?絳夌瓑.榪欎簺闅忔満鍑虹幇鐨勯棶棰?寰堝鏃跺欎笉鑳藉湪鏌愪竴嬈℃祴璇曚腑鏄劇幇鍑烘潵.浣嗘槸濡傛灉鏈変簡buildbot,涓嶅仠鐨勬洿鏂?緙栬瘧,鎵ц,鎬諱細鏈夋毚闇查棶棰樼殑涓澶?鍙﹀,涔嬪墠鎴戜篃鎻愬埌榪?鑴戜腑濡傛灉鏈変簡嫻嬭瘯鐢ㄤ緥鐨勬蹇靛瓨鍦?姣忓啓涓涓狝PI鏃墮兘浼氳冭檻鍒伴拡瀵瑰畠鐨勭敤渚嬪簲璇ユ槸鎬庢牱鐨?浠庡彟涓涓搴?涔熷府鍔╀綘鐨勮璁?-浣犻渶瑕佽冭檻榪欎釜API鐨勮緭鍏?杈撳嚭,寮傚父鎯呭喌閮芥湁鍝簺,濡備綍嫻嬭瘯鍒?嫻嬭瘯鐢ㄤ緥鐨勫瓨鍦?淇濊瘉欏圭洰灝介噺鐨勫仛鍒頒簡"鍙帶鍒?.
緙虹偣:
1) 浠庝笂闈㈢殑嫻佺▼鍙互鐪嬪嚭,璧板畬涓涓唬鐮佹彁浜ょ殑嫻佺▼闇瑕佽姳璐瑰ぇ閲忕殑綺懼姏/鏃墮棿(鏈変竴浜涜繕鏄粬浜虹殑綺懼姏/鏃墮棿),鎵浠?涔熻榪欎釜鍒跺害騫朵笉閫傚悎浜庨偅縐嶆椂闂村帇鍔涙瘮杈冨ぇ鐨勯」鐩?
2) 鏈夊嚑涓湴鏂瑰緢闅懼潥鎸?姣斿codereview鏃?鏈変簺reviewer浼氳蛋榪囧満,涔熸病鎬庝箞鐪嬩唬鐮佸氨鐩存帴閫氳繃浜?榪欐牱灝變細嫻佷簬褰㈠紡浜?榪樻湁緙栧啓嫻嬭瘯鐢ㄤ緥,涔熸槸涓浠跺緢鑰楁椂闂寸殑浜嬫儏.
3) 鐢變簬codereview鍒跺害鐨勫瓨鍦?緇檙eview涓殑璐熻矗浜哄甫鍘葷殑鍘嬪姏寰堝ぇ,鍥犱負鏈韓浠栨湁鑷繁鐨勫伐浣?鍙堣灝介噺瀵逛粬浜虹殑涓氬姟/浠g爜榪涜浜嗚В,灝卞儚閭g璐熻澆寰堝ぇ鐨勬湇鍔″櫒涓鏍?鏈夋椂鍊欎細涓嶅牚閲嶈礋.榪欎竴鐐逛笂,鎴戠殑鎯蟲硶鏄?欏圭洰緇勫唴鐨勫叾浠栨垚鍛?濡傛灉鑳界Н鏋佷富鍔ㄤ竴浜?澶氳姳鏃墮棿浜嗚В鍒漢鐨勪唬鐮?灝介噺鍒嗘媴review鐨勪換鍔?鎴栬呰瘯鐫鎴愰暱涓鴻礋璐d漢綰у埆(闄嶄綆鍗曠偣鏁呴殰鐜?),涔熻鏄竴涓ソ鍔炴硶.涓嶈繃,榪欒繕寰楃湅浜轟簡.
鏁翠釜浠g爜鎻愪氦嫻佺▼涓婄殑杞歡,鐩墠鎴戞墍鐭ョ殑閮芥槸浣跨敤鐨勫紑婧愯蔣浠?SVN, google c++ code style lint,review board,buildbot,trac,嫻嬭瘯鐢ㄤ緥鐨勭紪鍐欎笂浣跨敤鐨勬槸google鐨勬祴璇曠敤渚嬫鏋秅test.涓嶈繃,鏁村悎璧瘋繖浜涜蔣浠舵惌寤哄ソ榪欎釜嫻佺▼灝變笉鏄偅涔堝鏄撲簡,鐢ㄤ簡涓浜?鍗婂勾宸﹀彸鐨勬椂闂?鎵嶈榪欎釜嫻佺▼鍩烘湰紼沖畾涓嬫潵.
鎬諱箣,榪欏鏈哄埗涓?鏃㈡湁浜轟負鐨勫共娑?涔熸湁鏈哄櫒灞傞潰涓婄殑騫叉秹,涔熻騫朵笉鏄渶瀹岀編鐨?浣嗘槸灝戒簡鏈澶х殑鍔涢噺鍘諱繚璇侀」鐩殑姝g‘鎬у拰鍙帶鎬?
浠ユ紜殑鏂瑰紡姝g‘鐨勫埗搴﹀仛浜?鏄皢浜嬫儏鍋氬ソ鐨勪竴涓叧閿?
]]>
鎴戞壘浜嗕袱涓被浼奸」鐩潵鐮旂┒,google鐨?a >glog 鍜?log4cpp, 瀹冧滑閮芥敮鎸佷互C++嫻佽緭鍑烘牸寮忚繘琛岃緭鍑?
浣嗘槸鐮旂┒鍒版渶鍚?鎴戝彂鐜版渶澶х殑闂鏄? 濡傛灉鎸夌収C++鐨勬祦杈撳嚭鏍煎紡榪涜杈撳嚭, 灝嗘棤娉曞垽瀹氶渶瑕佽緭鍑虹殑淇℃伅鍒板摢閲屾槸緇撴潫.姣斿log << "hello " << "world",鏄棤娉曞垽鏂埌搴曞湪杈撳嚭"hello"榪樻槸"world"鐨勬椂鍊欎笂闈㈢殑鍙傛暟杈撳叆宸茬粡緇撴潫浜?涓婇潰涓や釜欏圭洰涓? 瑙e喅榪欎釜闂鐨勫姙娉曞ぇ鑷存槸鐩稿悓鐨?浠ヤ笅闈㈠彲緙栬瘧榪愯浠g爜涓轟緥璇存槑瀹冧滑鐨勫仛娉?鍦╨inux g++涓嬮潰緙栬瘧閫氳繃):
#include <sstream>
#ifdef __DEPRECATED
// Make GCC quiet.
# undef __DEPRECATED
# include <strstream>
# define __DEPRECATED
#else
# include <strstream>
#endif
using namespace std;
class LoggerStream : public std::ostrstream {
public:
LoggerStream(char * buf, int len)
: ostrstream(buf, len),
buf_(buf),
len_(len) {
}
~LoggerStream() {
// do the real fucking output
cout << buf_;
}
private:
char *buf_;
int len_;
};
int main() {
char buf[100] = {'\0'};
LoggerStream(buf, sizeof(buf)) << 1 << " hello world\n";
cout << "buf = " << buf << endl;
return 0;
}
鍦ㄤ笂闈㈢殑浠g爜涓? 寮濮嬭繘琛岃緭鍑虹殑鏃跺欓鍏堝垵濮嬪寲涓涓狶oggerStream瀵硅薄, 鑰屽湪杈撳嚭鍙傛暟杈撳叆瀹屾瘯鐨勬椂鍊欏皢璋冪敤瀹冪殑鏋愭瀯鍑芥暟,鍦ㄨ繖涓瀽鏋勫嚱鏁頒腑鎵嶅畬鎴愮湡姝g殑杈撳嚭鍔ㄤ綔.涔熷氨鏄,鐢變簬瀵硅緭鍏ュ弬鏁扮粨鏉熶綅緗垽鏂墜孌電殑緙哄け,C++涓笉寰椾笉閲囩敤榪欎釜鎵嬫鍦ㄦ瀽鏋勫嚱鏁頒腑瀹屾垚鏈緇堢殑杈撳嚭宸ヤ綔.
榪欐牱鐨勫仛娉?鏈澶х殑闂鏄?棰戠箒鐨勬瀯閫?鏋愭瀯寮閿澶?鑰屼笖姣忎釜"<<"鎿嶄綔絎﹁儗鍚庡張闇瑕佽皟鐢╫stream鐨刼perator<<,涔熷氨鏄亣濡備綘鐨勮緭鍏ュ弬鏁版湁涓変釜灝嗚皟鐢╫perator <<涓夋(褰撶劧鏄粡榪囬噸杞界殑,涓嶄竴瀹氶兘鏄悓涓涓猳perator<<),鍥犳,鍋囧闇瑕佽冭檻澶氱嚎紼嬬殑璇?閭d箞涓嬈¤緭鍏ユ湁澶氫釜鍑芥暟鍑芥暟涓璋冪敤,浠嶇劧鏄棶棰?澶?瑕佷嬌鐢ㄨ繖闂ㄨ璦鍐欏嚭姝g‘鐨勭▼搴忔潵,闇瑕佷簡瑙e簳涓嬪灝戠殑緇嗚妭鍛?!
鏈鍚?鎴戝悜欏圭洰緇勫弽鏄犺繖涓棶棰?涓鑷村悓鎰忎互C涓被浼約printf鍙彉鍙傛暟鐨勫艦寮忓疄鐜拌繖涓姛鑳?鍙彉鍙傛暟瑙e喅榪欎釜闂,灝辨垜鐨勬劅瑙夎岃█,灝辨槸杈撳叆鍙傛暟鐨勬椂鍊?紼嶆樉澶嶆潅,闇瑕佺敤鎴鋒寚瀹氳緭鍏ョ殑鏍煎紡.鐒惰?鍏跺疄榪欎釜鍋氭硶涔熸湁濂藉:浣滀負鍑芥暟鐨勪嬌鐢ㄨ?浣犲繀欏繪槑紜殑鐭ラ亾浣犲湪鍋氫粈涔堝茍涓斿弽棣堢粰浣犳墍浣跨敤鐨勫嚱鏁?鏄庣‘鐨?鏃犳涔夌殑浣跨敤鍑芥暟,鑰屼笉鏄緷闈犳墍璋撳嚱鏁伴噸杞界寽浣犵殑鐢ㄦ剰,鎴戞兂涔熸槸閬垮厤闂鐨勪竴涓墜孌?gcc涓? 鎻愪緵浜嗗鍙彉鍙傛暟媯鏌ョ殑鏈哄埗,瑙?a >榪欓噷.
]]>
浣滀負璧勬繁鐨勫凡緇忓枩嬈㈤樋鏍瑰環浜哄崄澶氬勾鐨勪漢,鏄ㄦ櫄鐪嬪埌0:2钀藉悗鐨勬椂鍊?鎴戣繀閫熻蛋鍥炶嚜宸辯殑鎴塊棿.鎴戠煡閬撳凡緇忓穿鐩?鐒惰屾瘮璧涜繕鏈夊嚑鍗佸垎閽熺殑鏃墮棿,浠ヨ繖涓佸娍鍙戝睍涓嬪幓,緇撴灉榪樹細鏇村樊.
浣嗘槸,榪囦簡鍑犲垎閽?鎴戝張璧板嚭鏉ョ戶緇湅瀹屽墿涓嬬殑姣旇禌,0:3,0:4,闃挎牴寤蜂漢鐪間腑鐨勬棤濂?鏄犺‖鐫寰峰浗浜虹殑杞繪澗.寰峰浗浜轟互鍙婂叾杞繪澗鐨?鎴栬呰鏄鎵嬮樋鏍瑰環鏈鎿呴暱鐨勬柟寮?寰瑧鐫涓鍒涓鍒灝嗗鎵嬪垏鍓?
寰峰浗浜烘槸涓栫晫鏉巻鍙蹭笂鍙戞尌鏈涓虹ǔ瀹氱殑涓鏀悆闃?娌℃湁涔嬩竴),榪欎釜鏁版嵁鐨勫緱鏉ユ牴鎹槸浠栦滑鏄縿浠婁負姝㈣繘鍏ヤ笘鐣屾澂鍏己鏈澶氱殑鐞冮槦.
"紼沖畾"鏄粈涔堟剰鎬?紼沖畾灝辨槸鑷繁涓嶇姱閿?姝e父鍙戞尌鑷繁鐨勬按騫?鏈?0鍒嗘墦鍑?0鍒嗙殑姘村鉤,鏈?00鍒嗘墦鍑?00鍒嗙殑姘村鉤.淇濊瘉浜嗚嚜宸變笉鐘敊,鎵嶈兘絳夊緟瀵規墜鐨勭姱閿?
鍗充嬌鍦?4,98涓ゅ勾涓栫晫鏉?寰峰浗浜虹敱浜庢暣浣撲漢鍛樼殑鑰佸寲,娌¤兘鍙栧緱濂芥垚緇?浠栦滑涔熶緷鐒跺緢"紼沖畾",鍥犱負褰撴椂鐨勪漢鍛樿兘鍔涗篃紜疄鍙湁閭d釜姘村鉤浜?浠栦滑娌℃湁鑷垜鐘敊,渚濈劧鎶婅嚜宸辨渶濂界殑姘村鉤鍙戞尌鍑烘潵.
鐪嬬湅鍏朵粬鐨勯槦浼嶅惂,娉曞浗鍐呰,鎰忓ぇ鍒╁浐鎵?宸磋タ淇濆畧,闃挎牴寤?鎴戝氨涓嶈瘎浠蜂簡).鍑犱箮閮芥湁鍚勮嚜鐨勯棶棰?鏈緇堥兘鍊掑湪鑷繁鐨勮剼涓?
瓚崇悆鏄竴涓厖婊″伓鐒舵х殑榪愬姩,涓涓摝韜?鎺㈠ご,浼歌剼閮藉彲鑳介犳垚榪涚悆.閬囧埌涓涓嚑鍗佸勾涓瑙佺殑澶╂墠,灝卞彲浠ヨ鐞冮槦鍛奸鍞ら洦濂藉騫?
浣嗘槸,浣犱笉鑳芥繪槸鍑熺潃鍋剁劧鎬?榪愭皵璧扮殑鏇磋繙.濂芥瘮璇?浣犱笉鑳芥繪槸鎸囨湜鐫鍑虹幇璐濆埄,椹媺澶氱撼,榻愮榪欐牱鐨勫ぉ鎵嶈兘绔欏嚭鏉ヤ竴澶綋鍏蟲嫰鏁戠悆闃?鎴戜滑鎻愬¤嫳闆?宕囨嫓鑻遍泟,浣嗘槸,鑻遍泟騫朵笉鎬繪槸瀛樺湪鐨?鍑虹幇鑻遍泟榪欐湰韜氨鏄歡榪愭皵鍗佽凍鐨勪簨鎯?
鏇村鐨?搴旇鏄寜鐓ц寰嬪姙浜?涓涓濅笉鑻?涓ヨ皚姹傚疄.鍐欎笅涓婇潰閭e彞璇濇椂,鎴戞兂鍒頒簡寰峰浗浜哄湪06騫翠笘鐣屾澂鐨勫闃挎牴寤蜂簰緗氱偣鐞冩椂鐨勫皬綰告潯.寰峰浗闄や簡璐濊偗椴嶅皵涔嬪浼間箮娌℃湁鍑虹幇鍏鐨勮秴綰у法鏄?鐒惰屽氨鏄兘鍙栧緱濡傛紼沖畾鐨勬垚緇?榪欐湰韜凡緇忔槸寰堝ソ鐨勮В閲?
鏇劇粡鎴戣糠鎭嬪反涔?宸磋拏閭f牱鐨勬偛鍓у摜,涓婂ぉ緇欎簣浠栦滑澶╄祴,鍗存病鏈夌粰浠栦滑濂界殑緇撴灉.鏇劇粡鎴戝湪浠栦滑韜笂,鐩鎬俊鏈夋墍璋撶殑"鍛借繍".
鎴戣繖涔堣,騫朵笉鏄浠栦滑鐨勭粨鏋滃畬鍏ㄧ殑鏃犲鍥犳墍浣滅敤.鍙槸鎴戣寰?褰撲綘鎶婁簨鎯呯殑緇撴灉榪囧害鐨勫綊鍜庝簬閭d簺鐜勪箣鍙堢巹鐨勪笢瑗挎椂,浜哄氨浼氬彉寰楃煫鎯?鏂囪壓,涓嶅幓鍙嶆濊嚜宸?
浣涜,涓栭棿涓鍒囦簨,鐨嗘槸鍥犳灉鎶ュ簲.璇寸殑閫氫織浜?鍙滀箣浜哄繀鏈夊叾鍙仺涔嬪.
鎵浠?鍘諱粬濡堢殑<<闃挎牴寤峰埆涓烘垜鍝常>>鍚?鐭儏鍜屾枃鑹哄茍涓嶈兘璁╀綘鐨勭敓媧誨洜姝ゆ敼鍙?鎶搗澶存潵闈㈠鐜板疄鍙嶆濊嚜宸卞惂.
鍚戝痙鍥戒漢浣庡ご,榪欎釜姘戞棌鐨勫瓧鍏擱噷娌℃湁"鍛借繍"涓璇?
]]>
google protobuf 鏄痝oogle鍏紑鐨勪竴濂楃敤浜庣綉緇滈氫俊鏃剁敤浜庡崗璁紪瑙g爜鐨勫伐鍏峰簱,浣跨敤瀹冨畾涔夌殑鏍煎紡,浣犲彲浠ュ畾涔夊崗璁殑瀛楁,鐢卞畠鑷甫鐨勭紪璇戝櫒鐢熸垚鍑鴻礋璐g紪瑙g爜鐨勪唬鐮佹枃浠?鍙敓鎴愯澶氫笉鍚岀殑璇█鏂囦歡).鍚屾椂,瀹冭繕鍖呮嫭浜嗗熀鏈殑RPC鎺ュ彛瀹氫箟.浣嗘槸,榪欎釜宸ュ叿鐢ㄥ湪RPC涓婃瘮杈冨ぇ鐨勯棶棰樻槸瀹冨彧璐熻矗鐢熸垚浠g爜鏂囦歡,鑰屽鏋滆鐪熸浣跨敤璧鋒潵鍋氫負涓涓猂PC妗嗘灦,榪橀渶瑕佸瀹冭繘琛岀綉緇滃眰涓婄殑灝佽,浣嗘槸鍦ㄥ畠鑷繁鐨勫畼鏂規枃妗d笂騫舵病鏈夌粰鍑轟竴涓猟emo鍛婅瘔璇昏呭浣曚竴姝ヤ竴姝ョ殑鏉ュ畬鎴愯繖鏍蜂竴涓伐浣?thrift鏄笌google protobuf鍚屾牱瀹氫綅鐨勪竴涓伐鍏峰簱,闄や簡鍏峰google protobuf鐩稿悓鐨勫姛鑳藉,濡傛敮鎸佸璇█,璺ㄥ鉤鍙?楂樻晥鐨勭紪瑙g爜,榪橀泦鎴愪簡緗戠粶閫氫俊灞?鍙互浣跨敤瀹冨畬鎴愭墍鏈塕PC鎵闇瑕佸畬鎴愮殑宸ヤ綔.鍦?a >榪欎釜欏甸潰涓?google protobuf緇欏嚭浜嗕竴浜涘凡鐭ョ殑浣跨敤涓嶅悓璇█瀵瑰畠榪涜灝佽鐨勯」鐩?
chenshuo鐨?a >evproto鍚屾牱涔熸槸闆嗘垚libevent涓巊oogle protobuf鐨凴PC妗嗘灦,涓嶈繃鍦ㄥlibevent鐨勪嬌鐢ㄤ笂,榪欓噷鐨勫仛娉曚笌浠栦笉灝界浉鍚?
1) 浠栦嬌鐢ㄤ簡libevent鑷甫鐨凴PC鍔熻兘, 鑰岃繖閲屽彧浣跨敤鍒發ibevent瀵圭綉緇淚/O榪涜鐨勫皝瑁呯殑鏈鍩烘湰鐨勫姛鑳?
2) 涔嬫墍浠ユ湁1)鐨勮冭檻,鏄洜涓烘垜璁や負涓涓伐鍏鋒渶濂藉簲璇ユ槸"do one thing, do it better"鐨?涔熻浠庤繖鐐瑰彲浠ヨВ閲婁負浠涔坓oogle protobuf娌℃湁鍍弔hrift閭f牱鑷甫緗戠粶灞?鑰屾槸鎶婅繖涓伐浣滅暀緇欎簡鐢ㄦ埛),libevent宸茬粡瓚婃潵瓚婂ぇ,闄や簡瀵笽/O,淇″彿,瀹氭椂鍣ㄧ瓑鐨勫皝瑁呬箣澶?鐜板湪榪樻湁RPC,寮傛DNS,http鍗忚鐨勬敮鎸佺瓑絳?璇寸湡鐨?濡傛灉鍙槸鍏蟲敞鍒扮綉緇淚/O鐨勫璺鐢ㄦ満鍒?閭d箞鍑犱箮浠諱綍涓涓啛緇冪殑紼嬪簭鍛橀兘鍙互寰堝揩鐨勮嚜宸卞仛鍑鴻繖鏍風殑涓濂椾笢瑗挎潵,浣跨敤libevent鏃犻潪灝辨槸涓轟粖鍚庡彲鑳界殑璺ㄥ鉤鍙板仛鍑嗗緗簡.闅忕潃鎴戝libevent鍙戝睍鏂瑰悜鐨勪笉璁ゅ悓,榪樻浘緇忔兂榪囦嬌鐢╨ibev鏇夸唬libevent,涓嶈繃鐜板湪鏆傛椂涓嶆兂鎶樿吘榪欎釜浜嬫儏浜?
eventrpc欏圭洰鐩墠鏄?a >avidya涓嬬殑涓涓瓙欏圭洰,avidya欏圭洰鐨勫畾浣嶆槸瀹炵幇涓浜涘垎甯冨紡鐨勭帺鍏風郴緇?姣斿google宸茬粡鍏紑璁烘枃鐨刢hubby,mapreduce,GFS絳?,涔熻浠ュ悗涓嶄竴瀹氳兘琚敤涓?浣嗘槸涔熻瀹炶返鍋氫竴鎶?鐢變簬鏈変竴涓ソ鐢ㄧ殑RPC妗嗘灦鏄仛鍒嗗竷寮忕殑蹇呴渶鍝?鎵鏈夐鍏堝疄鐜癳ventrpc榪欎釜瀛愰」鐩簡,浠ュ悗涔熻榪樹細瀹炵幇鍏朵粬璇█鐨勭増鏈?濡俻ython,java.
eventrpc鐨勭綉緇滄ā鍨嬩笂,浣跨敤浠ュ墠鎻愬埌鐨?a href="http://m.shnenglu.com/converse/archive/2010/03/11/109449.html">memcached鐨勭綉緇滄ā鍨?/a>, 涓葷嚎紼嬭礋璐f帴鏀舵柊鐨勮繛鎺? 鍐嶅皢榪欎簺鏂扮殑榪炴帴浜ょ敱鍓嚎紼嬪鐞?姣忎釜鍓嚎紼嬭嚜甯/O dispatcher.鍦╯amples鐩綍涓?鏈変竴涓疄鐜頒簡echo鏈嶅姟鐨勫鎴風鍜屾湇鍔″櫒绔ず渚?
鍦ㄤ嬌鐢ㄤ箣鍓?璇風‘淇漧ibevent鍜実oogle protobuf宸茬粡瀹夎鎴愬姛,褰撳墠鍙湪linux涓嬪彲鐢?
]]>
鎴戝榪欏彞璇濈殑鐞嗚В鏄?
1) 浠諱綍涓嬈℃彁浜ゆ柊鐨勪唬鐮侀兘闇瑕佹坊鍔犻拡瀵硅繖浜涙柊鍔熻兘鐨勬祴璇曠敤渚?
2) 鏃犺璁捐鍑芥暟榪樻槸綾? 瀵瑰鏆撮湶鐨勬帴鍙i兘搴旇鍋氬埌鏄庣‘, 娓呮櫚, 涓嶄細緇欎漢妯℃1涓ゅ彲鐨勬劅瑙?鎻愪緵鐨勫姛鑳界偣灝藉彲鑳界殑鍗曚竴, do one thing, do it well.
綆鑰岃█涔? 鎴戞墍鐞嗚В鐨?嫻嬭瘯椹卞姩寮鍙?, 鍗佸垎寮鴻皟瀵規帴鍙g殑璁捐, 浠ュ強閽堝榪欎釜鎺ュ彛鎵闇瑕佽冭檻鐨勫紓甯稿拰嫻嬭瘯鐢ㄤ緥.鎺ュ彛鏄澶栫殑淇濊瘉, 鑰屾祴璇曠敤渚嬫槸楠屾敹鑰? 姣忔鐨勪慨鏀? 閮介渶瑕佷繚璇佷箣鍓嶅拰鐜板湪鐨勭敤渚嬭兘欏哄埄閫氳繃.
鎵浠? 瀵瑰紑鍙戜漢鍛樻潵璇? 濡傛灉鏈夎繖涓?嫻嬭瘯椹卞姩寮鍙?鐨勮蹇? 閭d箞鍦ㄨ璁$紪鍐欎唬鐮佺殑鏃跺欎細寰堝鏄撶殑褰㈡垚鍑犱釜濂戒範鎯? 姣斿浠栦細鍙嶉棶鑷繁浠ヤ笅鍑犱釜闂:
1) 鏂板鐨勪唬鐮佹彁渚涚殑鏄粈涔堝姛鑳? 鍔熻兘鐐規槸鍚﹁凍澶熺殑鍗曚竴, 鏄庣‘, 姣斿鏈嫻嬭瘯鐨勪唬鐮佷粎閽堝鍔熻兘A, 涓嬩竴嬈$殑浠呴拡瀵瑰姛鑳紹, 鍋囧B鍔熻兘榪樹緷璧栦簬A鍔熻兘, 閭d箞棣栧厛瑕佷繚璇丄鍔熻兘鐐規紜彁浜?鍒囧繉涓囦笉寰楀凡鐨勬儏鍐典笅涓嶅彲浠ュ皢澶氫釜鍔熻兘鐐規斁鍦ㄤ竴嬈℃彁浜や腑, 榪欐牱, 浠ュ悗鍥炴函闂鏃朵細鍔犲ぇ闅懼害, 涔熶細緇檆odereview絳夊甫鏉ュ洶闅?
2) 鏂板鐨勫姛鑳? 瀵瑰鏆撮湶鐨勬帴鍙f槸鍝簺?鏈夋病鏈夊啑浣? 涓嶆槑紜殑鎺ュ彛璁捐?榪欎簺鎺ュ彛鏄笉鏄垰鍒氬ソ涓嶅涓嶅皯瓚沖浜?
3) 瀵規柊澧炵殑鍔熻兘, 鏄庣‘浜嗗澶栧簲璇ユ彁渚涗粈涔堟帴鍙d箣鍚? 榪橀渶瑕佸弽闂嚜宸?鍙兘鍦ㄥ摢浜涙儏鍐典笅鍑洪敊, 姣忕鍑洪敊鐨勬儏鍐靛簲璇ュ浣曞鐞? 濡備綍閫氱煡璋冪敤鑰? 浠g爜鐨勬敞閲婃槸涓嶆槸瀵逛竴浜涙儏鍐典綔浜嗚鏄?
4) 鏈鍚? 瀵規柊澧炵殑鍔熻兘, 鑰冭檻浜嗗摢浜涙祴璇曠敤渚? 嫻嬭瘯鏄惁鍏呭垎, 鏄惁鑰冭檻浜嗗緢澶氬紓甯哥殑鎯呭喌?
鎵浠? 姣忔鐨勪唬鐮佹彁浜ら兘鏄竴浠跺緢涓ヨ們鐨勪簨鎯? 榪欐剰鍛崇潃, 浣犲緋葷粺鐜版湁鐨勪唬鐮佸仛鍑轟簡涓浜涗慨鏀? 鍙兘鏄帴鍙g殑淇敼, 鍙兘鏄疄鐜扮殑淇敼.濡備綍鑳戒繚璇佷綘鐨勪慨鏀規病鏈夐棶棰? codereview鏄竴鐐? 濂界殑codereview鏄竴浠跺緢鑰楁椂鐨勪簨鎯? 榪欓渶瑕乺eviewer璐熻矗浠?鍚屾椂鏈濂借繕瑕佸灝戝榪欓儴鍒嗕唬鐮佹湁浜嗚В.濡傛灉reviewer鑳藉姏杈冨己, 鍙堟瘮杈冭礋璐? 閭d箞涓嬈eview鐩稿綋浜庢槸涓涓佸笀鍦ㄩ槄璇諱綔涓? 浠栦細緇欏嚭浣犱竴浜涘緩璁?鍙嶄箣, 濡傛灉浣犱綔涓簉eviewer鍘籸eview涓涓珮姘村鉤鐨勪漢鐨勪唬鐮? 鍙堝彲浠ヤ粠闃呰涓涔犲鏂圭殑鎬濊礬.鎬昏岃█涔? 鎴戣寰楀仛濂絚odereview鏄竴浠惰兘澶熻繀閫熸彁楂?緇忛獙鍊?鐨勬嵎寰? 鏃╁墠鎴戦槄璇昏繃璁稿寮婧愰」鐩? 瀛︿範浜嗗緢澶氬埆浜虹殑鎶宸ф濊礬, codereview姣斾箣鏇磋繎浜嗕竴姝?-鍥犱負鎴戣繕鏈夋満浼氫笌浣滆呴潰瀵歸潰鐨勪竴璧蜂氦嫻?鍙﹀, 闄や簡codereview涔嬪, 姣忔鎻愪氦閮芥湁嫻嬭瘯鐢ㄤ緥, 涔熸槸淇濊瘉浠g爜璐ㄩ噺鐨勬柟寮忎箣涓, 濡傛灉鎶婁唬鐮佹瘮鍋氫竴涓悆鍦? 閭d箞嫻嬭瘯鐢ㄤ緥灝辨槸绔欏湪榪欎釜鐞冨満闂ㄥ彛榪涜瀹夋宸ヤ綔鐨勪繚瀹? 涓嶈鍋氫簡浠涔堜慨鏀? 鍙淇濊瘉嫻嬭瘯鐢ㄤ緥鍐欑殑濂? 閭d箞鍩烘湰涓婇兘璺戜笉榪囪繖涓繚瀹夌殑鎺屽績.鏈変簡嫻嬭瘯鐢ㄤ緥, 欏圭洰鐨勪慨鏀規墠鏈変簡淇濊瘉, 瀹冩墍鎻愪緵鐨勫姛鑳? 閮芥槸鍙帶鐨?鏈変繚璇佺殑.
鍙﹀, 姣忔鎻愪氦鐨勪慨鏀瑰姛鑳界偣灝介噺鐨勫崟涓涔熸槸寰堥噸瑕佺殑涓鐐? 鍥犱負鍋囪浣犳兂鍋氱殑浜嬫儏寰堝, 姣斿鍋氫簡A鍙堟兂鍋欱,鍙戠幇鍋欱鍔熻兘闇瑕佸疄鐜癈鍔熻兘,瀹炵幇C鍔熻兘棣栧厛瑕佸仛D鍔熻兘....瀛愬瓙瀛欏瓩,鏃犵┓灝戒篃.榪欐牱浼氬鑷翠綘鐨勪唬鐮佹彁浜odereview鏃惰閫氳繃鐨勬椂闂存參(鍘熷洜鏈夊緢澶? 姣斿浣犻渶瑕佹彁浜ゆ祴璇曠敤渚嬪浜? 姣斿鍒漢鐨刢odereview鏃墮棿澶氫簡).榪樻湁涓鐐? 鍋囧鍒漢璧跺湪浣犱箣鍓嶆彁浜や簡浠g爜, 鑰屼綘鐨勪慨鏀歸渶瑕佷緷璧栧埆浜虹殑浠g爜, 榪欐牱瀵艱嚧浜嗕綘闇瑕佸悎騫跺埆浜虹殑鏀瑰姩, 榪欏張鏄竴浠跺緢楹葷儲鐨勪簨鎯?
鎵浠? 褰撴帴鎵嬩竴涓換鍔℃椂, 濡備綍鎸夌収灞傛欏哄簭鍒掑垎浠誨姟, 姣忔鎻愪氦閮戒繚璇佸敖鍙兘鎻愪氦灝戠殑鍔熻兘鐐? 鑰屼笖鍙堣兘淇濊瘉姣忔鐨勬彁浜ら兘鏈変弗鏍肩殑嫻嬭瘯鐢ㄤ緥, 涔熸槸瀵瑰紑鍙戜漢鍛樼殑涓涓冮獙.褰撶劧,榪欎簺涔熻鍦ㄥ姩鎵嬬殑鏃跺欎笉鑳界櫨鍒嗙櫨鐨勮冭檻娓呮, 浣嗘槸濡傛灉瀹屽叏鐨勬病鏈夎冭檻榪? 涓婃墜灝卞仛, 榪熸棭閮借榪樼殑.
鍙﹀, 鏈変簡鍚屾柊澧炰唬鐮佷竴璧鋒彁浜ゆ祴璇曠敤渚嬬殑瑕佹眰涔嬪悗, "鐪嬩笂鍘?姣忔鎻愪氦鐨勯熷害鎱簡, 鍥犱負榪橀渶瑕佹挵鍐欐祴璇曠敤渚? 鎵浠ュ浠誨姟鏃墮棿鐐圭殑浼拌鍙兘涔熼渶瑕佹敼鍙? 鎴戜釜浜虹殑浼拌鏄啓浠g爜鏃墮棿 : 嫻嬭瘯鏃墮棿(鍖呮嫭鍐欐祴璇曠敤渚?鏀筨ug) : 鏍規嵁codereview淇敼浠g爜鐨勪笁鑰呬箣闂存瘮渚嬪ぇ姒備負4:3:3, 鎵浠ュ鏋滀竴涓換鍔$粰鎴戜簲涓伐浣滄棩鐨勬椂闂村畬鎴? 涔熻浠ュ墠鎴戝埌浜嗙鍥涘ぉ鎵嶇紪鐮佸畬鎴? 鑰岀幇鍦ㄥ氨瑕佸敖閲忓仛鍒扮涓夊ぉ涔嬪唴鑳藉畬鎴愮紪鐮佷簡.涓嶈繃榪欎釜姣斾緥騫朵笉紜畾, 渚濅釜浜虹殑绱犺川鑰屽畾, 鏈夌殑浜哄啓浠g爜璐ㄩ噺寰堥珮, 鑷繁宸茬粡鎶婂緢澶氭儏鍐靛湪鍐欑殑鏃跺欒冭檻榪涘幓浜? 鎵浠ュ悗鏈熸祴璇曞拰codereview鏃跺嚭鐜伴棶棰樼殑鏈轟細灝? 鍙嶄箣, 鏈夌殑浜虹殑浠g爜璐ㄩ噺杈冨樊鐨? 鍙兘緇忓父鍦╟odereview鐨勬椂鍊欒鎵撳洖鍘婚噸鏋?鐢氳嚦浜庨噸鍐?鐨? 鍚庨潰鐨勬瘮渚嬪氨瑕佸鍔犱簡.浠ユ垜鑰岃█, 濡傛灉鑳藉湪淇濊瘉浠g爜璐ㄩ噺鐨勫悓鏃? 鍑忓皯鍚庨潰涓ら」鐨勬椂闂存瘮渚? 閭e簲璇ユ槸璇存槑浜嗘垜鐨勪唬鐮佽川閲忔湁浜嗘彁楂樹簡.
鎬昏岃█涔? 鎺ュ彛鐨勮璁? 浠誨姟灞傛欏哄簭鐨勫垝鍒? 閮芥槸寰堣冮獙浜虹粡楠岀殑媧? 璇█鐨勮〃杈炬繪槸鑻嶇櫧鐨? 闇瑕佸疄瀹炲湪鍦ㄧ殑鍘誨疄璺典綋浼?
K.I.S.S
]]>
涓栫晫涓婃湁寰堝闂, 浜轟滑鐭ラ亾濡備綍鍘昏В鍐?浣嗘槸, 浼間箮榪欒繕涓嶇畻鏄渶楂樻槑鐨?鏇撮珮鏄庣殑鍋氭硶鏄浼氶伩鍏嶉棶棰樼殑鍙戠敓.鑰屽浣曢伩鍏嶉棶棰樼殑鍙戠敓, 闇瑕佺粡楠岀殑縐瘡--鏇劇粡鐘笅閿欒,鍚冧竴鍫戦暱涓鏅?浜庢槸鐭ラ亾鍝簺浜嬫儏鏄笉璇ュ仛鐨勬垨鑰呮槸涓嶅簲璇ヨ繖涔堝仛鐨?
google C++ code style鏄痝oogle瀵瑰鍏竷鐨勪竴浠絞oogle鍐呴儴緙栧啓C++鐨勪唬鐮佽鑼冩枃妗?涓庡叾浠栧緢澶氭垜鏇劇粡鐪嬭繃鐨勭紪鐮佹枃妗d竴鏍?閲岄潰鏈変竴浜涘叧浜庝唬鐮侀鏍肩殑瑙勫畾,涔熷氨鏄唬鐮佺殑澶栬,榪欎竴閮ㄥ垎涓嶅湪榪欓噷榪囧璁ㄨ,姣曠珶浠g爜濡備綍鎵嶅彨"緹庤"鏄竴涓浠佽鏅虹殑璇濋.鍦ㄨ繖閲屼笓闂ㄨ璁鴻繖浠芥枃妗d腑瀵逛竴浜汣++鐗規ц濡備綍浣跨敤鐨勮璁?鏈鍚庡啀鍋氫竴涓葷粨.娉ㄦ剰鍏朵腑鐨勫簭鍙峰茍涓嶆槸鏂囨。涓殑搴忓彿,濡傛灉瑕佽緇嗕簡瑙?鍙互鑷繁鍘葷湅榪欎喚鏂囨。.
Static or global variables of class type are forbidden: they cause hard-to-find bugs due to indeterminate order of construction and destruction.
In general, constructors should merely set member variables to their initial values. Any complex initialization should go in an explicit Init() method.
綆鍗曠殑姒傛嫭璧鋒潵涔熷氨鏄?鏋勯犲嚱鏁版病鏈夎繑鍥炲? 闅句互璁╀嬌鐢ㄨ呮劅鐭ラ敊璇?鍋囧鍦ㄦ瀯閫犲嚱鏁頒腑璋冪敤铏氭嫙鍑芥暟, 鍒欐棤娉曟寜鐓т嬌鐢ㄨ呯殑鎯蟲硶璋冪敤鍒板搴斿瓙綾諱腑瀹炵幇鐨勮櫄鎷熷嚱鏁?鐞嗙敱鏄瀯閫犲嚱鏁拌繕鏈畬鎴愭剰鍛崇潃榪欎釜瀵硅薄榪樻病鏈夎鎴愬姛鏋勯犲畬鎴?.main(), possibly breaking some implicit
assumptions in the constructor code. For instance,
gflags
will not yet have been initialized.
You must define a default constructor if your class defines member variables and has no other constructors. Otherwise the compiler will do it for you, badly.
Use the C++ keyword explicit for constructors with one argument.
Provide a copy constructor and assignment operator only when necessary. Otherwise, disable them with DISALLOW_COPY_AND_ASSIGN.
Do not overload operators except in rare, special circumstances.
Use overloaded functions (including constructors) only in cases where input can be specified in different types that contain the same information. Do not use function overloading to simulate default function parameters.
We do not use C++ exceptions.
涓婇潰鎻愬埌鐨勭悊鐢變腑, 鎴戣涓轟嬌鐢ㄥ紓甯告渶澶х殑瀹沖灝辨槸:寮傚父鐨勪嬌鐢ㄥ鑷翠簡紼嬪簭鏃犳硶鎸夌収浠g爜鎵灞曠幇鐨勬祦紼嬪幓璧扮殑, 姣斿浠g爜閲岄潰鍐欎簡姝ラ涓浜屼笁,浣嗘槸鍋囧鏈夊紓甯稿嚭鐜? 榪欏氨涓嶅ソ棰勭煡浠g爜鐪熸姝ヨ繘鐨勬楠や簡, 鍦ㄥ嚭鐜伴棶棰樻椂, 緇欒皟璇曞拰璺熻釜甯︽潵鍥伴毦.throw statement to an existing
function, you must examine all of its transitive callers.
Either
they must make at least the basic exception safety guarantee,
or
they must never catch the exception and be happy with the
program terminating as a result. For instance, if
f() calls g() calls
h(), and h throws an exception
that f catches, g has to be
careful or it may not clean up properly.
鍙﹀, 鎴戞洿鍠滄unix API鐨勮璁?鐔熸倝unix緙栫▼鐨勪漢閮界煡閬? unix API鍩烘湰涓婇兘閬靛畧涓嬪垪瑙勫垯:
a) 榪斿洖0琛ㄧず鎴愬姛, 鍏朵粬(涓鑸槸-1)琛ㄧず澶辮觸.
b) 鍦ㄥけ璐ユ椂, 鍙互鏍規嵁errno鍒ゆ柇澶辮觸鐨勫師鍥? 榪欎簺鍦╩an鎵嬪唽涓兘鏄細娓呮鐨勬弿榪?
鎬葷粨涓涓? 榪欎喚瑙勮寖涓閬跨殑C++鐗規уぇ鑷村垎涓轟互涓嬪嚑綾?
a) 閬垮厤浣跨敤閭d簺娌℃湁紜畾琛屼負鐨勭壒鎬?濡傚叏灞鍙橀噺涓嶈兘鏄被瀵硅薄(鍒濆鍖栭『搴忎笉紜畾), 涓嶄嬌鐢ㄧ紪璇戝櫒鐢熸垚鐨勯粯璁ゆ瀯閫犲嚱鏁?鏋勯犺涓轟笉紜畾), 寮傚父(浠g爜璧板悜涓嶇‘瀹?.
b) 閬垮厤浣跨敤閭d簺闅愬紡鍙戠敓鐨勬搷浣?濡傚0鏄庡崟鍙傛暟鏋勯犲嚱鏁頒負explict浠ラ伩鍏嶉殣寮忚漿鎹? 涓嶅畾涔夋嫹璐濇瀯閫犲嚱鏁伴伩鍏嶉殣寮忕殑鎷瘋礉琛屼負, 涓嶄嬌鐢ㄦ搷浣滅閲嶈澆閬垮厤闅愬紡鐨勮漿鎹?br>c) 瀵規ā媯變袱鍙殑鐗規х粰浜堟槑紜殑瑙勫畾:涓嶄嬌鐢ㄥ嚱鏁伴噸杞借屾槸瀹氫箟瀵規瘡涓被鍨嬫槑紜殑鍑芥暟.
d) 鍗充嬌鍑洪敊浜嗙▼搴忎篃鏈夊姙娉曠煡閬? 姣斿涓嶈兘鍦ㄧ被鏋勯犲嚱鏁頒腑榪涜澶嶆潅鐨勬瀯閫犳搷浣? 灝嗚繖浜涚Щ鍔ㄥ埌綾籌nit()鐨勫嚱鏁頒腑.
鍚屾椂, 榪欎喚鏂囨。涓弿榪扮殑澶ч儴鍒咰++鐗規? 閮芥槸鎴戜箣鍓嶆墍鐔熸倝鐨?闄や簡RTTI涔嬪, 涓嶈繃榪欓噷鎻愬埌瀹冧篃鏄璇存槑涓嶄嬌鐢ㄥ畠,鍙﹀榪樻彁鍒癰oost, 涓嶈繃涔熸槸璇寸殑瑕佸瀹?鏈夐檺鍒?鐨勪嬌鐢?姣斿閲岄潰鐨勬櫤鑳芥寚閽?.鍙互鐪嬪埌, 闈㈠榪欐牱涓闂ㄥ鏉傚悓鏃惰繕鍦ㄤ笉鍋滅殑鍙戝睍鏇存柊鐗規х殑璇█, google鐨勬佸害鏄瘮杈?淇濆畧"鐨?榪欎笌鎴戜箣鍓嶅C++鐨勭悊瑙d篃鏄帴榪戠殑, 鎴戜竴鐩磋涓篊++涓渶瑕佷嬌鐢ㄥ埌鐨勭壒鎬ф湁鍩烘湰鐨勯潰鍚戝璞?STL灝卞浜?緇忚繃鏈榪戠殑緙栫爜瀹炶返,鎴戣涓鴻繕寰楀姞涓櫤鑳芥寚閽?.鎴戝榪欎釜"淇濆畧"鎬佸害鐨勭悊瑙f槸, 浠++褰撳墠鐨勫簲鐢ㄥ満鏅潵鐪? 榪欎簺鐗規у凡緇忚凍澶? 濡傛灉浣跨敤鍏朵粬涓浜涙洿鍔犲鏉傜殑, 瀵逛漢鐨勮姹傛彁楂樹簡, 浠g爜鐨勫彲璇繪т互鍙婁互鍚庣殑鍙淮鎶ゆу氨涓嬮檷浜?
鍓嶉潰璇磋繃, 閬垮厤闂鐨勫嚭鐜版瘮瑙e喅闂鏉ョ殑鏇村姞楂樻槑浜? 鑰岄潰瀵笴++榪欎竴涓彁渚涗簡浼楀鐗規? google C++ code style緇欎簣浜嗘槑紜殑瑙勫畾, 涔熷氨鏄瘡涓涓? 濡傛灉閮借兘鍋氬埌鏈夋槑紜殑鍔ㄤ綔, 鍚屾椂緇撴灉涔熼兘鏄彲浠ラ鐭ョ殑, 閭d箞浼氬皢鍑洪棶棰樼殑姒傜巼鏈澶у彲鑳界殑闄嶄綆, 鍗充嬌鍑轟簡闂, 涔熷鏄撹窡韙?
涓婇潰鎻忚堪鐨勫茍涓嶆槸榪欎喚鏂囨。涓湁鍏矯++鐨勬墍鏈夊唴瀹? 鍙笉榪囨垜瑙夊緱榪欎簺鏇村姞鏈夊悓鎰熶簺, 璇︾粏鐨勫唴瀹? 鍙互鍙傜湅榪欎喚鏂囨。.閮界煡閬揼oogle鐨勪綔鍝?璐ㄩ噺鏈変繚璇? 闄や簡浜虹殑绱犺川紜疄楂樹箣澶? 鏈夎鑼冪殑鍒跺害淇濊瘉涔熸槸閲嶈鐨勫師鍥? 姣曠珶鍙鏄漢灝變細鐘敊, 涓轟簡鏈澶ч檺搴︾殑閬垮厤浜虹姱閿? 鏈変竴浠借灝界殑浠g爜瑙勮寖, 鍐欏ソ鍝簺璇ュ仛鍝簺涓嶈鍋氬摢浜涗笉璇ヨ繖涔堝仛, 涔熸槸鍒跺害涓婄殑淇濊瘉.鍙﹀, 鍋囧姣忎釜浜洪兘鑳戒互涓涓瘮杈冮珮鐨勬爣鍑嗚姹傝嚜宸辨墍鍐欑殑浠g爜, 涔呰屼箙涔? 鑾峰緱榪涙涔熸槸蹇呯劧鐨勭粨鏋?
浠庤繖濂楄鑼冮噷闈? 鎴戠殑鍙︿竴涓劅鎮熸槸, 涓嶈鏄粈涔堣涓? "瀛︿細濡備綍姝g‘鐨勫仛浜嬫儏", 閮芥槸鍗佸垎蹇呰鐨?榪欎釜"姝g‘鐨勫仛浜嬫儏", 鍏蜂綋鍒扮紪鐮佹潵璇? 灝辨槸浠g爜瑙勮寖閲岄潰鎻愬埌鐨勯偅浜涜姹?鑰岄櫎鍘葷紪鐮? 鍋氫換浣曠殑浜嬫儏, 浣跨敤姝g‘鐨勬柟寮忓仛浜? 閮芥槸灝藉彲鑳藉皯鐨勯伩鍏嶉敊璇殑鏂規硶.浣嗘槸, "閿?涓?瀵?鏄浉瀵硅岃█鐨? 娌℃湁涔嬪墠"閿?鐨勭粡鍘? 灝變笉濂戒綋浼氫粈涔堝彨"瀵?.鎵浠? "濡備綍姝g‘鐨勫仛浜?, 璇村埌浜嗘渶鍚? 榪樺緱鐪嬩釜浜虹殑緇忛獙縐瘡, 鏈変簡涔嬪墠"閿欒"鐨勭粡鍘?鎵嶈兘鍚冧竴鍫戦暱涓鏅? "閿欒"騫朵笉鏄竴鏃犳槸澶勭殑, 鍙笉榪? 騫朵笉鏄皝閮藉幓灝濊瘯鐫浠庝腑瀛︿範.
]]>
]]>
鏁呬簨涓:
鏌愬ぉ鏅氫笂鍜屽鍙嬭亰澶?璋堝埌浣跨敤Vim闃呰浠g爜,瀹ゅ弸涔熸槸浣跨敤Vim鐨勪漢,浠栬鐢ㄧ被浼糲tags鐨勬煡鎵懼畾浣嶅姛鑳戒笉澶?鏇村鐨勬椂鍊?浠栭槄璇諱竴孌典唬鐮?瑕佸畾浣嶄竴涓姛鑳界偣,棣栧厛鏄粠闃呰浠g爜鏂囦歡鐨勭粍緇?浜嗚В欏圭洰鐨勫姛鑳界瓑鍏ユ墜,絳夎繖浜涢兘鍩烘湰娓呮浜?瀹氫綅璧鋒潵灝變細蹇緢澶?鎴戣櫧鐒惰涓?ctags瀹炲湪鏄疺im閲岄潰涓涓緢涓嶉敊鐨勫姛鑳?涓嶇敤榪欎釜瀹炲湪鍙儨,浣嗘槸浠栬鐨勯偅濂楀畾浣嶆濊礬鍏跺疄涔熸槸涓嶉敊鐨勬柟娉?鍏跺疄鎴戣嚜宸辯敤鎯簡ctags綾葷殑鍔熻兘涔嬪悗,闃呰浠g爜鐨勬椂鍊欎篃浼氱敤鎯版?鏇村鐨勬椂鍊欐槸瑕侀潬榪欎簺宸ュ叿鏉ュ府鎴戝畾浣?鑰屼笉鏄氳繃鑷繁涓誨姩鐨勬濊冨拰鍒嗘瀽.
鏁呬簨浜?
鎴戠殑緇忛獙閲岄潰,鍐欏畬涓孌典唬鐮佷箣鍚庣殑絎竴嬈$紪璇?濡傛灉緙栬瘧鍣ㄦ姤閿欒秺灝?閭d箞鍙互璁や負榪欐浠g爜灝嗘潵鍙兘鍑虹幇bug鐨勫嚑鐜囪秺灝?綆鑰岃█涔?鎴戣涓轟唬鐮佺殑璐ㄩ噺涓庣涓嬈$紪璇戠殑鎶ラ敊鏁伴噺鎴愬弽姣?鍝?涓嶇敤鎷縣elloworld綾葷殑紼嬪簭璺熸垜閽葷墰瑙掑皷浜?).鏈変簺浜哄啓鐨勪唬鐮?鍝楀摋鐨勫啓浜嗕竴澶ф,鍐欎箣鍓嶄笉鑰冭檻濂?鍙兂鐫鍒版椂鍊欏啓鐨勪笉瀵逛簡鍙互鍦ㄧ紪璇戠敱緙栬瘧鍣ㄧ殑鎶ラ敊鏉ュ府蹇欐壘闂,榪欎釜鎬濊礬鏄笉瀵圭殑.緙栬瘧鎶ラ敊瓚婂皯鐨勪唬鐮?璇存槑浜嗕綔鑰呭啓鐨勬椂鍊欐濊礬鏇存竻鏅頒竴浜?鑰冭檻鐨勬洿鍛ㄥ叏涓浜?鎵鏈夌殑榪欎簺嫻佺▼涓婄殑姝ラ璧扮殑閮戒笉閿欎簡,鎵浠ユ墠鏈夋渶鍚庣紪璇戞姤閿欏皯鐨勭粨鏋?緙栬瘧鎶ラ敊搴旇鏄啓浠g爜鐨勭粨鏋滀箣涓,鑰屼笉搴斿綋褰撴垚浜嗘壘浠g爜闂鐨勬墜孌?榪欐牱鐨勬濊礬,鏈湯鍊掔疆浜?
鏁呬簨涓?
榪涘叆鏂伴」鐩粍鍚?緇勫唴瀵逛唬鐮佺紪鐮佺殑嫻佺▼鏈夋瘮杈冧弗鏍肩殑瑕佹眰,鍖呮嫭鍐欎竴涓狝PI涔嬪悗闇瑕佸啓涓涓拡瀵硅繖涓狝PI鐨勫悇縐嶆儏鍐電殑嫻嬭瘯鐢ㄤ緥,鎻愪氦浠g爜鐨勬椂鍊?闇瑕佽蛋codereview嫻佺▼,闇瑕佷嬌鐢╟pplint媯楠屼唬鐮侀鏍?闇瑕佸皢瀵瑰簲鐨勬祴璇曠敤渚嬩篃鎻愪氦涓婂幓.榪欎竴濂楁祦紼嬭蛋涓嬫潵,鎻愪氦浠g爜鐨勯鐜囨瘮涔嬩互鍓?闄嶄綆浜嗗緢澶?浣嗘槸涓嶅彲鍚﹁鐨勬槸,涔熺‘瀹炴彁楂樹簡浠g爜鐨勮川閲?鍋囪涓涓姛鑳?鐢盢涓狝PI鏋勬垚,濡傛灉鑳藉榪橬涓狝PI閮藉仛榪囪緇嗙殑嫻嬭瘯,淇濊瘉瀹冧滑鐨勮緭鍏ュ拰杈撳嚭鍦ㄥ悇縐嶆儏鍐典笅閮借兘絎﹀悎瑕佹眰,閭d箞寰堟樉鐒剁殑,鏈鍚庤繖涓姛鑳戒篃搴旇鏄紜殑.鍙嶄箣,瓚婃槸鍒頒簡嫻嬭瘯闃舵闇瑕佷嬌鐢ㄧ被浼糶db榪欐牱鐨勮皟璇曞櫒鏉ュ畾浣嶉棶棰樼殑,浼氳秺璁╀漢涓嶆斁蹇?--鍥犱負娌℃湁鍒跺害鍜屾祦紼嬬殑淇濊瘉,璋佷篃涓嶈兘璇村皢鏉ュ彲鑳藉湪鍝釜鐐逛細鍑洪棶棰?瀹冨彲浠ュ府浣犲畾浣嶉棶棰?浣嗘槸娌℃湁鍔炴硶鍛婅瘔浣犲凡緇忔病鏈夐棶棰樹簡,鏈鍚庤繖涓鐐?鏈緇堣繕鏄閫氳繃涓ユ牸鐨勫崟鍏冩祴璇曠瓑嫻佺▼鏉ヤ繚璇佺殑.涓庣浜屼釜鏁呬簨鐩稿悓,鎴戣涓?鍦ㄦ祴璇曢樁孌典嬌鐢╣db瀹氫綅闂鐨勬鏁頒篃涓庝唬鐮佺殑璐ㄩ噺鎴愬弽姣?)
榪欏嚑涓晠浜嬬患鍚堣搗鏉?鎯寵琛ㄨ揪鐨勬槸,鍋氫竴浠朵簨鎯?闇瑕佹湁嫻佺▼,鍒跺害鐨勪繚璇?褰撶劧涔熼渶瑕佸伐鍏?姣斿榪欏嚑涓晠浜嬮噷闈㈡彁鍒扮殑Vim,gcc,gdb),浣嗘槸宸ュ叿灝辨槸宸ュ叿,瀹冨彧鏄竴縐嶆墜孌?娌℃湁鍔炴硶鏇夸唬姝g‘鐨勬濊礬,嫻佺▼鍜屽埗搴︾瓑,浠呰兘鍦ㄦ暣涓繃紼嬩腑璧峰埌杈呭姪鐨勪綔鐢?鑰屼笖,榪囧垎渚濊禆宸ュ叿,涔熶細緇欎漢浠ユ儼鎬?姣斿鍓嶉潰鎻愬埌鐨勪嬌鐢ㄧ紪璇戝櫒緙栬瘧浠g爜鏉ユ壘閿?姣斿浣跨敤gdb鏉ヤ繚璇佸姛鑳芥紜х瓑).
鎵浠?鏇村簲璇ユ彁鍊$殑鏄紜殑嫻佺▼,鍒跺害,鏈変簡榪欎簺,欏圭洰鐨勮川閲忔墠鑳芥湁鎵淇濊瘉.姣斿,鍦ㄥ啓涓涓姛鑳界偣鏃?闇瑕佸叿浣撳垎瑙d負鍝嚑姝?姣忎竴姝ユ湁鍝嚑涓狝PI,閽堝瀹冧滑鐨勬祴璇曠敤渚嬫湁鍝簺,嫻嬭瘯鏃剁殑杈撳叆鍜岃緭鍑烘湁鍝簺,闇瑕佽冭檻鐨勫紓甯告儏鍐墊湁鍝簺,絳夌瓑鐨?榪欎簺閮借冭檻娓呮浜?鍐嶅姩鎵嬪啓,涔呰屼箙涔?鎴戞兂榪欐柟闈㈢殑鑳藉姏浼氭參鎱㈢殑鎻愰珮.
]]>
]]>