锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浣嗘槸絎竴涓郴鍒楄繕娌″埌寮濮嬪鐞員inymoe婧愪唬鐮佺殑鏃跺欙紝棣栧厛鐨勮窡澶у璁蹭竴璁叉垜璁捐Tinymoe鐨勬晠浜嬨備負浠涔堣繖縐嶄笢瑗胯絳夊埌鐜板湪鎵嶈鍛紝鍥犱負涔嬪墠娌℃湁鏂囨。錛屽皢浜嗕篃鏄櫧璁插晩銆俆inymoe鍦╣ithub鐨剋iki鍒嗕負涓ら儴鍒嗭紝涓閮ㄥ垎鏄粙緇嶈娉曠殑錛屽彟涓閮ㄥ垎鏄粙緇嶄竴涓渶灝忕殑鏍囧噯搴撴槸濡備綍瀹炵幇鍑烘潵鐨勶紝鍦板潃鍦?https://github.com/vczh/tinymoe/wiki 涓嶅甫闂彿鐨勯偅浜涢兘鏄啓瀹屼簡鐨勩?
鍦ㄤ粙緇峊inymoe涔嬪墠錛屽厛璇翠竴涓嬭繖涓郴鍒楁枃绔犵殑鐩爣銆侷deally錛屽彧瑕佷竴涓漢鐪嬪畬浜嗚繖涓郴鍒楋紝浠栧氨鍙互鍦ㄤ笅闈㈣繖浜涘湴鏂瑰緱鍒?strong>鍏ラ棬錛?
褰撶劧錛岃繖騫朵笉鑳借浣犳垚涓轟竴涓ぇ鐗涳紝浣嗘槸鑷沖皯鑷繁鍋氬仛瀹為獙錛屾悶涓鐐歸珮澶т笂鐨勪笢瑗塊獥甯堝浠槸娌℃湁闂浜嗐?
铏界劧鎯蟲硶寰堝騫村墠灝卞凡緇忔湁浜嗭紝浣嗘槸榪欐鎴戞兂鎶婂畠瀹炵幇鍑烘潵錛屾槸涓轟簡瀹屾垚銆婂浣曡璁′竴闂ㄨ璦銆嬬殑鍚庣畫銆傚厜璁插ぇ閬撶悊鏄病鏈夋剰涔夌殑錛岃嚦灝戝緱鏈変竴涓緥瀛愶紝璁╁ぇ瀹剁煡閬撹繖浜涗簨鎯呭埌搴曟槸浠涔堟牱瀛愮殑銆傚洜姝inymoe鏈変竴鐐規暀瀛︾殑鎰忎箟錛屼笉綆℃槸浣跨敤瀹冭繕鏄疄鐜板畠銆?
棣栧厛錛?strong>澶勭悊Tinymoe闇瑕佺殑鐭ヨ瘑鐐瑰錛岀敤浜庣紪璇戝師鐞嗘暀瀛?/strong>銆傛棦鐒舵槸涓轟簡灞曠ず緙栬瘧鍘熺悊鐨勫熀紜鐭ヨ瘑錛屽洜姝よ璦鏈韓涓嶅彲鑳芥槸閭g鐑傚ぇ琛楃殑C緋誨垪鐨勪笢瑗褲傚綋鐒墮櫎浜嗙煡璇嗙偣浠ュ錛岃繕浼氳澶у娣卞埢鐨勭悊瑙e埌錛?strong>闅懼疄鐜板拰闅劇敤錛屾槸瀹屽叏娌℃湁鍏崇郴鐨?/strong>錛乀inymoe鐢ㄨ搗鏉ュ彲鐖戒簡錛屽晩鍝堝搱鍝堝搱鍝堛?
鍏舵錛?strong>Tinymoe瀹規槗宓屽叆鍏朵粬璇█鐨勭▼搴忥紝浣滀負DSL浣跨敤錛屽彲浠ヨ皟鐢ㄥ涓葷▼搴忔彁渚涚殑鍔熻兘銆傝繖涓ユ牸鐨勬潵璁蹭笉綆楄璦鏈韓鐨勫姛鑳斤紝鑰屾槸瀹炵幇鏈韓鐨勫姛鑳姐傚氨綆楁槸C++涔熷彲浠ヨ璁′負宓屽叆寮忥紝lua涔熷彲浠ヨ璁捐涓虹紪璇戞垚exe鐨勩備竴涓璦鏈韓鐨勮璁″茍涓嶄細瀵瑰浣曚嬌鐢ㄥ畠鏈夊澶х殑闄愬埗銆備負浜嗚澶у鐪嬩簡榪欎釜緋誨垪涔嬪悗錛屽彲浠ュ啓鍑鴻嚦灝戝彲鐢ㄧ殑涓滆タ錛岃屼笉浠呬粎鏄啓鐜╁叿錛屽洜姝よ繖涔熸槸璁捐鐨勭洰鏍囦箣涓銆?
絎笁錛?strong>Tinymoe璇硶浼樺寲浜庢弿榪板鏉傜殑閫昏緫錛岃屼笉鏄紭鍖栦笌澶嶆潅鐨勬暟鎹粨鏋勫拰綆楁硶錛堣櫧鐒朵篃鍙互錛夈俆inymoe鏈韓鏄笉瀛樺湪浠諱綍緇嗙矑搴︽帶鍒跺唴瀛樼殑鑳藉姏鐨勶紝鑰屼笖铏界劧鍙互瀹炵幇澶嶆潅鐨勬暟鎹粨鏋勫拰綆楁硶錛屼絾鏄湰韜弿榪拌繖浜涗笢瑗挎渶澶氫篃灝辮窡JavaScript涓鏍峰鏄撯斺斿叾瀹炲氨鏄笉瀹規槗銆備絾鏄疶inymoe璁捐鐨勬椂鍊欙紝鏄負浜嗚澶у鎶奣inymoe褰撴垚鏄竴闂ㄥ彲浠ヨ璁SL鐨勮璦錛屽洜姝ゅ澶嶆潅閫昏緫鐨勬弿榪拌兘鍔涚壒鍒己銆傚敮涓鐨勫墠鎻愬氨鏄紝浣犳噦寰楀浣曠粰Tinymoe鍐欏簱銆傚緢濂界殑浣跨敤鍜屽緢濂藉湴瀹炵幇涓涓笢瑗挎槸鐩歌緟鐩告垚鐨勩傛垜鍦ㄨ璁inymoe涔嬪垵錛屽緢澶歱attern鎴戜篃涓嶇煡閬擄紝鍙槸鍥犱負璁捐Tinymoe閬靛驚浜嗙瀛︾殑鏂規硶錛屽洜姝ゆ渶鍚庢垜鍙戠幇Tinymoe绔熺劧鍏鋒湁濡傛寮哄ぇ鐨勬弿榪拌兘鍔涖傚綋鐒跺浜庤鑰呬滑鏈韓錛屼篃浼氬湪闃呰緋誨垪鏂囩珷鐨勬湁綾諱技鐨勬劅瑙夈?
鏈鍚庯紝Tinymoe鏄竴涓姩鎬佺被鍨嬭璦銆傝繖綰補鏄垜鐨勪釜浜虹埍濂戒簡銆傚涓闂ㄥ姩鎬佺被鍨嬭璦鍋氶潤鎬佸垎鏋愰偅璇ュ鏈夎叮鍟婏紝鍟婂搱鍝堝搱鍝堝搱鍝堛?
褰撶劧鎴戝茍涓嶄細涓轟簡鍐欐枃绔犲氨鏃犵嚎鎻愰珮Tinymoe鐨勫疄鐜伴毦搴︾殑銆備負浜嗘妸浠栨帶鍒跺湪涓涓甯告按騫籌紝鍥犳璁捐Tinymoe鐨勭涓鏉″氨鏄細
涓銆佸皬瑙勬ā鐨勮璦鏍稿績+澶ц妯$殑鏍囧噯搴?
鍏跺疄榪欒窡C++宸笉澶氥備絾鏄疌++鐢變簬鎯沖仛鐨勪簨鎯呭疄鍦ㄦ槸澶浜嗭紝璀璇磋鍥懼寘娑墊墍鏈夎寖寮忕瓑絳夛紝鍥犳灝辯畻榪欎箞鍋氾紝浠嶇劧璁〤++鏈韓鍖呭惈鐨勪笢瑗胯繃浜庡法澶э紙鍏跺疄鎴戣繕鏄寰桟++涓嶉毦鎬庝箞鍔烇級銆?
璇█鏍稿績灝忥紝瀹炵幇璧鋒潵褰撶劧瀹規槗銆?strong>浣嗘槸浣犲茍涓嶈兘涓轟簡璁╄璦鏍稿績灝忓氨鐗虹壊浠涔堝姛鑳?/strong>銆傚洜姝ょ簿蹇冭璁′竴涓牳蹇冩槸蹇呴』鐨勶紝鍥犱負鎵鏈変綘鎯寵浣嗘槸涓嶆兂鍔犲叆璇█鐨勫姛鑳斤紝浠庢灝卞彲浠ョ敤搴撴潵瀹炵幇浜嗐?
璀璇達紝Tinymoe閫氳繃鏈夋潯浠跺湴鏆撮湶continuation錛岃姹傜紪璇戝櫒鍦ㄧ紪璇慣inymoe鐨勬椂鍊欏仛涓嬈″叏鏂嘋PS鍙樻崲銆傝繖涓笢瑗胯瀹規槗涔熶笉鏄偅涔堝鏄擄紝浣嗘槸鑷沖皯姣斾綘鍋氬垎鏀驚鐜紓甯稿鐞嗕粈涔堢殑鍏ㄩ儴鍔犺搗鏉ヨ綆鍗曞浜嗗惂銆傛墍浠ユ垜鍙彁渚沜ontinuation錛屽墿涓嬬殑鎺у埗嫻佸叏閮ㄧ敤搴撴潵鍋氥傝繖鏍鋒湁涓変釜濂藉錛?
璇翠簡榪欎箞澶氾紝閭e埌搴曚粈涔堟槸灝忚妯$殑璇█鏍稿績鍛紵榪欏湪Tinymoe涓婃湁涓ょ偣浣撶幇銆?
絎竴鐐癸紝灝辨槸Tinymoe鐨勮娉曞厓绱犲皯銆備竴涓猅inymoe琛ㄨ揪寮忔棤闈炲氨鍙湁涓夌被錛氬嚱鏁拌皟鐢ㄣ佸瓧闈㈤噺鍜屽彉閲忋佹搷浣滅銆傚瓧闈㈤噺灝辨槸閭d簺鏁板瓧瀛楃涓蹭粈涔堢殑銆傚綋Tinymoe鐨勫嚱鏁扮殑鏌愪竴涓弬鏁版寚瀹氫負涓嶅畾涓暟鐨勬椂鍊欎綘榪樺緱鎻愪緵涓涓猼uple銆傚鎵橈紙鍦ㄨ繖閲屾槸鍑芥暟鎸囬拡鍜岄棴鍖呯殑緇熺О錛夊拰鏁扮粍铏界劧涔熸槸Tinymoe鐨勫師鐢熷姛鑳戒箣涓錛屼絾鏄浠栦滑鐨勬搷浣滈兘鏄氳繃鍑芥暟璋冪敤鏉ュ疄鐜扮殑錛屾病鏈夌壒孌婄殑璇硶銆?
綆鍗曞湴璁詫紝灝辨槸闄や簡涓嬮潰榪欎簺涓滆タ浠ュ浣犱笉浼氳鍒板埆鐨勭綾葷殑琛ㄨ揪寮忎簡錛?
1
"text"
sum from 1 to 100
sum of (1, 2, 3, 4, 5)
(1+2)*(3+4)
true
涓涓猅inymoe璇彞鐨勭綾誨氨鏇村皯浜嗭紝瑕佷箞鏄竴涓嚱鏁拌皟鐢紝瑕佷箞鏄痓lock錛岃涔堟槸榪炲湪涓璧風殑鍑犱釜block錛?
do something bad
repeat with x from 1 to 100
do something bad with x
end
try
do something bad
catch exception
do something worse
end
鏈変漢鍙兘浼氳錛岄偅repeat鍜宼ry-catch灝變笉鏄娉曞厓绱犲悧錛熻繖涓湡涓嶆槸錛屼粬浠槸鏍囧噯搴撳畾涔夊ソ鐨勫嚱鏁幫紝璺熶綘鑷繁澹版槑鐨勫嚱鏁版病鏈変換浣曠壒孌婄殑鍦版柟銆?
榪欓噷鍏跺疄榪樻湁涓涓湁鎰忔濈殑鍦版柟錛?repeat with x from 1 to 100"鐨剎鍏跺疄鏄驚鐜綋鐨勫弬鏁般俆inymoe鏄浣曠粰浣犺嚜瀹氫箟鐨刡lock寮媧炵殑鍛紵涓嶄粎濡傛錛孴inymoe鐨勫嚱鏁拌繕鍙互澹版槑"寮曠敤鍙傛暟"錛屼篃灝辨槸璇磋皟鐢ㄨ繖涓嚱鏁扮殑鏃跺欎綘鍙兘鎶婁竴涓彉閲忔斁榪涘幓錛屽嚱鏁伴噷闈㈠彲浠ヨ鍐欒繖涓彉閲忋傝繖浜涢兘鏄庝箞瀹炵幇鐨勫憿錛熷涓嬪幓灝辯煡閬撲簡錛屽晩鍝堝搱鍝堝搱銆?
Tinymoe鐨勫0鏄庝篃鍙湁涓ょ錛岀涓縐嶆槸鍑芥暟錛岀浜岀鏄鍙楓傚嚱鏁扮殑澹版槑鍙兘浼氱暐寰鏉備竴鐐癸紝涓嶈繃闄や簡鍑芥暟澶翠互澶栵紝鍏朵粬鐨勯兘鏄被浼奸厤緗竴鏍風殑涓滆タ錛屽嚑涔庨兘鏄敤鏉ュ畾涔?catch鍑芥暟鍦ㄤ嬌鐢ㄧ殑鏃跺欏繀欏繪槸榪炲湪try鍑芥暟鍚庨潰"鍟婏紝"break鍙兘鍦╮epeat閲岄潰鐢?鍟婏紝璇稿姝ょ被鐨勪俊鎭?
Tinymoe鐨勭鍙峰崄鍒嗙畝鍗曪紝璀璇翠綘瑕佸畾涔変竴騫村洓瀛g殑絎﹀彿錛屽彧闇瑕佽繖涔堝啓錛?
symbol spring
symbol summer
symbol autumn
symbol winter
symbol鏄竴涓?涓庝紬涓嶅悓鐨勫?錛屼篃灝辨槸璇翠綘鍦ㄤ袱涓猰odule涓嬮潰瀹氫箟鍚屽悕鐨剆ymbol浠栦滑涔熸槸涓嶄竴鏍風殑銆傛墍鏈塻ymbol涔嬮棿閮芥槸涓嶄竴鏍風殑錛屽彲浠ョ敤=鍜?lt;>鏉ュ垽鏂俿ymbol灝辨槸闈?涓嶄竴鏍?鏉ュ畾涔夊叾鑷韓鐨勩?
鑷充簬璇達紝閭d負浠涔堜笉鐢╡num鍛紵鍥犱負Tinymoe鏄姩鎬佺被鍨嬭璦錛宔num鐨勭被鍨嬫湰韜槸鏍規湰娌℃湁鐢ㄦ涔嬪湴鐨勶紝鎵浠ュ共鑴嗗氨璁捐鎴愪簡symbol銆?
絎簩鐐癸紝Tinymoe闄や簡continuation鍜宻elect-case浠ュ錛屾病鏈夊叾浠栧師鐢熺殑鎺у埗嫻佹敮鎸?/strong>銆?
榪欏熀鏈笂褰掑姛浜庡厛杈堝彂鏄巆ontinuation passing style transformation鐨勫姛鍔籌紝緇嗚妭鍦ㄤ互鍚庣殑緋誨垪閲岄潰浼氳銆傚績鎬ョ殑浜哄彲浠ュ厛鐪?https://github.com/vczh/tinymoe/blob/master/Development/Library/StandardLibrary.txt 銆傝繖涓枃浠舵殏鏃跺寘鍚簡Tinymoe鐨勬暣涓爣鍑嗗簱錛岄噷闈㈠畾涔変簡寰堝if-else/repeat/try-catch-finally絳夋帶鍒舵祦錛岀敋鑷寵繛coroutine閮藉彲浠ョ敤continuation銆乻elect-case鍜岄掑綊鏉ュ仛銆?
榪欎篃鏄?strong>灝忚妯$殑璇█鏍稿績+澶ц妯$殑鏍囧噯搴?/strong>鎵瑕佽〃杈劇殑鎰忔濄傚鏋滃彲浠ユ彁渚涗竴涓猣eature A錛岄氳繃浠栨潵瀹屾垚鍏朵粬蹇呰鐨刦eature B0, B1, B2…鐨勫悓鏃訛紝灝嗘潵璇翠笉瀹氳繕鏈変漢鍙互鍑轟簬鑷繁鐨勯渶姹傦紝寮鍙慏SL鐨勬椂鍊欏畾涔塮eature C錛岄偅涔堝彧鏈堿闇瑕佷繚鐣欎笅鏉ワ紝鎵鏈夌殑B鍜孋閮藉皢浣跨敤搴撶殑鏂規硶鏉ュ疄鐜般?
榪欎箞鍋氬茍涓嶆槸瀹屽叏鏈夌泭鏃犲鐨勶紝鍙槸鍧忓寰堝皬錛屽湪"Tinymoe鐨勫疄鐜伴毦鐐?閲岄潰浼氳緇嗚鏄庛?strong>
浜屻佹墿灞曞悗鐨勪笢瑗胯窡鍘熺敓鐨勪笢瑗垮瑙備竴鑷?
榪欐槸寰堥噸瑕佺殑銆傚鏋滄墿灞曞嚭鏉ョ殑涓滆タ璺熷師鐢熺殑涓滆タ闀垮緱涓嶄竴鏍鳳紝鐢ㄨ搗鏉ュ氨瑙夊緱寰堝偦閫箋侸ava鐨剆tring涓嶈兘鐢?=鏉ュ垽鏂唴瀹瑰氨鏄繖鏍風殑涓涓緥瀛愩傝櫧鐒朵粬浠湁鐨勬槸鐞嗙敱璇佹槑==鐨勫弽鐩磋璁捐鏄鐨勨斺斾絾鏄弽鐩磋灝辨槸鍙嶇洿瑙夛紝灝辨槸涓涓ぇ鍧戙?
榪欑渚嬪瓙榪樻湁寰堝錛岃濡傝go鐨勬暟緇勫拰琛ㄧ殑綾誨瀷鍟︼紝go鏈韓濡傛灉涓嶈鏁扮粍鍜岃〃鐨勮瘽錛屾槸鍐欎笉鍑洪暱寰楄窡鍘熺敓鏁扮粍鍜岃〃涓鏍風殑鏁扮粍鍜岃〃鐨勩傚叾瀹炶繖涔熶笉鏄竴涓ぇ闂錛岄棶棰樻槸go緇欐暟緇勫拰琛ㄧ殑鏍峰瓙鎼炵壒孌婂寲錛岃繕鏈夐偅涓弽鐩磋鐨剆lice鐨勮祴鍊奸棶棰橈紙浼氬悎娉曟孩鍑猴紒錛夛紝綾諱技鐨勪笢瑗垮疄鍦ㄦ槸澶浜嗐備竴涓笢瑗跨壒渚嬪お澶氾紝鍧戝氨鏃犳硶閬垮厤銆傛墍浠ュ叾瀹炲湪鎴戠湅鏉ワ紝go榪樹笉濡傜粰C璇█鍔犱笂erlang鐨刟ctor鍔熻兘浜嗕簨銆?
鍙嶈孋++鍦ㄨ繖浠朵簨鎯呬笂灝卞仛寰楀緢濂姐傚鏋滀綘瀵笴++涓嶇啛鎮夌殑璇濓紝鏈夋椂鍊欐牴鏈垎涓嶆竻浠涔堟槸緙栬瘧鍣ㄥ共鐨勶紝浠涔堟槸鏍囧噯搴撳共鐨勩傝濡傝static_cast鍜宒ynamic_cast闀垮緱鍍忎竴涓ā鏉垮嚱鏁幫紝鍥犳boost灝卞彲浠ョ敤綾諱技鐨勬墜娉曞姞鍏exical_cast鍜岄拡瀵箂hared_ptr鐨剆tatic_pointer_cast鍜宒ynamic_pointer_cast錛屾暣涓爣鍑嗗簱鍜岃璦鏈韓嫻戠劧涓浣撱傝繖鏍峰瓙鍋氱殑濂藉鏄紝褰撲綘鍦ㄥ煿鍏誨璇█鏈韓鐨勭洿瑙夌殑鏃跺欙紝浣犱篃鍦ㄥ煿鍏誨鏍囧噯搴撶殑鐩磋錛屽煿鍏葷洿瑙夎繖浠朵簨鎯呬綘涓嶇敤鍋氫袱嬈°備綘瀵逛竴涓笢瑗跨殑鐩磋瓚婂噯錛屽涔犳柊涓滆タ鐨勯熷害灝辮秺蹇傛墍浠++鐨勮璁″垰濂藉彲浠ヨ浣犲湪鐔繃絎竴涓樁孌電殑瀛︿範涔嬪悗錛屽悗闈㈤兘瑙夊緱鏃犳瘮鐨勮交鏉俱?
涓嶈繃鍏蜂綋鍒癟inymoe錛屽洜涓篢inymoe鏈韓鐨勮娉曞厓绱犲お灝戜簡錛屾墍浠ヨ繖涓仛娉曞湪Tinymoe韜笂浣撶幇寰椾笉鏄庢樉銆?
棣栧厛錛?strong>璇硶鍒嗘瀽闇瑕佸Tinymoe紼嬪簭澶勭悊涓夐亶銆俆inymoe瀵逛簬璇彞璁捐浣垮緱瀵逛竴涓猅inymoe紼嬪簭鍋氳娉曞垎鏋愪笉鏄偅涔堢洿鎺ワ紙铏界劧姣擟++浠涔堢殑榪樻槸瀹規槗澶氫簡錛夈備婦涓緥瀛愶細
module hello world
phrase sum from (lower bound) to (upper bound)
…
end
sentence print (message)
…
end
phrase main
print sum from 1 to 100
end
絎竴閬嶅垎鏋愭槸璇嶆硶鍒嗘瀽錛岃繖涓椂鍊欏緱鎶婃瘡涓涓猼oken鐨勮鍙瘋浣忋傜浜岄亶鍒嗘瀽鏄笉甯︽涔夌殑璇硶鍒嗘瀽錛岀洰鏍囨槸鎶婃墍鏈夌殑鍑芥暟澶存娊鍙栧嚭鏉ワ紝鐒跺悗緇勬垚涓涓叏灞絎﹀彿琛ㄣ傜涓夐亶鍒嗘瀽灝辨槸瀵瑰嚱鏁頒綋閲岄潰鐨勮鍙ュ仛甯︽涔夌殑璇硶鍒嗘瀽浜嗐傚洜涓篢inymoe鍏佽浣犲畾涔夊彉閲忥紝鎵浠ョ鍙瘋〃鑲畾鏄竴杈瑰垎鏋愪竴杈逛慨鏀圭殑銆備簬鏄浜?print sum from 1 to 100"榪欎竴鍙ワ紝濡傛灉浣犳病鏈夊彂鐜?phrase sum from (lower bound) to (upper bound)"鍜?sentence print (message)"錛岄偅鏍規湰鏃犱粠涓嬫墜銆?
榪樻湁鍙︿竴涓緥瀛愶細
module exception handling
…
phrase main
try
do something bad
catch
print "bad thing happened"
end
end
褰撹娉曞垎鏋愬仛鍒?try"鐨勬椂鍊欙紝鍥犱負鍙戠幇瀛樺湪try鍑芥暟鐨勫畾涔?/strong>錛屾墍浠inymoe鐭ラ亾鎺ヤ笅鏉ョ殑"do something bad"灞炰簬璋冪敤try榪欎釜鍧楀嚱鏁版墍闇鎻愪緵鐨勪唬鐮佸潡閲岄潰鐨勪唬鐮併傛帴涓嬫潵鏄?catch"錛孴inymoe鎬庝箞鐭ラ亾catch鏄帴鍦╰ry鍚庨潰錛岃屼笉鏄斁鍦╰ry閲岄潰鐨勫憿錛熻繖浠嶇劧鏄敱浜?strong>catch鍑芥暟鐨勫畾涔?/strong>鍛婅瘔鎴戜滑鐨勩傚叧浜庤繖鏂歸潰鐨勮娉曠煡璇嗗彲浠?a >鐐瑰嚮榪欓噷鏌ョ湅銆?
姝e洜涓哄姝わ紝鎴戜滑闇瑕侀鍏堢煡閬撳嚱鏁扮殑瀹氫箟錛岀劧鍚庢墠鑳藉垎鏋愬嚱鏁頒綋閲岄潰鐨勪唬鐮併傝櫧鐒惰繖鍦ㄤ竴瀹氱▼搴︿笂閫犳垚浜員inymoe鐨勮娉曞垎鏋愬鏉傚害鐨勬彁鍗囷紝浣嗘槸鍏跺鏉傚害鏈韓騫朵笉楂樸傛瘮C++綆鍗曞氨涓嶈浜嗭紝灝辯畻鏄疌銆丆#鍜孞ava錛岀敱浜庡叾璇硶鍏冪礌澶錛屽鑷?strong>涓嶉渶瑕佸嬈″垎鏋?/strong>鎵闄嶄綆鐨勫鏉傚害琚畬鍏ㄧ殑鎶墊秷錛岀粨鏋滆窡瀹炵幇Tinymoe鐨勮娉曞垎鏋愬櫒鐨勯毦搴︿笉鐩鎬笂涓嬨?
鍏舵錛?strong>CPS鍙樻崲鍚庣殑浠g爜闇瑕佺壒孌婂鐞嗭紝鍚﹀垯鐩存帴鎵ц瀹規槗瀵艱嚧call stack縐瘡鐨勬病鐢ㄧ殑涓滆タ榪囧銆傚洜涓篢inymoe鍙互鑷畾涔夋搷浣滅錛屾墍浠ユ搷浣滅璺烠++涓鏍峰湪緙栬瘧鐨勬椂鍊欒杞崲鎴愪簡鍑芥暟璋冪敤銆傛瘡涓涓嚱鏁拌皟鐢ㄩ兘鏄細琚獵PS鍙樻崲鐨勩傚敖綆℃瘡涓琛岀殑鍑芥暟璋冪敤嬈℃暟涓嶅錛屼絾鏄鏋滀綘鐨勭▼搴忔補寰幆錛?strong>寰幆鏄氳繃閫掑綊鏉ユ弿榪?/strong>錛堣屼笉鏄疄鐜幫紝鐢變簬CPS鍙樻崲鍚嶵inymoe鍋氫簡浼樺寲錛屾墍浠ヤ笉瀛樺湪瀹為檯涓婄殑閫掑綊錛夌殑錛屽鏋滅洿鎺ユ墽琛孋PS鍙樻崲鍚庣殑浠g爜錛岀畻涓涓?鍔犲埌1000閮戒細瀵艱嚧stack overflow銆傚彲瑙佸叾call stack閲岄潰鍫嗙Н鐨刢losure鏁伴噺涔嬪法澶с?
鎴戝湪鍋歍inymoe浠g爜鐢熸垚鐨勫疄楠岀殑鏃跺欙紝涓轟簡綆鍗曟垜鍦ㄥ崟鍏冩祴璇曢噷闈㈢洿鎺ヤ駭鐢熶簡瀵瑰簲鐨凜#浠g爜銆備竴寮濮嬫病鏈夊鐞咰PS鑰岀洿鎺ヨ皟鐢紝紼嬪簭涓嶄粎鎱紝鑰屼笖瀹規槗stack overflow銆備絾鏄垜浠煡閬擄紙鍏跺疄浣犱滑浠ュ悗鎵嶄細鐭ラ亾錛夛紝CPS鍙樻崲鍚庣殑浠g爜閲岄潰鍑犱箮鎵鏈夌殑call stack欏歸兘鏄氮璐圭殑錛屽洜姝ゆ垜鎶婃暣涓湪鐢熸垚C#浠g爜鐨勬椂鍊欎慨鏀規垚錛屽鏋滈渶瑕佽皟鐢╟ontinuation錛屽氨榪斿洖璋冪敤continuation鐨勮鍙ョ粍鎴愮殑lambda琛ㄨ揪寮?/strong>錛屽湪鏈澶栧眰鐢ㄤ竴涓驚鐜幓椹卞姩浠栫洿鍒拌繑鍥瀗ull涓烘銆傝繖鏍峰仛浜嗕箣鍚庯紝灝辯畻Tinymoe鐨勪唬鐮佹湁閫掑綊錛宑all stack閲岄潰涔熶笉浼氬洜涓洪掑綊鑰岀Н绱痗all stack item浜嗐備簬鏄敓鎴愮殑C#浠g爜鎵ц椋炲揩錛岃屼笖鏃犺浣犳庝箞閫掑綊涔熸案榪滀笉浼氶犳垚stack overflow浜嗐傝繖涓編濡欑殑鐗規у嚑涔庢墍鏈夎璦閮藉仛涓嶅埌錛屽晩鍝堝搱鍝堝搱鍝堛?
褰撶劧榪欎篃鏄湁浠d環鐨勶紝鍥犱負鏈川涓婃垜鍙槸鎶婁繚瀛樺湪stack涓婄殑context杞Щ鍒癶eap涓娿備笉榪囧浜忎簡.net 4.0鐨勫己澶х殑background GC錛岃繖鏍峰仛涓濇娌℃湁澶氫綑鐨勬ц兘涓婄殑鎹熻椼傚綋鐒惰繖涔熸剰鍛崇潃錛屼竴涓珮鎬ц兘鐨凾inymoe铏氭嫙鏈猴紝闇瑕佷竴涓墰閫肩殑鍨冨溇鏀墮泦鍣ㄤ綔涓洪潬灞便俢ontext浜х敓鐨刢losure鍦ㄥ嚱鏁頒綋鐪熺殑琚墽琛屽畬涔嬪悗灝變細琚緢蹇湴鏀墮泦錛屾墍浠PS鍔犱笂榪欑鍋氭硶騫朵笉浼氬GC浜х敓棰濆鐨勫帇鍔涳紝鎵鏈夌殑鍘嬪姏浠嶇劧鏉ユ簮浜庝綘鑷繁鎵鍒涘緩鐨勬暟鎹粨鏋勩?
絎笁錛?strong>Tinymoe闇瑕佸姩鎬佺被鍨嬭璦鐨勭被鍨嬫帹瀵?/strong>銆傚綋鐒朵綘涓嶈繖涔堝仛鑰屾妸Tinymoe鐨勭▼搴忓綋JavaScript閭f牱鐨勭▼搴忓鐞嗕篃娌℃湁闂銆備絾鏄垜浠煡閬擄紝姝f槸鍥犱負V8瀵笿avaScript鐨勪唬鐮佽繘琛屼簡綾誨瀷鎺ㄥ錛屾墠浜х敓浜嗛偅涔堜紭寮傜殑鎬ц兘銆傚洜姝よ繖綆楁槸涓涓紭鍖栦笂鐨勬帾鏂姐?
鏈鍚庯紝Tinymoe榪橀渶瑕佽法榪囩▼鍒嗘瀽鍜屽紼嬪簭鐨勬帶鍒舵祦鐨勫寲綆錛堣濡俢ontinuation杞姸鎬佹満絳夛級銆傜洰鍓嶅叿浣撴庝箞鍋氭垜榪樺湪瀛︿範褰撲腑銆備笉榪囨垜浠兂錛屾棦鐒秗epeat鍑芥暟鏄氳繃閫掑綊鏉ユ弿榪扮殑錛岄偅鎴戜滑鑳戒笉鑳介氳繃瀵規墍鏈変唬鐮佽繘琛宨nter-procedural analyzing錛屼粠鑰屽彂鐜拌濡?
repeat 3 times
do something good
end
灝辨槸涓涓驚鐜紝浠庤岀敓鎴愮敤鐪熸鐨勫驚鐜寚浠わ紙璀璇磄oto錛夊憿錛熻繖涓棶棰樻槸涓緢鏈夋剰鎬濈殑闂錛屾垜瑙夊緱鎴戝鏋滃彲浠ラ氳繃瀛︿範闈欐佸垎鏋愪粠鑰岃В鍐沖畠錛屼笉榪涙垜鐨勮兘鍔涗細寰楀埌鎻愬崌錛屾垜瀵逛綘浠殑縐戞櫘涔熶細鍋氬緱鏇村ソ銆?
铏界劧榪樹笉鍒頒簲鍗冨瓧錛屼絾鏄昏寰楀啓浜嗗ソ澶氱殑鏍峰瓙銆傛諱箣鎴戝笇鏈涜鑰呭湪鐪嬪畬銆婇浂銆嬪拰銆婁竴銆嬩箣鍚庯紝瀵規帴涓嬫潵闇瑕佸涔犵殑涓滆タ鏈変竴涓緝涓烘竻鏅扮殑璁よ瘑銆?/p>
鍟嗕笟緙栬瘧鍣ㄥ鍔熻兘鍜岃川閲忕殑瑕佹眰閮芥槸寰堥珮鐨勶紝閲岄潰澶ч噺鐨勪笢瑗垮叾瀹為兘璺熺紪璇戝師鐞嗘病鍏崇郴銆備竴涓吀鍨嬬殑緙栬瘧鍘熺悊鐨勫師鍨嬫湁浠涔堢壒寰佸憿錛?
絳夌瓑銆俆inymoe灝辨弧瓚充簡涓婇潰鐨?縐嶆儏鍐碉紝鍥犱負鎴戠殑鐩爣涔熷彧鏄兂鍋氫竴涓師鍨嬶紝鍚戝ぇ瀹朵粙緇嶇紪璇戝師鐞嗙殑鍩虹鐭ヨ瘑銆傚綋鐒訛紝鎴戝璇硶鐨勮璁¤繕鏄敖閲忛潬榪戝伐涓氳川閲忕殑錛屽彧鏄疄鐜版病鏈夎姳澶蹇冩濄?
涓轟粈涔堟垜瑕佺敤Tinymoe鏉ヤ綔涓哄疄渚嬪憿錛熷洜涓篢inymoe鏄皯鏈夌殑涓縐嶇敤璧鋒潵綆鍗曪紝鑰屼笖搴撳彲浠ユ湁澶氬鏉傚啓澶氬鏉傜殑璇█錛屽氨璺烠++涓鏍楓侰++11棰濇爣鍑嗗簱鍦ㄤ竴璧風敤綆鐩存槸鎰夊揩鍟婏紝Tinymoe鐨勪唬鐮佷篃鏄繖涔堝啓鐨勩備絾鏄繖騫朵笉濡ㄧ浣犲彲浠ュ湪鍐機++搴撶殑鏃跺欏彂鎸ヤ綘鐨勬兂璞″姏銆俆inymoe涔熸槸涓鏍風殑銆備負浠涔堝憿錛屾垜鏉ヤ婦涓緥瀛愩?
Tinymoe鐨刪ello world紼嬪簭鏄緢綆鍗曠殑錛?
module hello world
using standard library
sentence print (message)
redirect to "printf"
end
phrase main
print "Hello, world!"
end
module鎸囩殑鏄ā鍧楃殑鍚嶅瓧錛屾櫘閫氱殑紼嬪簭涔熸槸涓涓ā鍧椼倁sing鎸囩殑鏄綘瑕佸紩鐢ㄧ殑妯″潡鈥斺攕tandard library灝辨槸Tinymoe鐨凷TL浜嗏斺斿綋鐒惰繖涓▼搴忓茍娌℃湁鐢ㄥ埌浠諱綍standard library鐨勪笢瑗褲傝鍒拌繖閲屽ぇ瀹跺彲鑳芥剰璇嗗埌浜嗭紝Tinymoe鐨勫悕瀛楀彲浠ユ槸涓嶅畾闀跨殑token緇勬垚鐨勶紒娌¢敊錛屽悗闈㈠ぇ瀹朵細鎱㈡參鎰忚瘑鍒拌繖縐嶅仛娉曟湁澶氫箞鐨勫己澶с?
鍚庨潰鏄痯rint鍑芥暟鍜宮ain鍑芥暟銆俆inymoe鏄弗鏍煎尯鍒嗚鍙ュ拰琛ㄨ揪寮忕殑錛屽彧鏈塻entence鍜宐lock寮澶寸殑鍑芥暟鎵嶈兘浣滀負璇彞錛岃屼笖鍚屾椂鍙湁phrase寮澶寸殑鍑芥暟鎵嶈兘浣滀負琛ㄨ揪寮忋傛墍浠ヤ笅闈㈢殑紼嬪簭鏄笉鍚堟硶鐨勶細
phrase main
(print "Hello, world!") + 1
end
鍘熷洜灝辨槸錛宲rint鏄痵entence錛屼笉鑳戒綔涓鴻〃杈懼紡浣跨敤錛屽洜姝や粬涓嶈兘琚?1銆?
Tinymoe鐨勫嚱鏁板弬鏁伴兘琚啓鍦ㄦ嫭鍙烽噷闈紝涓涓弬鏁伴渶瑕佷竴涓嫭鍙楓傚埌浜嗚繖閲屽ぇ瀹跺彲鑳戒細瑙夊緱寰堝鎬紝涓嶈繃寰堝揩灝變細鏈夎В絳斾簡銆備負浠涔堣榪欎箞鍋氾紝涓嬩竴涓緥瀛愬氨浼氬憡璇夋垜浠?
print鍑芥暟鐢ㄧ殑redirect to鏄疶inymoe澹版槑FFI錛團oreign Function Interface錛夌殑鏂規硶錛屼篃灝辨槸璇達紝褰撲綘榪愯浜唒rint錛屼粬灝變細鍘籬ost閲岄潰鎵句竴涓彨鍋歱rintf鐨勫嚱鏁版潵榪愯銆備笉榪囧ぇ瀹朵笉瑕佽浼氾紝Tinymoe騫舵病鏈夎璁捐鎴愬彲浠ョ洿鎺ヨ皟鐢–鍑芥暟錛屾墍浠ヨ繖涓悕瀛楀叾瀹炴槸闅忎究鍐欑殑錛屽彧瑕乭ost鎻愪緵浜嗕竴涓彨鍋歱rintf鐨勫嚱鏁板畬鎴恜rintf璇ュ仛鐨勪簨鎯呭氨琛屼簡銆俶ain鍑芥暟灝變笉鐢ㄨВ閲婁簡錛屽緢鐩寸櫧銆?
榪欎釜渚嬪瓙鍙互鍦═inymoe鐨勪富欏碉紙https://github.com/vczh/tinymoe/錛変笂闈㈢湅鍒幫細
module hello world
using standard library
sentence print (message)
redirect to "printf"
end
phrase sum from (start) to (end)
set the result to 0
repeat with the current number from start to end
add the current number to the result
end
end
phrase main
print "1+ ... +100 = " & sum from 1 to 100
end
涓轟粈涔堝悕瀛楀彲浠ユ槸澶氫釜token錛熶負浠涔堟瘡涓涓弬鏁伴兘瑕佷竴涓嫭鍙鳳紵鐪嬪姞綺楃殑閮ㄥ垎灝辯煡閬撲簡錛佹鏄洜涓篢inymoe鎯寵姣忎竴琛屼唬鐮侀兘鍙互琚康鍑烘潵錛屾墍浠ユ墠榪欎箞璁捐鐨勩傚綋鐒訛紝澶у鑲畾閮界煡閬撴庝箞綆梥tart + (start+1) + … + (end-1) + end浜嗭紝鎵浠ュ簲璇ュ緢瀹規槗灝卞彲浠ョ湅鎳傝繖涓嚱鏁伴噷闈㈢殑浠g爜鍏蜂綋鏄粈涔堟剰鎬濄?
鍦ㄨ繖閲屽彲浠ョ◢寰鍋氫竴涓嬭В閲娿倀he result鏄竴涓瀹氫箟鐨勫彉閲忥紝浠h〃鍑芥暟鐨勮繑鍥炲箋傚彧瑕佷綘寰the result閲岄潰鍐欎笢瑗匡紝鍙鍑芥暟涓緇撴潫錛屼粬灝卞彉鎴愬嚱鏁扮殑榪斿洖鍊間簡銆俆inymoe鐨勬嫭鍙鋒病鏈変粈涔堢壒孌婃剰鎬濓紝灝辨槸鏀瑰彉浼樺厛綰э紝鎵浠ラ偅涓鍙ュ驚鐜垯鍙互閫氳繃娣誨姞鎷彿鐨勬柟娉曞啓鎴愯繖鏍鳳細
repeat with (the current number) from (start) to (end)
澶у鍙兘浼氭兂錛宺epeat with鏄笉鏄叧閿瓧錛熷綋鐒朵笉鏄紒repeat with鏄痵tandard library閲岄潰瀹氫箟鐨勪竴涓猙lock鍑芥暟銆傚ぇ瀹剁煡閬揵lock鍑芥暟鐨勬剰鎬濅簡鍚э紝灝辨槸榪欎釜鍑芥暟鍙互甯︿竴涓猙lock銆俠lock鏈変竴浜涚壒鎬у彲浠ヨ浣犲啓鍑虹被浼紅ry-catch閭f牱鐨勫嚑涓猙lock榪炲湪涓璧風殑澶lock錛岀壒鍒傚悎鍐欏簱銆?
鍒頒簡榪欓噷澶у蹇冧腑鍙兘浼氭湁鐤戦棶錛屽驚鐜負浠涔堝彲浠ュ仛鎴愬簱鍛紵榪樻湁鏇村姞浠や漢闇囨儕鐨勬槸錛宐reak鍜宑ontinue涔熶笉鏄叧閿瓧錛屾槸sentence錛佸洜涓簉epeat with鏄湁浠g爜鐨勶細
category
start REPEAT
closable
block (sentence deal with (item)) repeat with (argument item) from (lower bound) to (upper bound)
set the current number to lower bound
repeat while the current number <= upper bound
deal with the current number
add 1 to the current number
end
end
鍓嶉潰鐨刢ategory鏄敤鏉ュ畾涔変竴浜沚lock鐨勯『搴忓拰鍖呭洿緇撴瀯浠涔堢殑銆俽epeat with鏄睘浜嶳EPEAT鐨勶紝鑰宐reak鍜宑ontinue澹版槑浜嗚嚜宸卞彧鑳界洿鎺ユ垨鑰呴棿鎺ユ柟鍦≧EPEAT閲岄潰錛屽洜姝ゅ鏋滀綘鍦ㄤ竴涓病鏈夊驚鐜殑鍦版柟璋冪敤break鎴栬卌ontinue錛岀紪璇戝櫒灝變細鎶ラ敊浜嗐傝繖鏄竴涓姳杈瑰姛鑳斤紝鐢ㄦ潵闃叉鎵嬭鐨勩?
澶у鍙兘浼氭敞鎰忓埌涓涓柊涓滆タ錛?argument item)銆俛rgument鐨勬剰鎬濇寚鐨勬槸錛屽悗闈㈢殑item鏄痓lock閲岄潰鐨勪唬鐮佺殑涓涓弬鏁幫紝瀵逛簬repeat with鍑芥暟鏈韓浠栦笉鏄竴涓弬鏁般傝繖灝遍氳繃涓涓緢鑷劧鐨勬柟娉曠粰block娣誨姞鍙傛暟浜嗐傚鏋滀綘鐢╮uby鐨勮瘽灝卞緱鍐欐垚榪欎釜鎮插偓鐨勬牱瀛愶細
repeat_with(1, 10) do |item|
xxxx
end
鑰岀敤C++鍐欒搗鏉ュ氨鏇存偛鍌簡錛?
repeat_with(1, 10, [](int item)
{
xxxx
});
block鐨勭涓涓弬鏁皊entence deal with (item)灝辨槸涓涓紩鐢ㄤ簡block涓棿鐨勪唬鐮佺殑濮旀墭銆傛墍浠ヤ綘浼氱湅鍒頒唬鐮侀噷闈細璋冪敤瀹冦?
濂戒簡錛岄偅repeat while鎬繪槸鍏抽敭瀛椾簡鍚р斺斾笉鏄紒鍚庨潰澶у榪樹細鐭ラ亾錛屽氨榪?
if xxx
yyy
else if zzz
www
else if aaa
bbb
else
ccc
end
涔熷彧鏄綘璋冪敤浜唅f銆乪lse if鍜宔lse鐨勪竴緋誨垪鍑芥暟鐒跺悗璁╀粬浠覆璧鋒潵鑰屽凡銆?
閭inymoe鍒板簳鎻愪緵浜嗕粈涔堝熀紜璁炬柦鍛紵鍏跺疄鍙湁select-case鍜岄掑綊銆傜敤榪欎袱涓笢瑗匡紝鍔犱笂鍐呯疆鐨勬暟緇勶紝灝卞浘鐏靛畬澶囦簡銆傚浘鐏靛畬澶囧氨鏄繖涔堝鏄撳晩銆?
璁插埌榪欓噷錛屾垜涓嶅緱涓嶈錛孴inymoe涔熷彲浠ュ啓綾伙紝涔熷彲浠ョ戶鎵匡紝涓嶈繃浠栬窡浼犵粺鐨勮璦涓嶄竴鏍風殑錛岀被鏄病鏈夋瀯閫犲嚱鏁般佹瀽鏋勫嚱鏁板拰鍏朵粬鎴愬憳鍑芥暟鐨勩俆inymoe鎵鏈夌殑鍑芥暟閮芥槸鍏ㄥ眬鍑芥暟錛屼絾鏄綘鍙互浣跨敤澶氶噸鍒嗘淳鏉?鎸戦?綾誨瀷銆傝繖灝遍渶瑕佺涓変釜渚嬪瓙浜嗭紙涔熷彲浠ュ湪涓婚〉涓婃壘鍒幫級錛?
module geometry
using standard library
phrase square root of (number)
redirect to "Sqrt"
end
sentence print (message)
redirect to "Print"
end
type rectangle
width
height
end
type triangle
a
b
c
end
type circle
radius
end
phrase area of (shape)
raise "This is not a shape."
end
phrase area of (shape : rectangle)
set the result to field width of shape * field height of shape
end
phrase area of (shape : triangle)
set a to field a of shape
set b to field b of shape
set c to field c of shape
set p to (a + b + c) / 2
set the result to square root of (p * (p - a) * (p - b) * (p - c))
end
phrase area of (shape : circle)
set r to field radius of shape
set the result to r * r * 3.14
end
phrase (a) and (b) are the same shape
set the result to false
end
phrase (a : rectangle) and (b : rectangle) are the same shape
set the result to true
end
phrase (a : triangle) and (b : triangle) are the same shape
set the result to true
end
phrase (a : circle) and (b : circle) are the same shape
set the result to true
end
phrase main
set shape one to new triangle of (2, 3, 4)
set shape two to new rectangle of (1, 2)
if shape one and shape two are the same shape
print "This world is mad!"
else
print "Triangle and rectangle are not the same shape!"
end
end
榪欎釜渚嬪瓙紼嶅井闀夸簡涓鐐圭偣錛屼笉榪囧ぇ瀹跺彲浠ュ緢娓呮鐨勭湅鍒版垜鏄浣曞畾涔変竴涓被鍨嬨佸垱寤轟粬浠拰璁塊棶鎴愬憳鍙橀噺鐨勩俛rea of鍑芥暟鍙互璁$畻涓涓鉤闈㈠嚑浣曞浘褰㈢殑闈㈢Н錛岃屼笖浼氭牴鎹綘浼犵粰浠栫殑涓嶅悓鐨勫嚑浣曞浘褰㈣屼嬌鐢ㄤ笉鍚岀殑鍏紡銆傚綋鎵鏈夌殑綾誨瀷鍒ゆ柇閮藉け璐ョ殑鏃跺欙紝灝變細鎺夎繘閭d釜娌℃湁浠諱綍綾誨瀷澹版槑鐨勫嚱鏁幫紝浠庤屽紩鍙戜竴鍦恒傚棷錛屽叾瀹瀟ry/catch/finally/raise閮芥槸鍑芥暟鏉ョ殑鈥斺擳inymoe瀵規帶鍒舵祦鐨勬帶鍒跺氨鏄姝ゅ己澶э紝鍟婂搱鍝堝搱鍝堛傚氨榪瀝eturn閮藉彲浠ヨ嚜宸卞仛錛屾墍浠inymoe涔熶笉鎻愪緵棰勫畾涔夌殑return銆?
閭hrase (a) and (b) are the same shape鎬庝箞鍔炲憿錛熸病闂錛孴inymoe鍙互鍚屾椂鎸囧畾澶氫釜鍙傛暟鐨勭被鍨嬨傝屼笖Tinymoe鐨勫疄鐜板叿鏈夎窡C++铏氬嚱鏁頒竴鏍風殑鎬ц川鈥斺旀棤璁轟綘鏈夊灝戜釜鍙傛暟鏍囪浜嗙被鍨嬶紝鎴戦兘鍙互O(n)璺寵漿鍒頒竴涓綘闇瑕佺殑鍑芥暟銆傝繖閲岀殑n鎸囩殑鏄爣璁頒簡綾誨瀷鐨勫弬鏁扮殑涓暟錛岃屼笉鏄嚱鏁板疄渚嬬殑涓暟錛屾墍浠ヨ窡C++鐨勬儏鍐墊槸涓鏍風殑鈥斺斿洜涓簍his鍙兘鏈変竴涓紝鎵浠ュ氨鏄疧(1)銆傝嚦浜嶵inymoe鍒板簳鏄庝箞瀹炵幇鐨勶紝鍙渶瑕佺湅銆婂浣曡璁′竴闂ㄨ璦銆嬬浜旂瘒錛?a href="http://www.shnenglu.com/vczh/archive/2013/05/25/200580.html">http://www.shnenglu.com/vczh/archive/2013/05/25/200580.html錛夊氨鏈夌瓟妗堜簡銆?
涓轟粈涔圱inymoe鐨勬帶鍒舵祦閮藉彲浠ヨ嚜宸卞仛鍛紵鍥犱負Tinymoe鐨勫嚱鏁伴兘鏄啓鎴愪簡CPS榪欑椋庢牸鐨勩傚叾瀹濩PS澶у閮藉緢鐔熸倝錛屽綋浣犵敤jquery鍋氬姩鐢伙紝鐢╪ode.js鍋欼O鐨勬椂鍊欙紝閭d簺宓屽鐨勪竴涓竴涓殑lambda琛ㄨ揪寮忥紝灝辨湁鐐笴PS鐨勫懗閬撱備笉榪囧湪榪欓噷鎴戜滑騫舵病鏈夌湅鍒板祵濂楃殑lambda錛岃繖鏄洜涓篢inymoe鎻愪緵鐨勮娉曪紝璁㏕inymoe鐨勭紪璇戝櫒鍙互鎶婂悓涓涓眰嬈$殑浠g爜錛岃漿鎴愬祵濂楃殑lambda閭f牱鐨勪唬鐮併傝繖涓繃紼嬪氨鍙獵PS鍙樻崲銆俆inymoe铏界劧鐢ㄤ簡寰堝鍑芥暟寮忕紪紼嬬殑鎵嬫錛屼絾鏄粬騫朵笉鏄竴闂ㄥ嚱鏁版槸璇█錛屽彧鏄竴闂ㄦ櫘閫氱殑榪囩▼寮忚璦銆備絾鏄繖璺烠璇█涓嶄竴鏍鳳紝鍥犱負瀹冭繛C#鐨剏ield return閮藉彲浠ュ啓鎴愬嚱鏁幫紒榪欎釜渚嬪瓙灝辨洿闀夸簡錛屽ぇ瀹跺彲浠ュ埌Tinymoe鐨勪富欏典笂鐪嬨傛垜榪欓噷鍙創涓灝忔浠g爜錛?
module enumerable
using standard library
symbol yielding return
symbol yielding break
type enumerable collection
body
end
type collection enumerator
current yielding result
body
continuation
end
鐣ワ紙榪欓噷瀹炵幇浜嗚窡enumerable鐩稿叧鐨勫嚱鏁幫紝鍖呮嫭yield return錛?
block (sentence deal with (item)) repeat with (argument item) in (items : enumerable collection)
set enumerator to new enumerator from items
repeat
move enumerator to the next
deal with current value of enumerator
end
end
sentence print (message)
redirect to "Print"
end
phrase main
create enumerable to numbers
repeat with i from 1 to 10
print "Enumerating " & i
yield return i
end
end
repeat with number in numbers
if number >= 5
break
end
print "Printing " & number
end
end
浠涔堝彨妯℃嫙C#鐨剏ield return鍛紵灝辨槸榪炴儼鎬ц綆椾篃涓璧鋒ā鎷燂紒鍦╩ain鍑芥暟鐨勭涓閮ㄥ垎錛屾垜鍒涘緩浜嗕竴涓猠numerable錛坕terator錛夛紝鍖呭惈1鍒?0鍗佷釜鏁板瓧錛岃屼笖姣忎駭鐢熶竴涓暟瀛楄繕浼氭墦鍗板嚭涓鍙ヨ瘽銆備絾鏄帴涓嬫潵鎴戝湪寰幆閲岄潰鍙彇鍓?涓紝鎵撳嵃鍓?涓紝鍥犳鎵ц緇撴灉灝辨槸
褰擄紒
CPS椋庢牸鐨勫嚱鏁扮殑濞佸姏鍦ㄤ簬錛屾瘡涓涓嚱鏁伴兘鍙互鎺у埗浠栧浣曟墽琛屽嚱鏁扮粨鏉熶箣鍚庡啓鍦ㄥ悗闈㈢殑浠g爜銆備篃灝辨槸璇達紝浣犲彲浠ユ牴鎹綘鐨勯渶瑕侊紝騫茶剢閫夋嫨淇濇姢鐜板満錛岀劧鍚庝互鍚庡啀鍥炲銆傛槸涓嶆槸鍚搗鏉ュ緢鍍弆ua鐨刢oroutine鍛紵鍦═inymoe錛宑oroutine涔熷彲浠ヨ嚜宸卞仛錛?
铏界劧鍑芥暟鏈鍚庤杞崲鎴愪簡CPS椋庢牸鐨刟st錛岃屼笖嫻嬭瘯鐢ㄧ殑鐢熸垚C#浠g爜鐨勭‘涔熸槸鍘熷皝涓嶅姩鐨勮緭鍑轟簡鍑烘潵錛屾墍浠ヨ繍琛岃繖涓▼搴忚楄垂浜嗗ぇ閲忕殑鍑芥暟璋冪敤銆備絾榪欏茍涓嶆剰鍛崇潃Tinymoe鐨勮櫄鎷熸満涔熻榪欎箞鍋氥傚ぇ瀹惰璁頒綇錛屼竴涓璦涔熷ソ錛岀被搴撲篃濂斤紝緇欎綘鐨勬帴鍙g殑姒傚康錛岃窡瀹炵幇鐨勬蹇碉紝鏈夊彲鑳藉畬鍏ㄤ笉鍚屻倅ield return鍐欏嚭鏉ョ殑紜鑺辮垂鐐瑰績鎬濓紝鎵浠ャ婂簭璦銆嬫垜涔熶笉璁茶繖涔堝浜嗭紝鍚庣畫鐨勬枃绔犱細璇︾粏浠嬬粛榪欐柟闈㈢殑鐭ヨ瘑錛屽綋鐒朵簡錛岃繕浼氬憡璇変綘鎬庝箞瀹炵幇鐨勩?
榪欓噷鎴戞寫閫変簡鍥涗釜渚嬪瓙鏉ュ睍紺篢inymoe鏈閲嶈鐨勪竴浜涙蹇點備竴闂ㄨ璦錛岃搴旂敤鐢ㄨ搗鏉ョ畝鍗曪紝搴撳啓璧鋒潵鍙互鍙戞尌鎯寵薄鍔涳紝鎵嶆槸鏈夊墠閫旂殑銆倅ield return渚嬪瓙閲岄潰鐨刴ain鍑芥暟涓鏍鳳紝鐢ㄧ殑鏃跺欏娓呯埥錛屾竻鐖藉埌璁╀綘瀹屽叏蹇樿yield return瀹炵幇鐨勬椂鍊欓噷闈㈢殑鍚勭楹葷儲鐨勭粏鑺傘?
鎵浠ヤ負浠涔堟垜瑕佹寫閫塗inymoe浣滀負瀹炰緥鏉ョ鏅紪璇戝師鐞嗗憿錛熸湁涓や釜鍘熷洜銆傜涓涓師鍥犳槸錛屾兂瑕佸疄鐜癟inymoe錛岄渶瑕佸ぇ閲忕殑鐭ヨ瘑銆傛墍浠ユ棦鐒惰繖涓郴鍒楁兂璁╁ぇ瀹惰兘澶熺湅瀹屽疄鐜頒竴涓猅inymoe鐨勪綆璐ㄩ噺鍘熷瀷錛屽綋鐒朵細璁插緢澶氱煡璇嗙殑銆傜浜屼釜鍘熷洜鏄紝鎴戞兂閫氳繃榪欎釜渚嬪瓙鍚戝ぇ瀹跺皢涓涓亾鐞嗭紝灝辨槸搴撳拰搴旂敤 銆佺紪璇戝櫒鍜岃娉曘佸疄鐜板拰鎺ュ彛錛屽畬鍏ㄥ彲浠ュ仛鍒伴殧紱誨鏉傦紝鍙暀緇欐渶緇堢敤鎴風畝鍗曠殑閮ㄥ垎銆?span style="font-size:14pt">浣犵湅鍒扮殑澶嶆潅鐨勬帴鍙o紝騫朵笉鎰忓懗鐫浠栫殑瀹炵幇鏄噧鑲跨殑銆備綘鐪嬪埌鐨勭畝鍗曠殑鎺ュ彛錛屼篃涓嶆剰鍛崇潃浠栫殑瀹炵幇灝卞緢綆媧?/strong>銆?
Tinymoe鐩墠宸茬粡鍙互杈撳嚭C#浠g爜鏉ユ墽琛屼簡銆傚悗闈㈡垜榪樹細緇橳inymoe鍔犱笂闈欐佸垎鏋愬拰綾誨瀷鎺ㄥ銆傚浜庤繖綾昏璦鍋氶潤鎬佸垎鏋愬拰綾誨瀷鎺ㄥ鍙堝緢澶氶夯鐑︼紝鎴戠幇鍦ㄨ繕娌℃湁瀹屽叏鎼炴槑鐧姐傝濡傝榪欑鍙互鑷繁鎺у埗continuation鐨勫嚱鏁拌鎬庝箞緙栬瘧鎴愮姸鎬佹満鎵嶈兘閬垮厤鎺夊ぇ閲忕殑鍑芥暟璋冪敤錛屽氨涓嶆槸涓涓鏄撶殑闂銆傛墍浠ュ湪緋誨垪涓杈瑰仛鐨勬椂鍊欙紝鎴戣繕浼氫竴杈圭爺絀惰繖涓簨鎯呫傚鏋滃埌鏃跺欑郴鍒楁妸緙栬瘧閮ㄥ垎鍐欏畬鐨勫悓鏃訛紝榪欎簺闂鎴戜篃鎼炴槑鐧界殑璇濓紝閭f垜灝變細璁╄繖涓郴鍒楁墿灞曞埌鍖呭惈闈欐佸垎鏋愬拰綾誨瀷鎺ㄥ錛岀戶緇線涓嬭銆?/p>