锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 浜嬫儏鐨勮搗鍥犳槸錛屾兂鎵句釜璺?Windows 鍜?Mac 鐨勬瀯寤烘柟妗堛傜涓鑰冭檻鑷劧鏄?CMake錛屾瘯绔熷熀鏈笂鏄簨瀹炴爣鍑嗕簡銆?/p>
浣嗘槸鐮旂┒浜嗕竴涓?Modern CMake錛屼篃灝辨槸浠?target 涓烘牳蹇冪殑鐞嗗康銆備絾鍙戠幇鐪嬩簡濂藉嚑澶╂枃妗o紝涔熸姌鑵懼嚭浜嗗彲鐢ㄧ殑涓滆タ錛屼絾浠嶇劧鏄病姊崇悊娓呮浠涔堢悊蹇點佸師鐞嗐傜劧鍚?CMake 鏈韓璇硶灝卞緢澶嶆潅錛屽啀鍔犱笂鎼?target 涓濂楁蹇碉紝瑕佺粰 target 璁劇疆鍚勭灞炴т箣綾葷殑錛屾湁鐐瑰己琛?OOP 鐨勬劅瑙夆︹︿絾鍏跺疄鎴戜滑鍙槸闇瑕佷竴涓?include_dir 鍜?lib_dir 鑰屽凡錛屽叾浠栭兘鏄誕浜憕 浣嗗鏋滈鍥炲埌浼犵粺妯″紡錛屼笉鐢?Modern 姒傚康鍛紝濂藉儚鍙互灝嗗氨錛屼絾絎竴涓嶅幓鐢ㄤ竴涓伐鍏風殑鏈鏂版ā寮忥紝濂藉儚鏈夌偣涓嶄笂榪涚殑鎰熻錛坧ython 2 闄ゅ錛夛紱絎簩錛孋Make 鐨勪袱澶х棝鐐光斺旇娉曠壒绔嬬嫭琛屻佹枃妗f櫐娑╅毦鎳傗斺旇繕鏄浜烘湁鐐逛笉鐖姐?/p>
閭h煩鍑烘潵鐪嬪埆鐨勯夋嫨鍛紵鐩墠鐩稿鎴愮啛鐨勪篃鍙湁 Google 鐨?gn+ninja 鏂規浜嗐俫n 榪欏涓滆タ鍦?Chromium 閲屾槸瀹屽叏閰嶇疆濂界殑錛岀敤璧鋒潵榪樼畻欏烘墜錛屼絾瑕佹槸鐙珛鎷垮嚭鏉ュ憿錛屽氨娌¢偅涔堜究瀹滀簡銆傚叧閿槸瀹冪殑 toolchain 鏄鑷繁瀹氫箟鐨勩?/p>
涔嬪墠榪樺湪鍏徃鎼炲鎴風鐨勬椂鍊欙紝澶у灝變粠 Chromium 閲岄潰鎶?build銆乥uild_overrides 絳夌瓑涓滆タ鍏ㄩ儴鎷峰嚭鏉ワ紝濂藉浼欙紝鍑犵櫨 MB 鐢氳嚦涓?G銆備絾鏄叕鍙擱噷鍢涳紝娌′漢綆″共涓嶅共鍑錛屾庝箞蹇庝箞鏉ャ傚悗鏉ュ張鐪嬪埌 Google 鑷鐨?Crashpad 閲岄潰涔熺敤浜嗚繖濂楁瀯寤猴紝浣嗗伐鍏烽摼琚畝鍖栦簡涓涓嬶紝鍙?mini_chromium銆傝繖涓瘮 Chromium 閲岀殑灝忓浜嗭紝鏄彲浠ユ嬁榪囨潵鐩存帴鐢ㄧ殑錛岀己灝戜竴浜涢厤緗彲浠ヨ嚜宸卞姞銆備絾鏄憿錛屽儚鎴戜滑榪欑媧佺櫀錛屼粛鐒舵槸鍙椾笉楦熺殑銆傛墍浠ュ憿錛屾垜浠騫插共鍑鍑鐨勫緩绔嬩竴濂楀伐鍏烽摼銆?/p>
棣栧厛錛屾垜浠槑紜畾浣嶃俫n 鍜?ninja 閮芥槸寮鍙戞満涓婇渶瑕侀瑁呯殑錛屼笉鏄蔣浠舵彁渚涚殑銆侰hromium 鐨勬悶娉曟槸鑷繁鎻愪緵錛実n 鐨勬枃妗d篃璇磋寮鍙戣呮彁渚涘伐鍏楓備絾榪欏鎬濊礬璺熶紶緇熺殑鐞嗗康鏄啿紿佺殑銆傚悓鏃訛紝鑷繁瀹夎宸ュ叿鎴愭湰鏄瘮杈冧綆鐨勶細 鑷繁涓嬭澆鐨勮緗埌 PATH錛屾祴璇? 甯屾湜鍋氬埌鎻愪緵涓涓?git repo錛屼嬌鐢ㄨ?clone 鍒拌嚜宸遍」鐩殑 build 鐩綍錛岀劧鍚庝嬌鐢ㄨ呭彧瑕佸湪 .gn 鏂囦歡閲岄厤緗?/p>
灝卞彲浠ヤ嬌鐢ㄦ垜浠彁渚涚殑宸ュ叿閾撅紝鍦?PC 涓夌榪涜鏋勫緩銆?/p>
浣跨敤鑰呯殑鍞竴璐熸媴灝辨槸緙栧啓鑷繁鐨?BUILD.gn 棣栧厛鎴戜滑鐪?gn 鐨勬枃妗o紝浠ュ強瀹冪殑渚嬬▼ simple_build 閲岀殑宸ュ叿閾鵑厤緗細 https://gn.googlesource.com/gn/+/HEAD/examples/simple_build/build/toolchain/BUILD.gn 榪欎釜鏄彲浠ョ洿鎺ョ敤鐨勶紝鍙笉榪囧彧鏈?linux 绔紙褰撶劧 mac 涔熻兘鐢級銆傛垜浠啀緇撳悎 chrome 閲岀殑宸ュ叿閾鵑厤緗紝榪涜涓浜涘畬鍠勩?/p>
棣栧厛鎴戜滑浜嗚В gn 浣撶郴闇瑕佺殑鏈灝忛厤緗槸浠涔堛?/p>
絎竴錛屽畠闇瑕佸湪鏍圭洰褰曞啓涓涓?.gn 鏂囦歡錛屽湪閲岄潰瀹氫箟 buildconfig錛屾寚鍒板彟涓涓枃浠訛紝涓鑸槸 絎簩銆丅UILDCONFIG.gn 閲岄潰闇瑕佽緗粯璁ゅ伐鍏烽摼錛屼篃灝辨槸鍐欎竴琛?/p>
絎笁銆佸畾涔夊伐鍏烽摼錛屽涓婁緥鐨?//build/toolchain:gcc銆?/p>
闇瑕佸湪 build/toolchain 涓嬪緩绔?BUILD.gn 鏂囦歡錛屽唴瀹規槸 鏈鍚庡湪 toolchain 閲屽畾涔夊悇縐?tool銆?/p>
榪欓儴鍒嗘枃妗e湪榪欓噷錛歨ttps://gn.googlesource.com/gn/+/main/docs/reference.md#func_tool 綆鍗曞榪頒竴涓嬶紝鍙瀹氫箟鐨勫伐鍏鋒湁錛?/p>
錛堝叾浠栫殑灝卞厛涓嶇湅浜嗭級 鎴戜滑鏉ョ湅涓涓?https://gn.googlesource.com/gn/+/HEAD/examples/simple_build/build/toolchain/BUILD.gn 鐨勪竴浜涘叧閿厤緗細 鍙互鐪嬪埌錛宑c 鍜?cxx 鎵ц command 鍚庯紝鐢熸垚 .o 鏂囦歡錛岀劧鍚庤繖浜?.o 鏂囦歡鍙互浣滀負 alink銆乻olink銆乴ink 鐨?inputs錛岃瀹冧滑 command 緇х畫浣跨敤錛屾渶鍚庤緭鍑洪潤鎬佸簱銆佸姩鎬佸簱浠ュ強鍙墽琛屾枃浠躲?/p>
鍏朵綑灞炴у彲浠ユ煡鏂囨。浜嗚В鍚箟銆?/p>
涓昏閰嶇疆鍦ㄨ繖閲岋細https://source.chromium.org/chromium/chromium/src/+/main:build/toolchain/gcc_toolchain.gni 涔熸槸 gcc 鐨勶紝涓?simple_build 閲岀殑澶у悓灝忓紓錛屾病鏈夌壒鍒殑銆?/p>
涓昏閰嶇疆鍦ㄨ繖閲岋細https://source.chromium.org/chromium/chromium/src/+/main:build/toolchain/apple/toolchain.gni 鍖哄埆鏈夛細 鍩烘湰涓婃槸鏍規嵁涓婇潰鍒嗘瀽鐨勮鐐歸厤緗紝鏈緇堢粨鏋滃湪姝わ細https://github.com/Streamlet/gn_toolchain 鏂板鐨勪竴浜涘樊寮傛湁錛?/p>
澧炲姞鍏ㄥ眬鍙傛暟 is_debug錛屽彲浠ュ湪 mac 涓嬬敓鎴?dSYM 涓嶄嬌鐢?python 鑴氭湰錛岀洿鎺ユ槸 mac 涓嬪姞浜嗕竴涓?template錛歛pp_bundle錛岀敤鏉ョ敓鎴?xxx.app錛屼富瑕侀厤緗潵鑷簬 create_bundle 鏂囨。閲岀殑渚嬪瓙 win 涓嬪鍔犱簡涓浜涢厤緗泦 鍔ㄦ?闈欐侀摼鎺?CRT錛?/build/config/win:console_subsystem銆?/build/config/win:static_runtime 鎺у埗鍙扮▼搴忋乄in32 紼嬪簭錛?/build/config/win:console_subsystem銆?/build/config/win:windows_subsystem 榪欎釜鍏跺疄涓鑸儏鍐典笅鐢ㄤ笉鐫錛屽彧瑕佸叆鍙e嚱鏁版槸 main/WinMain錛宭ink 榛樿灝辨槸鎺у埗鍙扮▼搴?Win32 紼嬪簭 XP 鏀寔錛?/build/config/win:console_subsystem_xp銆?/build/config/win:windows_subsystem_xp 鍏蜂綋瀹炵幇鏄摼鎺ュ弬鏁板姞 /SUBSYSTEM:CONSOLE,5.01 鎴?/SUBSYSTEM:WINDOWS,5.01銆傚叧閿槸鍚庨潰鐨勭増鏈彿 5.01錛屼負浜嗗姞鐗堟湰鍙峰垯蹇呴』鎸囧畾瀛愮郴緇熷悕縐幫紝鎵浠ュ垎浜?console_subsystem_xp 鍜?windows_subsystem_xp銆傚張錛寈p 榪欓噷鎻愪緵浜嗕袱涓?subsystem 鐨勯厤緗泦錛岄潪 xp 涔熸彁渚涗袱涓?/p>
浣嗘槸鎴戜滑娌℃湁鍔?_WIN32_WINNT=0x0501銆乄INVER=0x0501銆乢USING_V110_SDK71_錛屼篃娌℃湁鎸囧畾蹇呴』浣跨敤 7.0 鐗堟湰鐨?SDK錛岃繖浜涢兘鏄潪蹇呴』鐨勶紝鍙涓嶇敤鍒?XP 浠ュ悗娣誨姞鐨?API 鍗沖彲銆備嬌鐢ㄨ呭彲浠ュ湪鑷繁鐨?target 閲岄潰瀹氫箟榪欎簺瀹忋?/p>
鎻愪緵涓涓嬌鐢ㄦ渚嬶細https://github.com/Streamlet/gn_toolchain_sample 鍥犱負瀹冧互 git submodule 褰㈠紡寮曠敤浜?https://github.com/Streamlet/gn_toolchain錛屾墍浠?git clone 浠ュ悗錛岄渶瑕? 鐒跺悗鍦ㄦ牴鐩綍鎵ц錛氾紙紜繚 gn 鍜?ninja 宸茬粡鍦?PATH 涓級 鍗沖彲銆?/p>
Mac 涓嬩細棰濆鐢熸垚涓涓?objc 欏圭洰 objc_console_application 浠ュ強涓涓?app_bundle錛歯s_application.app銆?/p>
Win 浼氶澶栫敓鎴愪竴涓?Win32 欏圭洰 win32_application銆?/p>
Win 涓嬮渶瑕佸厛鎵ц涓涓?Visual Studio 甯︾殑鍛戒護琛岀幆澧冿紝濡?VS 2022 Community 鐨?鈥渪64 Native Tools Command Prompt for VS 2022鈥濓紝cl 絳夊伐鍏鋒墠浼氬彲鐢ㄣ?/p>
濡傛灉瑕佹祴璇?XP錛?2浣嶏級錛岀敤鈥渪86 Native Tools Command Prompt for VS 2022鈥濊繘鍏ワ紝CD 鍒伴」鐩洰褰曪紝鎵ц錛?/p>
鎴戜滑鍙敤鍑犲崄 KB 鐨勫ぇ灝忓畬鎴愪簡璺ㄧ鏀寔錛屾槸寰堣交閲忕殑涓涓厤緗傚鏋滄偍瑙夊緱瀹炵敤騫惰鍙繖縐嶆柟寮忥紝嬈㈣繋涓璧鋒潵緇存姢銆佸畬鍠勩?/p>
鍏充簬鏂囩珷綆$悊鐨勬兂娉曪紝璇存潵璇濋暱銆傛垜鏈鍒濇槸鍦?CSDN 鍐欐妧鏈枃绔狅紝灝辯敤緗戦〉涓婄殑緙栬緫鍣ㄣ傚悗鏉ュ湪 CppBlog 鍐欙紝鐢ㄤ笂浜?Windows Live Write錛屼竴鑸湪 Word 閲岄潰鍐欏ソ錛屽啀璐村埌 WLW 鍙戝竷銆傚啀鍚庢潵鐢變簬澶繖浜嗭紝涓鐩村仠鍒扮幇鍦ㄣ傚叾涓櫎浜嗘垜鎳掞紝鏈変袱涓瑙傚師鍥狅紝絎竴鏄腑闂村ソ鍑犲勾涓嶆悶 C++錛岄偅涔堝湪 CppBlog 涓婂啓闈?C++ 鐨勪笢瑗垮ソ鍍忔湁鐐瑰鎬紱絎簩鏄紝鏈嶅姟绔殑涓滆タ鐪熺殑娌℃硶姣忓ぉ涓嬬彮鑷繁鐜╁憖錛屾瘡澶╀笅鐝彁蹇冨悐鑳嗗湴鐪嬬煭淇℃姤璀︼紝涔熸病鍝釜蹇冩儏鍜屾椂闂村啀鍘婚噸鏂板紑杈熶竴涓拰鐧藉ぉ宸ヤ綔鍐呭榪ュ紓鐨勫涔犲満鏅淮鎸佷笅鍘匯傦紙浣╂湇鑷繁鎵懼熷彛鐨勮兘鍔泘錛?/p>
鍓嶄簺騫達紝Markdown 鍏磋搗錛孏itHub Pages 鍏磋搗錛屼竴浼楅潤鎬佸崥瀹㈠伐鍏蜂篃钃媰鍙戝睍銆侻arkdown 鐪熺殑澶傚悎鐢ㄦ潵鍐欐妧鏈崥瀹簡錛屽敮涓涓嶈凍鏄浘鐗囩殑澶勭悊銆傚敖綆″姝わ紝鎴戣繕鏄姳浜嗗緢澶х殑綺懼姏鎶婁互鍓嶆墍鏈夌殑鏂囩珷閮借漿鎴愪簡 Markdown銆傜劧鍚庢浘緇忎竴搴︿篃鐜╀笂浜?GitHub Pages錛岀敤 Huge 鐢熸垚闈欐佸崥瀹€傜劧鑰岋紝鍗氬鐨勮繖涓滆タ鎴戣涓轟環鍊肩偣鍜屽姩鍔涜繕鏄湪浜庝氦嫻併佺鎾烇紝鑷繁鍐欒嚜宸辯湅錛岃窡瀛樻湰鍦版病鍟ュ尯鍒斺旀垜鐨?GitHub Pages 鍑犱箮娌′漢鐪嬧︹﹂偅鏃跺欎篃娌″啓鍑犵瘒錛屽ぇ姒傛槸 2018 騫存湯鍒?2019 騫村垵鐨勬椂闂淬?/p>
鍗婂勾鍓嶏紝鎴戞兂鍒頒簡榪戝勾鏉ョ涓涓滀吉闇姹傗濄傛垜瀚?Hugo 榪欑褰㈡佹搷浣滃お緗楀棪錛氬厛鍐?Markdown錛屽啀鏀懼埌 source repo 鐨?post 閲岋紝鎻愪氦涓鎶婏紱鍐嶇敓鎴愰潤鎬侀〉闈紝鎶?public 鎻愪氦鍒?public repo銆傚鏋滄姌鑵炬ā鐗堝暐鐨勶紝灝辨洿澶嶆潅銆傛垜灝辨兂鍐?Markdown錛屽啓瀹屾彁浜や竴嬈?.md錛岃兘涓嶈兘灝辯湅鍒板憿錛熺敋鑷沖共鑴嗕笉鎻愪氦錛岀洿鎺ュ悓姝ュ埌鏈嶅姟绔傝繖鏍鳳紝灝卞緱鍋氫竴濂楀姩鎬佺郴緇燂紙鐩稿浜?Hogo 鐨勯潤鎬侀〉闈級鍘誨仛榪欎歡浜嬶紝鑰岀敓鎴愯嫻忚鐨勬暟鎹殑閫昏緫鐞嗚涓婅窡 Hugo 涔嬬被鐨勬病鏈川鍖哄埆銆傝屼竴鑸釜浜哄崥瀹㈣繖縐嶆枃绔犻噺錛屾牴鏈笉鐢ㄧ撼鍏ユц兘涓婄殑鑰冮噺錛屽洜姝ゅ仛鎴愬姩鎬佹槸瀹屽叏鍙搷浣滅殑銆傜湅浜嗕笅甯傞潰涓婃病鏈夋綾葷殑宸ュ叿錛屼簬鏄氨寮鎼炰簡銆傛垜鎶婂畠鍙淣oteIsSite鈥濓紝GitHub 鍦板潃 https://github.com/Streamlet/NoteIsSite錛孌emo 鍦板潃 https://note-is-site.streamlet.org/錛岀劧鍚庢妸鎴戞墍鏈夌殑鏂囩珷涔熺敤榪欎釜宸ュ叿鎸傚湪涓婚〉涓嬬殑涓涓瓙鍒嗙被錛岃 https://www.streamlet.org/note/銆傚叧浜庤繖涓紝浠ュ悗鍐嶅紑涓綃囨枃绔犵粏璇淬?/p>
鍒拌繖閲屼負姝紝鍐欑殑榪囩▼浠d環寰堝皬浜嗐備絾鏄垰鎵嶈浜嗭紝鍗氬榪欎笢瑗匡紝瀵逛簬鎴戠殑鍔ㄥ姏寰堝ぇ涓閮ㄥ垎鏉ヨ嚜浜庤瘎璁恒佺鎾烇紝榪樻槸闇瑕佸彂鍒板叕鍏卞鉤鍙頒笂鍘葷殑濂姐傛渶榪戠湅鍒頒竴涓幓騫寸鑱岀殑鍓嶅悓浜嬬殑鍗氬 https://gclxry.com/錛屾垜鎯婂徆浜庝漢瀹朵竴鐩村湪鍧氭寔鍐欍傛垜鎯蟲垜鏄笉鏄篃瑕佹崱璧鋒潵浜嗭紝榪樻槸鍥炲綊 CppBlog 鍚с備簬鏄棶棰樺氨鏉ヤ簡銆傛渶榪戣寰楁渶濂界敤鐨?Markdown 緙栬緫鍣ㄦ槸 typora錛岀劧鍚庡畠娌℃硶鍙戝崥瀹紱浠ュ墠鐨?WLW 铏界劧榪樿兘鐢紝浣嗘瘯绔熶笉鍩轟簬 Markdown銆傜劧鑰?typora 涓嶅紑婧愶紝娌℃硶緇欎粬鍔犱竴涓滃彂甯冣濆姛鑳戒簡浜嬨傛墍浠ヨ嚜宸卞仛鍋氱湅錛熼『渚垮叆涓涓?Electron 鐨勫潙錛屼互鍙婂墠绔殑鍧戙?/p>
鑺變簡榪欎箞澶х瘒騫呮妸闇姹傛潵婧愯瀹屼簡銆傝嚦浜庝負浠涔堥?Electron 鍛紵灝辨槸涓轟簡蹇偣鎼炲畾鈥︹?/p>
涓婂懆瀛︿範浜嗕笅 Electron 鐨?demo 浠ュ強鎵撳寘嫻佺▼錛?a >https://github.com/StreamletStudy/ElectronHelloWorld 鐒跺悗姝e紡鐢ㄨ繖涓?repo錛?a >https://github.com/Streamlet/MarkdownBlog
鐜板湪鍔熻兘灝變袱涓細緙栬緫銆佸彂甯冦傜紪杈戜笉鏄墍瑙佸嵆鎵寰楃殑錛屽乏杈?Markdown錛屽彸杈?HTML銆傚彂甯冭姣忔濉?API 鍦板潃銆佽處鍙鳳紝娌″仛綆$悊銆傛暣涓祦紼嬮氫簡錛屼簬鏄仠涓嬫潵鍐欎簡榪欑瘒鏂囩珷錛岀敤鍒氬啓鐨勫伐鍏峰彂甯冧笂鏉ャ?/p>
鍙戠幇浜?Electron 鐨勪竴涓潙錛屽彧瑕佸湪欏甸潰閲岃皟鐢ㄤ簡 alert錛岄〉闈笂鐨勭劍鐐瑰氨鏈夐棶棰橈紝杈撳叆妗嗗啀涔熸棤娉曡緭鍏ュ唴瀹逛簡銆傜洰鍓嶇敤 remote.dialog.* 鏇夸唬銆備笉鐭ラ亾鏈夋病鏈夋瑙o紵 鍚庨潰鐨勮鍒? 鍐嶅悗闈紝鍏堜笉瑙勫垝錛屽仛瀹屼簡鍐嶇湅銆傚綋鍓嶇増鏈?Release錛?a >https://github.com/Streamlet/MarkdownBlog/releases/tag/publish_to_metaweblog_api 2019 騫達紝鎴戝洖鏉ヤ簡銆?/p>
涓嶇煡涓嶈涓紝鎴戝叆 PHP 鐨勫潙宸茬粡 3 騫存湁浣欙紝鍏?Go 鐨勫潙涔熷ぇ鍗婂勾浜嗐備綔涓轟笉璇勮涓嶈垝鏈嶆柉鍩烘槦浜猴紝鑷劧瑕佸 Go 鍝佸ご璁鴻凍涓鐣殑銆?/p>
鎬葷殑涓鍙ヨ瘽錛孏o 鐨勪竴浜涚壒鎬х‘瀹炴伆鍒板ソ澶勶紝鐒惰屾洿澶氱殑鍦版柟鍗存槸騫沖焊銆佺箒鐞愩佹潫緙氾紝浠ヨ嚦浜庢垜鎯充笉鍒板畠鏄傚悎鍝簺鍦烘櫙鐨勩?/p>
闈欐佽璦閲岋紝C銆丆++ 鏈夌潃鏄庢樉鐨勯傜敤棰嗗煙錛氫綘瑕佹兂鑰佽佸疄瀹炲啓紼嬪簭錛屼笉鐜╀換浣曡姳鎷涳紝灝辯敤 C 鍚э紝鑷沖皯浣犺兘鎺屾帶涓鍒囷紝瀹炲湪鎯崇帺浣犺繕鏈夊畯榪欎釜澶ф潃鍣紱浣犺鎯崇帺鐐硅姳鎷涳紝閭e氨鐢?C++錛屼唬浠峰氨鏄渶瑕佽嚜韜按騫蟲洿楂橈紝鑳芥帉鎺у埌澶氬ぇ灞傛灝卞啓澶氬ぇ灞傛錛屼笉鎳傜殑涓嶈涓嶆噦瑁呮噦鍘葷敤錛屾諱綋鏉ヨ榪樻槸瀹夊叏鐨勩?/p>
鑴氭湰璇█閲岋紝濡傛灉瑕侀殢渚垮啓鐐逛粈涔堝伐鍏鳳紝python 鍟ョ殑鎸烘柟渚跨殑錛涘啓鐐圭綉緇滅殑錛屽氨鐢ㄤ笘鐣屼笂鏈濂界殑璇█ PHP 鍚с備粈涔堬紵浣犺 Java錛熷疄鍦ㄦ病鍔炴硶錛屼綋閲忓お澶э紝鍏徃瑕佷綘鐢ㄤ綘灝辯敤鍚с備笉榪囧氨鍏舵湰璐ㄨ岃█錛屽叾瀹?Java 鍜屼粖澶╃殑涓昏鈥斺擥o 鏄悓涓綾葷殑銆備笉鏄浠栦滑璇硶鍍忥紝鏄寚搴旂敤鍦烘櫙錛堜笉榪囪繖涓鍩熸嬁 PHP 鍐欐樉鐒朵細鏇寸埥錛夈?/p>
鍡斺斾負浜嗚〃杈懼嚭鐪熷疄鐨勬剰鎬濓紝鎴戞兂鐢ㄨ瘝紼嶅井鐘鍒╃偣錛岃鍏堝仛涓涓嬪績鐞嗗緩璁俱?/p>
鎴戜笉鎬庝箞鎳?Java錛屽氨鎴戞祬钖勭殑浜嗚В鑰岃█錛屽鏋滀綘鐨勫叕鍙搞佸洟闃熸湁寰堝鍌婚鹼紝鐢氳嚦浣犺嚜宸變篃鏄紝涓氬姟涓婂張姝eソ鍙互鐢?Java 鐣岀殑涓浜涚幇鎴愮殑妗嗘灦銆佺粍浠訛紝閭d箞鐢?Java 鑲畾鏄病閿欑殑鍟︺傚畠紜疄鏈変竴縐嶉瓟鍔涳紝璁╀綘鏃犺澶氬偦閫鹼紝涔熺粷瀵瑰啓涓嶅嚭閿欏緱澶氫箞闅愯斀銆佺簿濡欐棤姣旂殑浠g爜錛涘悓鏃惰浣犳棤璁哄鐗涢鹼紝涔熷啓涓嶅嚭澶氫箞綺懼僵緇濅雞銆佽█綆鎰忚祬鐨勪唬鐮併侴o 涔熸湁榪欑鐗硅川錛岀敋鑷蟲湁浜涘湴鏂規瘮璧?Java 鏇存湁榪囦箣鑰屼笉鍙娿備笉淇¤鐪嬶細 鍒漢瀹剁殑鍐欐硶錛?/p>
Go 瀹剁殑鍐欐硶錛?/p>
涓轟粈涔堣璁捐鎴愯繖鏍鳳紵Go 鐖哥埜璇達細浣犱滑鏈変簺浜哄晩錛屼細宓屽寰堝灞? 鎬庝箞鏍鳳紵鍙鎬у樊涓嶅樊錛?/p>
鐪嬪埌浜嗗惂錛岃繖縐嶅偦閫兼槸闃蹭笉浣忕殑錛屼粬鎰挎剰鎶??: 宓屽濂藉灞傦紝瀹冨悓鏍峰彲鑳戒細鎶? 闄や簡 涓嶆敮鎸? 鐗瑰埆鏄涓夌偣錛屼篃鏄繖縐嶆濊礬錛屽洜涓轟綘浠彲鑳戒細婊ョ敤錛屾墍浠ユ垜涓嶆彁渚涖傜被浼艱繖縐嶁滅埜鐖告濊礬鈥濓紝鏄垜浠婂ぉ瑕佸柗鐨勬渶澶у柗鐐廣傚墠涓ょ偣涔熻鏄妱 Java 鐨勶紝涓嶆?Go 鐖哥埜銆?/p>
緇間笂錛孏o 鐖哥埜閫氳繃鎵兼潃涓浜涘熀鏈娉曟垨鑰呬竴浜涘熀紜淇℃伅錛屾潵闃叉鍌婚煎共鍧忎簨錛屽悓鏃惰姝e父浜虹敤璧鋒潵寰堝暟鍡︼紝鍚屾椂榪樺彲鑳介槻姝笉浜嗗偦閫煎共鍧忎簨銆傝繖璺?Java 閫氳繃涓嶆彁渚涢珮綰ц娉曟潵闃叉鍌婚煎共鍧忎簨鏄笀鍑哄悓闂ㄥ晩錛岃屼笖浠栦滑姝eソ閮借兘鍐欑綉緇滄湇鍔$▼搴忥紝浣犺瀹冧滑鍍忎笉鍍忥紵 鐒惰岋紝Go 鐖哥埜涔熸湁綺懼垎鐨勬椂鍊欙紝瀹冨眳鐒跺彂鏄庤娉曠硸浜嗚訛紒姣斿 灝忚娉曟柟闈㈠掓槸鏈変釜浜偣錛岄偅灝辨槸 switch 鐨勯殣寮?break銆佹樉寮?fallthrough 澶勭悊銆備笉澶氬睍寮浜嗐?/p>
闄や簡闃插偦閫鹼紝Go 鐖哥埜榪樻湁涓涓濊礬錛屽氨鏄彧璁稿窞瀹樻斁鐏紝涓嶈鐧懼鐐圭伅銆傛湁涓や釜璇硶鐐光斺?/p>
鍏堣娉涘瀷鍚с備笉鏀寔娉涘瀷鍏跺疄鎴戞尯鑳界悊瑙g殑錛屽洜涓轟粬紜疄姣? 鍐嶈閫楀彿ok鏂█錛屽悓鏍?Go 鐖哥埜瑕佸緱璧鳳紝鎴戜滑瑕佷笉璧楓傚叾瀹炴垜鏇存兂瑕佷竴涓繖鏍風殑璇硶錛氬綋榪斿洖鍊兼槸 xxx, ok 鎴栬?xxx, err 鐨勬椂鍊欙紝鎴戝鏋滅敤涓涓繑鍥炲兼帴錛岄偅涔堝氨榪斿洖絎竴涓紝浠ヤ究閾懼紡璋冪敤錛屽悓鏃?!ok 鎴栬?err != nil 鐨勬椂鍊?panic銆?/p>
浠ヤ笂涓ゅ皬鐐硅櫧鐒舵槸鍦ㄥ柗錛屼笉榪囪繕濂藉暒銆傛棤鎵璋撶殑銆備笅闈㈣鍑犱釜澶х殑鏂歸潰銆?/p>
鎴戠壒鍒禐璧?Go 瀵逛簬 package 綰т弗鏍肩殑寰幆渚濊禆媯鏌ャ傜劧鑰屽鏋滃姞涓婂叾浠栬鍒欙細 瀹為檯鍙搷浣滄у氨浼氶潪甯稿樊銆傝鎷?package錛屽氨瑕佹妸渚濊禆鍏崇郴姊崇悊寰楃壒鍒弗鏍鹼紝鍗婄偣涓嶅緱椹檸銆傝繖瀵瑰伐涓鑸殑紼嬩唬鐮佹潵璇存槸涓瀬澶х殑鎸戞垬銆?/p>
鎴戞洿鍊懼悜浜庡仛鎴愬嚱鏁扮駭寰幆渚濊禆媯鏌ワ紝鎴栬呬笉闄愬埗錛堟瘯绔熼掑綊鍑芥暟涔熸槸瑕佹敮鎸佺殑鍢涳級銆?/p>
榪欓儴鍒嗭紝涓珛鍋忓柗錛屽亸鍠鋒槸鍥犱負 Go 鐖哥埜鐢ㄤ簡鎴戠殑灝忓悕 internal銆?/p>
鎴戠壒鍒禐璧?Go 瀵逛簬 OOP 娉涙互鎴愮伨鐨勬濊冧笌鎺㈢儲錛屼互鍙婂浜庣粓緇撹繖闃?Java 甯︽潵鐨勪笉姝d箣椋庣殑鍐沖績銆傛庝箞鍙兘涓囩墿閮芥槸 class 鍛€備絾鍚屾椂錛孏o 榪樻槸鏈夌偣鐭瀴榪囨鐨勶紝濡傛灉鎴戦渶瑕佸埄鐢ㄤ紶緇熺殑 OOP 鏉ユ悶浜嬫儏錛屽氨闈炲父楹葷儲錛屼綘鐢氳嚦閮芥棤娉曞啓鍑轟竴涓鏋舵潵銆備綘鍙兘鍐欏簱璁╁埆浜虹敤銆傝櫧鐒舵垜涔熶笉鍠滄妗嗘灦錛屼絾鏈夌殑鏃跺欐槸闇瑕佹鏋剁殑銆?/p>
defer 闈炲父鍒囦腑鐥涚偣錛岀壒鍒В鍐充竴鍫嗛敊璇?return 澶栧姞璧勬簮閲婃斁鐨勯棶棰樸傜浉姣斾箣涓婥 閲屽彧鑳界敤 goto錛孋++ 鏈韓涓嶆敮鎸佷絾鍙互鐜╁嚭 LOKI_ON_BLOCK_EXIT 鎴栬?BOOST_SCOPE_EXIT銆俤efer 涓涓捐В鍐抽棶棰樸傦紙瑕佹槸鑳藉啀澧炲姞鍛藉悕 defer 浠ュ強鎾ら攢 defer 鐨勫姛鑳藉氨鏇村ソ浜嗐傛病閿欙紝浣犱篃璁哥湅鍑烘潵浜嗭紝鎴戣寰?LOKI_ON_BLOCK_EXIT 鏄渶瀹岀編鐨勬柟妗堛傦級 铏界劧 defer 寰堝ソ錛屼絾涓嶆剰鍛崇潃鏋愭瀯灝辨病鐢ㄦ涔嬪湴浜嗐傜悊鎯崇殑鎯呭喌鏄紝鏋愭瀯銆佸鎬併乨efer 閮借鏈夆︹?/p>
榪欓儴鍒嗘垜鐨勬佸害鏄腑绔嬨?/p>
緇堜簬瑕佺偣璧炰簡銆傞敊璇鐞嗘槸鍦ㄦ垜鐪嬫潵 go 瀹岃儨鐨勫湴鏂癸紝鎭板埌濂藉鍦板鐞嗛棶棰橈紝鍙堥槻姝㈡互鐢ㄣ備篃鐭 Java 甯︽潵鐨勬椋庨偑姘斻?/p>
Java 鐨勮璁★紝璁╀漢涓嶅緱涓嶇敤寮傚父鏉ュ鐞嗕笟鍔°傜敋鑷?Java 鑷繁榪樺府鎴戜滑鍒嗗ソ綾諱簡錛氫竴縐嶆槸涓嶆槸寮傚父鐨勫紓甯革紝鐢ㄦ潵澶勭悊涓氬姟錛涘彟涓縐嶆槸鐪熺殑寮傚父銆備竴浜涚敤鎯?Java 鐨勫偦閫艱窇鍒?C++銆丳HP銆丳ython 閲屼貢鎷夊睅錛屽埌澶勬槸 try catch銆?/p>
Go 鐖哥埜涓澹頒護涓嬶紝涓囩眮淇卞瘋銆?/p>
鏈鍚庝笉寰椾笉璇磋 gorouthine錛屾瘯绔熸槸鍗栫偣鍢涖傛垜鐨勬佸害涓珛鍋忚禐銆傝禐鏄洜涓鴻繖鏄竴縐嶅お鏈夊垱鎰忕殑鏂規錛屽眳鐒舵兂鍦ㄥ湪璇█灞傞潰瑙e喅澶氱嚎紼嬨佸茍鍙戦棶棰橈紱涓嶈繃鎴戣繕鏄寰楄繖鏇村鐨勬槸搴旂敤灞傞潰鐨勯棶棰橈紝鍋氬埌瀹樻柟搴撻噷浼氭洿濂斤紝鑰屼笉鏄仛鎴愯娉曘?/p>
鍒氬紑濮嬬敤 Go 鐨勬椂鍊欙紝鐗瑰埆浜溂錛岀畝鐩村澶勬槸浜偣錛岀劧鍚庤秺鎺ヨЕ瓚婅鍘岋紝涓鐐逛篃涓嶈愮湅鈥︹︾湅寰楀嚭鏉ワ紝璁捐鑰呯硡鍚堜簡 C銆乸ython銆丣ava 鐨勪竴浜涚壒鎬э紝騫惰瀺鍏ヤ簡鑷繁鐨勭嫭鐗圭殑鐞嗚В銆侴o鐨勮璁¤呯湡鐨勭壒鍒壒绔嬬嫭琛屼笖鍧氭寔宸辮錛屼竴浜涙垜鍠滄鐨勭壒鎬у洜涓轟粬浠殑鍧氭寔鑰屽瓨鍦ㄤ笅鏉ワ紝涓浜涙垜璁ㄥ帉鐨勭壒鎬т篃鍥犱負浠栦滑鐨勫潥錛圙u錛夋寔錛圸hi錛夎屼笉鑳芥湁鎵鏀硅銆傚氨榪欐牱鐨?Go錛屾兂浠f浛 C 浣滀負緋葷粺璇█錛屾槸娌℃垙鐨勶紱鎯沖湪緗戠粶鏈嶅姟鏈変竴鐣綔涓猴紝鎶?Java 鐨勪喚棰濓紝鎴栬鏄湁鏈轟細鐨勶紝涓嶈繃鏈澶氬彧鑳芥姠 Java 鐨勶紝榪?C# 鐨勯兘鎶笉浜嗭紝C++銆丳HP 鏇存姠涓嶄簡銆?/p>
鍡紝闄や簡鐗瑰畾鐨勪笉寰椾笉鐢ㄧ殑鍦哄悎錛屽弽姝f垜鏄笉浼氱壒鎰忕敤 Go 鐨勩?/p>
2019錛屾柊騫村揩涔愶紒 涓ゅ勾鍓嶆垜浠庝竴鍚嶅厜鑽g殑C++紼嬪簭鍛樹笓涓氫負PHP紼嬪簭鍛樹互鍚庯紝鍛婂埆浜嗕笘鐣岀涓IDE Visual Studio錛屾敼鐢ㄥ綋鏃惰寰楃壒鍒毦鐢ㄧ殑 PHPStorm銆傜敤浜嗚繖涔堜箙浠ュ悗錛岃寰桰ntelliJ緋誨垪铏芥瘮涓嶄笂VS錛屽ぇ姒備篃鏈変笘鐣岀浜屽惂錛岃嚦灝戞瘮eclipse寮哄お澶氥傞櫎浜嗘參澶ф涔熸病鍟ュソ鍚愭Ы鐨勪簡銆?/p> 鏈榪戝張瑕佸啓Go鍙堣鍐橮HP錛屾渶寮濮婸HPStorm鍜孏oLand涓璧風敤錛屽悗鏉ユ兂錛岀敤涓や釜娓犻亾鍖呭共鍢涘憿錛岃繕浣跨敤浠栦滑瀹剁殑涓繪墦浜у搧Idea鍚с傘傘?/p> 铏界劧璇寸▼搴忓憳涓鑸槸瑕佺敤鑻辨枃鐗堢殑錛屼笉綆℃槸涓轟簡瀹炵敤榪樻槸涓轟簡瑁呴箋備絾涓轟簡鏇村浜鴻兘鍏ラ棬錛屾垜浠彂璧蜂竴涓紑婧愰」鐩潵姹夊寲鍚э紝鍦?https://github.com/Streamlet/ideaLocalization錛屾榪庢湁蹇椾箣澹姞鍏ャ?/p> 鎴戜滑涓昏灝辨槸緲昏瘧 resources.jar銆備唬鐮佹鏋舵槸榪欐牱鐨勶紝resources\en 鏄師鏂囦歡瑙e帇鍚庣殑錛宺esources\zh-CN鏄鍒朵簡涓浠絩esources\en錛屾垜浠彧瑕佸湪resources\zh-CN閲岄潰灝卞湴鏀瑰姩鍗沖彲銆?/p> build.py浼氭妸鏁g潃鐨勬枃浠朵滑鎵撳寘鎴恟esources.jar銆俲ar閲岀殑properties鏂囦歡閲岋紝濡傛灉鏈変腑鏂囷紝涓嶈兘鐩存帴鏄疷TF鎴朑BK錛屽繀欏昏漿鎴怽uXXXX鐨勫啓娉曘傝繖涓猙uild.py浼氬府蹇欒漿錛屽洜姝esources\zh-CN閲岀洿鎺ュ啓涓枃錛圲TF-8錛夊氨濂姐?/p> 灝辨槸鍙戣搗涓」鐩剰鎬濇剰鎬濓紝浼拌鎴戞槸娌℃椂闂寸炕璇戠殑鈥︹_^ 宸插畬鎴愶細 鏈」鐩瘹閭鎮ㄧ殑鍔犲叆錛屾榪庢偍璐$尞鑷繁鐨勫姏閲忋?/p> 榪欐鏄洜涓哄偦閫煎ぇ寰蔣鏀逛簡 System32\IME\shared 閲岀殑涓滆タ錛屽鑷存棫緋葷粺鎷瘋繃鏉ョ殑鏂囦歡涓?System32\IME\shared 鐨勪笢瑗夸笉鍏煎浜嗐傝В鍐蟲柟寮忓緢鏆村姏錛氫粠浠ュ墠鐨勭増鏈鍒?System32\IME\shared 榪囨潵銆?/p> 涓嬭澆錛?a >https://www.streamlet.org/software/mspyforever/ 錛堝師鍙戜簬 GitHub Pages錛?018-10-13 13:36:04錛?/p>鏋勫緩緋葷粺瀹夎
gn --version 浠ュ強 ninja --version錛岃兘榪愯鍗沖彲鐩爣
buildconfig = "//build/BUILDCONFIG.gn"
宸ュ叿閾炬惌寤?/h2>
鍩虹姒傚康
buildconfig = "//build/BUILDCONFIG.gn"
set_default_toolchain("//build/toolchain:gcc")
toolchain("gcc") {
# ...
}
宸ュ叿閾句腑鐨勫伐鍏?/h3>
"cc": C 緙栬瘧鍣?br />
"cxx": C++ 緙栬瘧鍣?br />
"cxx_module": 鏀寔 module 鐨?C++ 緙栬瘧鍣?br />
"objc": Objective C 緙栬瘧鍣?br />
"objcxx": Objective C++ 緙栬瘧鍣?br />
"rc": Windows 璧勬簮鑴氭湰緙栬瘧鍣?br />
"asm": 姹囩紪鍣?br />
"swift": Swift 緙栬瘧鍣?/li>
"alink": 闈欐佸簱閾炬帴鍣?br />
"solink": 鍔ㄦ佸簱閾炬帴鍣?br />
"link": 鍙墽琛屾枃浠墮摼鎺ュ櫒toolchain("gcc") {
tool("cc") {
command = "gcc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}"
outputs = [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
# ...
}
tool("cxx") {
command = "g++ -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} -c {{source}} -o {{output}}"
outputs = [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
# ...
}
tool("alink") {
command = "rm -f {{output}} && ar rcs {{output}} {{inputs}}"
outputs = [ "{{target_out_dir}}/{{target_output_name}}{{output_extension}}" ]
# ...
}
tool("solink") {
command = "g++ -shared {{ldflags}} -o $sofile $os_specific_option @$rspfile"
outputs = [ sofile ]
# ...
}
tool("link") {
command = "g++ {{ldflags}} -o $outfile -Wl,--start-group @$rspfile {{solibs}} -Wl,--end-group {{libs}}"
outputs = [ outfile ]
# ...
}
tool("stamp") {
command = "touch {{output}}"
}
tool("copy") {
command = "cp -af {{source}} {{output}}"
}
}
瀵規瘮 Chromium 涓殑閰嶇疆
Linux
Mac
Win
寤虹珛鎴戜滑鐨勫伐鍏烽摼
gn gen out --args="is_debug=true"浼犲叆銆傞粯璁?is_debug 涓?false錛屽紑鍚墍鏈変紭鍖栥?/p>
$ld ... && dsymutil ... && strip
浣跨敤妗堜緥
git submodule update --init涓涓嬨?/p>
gn gen out
ninja -C out
gn gen out --args="target_cpu=\"x86\""
ninja -C out
鎬葷粨
]]>r = f(p1, p2 != null ? p2 : p3)
$r = f($p1, $p2 ?? $p3)
var r someType
if p2 != nil {
r = f(p1, p2)
} else {
r = f(p1, p3)
}
?:錛屽鑷翠唬鐮佸彲璇繪уお宸暒錛屼簬鏄姝綘浠嬌鐢??:錛岃繖鏄娉曘傚湪榪欓噷錛屼綔涓虹唺瀛╁瓙鐨勪唬琛紝鎴戞潵鍛婅瘔澶у鎬庢牱鍐欏嚭璁?Go 鐖哥埜鏃犺鐨勪唬鐮侊細 foo := 1
bar := 2
var foobar int
if foo > bar { if bar > 1 { foobar = 1 } else if bar < 0 { foobar = 2 } else { foobar = 3 } } else { if foo >= 3 { foobar = 4 } else { foobar = 5 } }
if else 宓屽濂藉灞傘傛湁绱犺川鐨勪漢浼氭庝箞鍋氾紵閬囧埌 ?: 宓屽澶绔嬮┈鎷嗘垚 if else銆傛墍浠ョ粨璁烘槸錛屽嵆浣垮幓鎺??:錛屽偦閫艱繕鏄偦閫鹼紝浣嗘槸姝e父鐨勪漢鍐欎唬鐮佸氨浼氬緢鍟板棪錛涙敮鎸??:錛屽偦閫艱繕鏄偦閫鹼紝姝e父浜虹敤璧鋒潵鐖姐傝鐭ラ亾涓灞??: 鐨勫満鏅崰鎵鏈??: 鍦烘櫙鐨勬瘮渚嬭繕鏄緢楂樼殑鍚с傛垜瑙夊緱鍙互榪欐牱錛孏o 鐖哥埜鍙互緇熻涓浜涘伐涓氱駭浠g爜搴撶殑 ?: 宓屽灞傛暟錛屼綔涓烘暟鎹敮鎾戯紙姣斿鑷 Chrome 閲屼竴灞??: 鍗?95%錛屼袱灞傚崰 4.9錛夛紝鐒跺悗鍐嶅湪璇█灞傞潰鍙敮鎸佷竴灞??:錛岀紪璇戝弬鏁板彲閫夋墦寮涓ゅ眰錛屼笉鏀寔涓ゅ眰浠ヤ笂銆傝繖灝卞姛鍦ㄥ崈縐嬩簡銆?/p>
?:錛孏o 鐖哥埜榪樻湁寰堝榪欐牱鐨勮璁★紝闅忎究涓懼嚑涓緥瀛愶細
if 鍙互鎵ц涓涓彞鍙ャ傚崟灝辮繖涓娉曡岃█錛屾垜鐨勬佸害鏄腑绔嬪亸璧炪傝禐鏄禐 Go 鐖哥埜紜疄鐢ㄨ繃蹇冧簡錛屾煇浜涙椂鍊欐尯鏂逛究錛岃繕鑳界緝灝忓彉閲忎綔鐢ㄥ煙錛涗笉榪囪繖涓誨綊鏄彲鏈夊彲鏃犵殑錛屾瘯绔熸崲涓琛屽啓涔熶笉浼氭錛岃鍙橀噺浣滅敤鍩熷姞涓ぇ鎷彿灝辮銆?/p>
?: 澶嶆潅澶氫簡錛屽偦閫肩敤涓嶈搗錛?code>?: 閮芥病鏈夛紝鎬庝箞鍙兘浼氭湁娉涘瀷鍛€傜劧鑰?Go 鐖哥埜鏈夌壒鏉冨憖錛屽畠鐨?map銆乧han 鍙兘鏄硾鍨嬬殑鍝︺備絾鏄綘瑕佸啓涓涓硾鍨嬬殑璇硶緇撴瀯鐨勮瘽錛屽涓嶈搗娌℃湁銆?/p>
浠g爜緇勭粐
OOP
閿欒澶勭悊
goroutine
鎬葷粨
]]>
褰撳墠榪涘害
浣跨敤鏂規硶
娉ㄦ剰浜嬮」
鍔犲叆鎴戜滑
鍒嗘敮璇存槑
鍚堝茍絳栫暐
鍗忎綔鏂瑰紡
緲昏瘧瑙勮寖
璇嶆眹琛?/h3>
鑻辨枃 鎺ㄨ崘緲昏瘧 涓嶆帹鑽愮殑緲昏瘧 View 瑙嗗浘 鏌ョ湅 Build 鐢熸垚 鏋勫緩
]]>