ããã¯RFC2046ïŒrust-lang / rfcsïŒ2046ïŒã®è¿œè·¡ã®åé¡ã§ãã
æé ïŒ
æªè§£æ±ºã®è³ªåïŒ
break
代ããã«return
ãããŒã¯ãŒããšããŠäœ¿çšããŸããïŒ https://github.com/rust-lang/rfcs/pull/2046#issuecomment -357847755break
匷ãæ¯æããŠããŸã; ããã解決ãããšåŒã³ãŸãã https://github.com/rust-lang/rust/issues/48594#issuecomment -381390664ãreturnãã䜿çšãããšãã©ãã«ä»ãããã?
ïŒtryop質åããŒã¯æŒç®åthingyïŒã«èå³æ·±ã圱é¿ããããŸãã
breakã®ä»£ããã«returnãããŒã¯ãŒããšããŠäœ¿çšããŸããïŒ
@ mark-imãš@joshtriplettã¯ãã§ã«è¿åã«å察ããŠããããããã§ãæããã«æªè§£æ±ºã®è³ªåã§ããããšã
breakïŒããã³continueïŒã¯ãã«ãŒãã§ã®ã¿äœ¿çšã§ããŸãã
ããªããäœããå£ãããšãã§ããã°ãããªãã¯ãããç¶ããããšãã§ããŸãã ïŒãããã¯ã§ç¶è¡ããããã«éžæããæ確ãªæ§æã¯ãªããšæããŸããïŒ
CãC ++ãJavaãCïŒãJavaScriptãããã³ããããããå€ãã®èšèªã§ã¯ããã©ãŒã«ã¹ã«ãŒãé²ãããã«ãéåžžãswitchã¹ããŒãã¡ã³ããbreak
ãŠããŸãã Rustã¯|ã§ãããã¯ããã«ããŸã解決ããŸãããã¿ãŒã³ã§ã¯ãããŸããããããã®èšèªããæ¥ã人ã
ã¯ãå®éã«ã¯break
ãforã«ãŒãå°çšã®ãã®ãšã¯èŠãªããŸããã ç¹ã«ãJavaãšJavaScriptãªã©ãçµç±ããŠæ©èœãå
Žbreak
è¯ããªããšããŠreturn
ã
ãã ãããèŠããŠããã¹ãã«ãŒã«ãã®è°è«ã¯ãä»ã®æ¹åã«ãããŸãæ©èœããŸãã ç§ãèšããããšãããreturnãé¢æ°ã«ã®ã¿é©çšãããä»ã«ã¯äœãé©çšãããªãã®ã¯ãèšåãããèšèªãšRustã®å ±éæ§ã§ãã ãããã£ãŠããªã¿ãŒã³ã衚瀺ãããå Žåã¯ãé¢æ°ãæ®ã£ãŠããããšãããããŸãã
ãããã¯ã«ã©ãã«ãä»ããŠããæ¢åã®ã©ãã«ã®ãªããã¬ãŒã¯ã§ãšã©ãŒã¯çºçããŸãã
ãŸããã©ãã«ä»ãã®ãã¬ãŒã¯æ©èœã¯ç¢ºãã«1000è¡ããã10å䜿çšããããã®ã§ã¯ãªãããããããçºçããããšã¯éåžžã«ãŸãã ãšæããŸãã çµå±ã®ãšãããããã¯ãããã¯ã®å¢çãè¶ããã©ãã«ã®ãªããã¬ãŒã¯ã«ã®ã¿é©çšããããããã¯å ã®ã©ãã«ã®ãªããã¬ãŒã¯ã«ã¯é©çšãããŸããã 第äºã«ãRustã®ãŠãŒã¶ãŒã¯ãã³ã³ãã€ã©ã«ããèŠæ /ãšã©ãŒã¡ãã»ãŒãžã«æ £ããŠããã®ã§ãåãã§ä¿®æ£ããŸãã 3çªç®ïŒãããç§ãæãæ匷ã®ãã€ã³ãã§ãïŒããããã¯ã«ã©ãã«ãä»ãã代ããã«ã«ãŒãã«ã©ããããå Žåãã©ãã«ã®ãªããã¬ãŒã¯ã«æ³šæããå¿ èŠãããããã¬ãŒã¯ã¹ããŒãã¡ã³ãã䟿å©ã«ãªã¹ããããšã©ãŒã¡ãã»ãŒãžããªãå Žåã¯ã次ã®ããã«ãªããŸããèªåã§ããããæ¢ãããã«:)ã
ç¹ã«ãJavaãšJavaScriptã¯ããã¬ãŒã¯ãä»ããŠæ©èœãå ¬éããæ»ããŸããã
ãããç§ã«ãšã£ãŠã®ãã©ãŒãã€ã³ãã§ãã ãããã¯ããã®è±åŽã¯å€ãã®èšèªã§ã®ããšã§ãã ãããã¯ããæ»ã...ããã»ã©å€ãã¯ãããŸããã
å人çã«ãIã·ã§ã¢@joshtriplettã®äœ¿çšäžã®ãã¥ãŒbreak
ã®ä»£ããã«return
ããªãã質åãä¿¡ãããªãã°è°è«ã¯... RFCã«è§£æ±ºãããŠããªãã£ãããã«ãããã¯ç§ã«ã¯æããŸããlangããŒã ã§è§£æ±ºãããããã¡ã¢ã§ããã¯ã¹ã«ãã§ãã¯ããŒã¯ãä»ããŸã=ïŒ
ç§ã¯ããã«åãçµãã§ãããšèšã£ãŠããã ãã§ãã ã¡ã³ã¿ãŒã®æ瀺ã¯å¿ èŠãããŸããã åªåãè€è£œããªãããã ãã«ã ããã«PRãæåŸ ããŠãã ããã
ç§ã¯ãŸã break
ãããreturn
ã«è³æã§ãããããã§ã¯åæããªãããšã«åæã§ããŸãã 質åã¯è§£æ±ºããŸããã
çŸåšïŒ rustc 1.28.0-nightly (a1d4a9503 2018-05-20)
ïŒrustcã¯ãã©ãã«ä»ããããã¯ã§unsafe
ãèš±å¯ããŠããŸããã ããã¯æåŸ
ãããŠããŸããïŒ
@topecongiroã¯ããããã¯çŸåšããã¬ãŒã³ãããã¯ã§ã®ã¿èš±å¯ãããŠããããšãæå³ããŠãããšæããŸãã å°æ¥å€æŽãããå¯èœæ§ããããŸãããããã¯éåžžã«äœã¬ãã«ã§çããæ©èœã§ãããããå¶éã§ã¯ãªãæ©èœã§ããåŸåããããŸãã ïŒæ¥µç«¯ãªå Žåãç§ã¯ç¢ºãã«else 'a: {
æãã§ããŸãããïŒ
ééããªãåæããŸãã å®å šã§ãªã+ç°åžžãªå¶åŸ¡ãããŒã¯ãèœèããããã®ã®ããã«èãããŸãã
ãã ãããã³ãã§ã¯ã次ã䜿çšã§ããŸãã
'a: {
unsafe {...}
}
å³ïŒ
å®éãä»ã®æ¹æ³ã§ã¯ãæ°ããåå¥ã¹ã³ãŒããäœæãããŸããããã¯ãããã¯ã§ã¯ãããŸããã if-elseå
šäœããããã¯ïŒã¡ãã£ãšïŒã§ãã ãããã else 'a: {
ã¯ååŸã§ããŸããã 'a: if ... else {
ååŸããŸãã
else
ã«ã¯ãããã¯ïŒåŒïŒ
else
ãããããã«æªãè¡šé¢æ§æäœçœ®ã¯'a: while foo 'b: {...}
ãŸãã
ïŒèå³æ·±ãããšã«ã continue 'a
ã¯break 'b
ã§ããå°ãªããšããå
éšçã«ã¯ããã«äŸåããããšããå§ãããŸãïŒ
ïŒèå³æ·±ãããšã«ã
continue 'a
ã¯break 'b
ã§ããå°ãªããšãå éšçã«ã¯ãããã«äŸåããããšããå§ãããŸãïŒ
ããã¯çŽ æŽããã芳å¯ã§ãïŒ
ã©ãã«ã¯ããããã¯èªäœã§ã¯ãªãããããã¯ãå«ãåŒã®äžéšã§ããå¿
èŠããããšæããŸãã loop
ã§ããã®åäŸããã§ã«ãããŸãã ïŒããŸããŸããã¬ãŒã³ãããã¯èªäœããããã¯ãå«ãåŒã§ãããããã if
ãloop
ãã®ã¯ããããã¯ã§ã¯ãªããããã¯ãå«ãåŒã§ããïŒ
ïŒ while
ãfor
ãããªãã®ã¯ãæ£åžžã«å®äºãããbreak
å®äºãããã«åºã¥ããŠå€ãè¿ãããšãã§ãããã§ããªããããlabel-break-valueããµããŒãããªãã§ãã ããã ãïŒ
@eddyb
ïŒèå³æ·±ãããšã«ãç¶è¡ 'a is break' bãå°ãªããšãå éšçã«ã¯ããã«äŸåãããå ŽåããããŸãïŒ
break 'b
ãã«ãŒãç¶æ
ãåãã§ãã¯ããå Žåã®ã¿...
@ mark-imããã¯'a: while foo {'b: {...}}
ãšåçã§ããã break
ã¯ã«ãŒãæ¡ä»¶ããã§ãã¯ããŸãããã«ãŒãèªäœã¯ã«ãŒãæ¡ä»¶ããã§ãã¯ããŸããããã¯ãã«ãŒãæ¡ä»¶ãæ¬äœãããã¯ã®åå埩ã®åã«ãã§ãã¯ãããããã§ãã
ãããŒãç§ã¯ããã_éåžžã«_çŽæçã§ã¯ãªããšæããŸãã break 'b
ã¯åºæ¬çã«goto 'b
ã§ãããšæããŸããã€ãŸããã«ãŒãæ¬äœãçµäºããããšã¯ãªããæ¡ä»¶ãå床ãã§ãã¯ãããããšããããŸãã...
ããïŒman_facepalmingïŒãªãã»ã©...
ãããç§ãbreak / continueãšããã©ãã«ã®ä»ãããã®ã奜ãã§ã¯ãªãçç±ã§ãïŒ/
ç§ã¯åé¡ãèŠãŠããªãã®ã§ããŸããæã
ã¯å
·äœçã«ã¯ããããã®å¥åŠãªå
éšãããã¯ãã©ãã«ä»ãããããšã¯ã§ããŸããã break
åžžã«ããã®ãããã¯ãé¢ãããããšãæå³ããäžèšã®å¶éãèãããšããé¢é£ããéãäžæ¬åŒ§ã®åŸã«ã¹ãããã«ç§»åããã以å€ã®æå³ã¯ãããŸããã
ç§ã®æ··ä¹±ã¯å¥åŠãªå éšãããã¯ã«åºæã®ãã®ã§ã¯ãããŸããã§ããããç§ã¯æ¬åœã«è°è«ãåéããããããŸããã ããã¯ãã§ã«èµ·ãã£ãŠãããã³ãã¥ããã£ã¯ãããè¿œå ããããšã決å®ããŸããã
ããŠãç§ã¯ã¢ã¯ã»ã·ããªãã£ãããã°ã©ãã³ã°èšèªã®å€§ããªåé¡ã§ããããšãç解ããŠããŸã...ããããç§ã®ãããªã³ãŒããæžãå Žåãã©ãã«ä»ãã®ãã¬ãŒã¯ã¯éåžžã«äŸ¿å©ã§ãã
ã§ã¯ãã©ãããã°ã©ãã«ä»ãã®ãã¬ãŒã¯ãããã¢ã¯ã»ã¹ããããããããšãã§ããŸããïŒ
ã§ã¯ãã©ãããã°ã©ãã«ä»ãã®ãã¬ãŒã¯ãããã¢ã¯ã»ã¹ããããããããšãã§ããŸããïŒ
ããã¯çŽ æŽããã質åã§ãã ç§ãæã£ãŠããããã€ãã®ã¢ã€ãã¢ïŒ
æåã®ïŒæããã«åã£ãïŒãµã³ãã«ãšããŠãå®éã®ã³ãŒãã§ã©ãã«ä»ãããããã¬ãŒã¯ãšã®æåŸã®ïŒãããŠæåã®ïŒééã¯ææã§ã¯ãããŸããã§ããïŒ https ïŒ//github.com/rust-lang/rust/pull/48456/files#diff-3ac60df36be32d72842bf5351fc2bb1dL51ã å ã®äœè ãããå°ãåªåããã°ããã®å Žåã¯ã©ãã«ä»ãã®ãã¬ãŒã¯ã䜿çšããããšãå®å šã«åé¿ã§ããã¯ãã§ã...ããã¯ãå¯èœã§ããã°ãå§ãã§ããªãçš®é¡ã®ç·Žç¿ã®äŸã§ãã
ããã¯...ãã¬ãŒã¯ãšããã©ãã«ãä»ããŠããŸãããïŒ
break
ãšcontinue
ããã«ã©ã®ããã«è±ç³ãããã«ã€ããŠã¯ãRFCã®äœæè
ã«ããå
ã®RFCã®è°è«ã§ãèšåãããŠããŸããã https://github.com/rust-lang/rfcs/pull/2046#issuecomment-312680877ãåç
§ããŠ
break
ãšããååã¯æé©ã§ã¯ãªããšæããŸãããforã«ãŒãã¯ååã«ç¢ºç«ãããŠããŸãã ãããååçãªãã¢ãããŒãã¯ãæ§æreturn 'a value
ã䜿çšããããšã§ããããã¯ããããã¯'a
ãçŽåŸãã«ããã®ãããã¯ã®å€value
ã䜿çšããŠå®è¡ãç¶è¡ããŸãã
@ mark-imãã¢ã¯ã»ã¹ã§ããªãããã«æ©èœã䜿çšããªãããšã¯ãããã®æ©èœãã¢ã¯ã»ã¹å¯èœã«ãããããšã§ã¯ãããŸããã
ã©ãã«ä»ãã®ãã¬ãŒã¯ã埮調æŽããŠãèšèªã®è¡šçŸåãæ倧éã«åŒãåºããšåæã«ãè³ããããŒå¶åŸ¡ã®ãã®ãã³ã³ãã€ã©ãŒãåŠçã§ããªããšããäžæºããããã«ã¯ã©ãããã°ããã§ããããã
ïŒãŸãããªã³ã¯ããã³ãŒãã¯RFC 2046 / label-break-valueãšã¯é¢ä¿ããªãããã§ã...ããããééã£ãã³ãŒãããªã³ã¯ããŸãããïŒïŒ
ããã¯...ãã¬ãŒã¯ãšããã©ãã«ãä»ããŠããŸãããïŒ
ïŒãŸãããªã³ã¯ããã³ãŒãã¯RFC 2046 / label-break-valueãšã¯é¢ä¿ããªãããã§ã...ããããééã£ãã³ãŒãããªã³ã¯ããŸãããïŒïŒ
確ãã«ãå€æŽããåã¯ãç¶è¡ããšããã©ãã«ãä»ããŠããŸããããåãåé¡ãååšãããšæããŸãïŒã«ãŒãã³ã®æ®ãã®éšåã®å¶åŸ¡ãããŒã¯ãè¿ãå€ã«ãã£ãŠåœ±é¿ãåããå¯èœæ§ããããããããã«æªåããå¯èœæ§ããããŸãïŒã
@ mark-imãã¢ã¯ã»ã¹ã§ããªãããã«æ©èœã䜿çšããªãããšã¯ãããã®æ©èœãã¢ã¯ã»ã¹å¯èœã«ãããããšã§ã¯ãããŸããã
ã©ãã«ä»ãã®ãã¬ãŒã¯ã埮調æŽããŠãèšèªã®è¡šçŸåãæ倧éã«åŒãåºããšåæã«ãè³ããããŒå¶åŸ¡ã®ãã®ãã³ã³ãã€ã©ãŒãåŠçã§ããªããšããäžæºããããã«ã¯ã©ãããã°ããã§ããããã
ç³ãèš³ãããŸããããæå¥ãèšãã€ããã¯ãããŸããã ç§ã ãããã®ããã«æããŠããã®ãªããç§ã¯èã«ç«ã£ãŠãããŸããŸããã
ç§èŠã§ãããããã¯ããã¬ãŒã¯/ã³ã³ãã£ãã¥ãŒããšããã©ãã«ã®ä»ããåºæ¬çãªåé¡ã§ããè¡šçŸåã匷ãããŸããããã軜æžããå¯äžã®æ¹æ³ã¯ããè¯ãã¹ã¿ã€ã«ããšããŠæšå¥šããã䜿çšæ³ã§ãïŒãããæå³ãããã®ã¯äœã§ãïŒã ããšãã°ããã«ãŒãæ¬äœã®æåãŸãã¯æåŸïŒäžå€®ã§ã¯ãªãïŒããã®å€ãæã€ã©ãã«ä»ããã¬ãŒã¯ã®ã¿ã䜿çšããŠãã ãããã ããã¯ãå€ã䜿çšããŠã«ãŒããçµäºããããã®å¯èœãªæ¹æ³ãç°¡åã«èŠã€ããŠæšè«ã§ããããšãæå³ããŸãã
ããã¯ãä»ã®èšèªã§goto / labeled breakãåé¿ããæ¹æ³ã§ãïŒ https ïŒ//gist.github.com/SoniEx2/fc5d3614614e4e3fe131/#file -special-lua-L4-L72
ããã¯ãã£ãšèªã¿ãããã§ããïŒ
ãããããªããããããç§ãã¡ã¯ã©ãã«ä»ãããããããã¯ã«åºã¥ããŠããçš®ã®æ¡ä»¶ä»ãã·ã¹ãã ãç解ããããšãã§ããŸãã åæ§ã«ããã®ãå€åã
ã©ãã«ã®ãªããã¬ãŒã¯ã¢ã³ãã³ã³ãã£ãã¥ãŒã®ãã€ã³ãã¯ãæ¡ä»¶/å€ãã«ãŒãããããŒã«ç°¡åã«é 眮ã§ããªãå Žåã«åããŠæäŸããããšã§ãã äžéšã®ã«ãŒãã¯ãéäžã§äžæããã ãã§ãã¯ããã«åçŽã§ãèªã¿ããããé«éãªã©ã§ãã
ã«ãŒãå
ã§ã®ãã¬ãŒã¯ãšã³ã³ãã£ãã¥ãŒã®ã©ãã«ä»ãã®ãã€ã³ãã¯äŒŒãŠããŸã-å Žåã«ãã£ãŠã¯ãæ°ããå€æ°ãæ°ããé¢æ°ïŒããã«ãã£ãŠreturn
ãæªçšããïŒããŸãã¯ç©äºã远跡ããã®ãé£ããããä»ã®ããã¿ãå°å
¥ããããšãå¯äžã®éžæè¢ã§ããæ®å¿µãªãããã©ãã«ä»ãã®ãã¬ãŒã¯ãè€éã«ãªã£ãŠããå¯èœæ§ããããŸãã
ããããããã2ã€ã®æ©èœã¯ããã®ã¹ã¬ããã®ç®çã§ã¯ãããŸããã ãããã¯ãæ¬è³ªçã«è€éãªå¶åŸ¡ãããŒãè¡šçŸããããã«æäŸãããæ¹åã®ããã«ãããªãæ®éçã§ãã ãã®ã¹ã¬ããã¯ã代ããã«éã«ãŒããããã¯ããæãåºãããšã«ã€ããŠã§ãã ããã¯ç¢ºãã«ãã£ãšæ¬æ°ã§ãã«ãŒãã®å€åŽã§break
ãæ¢ãããšãç¥ããªã人ããããããããŸããããã©ãã«ãå¿
èŠãªå Žåã¯ããã®æå³ããããã°ä¿¡å·ããŸã ããã«ããããšãæå³ããŸãã
ããã¯ãããªãã®äŸã@ mark-imã«ã€ããŠç§ãæå³ããããšã§ããããã¯ãã©ãã«ä»ããããã¯ã§ã¯ãªããã©ãã«ä»ãã«ãŒãã®ããªãæšæºçãªäœ¿çšæ³ã§ããã
ãããååçãªãã¢ãããŒãã¯ãæ§æreturn'a valueã䜿çšããããšã§ããããã¯ããã®ãããã¯ã®å€ã䜿çšããŠãããã㯠'aã®ãçŽåŸãã«å®è¡ãç¶ç¶ããŸãã
break
ãšreturn
ã«ã€ããŠã®è£è¶³ïŒéçå¶åŸ¡ãããŒã§ããããã break
æ¹ã奜ãã§ãã return
ã¯åçã§ãããçºä¿¡è
ã«æ»ããŸããçºä¿¡è
ã¯ã©ãã«ãã£ãŠãããŸããŸããã ããã¯ãç§ã¯èªåã®è²¬ä»»ãæãããŸãããç§ãäœãããŠããã®ããèŠãå Žæã¯ä»ã«ãããŸããããšããæå³ã§ãã break
ã¯ãã«ãŒãã®å Žåãšåæ§ã«ãåžžã«åå¥çã«ã¹ã³ãŒãå
ã®ã©ããã«ç§»åããŸãã
return 'label expr
ã¯ã ãexprãå Žæã®ã©ãã«ã«æ»ãããšèããããšãã§ãããšããç¹ã§ããç§ãèšãããšãå®è¡ããããšãã芳ç¹ããã¯éåžžã«ããèªãããšæããŸãã ãã®èŠ³ç¹ã§ã¯ã break 'label expr
åãããã«ããŸãèªãããšã¯æããŸãã...
ãããã£ãŠãä»ã®ããã°ã©ãã³ã°èšèªãšã¯å¥ã«ã return 'label expr
æå±ããå¯èœæ§ããããŸãã ãã ããä»ã®èšèªã§ã®å¶åŸ¡ãããŒãèãããšã return
åå©çšãããšãçªç¶å®è¡å¯èœãªãªãã·ã§ã³ãã¯ããã«å°ãªããªãã break 'label expr
ãæ¯æããããã«ãªããŸãã
ç§ã¯ãããbreak 'label expr
ã§ã¯ãªãreturn 'label expr
break 'label expr
ã§ããã¹ãã ãšããæèŠãåºãä¿¡ããŠããŸãã ããããªããšãã«ãŒãã§ã®break 'label
æ¢åã®äœ¿çšæ³ãšå®å
šã«ççŸããŸãã
@ SoniEx2å€æ°ãã«ãŒãäžå€æ¡ä»¶ãææžåããè¯ãæ¹æ³ã§ããããšãäž»ãªçç±ã§ãç§ã¯ããªããæçš¿ããã¹ããããã奜ããšæããŸãã OTOHãã©ãã«ã®ååã§ãåãããšãã§ãããããããŸããïŒã€ãŸãããã®ã©ãã«ä»ããããã¯ãå ¥åããããã³ã«ãäžå€ã®Pãä¿æãããŸãïŒã ããã¯ãéçããã®ã³ãŒããµã³ãã«ãããå°ãæã£ãŠãããšããå Žæã ãšæããŸã...
ãã®æ©èœã¯@ est31ã«ãã£ãŠhttps://github.com/rust-lang/rust/pull/50045ã«å®è£
ããã2018-05-16ïŒ+17é±éïŒããæ¯æ©äœ¿çšãããŠãããããå®å®åã®ããã«ååã«ãã€ã¯ãããŠããŸãã ãŸãããããå®æœããPRãçµ±åãããŠä»¥æ¥ãåé¡ã¯å ±åãããŠããŸããã ãã以éãæªè§£æ±ºã®è³ªåããã¹ãŠè§£æ±ºãããŠããã return
ã§ã¯ãªãbreak
ãè¡šé¢æ§æã«ããå¿
èŠããããšãã匷ãã³ã³ã»ã³ãµã¹ããããŸãã
ãããã£ãŠãç§ã¯label-break-valueïŒRFC 2046ïŒãå®å®ãããããã«ç§»åããŸãã
@rfcbotããŒãž
@rfcbotã¯FIXME -in-testsã«é¢ä¿ããŸã
æåŸã®ãã¹ããã¡ã€ã«ã«ã¯çŸåšFIXMEããã
// FIXME: ensure that labeled blocks work if produced by macros and in match arms
ããã¯ãå®å®ãããåã«è§£æ±ºããå¿
èŠããããŸãã
æåŸ
ãããåäœãwrtã§ããããšã確èªããããã«ããã€ãã®ãã¹ããäœæããŸããã FIXMEã¯å®éã«å®è£
ãããŠããŸãïŒ
// run-pass
#![feature(label_break_value)]
#[test]
fn lbv_match_test() {
fn test(c: u8, xe: u8, ye: i8) {
let mut x = 0;
let y = 'a: {
match c {
0 => break 'a 0,
v if { if v % 2 == 0 { break 'a 1; }; v % 3 == 0 } => { x += 1; },
v if { 'b: { break 'b v == 5; } } => { x = 41; },
_ => {
'b: {
break 'b ();
}
},
}
x += 1;
-1
};
assert_eq!(x, xe);
assert_eq!(y, ye);
}
test(0, 0, 0);
test(1, 1, -1);
test(2, 0, 1);
test(3, 2, -1);
test(5, 42, -1);
test(7, 1, -1);
}
#[test]
fn lbv_macro_test() {
macro_rules! mac1 {
($target:lifetime, $val:expr) => {
break $target $val;
};
}
let x: u8 = 'a: {
'b: {
mac1!('b, 1);
};
0
};
assert_eq!(x, 0);
let x: u8 = 'a: {
'b: {
if true {
mac1!('a, 1);
}
};
0
};
assert_eq!(x, 1);
}
// compile-fail
#![feature(label_break_value)]
fn lbv_macro_test_hygiene_respected() {
macro_rules! mac2 {
($val:expr) => {
break 'a $val;
};
}
let x: u8 = 'a: {
'b: {
if true {
mac2!(2);
}
};
0
};
assert_eq!(x, 2);
macro_rules! mac3 {
($val:expr) => {
'a: {
$val
}
};
}
let x: u8 = mac3!('b: {
if true {
break 'a 3;
}
0
});
assert_eq!(x, 3);
let x: u8 = mac3!(break 'a 4);
assert_eq!(x, 4);
}
ææ¡ãããFCPããFCPã«ç§»è¡ããåã«ãããããšåæ§ã®ãã¹ããè¿œå ããå¿ èŠããããŸãã
ããŒã ã¡ã³ããŒã®@Centrilã¯ããããããŒãžããããšãææ¡ããŸããã 次ã®ã¹ãããã¯ãã¿ã°ä»ããããæ®ãã®ããŒã ã«ããã¬ãã¥ãŒã§ãã
æžå¿µïŒ
ã¬ãã¥ãŒã¢ã®éåæ°ãæ¿èªãããšïŒãããŠå察ã¯ãããŸããïŒãããã¯æçµã³ã¡ã³ãæéã«å ¥ããŸãã ãã®ããã»ã¹ã®ã©ã®æç¹ã§ãæèµ·ãããŠããªã倧ããªåé¡ãèŠã€ããå Žåã¯ã声ãäžããŠãã ããã
ã¿ã°ä»ããããããŒã ã¡ã³ããŒãç§ã«äžããããšãã§ããã³ãã³ãã«ã€ããŠã¯ããã®ããã¥ã¡ã³ããåç §ããŠãã ããã
@rfcbotã¯è²»çšäŸ¿çã«é¢ä¿ããŸã
å¥ã®ã°ã«ãŒãã¯ãèšèªã«å¯Ÿãããã®æ©èœã®ãè²»çšäŸ¿çãã¯ãå®å šã«ã¯åæžãããŠããªããšæããŸããã èšãæããã°ãæ©èœãããããè€éãã®å¢å€§-èšãæããã°ã人ã ãå®éã«ããã䜿çšããããªãã圌ãã®ã³ãŒããšèšèªã®å šäœçãªãµã€ãºãèªãŸãªããã°ãªããªãå¯èœæ§-ãã®æçšæ§ã«èŠåã£ããã®ã§ã¯ãããŸããã§ããã
ç§ã¯ãŸã ãã®æ©èœãæã£ãŠããã¹ãã§ã¯ãªããšæããŸãã å®è£ ãããŠãããããã䜿ãããŠããŸããïŒ äœ¿çšããå Žåãé¢æ°ã䜿çšããã®ã¯ããªãæªãã§ããïŒ ããã«å©ç¹ãããå Žåãããã¯èšèªããã倧ãããããè€éã«ããã³ã¹ããäžåããŸããïŒ
@nrcç§ã¯åãæžå¿µãå ±æããŠããŸãã ãã¯ããããã䜿çšã§ããããã«ãããå©çšå¯èœã«ãããšããè°è«ã¯ç解ããŠããŸãããåæã«ãç§ã¯ããããŸã£ããæã£ãŠããããããŸããã
ç§ã¯ãå ã®RFCã¹ã¬ããããåŒæ°ãæŽçããå¿ èŠã¯ãããŸããããç§ã¯ãããã¯ããã®æ©èœã§ã®çµéšã«ã€ããŠå°ããããã«åççãªãã€ã³ãã§ãããšæããŸãã ããã¯ã©ã®ãããªçšéãèŠãŠããŸãããïŒ
ææžãã®ããŒãµãŒãã»ãšãã©...ïŒç§ã¯ææžãã®ããŒãµãŒã奜ãã§ã>ã<ïŒ
labeld-propagateïŒ try_foo() 'bar?
ïŒã䜿çšãããšããã䟿å©ã§äœ¿ãããããªããŸãã
@rfcbotã¯ãŠãŒã¹ã±ãŒã¹ã«é¢ä¿ããŸã
Discordã«é¢ããããã€ãã®è°è«ã®èŠçŽïŒå®éã®ã³ãŒãããããã®æ©èœã䜿çšããªãããã«æžãçŽãããšãã«ãããæ確ã«åºäŒããªãããã®ããã®å ·äœçãªãŠãŒã¹ã±ãŒã¹ã確èªããããšæããŸãã
ãFWIWãç§ã®EXPR is PAT
å®è£
ã¯ãå°ãªããšãASTã§å©çšã§ããbreak 'label value
ã«äŸåããŠããŸããããããªãã§è±ç³ãã©ã®ããã«æ©èœãããã¯ããããŸããã
ã³ã³ãã€ã©ã§ã®EXPR?
å®è£
ã¯ã break 'label value
ã«ãäŸåããŠããŸããã
ãããã¯ããã倧ããªå¶åŸ¡ãããŒæ©èœã®ããã®ããçš®ã®åºæ¬çãªæ§æèŠçŽ ã§ããããããšã«ããã³ã³ãã€ã©ãŒã«å®è£
ããå¿
èŠããããããããŸããã
ãããã£ãŠãããã§ã®ãã³ã¹ããã¯ãããããè¡šé¢æ§æã§å©çšã§ããããã«ããã ãã§ãã
ç·šéïŒç§ã¯ãã®åé¡ãå®å
šã«èª€è§£ããŸããããããã¯çŽloop { ... break 'label value ... }
ã§ããããããã¯{ ... break 'label value ... }
ã§ã¯ãããŸããã
ãã§ã«å®è£
ãããŠããããšããã€ãå¿ããŠããã®ã§ããããè©Šãæ©äŒã¯ãããŸããã§ããã
@petrochenkovã®ç¢ºå·ã«@joshtriplettã«è©±ãã圌ãã¯ããŠãŒã¶ãŒåãã®è€éãã§ã¯ãªããèšèªã®å®è£ ã«ã€ããŠå¿é ããŠãããšææããŸããã
è€éãã®å¢å ã¯æå°éã ãšæããŸããèªè
ã«ãšã£ãŠãæŠå¿µã¯ãã§ã«ã«ãŒããªã©ã«ååšããããããããäœãæå³ããã®ãã¯æããã§ãã
ãã以å€ã®å Žåã¯ãç¡æ¡ä»¶ã®breakã¹ããŒãã¡ã³ãã§ã«ãŒãã䜿çšããå¿
èŠããããŸããããã¯ããŸãæ確ã§ã¯ãªããå®éãããã«ã€ããŠã¯ã¯ãªããã®ãããªãªã³ãïŒnever_loopïŒãããããŸãã ã§ããããã¡ãªããããããšæããŸãã
ãŠãŒã¹ã±ãŒã¹ã«é¢ããŠã¯ããã®ãããã¯ã¯ãã§ã«RFCã«ç»å ŽããŠããŸãã ããã§ç§ã®ãŠãŒã¹ã±ãŒã¹ãææãçŽæ¥ãªã¹ããããŠãããŠãŒã¹ã±ãŒã¹ãåç §ããŠãã ããã ãã¶ããã¹ã¬ããã«ã¯ãã£ãšãããããããŸããidkã @joshtriplettã¯ãŠãŒã¹ã±ãŒã¹ã®è³ªåã解決ããŸããïŒ
@nrcãš@joshtriplettã«åæããŸãããŸããããã§ããã»ã¹ã®æžå¿µãæèµ·ããããšæããŸãã @ nrcãš@joshtriplettãæèµ·ãã質åãåæ€èšãããšãå®å®åããããã¯ããããšããæ瀺çãªèŠåãšãšãã«ããã®RFCãæ«å®çã«åãå ¥ããŸãããã @ Centril 'sããŒãžææ¡ã¯ããã®ããããã³ã°ã®æžå¿µã«ã€ããŠã¯ãŸã£ããèšåããŠãããããããéåžžã«æšæºçãªãæ©èœãçŒãä»ãããããããŒãžãšããŠæ±ããŸãã ããã«ã€ããŠã¯@Centrilã®ããã§ã¯ãããŸããããããã»ã¹ã®å èš³ã§ããå®å®åæã«æªè§£æ±ºã®ãããã«ãŒã䜿çšããŠæ©èœãæ«å®çã«åãå ¥ããå Žåã¯ããããã®ãããã«ãŒã远跡ããå¿ èŠããããŸãã
ããã»ã¹å šäœã®èŠ³ç¹ãããããããã³ã°ã®æžå¿µãæèµ·ãããããšãªã2æ¥åãçµéããã»ãšãã©ã®ããŒã ã¡ã³ããŒããã§ã«ãã§ãã¯ããã¯ã¹ããªã³ã«ããŠããããšã確èªããããšã¯ç§ã«ãšã£ãŠå¿é ã§ããã ããããããã¹ãŠã®ã¡ã³ããŒã®ç©æ¥µçãªã³ã³ã»ã³ãµã¹ãäžèŠã«ãªã£ãããããããã«ãŒãäžããããšãªãããããFCPã«å ¥ãå¯èœæ§ããããŸãã ããã¯ãRFCãããŒãžããããšã«ç§ãçŽåŸããã以åã®åæã®è»¢èŠã®ããã«æããŸãããããŠããã¯å®å šã«æ å ±ã®äžååãªè¿œè·¡ã«ãã£ãŠåŒãèµ·ãããããšæããŸãã
@withoutboatsã¯ãããã®éãã§ãã ããã«ãããå°æ¥çã«ã¯ããå®å®åããã»ã¹äžã«XYZãå®è¡ããããšããåºæºã§ç©äºãåãå ¥ããåŸåã匱ãŸããèŠéãããå¯èœæ§ãéåžžã«äœãããã»ã¹ã確ç«ããããŸã§ç¶ããŸãã
@withoutboats
ããã«ã€ããŠã¯@Centrilã®ããã§ã¯ãããŸããããããã»ã¹ã®å èš³ã§ããå®å®åæã«æªè§£æ±ºã®ãããã«ãŒã䜿çšããŠæ©èœãæ«å®çã«åãå ¥ããå Žåã¯ããããã®ãããã«ãŒã远跡ããå¿ èŠããããŸãã
ããã«ããããããããè©«ã³ç³ãäžããŸãã ç§ã¯èŠåã«æ°ã¥ããŠããŸããã§ããããããã§ã远跡ã®åé¡ãäœæãããšãã«ãã®ãããªããšããã§ãã¯ããå¿ èŠããããŸããã
ããã¯ãRFCãããŒãžããããšã«ç§ãçŽåŸããã以åã®åæã®è»¢èŠã®ããã«æããŸãããããŠããã¯å®å šã«æ å ±ã®äžååãªè¿œè·¡ã«ãã£ãŠåŒãèµ·ãããããšæããŸãã
ç§ã¯ããã«ã€ããŠæªè§£æ±ºã®è³ªåãããã¹ãã§ããã ãã®æç¹ã§ããã»ã¹ãã¹ãèµ·ãã£ããšæããŸãã
ããã»ã¹ãæ¹åããæ¹æ³ã«ã€ããŠã¯ã æªè§£æ±ºã®è³ªåãRFCã®_text_ã«å°éããããšãéèŠã ãšæããŸãã ããã§ãªããã°ããããèŠã€ããã®ã¯ã¯ããã«é£ãããªããŸã;ïŒ
fcp-mergeããããŒã¶ã«ã«ã€ããŠã¯; å人çã«ã¯ãåäžæ§ã®çç±ããã¯ãã§ã®äœ¿çšã«åœ¹ç«ã€ãšæããŸãã ãã ããå®å®åãææ¡ããã«ã¯ææå°æ©ã§ãããšæãããå Žåã ææ¡ããã£ã³ã»ã«ããŠãã ãã:)
@ est31
ãã以å€ã®å Žåã¯ãç¡æ¡ä»¶ã®breakã¹ããŒãã¡ã³ãã§ã«ãŒãã䜿çšããå¿ èŠããããŸãã
ãŸãã¯ãã©ã¡ãããåé¿ããããã«ã³ãŒããåæ§ç¯ããŸãã
ããã§ç§ã®ãŠãŒã¹ã±ãŒã¹ãææã
break 'pseudo_return
ãreturn Ok(vectors);
眮ãæããŠã¿ãŸãããïŒ
ãŸãã¯ãã©ã¡ãããåé¿ããããã«ã³ãŒããåæ§ç¯ããŸãã
ãã¡ãããRustã¯å®å šã«ãã¥ãŒãªã³ã°ããŠããŸãã ãããããªã¹ãã©ã¯å°ãé£ãããããããŸããã å šäœãšããŠããæ¢åã®æ¹æ³ã䜿çšã§ããããšããçç±ã§ãã»ãŒãã¹ãŠã®ç ç³æ©èœïŒããã¯ç ç³æ©èœã§ãïŒãæåŠã§ããŸãã
ãã¬ãŒã¯ 'pseudo_returnãreturnOkïŒvectorsïŒ;ã«çœ®ãæããŠã¿ãŸãããïŒ
å®éããã®å Žåãããªãã¯æ£ããã§ãã人ã¯äŒæ©ããªã¿ãŒã³OKã«çœ®ãæããããšãã§ããŸãã ãã ããä»ã®äŸã§ã¯ãåŸã§åŠçãå®è¡ãããå Žåãªã©ããããŸãããããŒãã§ãã«ãŒã¯é¢æ°ã®å¢çãè¶ããŠããŸãæ©èœããªãããããã®ãããªãã¹ãŠã®ãããã¯ãé¢æ°ã«çµã¿èŸŒãããšã¯ã§ããŸããã
ãšã«ãããç§ã¯å ¬åŒã®æ段ã§èšèªæ©èœã«ã€ããŠã³ã¡ã³ãããããšã«ã€ããŠæ²é»ãç ŽããŸããããããŠç§ã¯ãããåŸæããŠããŸãã ãã¹ãŠåããã€ã³ãã§ãäœåºŠãäœåºŠãåããã·ã¥ãããŸããã ãã®ããããšã¯ç§ã®æéã®ç¡é§ã§ããããããªããã ã ããç§ããã®ãã以äžã®ã³ã¡ã³ããæåŸ ããªãã§ãã ããã
@ est31詳现ãæäŸããŠããã ãããããšãããããŸãã ããããšãããããŸãã
æ¯æ©Rustãå¿ èŠãªããããããããã¹ãããŠäœ¿çšããã«ã¯ã¢ã¯ã»ã·ããªãã£ã®åé¡ããããŸãã
å®å®ããã¿ãŒã²ããã§ãã ããããã€ã解決ãããããšãé¡ã£ãŠããŸãã
ãŠãŒã¹ã±ãŒã¹ãå¿
èŠãªå Žåã¯ãå°ãåã«ããããããã®ã次ã«ç€ºããŸãã åºæ¬çã«@ est31ã®ãåŸã§åŠçãè¡ããã®è©³çŽ°ïŒC ++æååãªãã©ã«ãã¬ãã£ãã¯ã¹ãåŠçããã¬ã¯ãµãŒãäœæããŸããïŒå®éã®C ++ã®å Žåã{ L
ã u8
çµã¿åããççºã u
ã U
ã} { R
ã}ïŒãããã³äœ¿çšããããã€ãæ°ã«ãã®ã£ãããããããã«ããã€ãããŒã¯ã³ïŒäŸïŒã get_token
é¢æ°ã¯çŸåšã次ã®ããã«ãªã£ãŠããŸãã
fn get_token(&mut self) -> Token {
match decode_byte(self.source) {
// ...
// repeat four times with small variations for b'U', b'L', and b'R':
Some((b'u', rest)) => match decode_byte(rest) {
Some((b'"', rest)) => self.string_literal(Utf16String, rest),
Some((b'\'', rest)) => self.char_constant(Utf16Char, rest),
Some((b'R', rest)) => match decode_byte(rest) {
Some((b'"', rest)) => self.raw_string_literal(Utf16String, rest),
_ => self.identifier(rest),
},
Some((b'8', rest)) => match decode_byte(rest) {
Some((b'"', rest)) => self.string_literal(Utf8String, rest),
Some((b'\'', rest)) => self.char_constant(Utf8Char, rest),
Some((b'R', rest)) => match decode_byte(rest) {
Some((b'"', rest)) => self.raw_string_literal(Utf8String, rest),
_ => self.identifier(rest),
},
_ => self.identifier(rest),
},
_ => self.identifier(rest),
},
// ...
// the "gap" mentioned above is here: single-byte '.' and triple-byte '...' but no double-byte '..':
Some((b'.', rest)) => match decode_byte(rest) {
Some((b'0'..=b'9', rest)) => self.number(rest),
// note the _inner to avoid shadowing the outer `rest` used by the inner `Dot` case:
Some((b'.', rest_inner)) => match decode_byte(rest_inner) {
Some((b'.', rest)) => self.make_token(Ellipsis, rest),
_ => self.make_token(Dot, rest),
},
_ => self.make_token(Dot, rest),
},
// ...
}
}
_ => self.identifier(rest)
ã®ãã©ãããïŒ u
ã U
ã R
ãããã³L
ã«å¯ŸããŠ4åç¹°ãè¿ãããïŒãš_ => self.make_token(Dot, rest)
泚æããŠãã ããã identifier
ã string_literal
ãªã©ãã¹ãŠãmake_token
åŒã³åºããªããã°ãªããªããäžçš®ã®ç¶ç¶æž¡ãã¹ã¿ã€ã«ã圢æããŸãã
break
-from-blockã䜿çšããŠãããç¶ç¶æ§ã®äœãã¹ã¿ã€ã«ã«çµ±åããããšæã£ãŠããŸãããã»ãšãã©ã®å Žåãã©ãã«ä»ãã®loop
ã䜿çšããŠçµ±åããŸãããããã®ããŒãžã§ã³ã¯ããŸãã«ãå¥åŠã§èªã¿ã«ãããšèããŠããŸããã å
·äœçã«ã¯ïŒ
make_token
åŒã³åºããã¡ã€ã³ã®match decode_byte(self.source)
åŸã«åäžã®å Žæã«ç§»åãããããã€ã³ã©ã€ã³åããŸãã-ããã¯å°ããã unsafe
ãå«ã¿ããã®äžå€æ¡ä»¶ã¯get_token
ã«ãã£ãŠæ¯æãããŠããŸã"
ãŸãã¯'
èŠã€ãããã break 'label self.string_literal(..)
ã䜿çšããŠç絡ãããã¹ãŠã®self.identifier(..)
åŒã³åºãããã®ãããã¢ãŒã ã®æåŸã«çµåããŸãã ãu
/ u8
/ U
/ L
ããã§ãã¯ããŠããã R
ãã§ãã¯ããŠãã ããbreak 'label
ã¯å°ãªããªããŸãããããã§ãå°æ°ã§ãã...
èŠã€ãããã break 'label (Ellipsis, rest)
ã䜿çšããŠç絡ããäž¡æ¹ã®(Dot, rest)
ããã®ãããã¢ãŒã ã®æåŸãŸã§çµåããŸããå šäœãšããŠãããã¯åºæ¬çã«ãif +ã¢ãŒãªãŒãªã¿ãŒã³ã䜿çšãããã©ããåãããå¶åŸ¡ãããŒãã§ãããå¥ã®é¢æ°ã«æœåºããå¿ èŠã¯ãããŸããã ãã®å Žåãããã€ãã®çç±ã§ããã¯éåžžã«äŸ¡å€ããããŸãã
ç§ã¯å šéšãæžããŸãããç§ã¯ãã®è©Šã¿ã決ããŠã³ãããããªãã£ããšæããŸãïŒããããç§ãäžã«ãªã¹ããããã¹ãŠã®åé¡ã«ééããããïŒãããŠç§ã¯ãã§ã«ããã§ååãªèšèãè²»ãããŸããã :)
@SergioBenitezã¯ã httpïŒ //rocket.rs/ã®label_break_value
ã®äœ¿çšæ³ãšãå®å®åã«ã€ããŠã®èŠè§£ã«ã€ããŠè©³ãã説æããŠããã ããŸããïŒ
@Centrilã¯ãïŒ èŠç¹ã¯æ¬¡ã®ãšããã§ãã
fn transform(request: &Request, data: Data) -> Transform<Outcome<_, _>> {
let outcome = 'o: {
if !request.content_type().map_or(false, |ct| ct.is_form()) {
break 'o Forward(data);
}
let mut form_string = String::with_capacity(min(4096, LIMIT) as usize);
if let Err(e) = data.read_to_string(&mut form_string) {
break 'o Failure(FormDataError::Io(e));
}
Success(form_string)
};
Transform::Borrowed(outcome)
}
ãã®æ©èœã䜿çšããŠãç§ã¯é¿ããŸãïŒ
Transform::Borrowed
ãè¿œå ããŸããTransform
ãè¿ãããå Žåã誀ã£ãŠããå¯èœæ§ããããŸãããããååšããã®ãèŠãŠãšãŠãããããã£ãã§ãã ããã¯ãŸãã«ç§ãæžããããã®ã§ãã ããã¯èšã£ãŠãããã®æ©èœã«äŸåããªãããã«ããããå¥ã®æ¹æ³ã§æ確ã«æžãããšãã§ããŸãã
@SergioBenitezããããšãïŒ ãããïŒæçµçã«ïŒ try { .. }
æžãçŽãããšãã§ããã§ããããïŒ ãã®ããã§ãïŒ
fn transform(request: &Request, data: Data) -> Transform<Outcome<_, _>> {
Transform::Borrowed(try {
if !request.content_type().map_or(false, |ct| ct.is_form()) {
Forward(data)?;
}
let mut form_string = String::with_capacity(min(4096, LIMIT) as usize);
if let Err(e) = data.read_to_string(&mut form_string) {
Failure(FormDataError::Io(e))?;
}
form_string
})
}
@Centrilãããæåãã¹ã1ã€ãããªãéããããã¯æ©èœããŸãããããããã«
ãŸãã¯ãã©ã¡ãããåé¿ããããã«ã³ãŒããåæ§ç¯ããŸãã
ãããè¡ããšããªããã£ãã€ã¶ãŒã§è§£æ±ºã§ããªããã©ã³ããŸãã¯ãµãã«ãŒãã³åŒã³åºããè¿œå ãããªã¹ã¯ããããŸãã ç§ã«ã¯ããã®ãããªå¶åŸ¡ãããŒã®å€æã¯ããªãè€éãªäœæ¥ã®ããã«æãããŸãã
䜿çšããå Žåãé¢æ°ã䜿çšããã®ã¯ããªãæªãã§ããïŒ ããã«å©ç¹ãããå Žåãããã¯èšèªããã倧ãããããè€éã«ããã³ã¹ããäžåããŸããïŒ
å°ããªé¢æ°ãã€ã³ã©ã€ã³åãããŠããå ŽåããããŸãããããã§ããäžèŠãªã³ãŒãã®èšåŒµãçºçããããæããªã³ãŒãã®éè€ãçºçãããããŸãã
ç§ã¯å¯èœãªéãæããšã¬ã¬ã³ããªãã€ããªã³ãŒãã奜ã¿ãŸãã ããã¯ãé¢æ°ããã®æ©æ埩垰ãšã»ãŒåããããå°ãé«åºŠãªå¶åŸ¡ãããŒã«ãã£ãŠè¡ãããšãã§ããŸãã
ïŒæçµçã«ïŒtry {..}ã§ãããæžãçŽãããšãã§ããã§ããããïŒ ãã®ããã§ãïŒ
[...]
æé©åããããã ãã«ãã©ã³ããå°å ¥ãããŠãããããããã¯å°ãæ··ä¹±ããŠããããã«èŠããŸãã ãã ããç¶æ³ã«ãã£ãŠã¯ãäž¡æ¹ãå¿ èŠã«ãªãå ŽåããããŸãã ãããã£ãŠã
'a: {try{...}}
ãŸã
'a: try {...}
ããã ããã
ãã®æ©èœã䜿çšããªãããã«æžãçŽãããšãã«ãå®éã®ã³ãŒããããããæ確ã«èŠåºãããªãããã®ããã®å ·äœçãªãŠãŒã¹ã±ãŒã¹ã確èªããããšæããŸãã
ãæ°è»œã«ç§ãæ¥ããŠãã ããïŒ
æé«ã®ã³ãŒãã§ã¯ãªããããããŸããããç§ã¯ç©äºããŸã£ããæ©èœããããã«ãããã£ãã®ã§ãã
ç¶ç¶æž¡ãã¹ã¿ã€ã«ã®èŠ³ç¹ãããã¡ã€ã³ã«ãŒããã¹ããŒããã·ã³ãšããŠå®éšçã«èšãæããããšæããŸãã ãã ããç¶ç¶ãšåŒ·å¶æ«å°ŸåŒã³åºãã¯å¥ã®ãããã¯ã§ãã
ç§ãéçã§èŠã€ããããã€ãã®çšéãæšãŠãïŒ
ãã®æ©èœãå®å®ããŠããã®ãèŠãã®ã¯ãšãŠãããããšã§ãã ãã®æ§æãæå³ãå€§å¹ ã«åçŽåããã³æ確åããå€ãã®ãŠãŒã¹ã±ãŒã¹ããããŸãã ãã©ãŒã«ãã«æäœã®å®è¡ãšãã®çµæã®ã¢ã³ã©ãããå«ãé·ãã»ã¯ã·ã§ã³ã®å Žåããã®æ§æã¯åªããŠããŸãã
ç§ã¯@zestererã«åæã
FWIWãæè¿ã³ã³ãã€ã©ã§åããŠäœ¿çšããŸããã
ãã¿ãŒã³ã¯åã®äŸãšåãã§ããè€æ°ã®æ¡ä»¶ããã§ãã¯ãããããã®ãããããçã§ããå Žåã¯å®è¡ãåæ¢ããŸãã
https://github.com/rust-lang/rust/blob/21f26849506c141a6760532ca5bdfd8345247fdb/src/librustc_resolve/macros.rs#L955 -L987
@ericktã¯ãåãçç±ã§ããã䜿çšãããã³ãŒããããã€ãäœæããŸãããè€æ°ã®æ¡ä»¶ããã§ãã¯ãããã®ãã¡ã®1ã€ãfalseã«ãªã£ãããã¬ãŒã¯ã¢ãŠãããŸãã ããã«åŒã³åºãããã¯ããŒãžã£ãŒãŸãã¯let _: Option<()> = try { ... None?; .. };
ãããåœé ããããšãã§ããŸãããã©ã¡ããããªãããããŒã§ãã
@withoutboats @nrc @joshtriplettãããŸã§ã«ããŸããŸãªäººã ã«ãã£ãŠãããããããŠãŒã¹ã±ãŒã¹ã«ã€ããŠäœãèãã¯ãããŸããïŒ
Ping @withoutboats @nrc @joshtriplett ïŒïŒ-ååã®langããŒãã£ã³ã°ã§ã¯ãäžèšã®äŸã®ããã€ããæžãçŽããŠãããããã©ã®ããã«æ§æãããã瀺ãå¯èœæ§ã«ã€ããŠè©±ãåããŸããã
ã°ã¬ã€ãã³ã®ããã°æçš¿ã«åºæ¿ãåããŠããã®æ©èœãå®å®ãããããªãçç±ã«ã€ããŠããã«ã³ã¡ã³ããæžããŸããã ãã®å®éšã«åæããã®ã¯å°ãäžå ¬å¹³ã ãšæããŸãã ãã¬ãã£ãã§ããããšã蚌æããã®ã¯é£ããã§ããããã®åœ¢åŒã®å¶åŸ¡ãããŒãèšèªã«è¿œå ããããšãžã®å察ãã©ã®ãããªã³ãŒããµã³ãã«ã§å æã§ãããããããŸããã
ç§ã®å šäœçãªå察æèŠã¯ãRustããã以äžã®ãªãŒãã³ãšã³ãã®åå²å¶åŸ¡ãããŒæ§é ãå¿ èŠãšããªããšåçŽã«èããããšã§ãã äžèŽãšã«ãŒããããããããã®ä»£æ°çããŒã¿åãã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒãé¢æ°æœè±¡åãããã³ãã¯ãã«å ããŠãéåžžã®ãŠãŒã¶ãŒãåŠçã§ããå¶åŸ¡ãããŒãã¿ãŒã³ã®èšå€§ãªé åãäœæããŸãã ããã¯ãã§ã«å§åçãªæ¹åã«é²ãã§ããããã«æããŸããç§ã¯å人çã«ã決å®æšã®è€éãã管çããããã«ããã€ãã®ã«ãŒã«ãæ¡çšããå¿ èŠããããŸããïŒããšãã°ãæåã®ãã¹ãšããŠã³ã³ãããŒã¿ã«å°éããªãã«ãŒã«ããããŸããå®éãããã¯ã³ã³ãããŒã¿ãšããŠããè¯ãã§ãããïŒã
Rustã®å¶åŸ¡ãããŒããŒã«ããã¯ã¹ã«ãããåºãé©çšå¯èœã§æè»æ§ã®é«ãéžæè¢ãè¿œå ããããšã¯é¿ããããšæããŸãã ç§ã¯ãç¹å®ã®éèŠãªãŠãŒã¹ã±ãŒã¹ã察象ãšãã人éå·¥åŠã«å€§ããªåœ±é¿ãäžããå¶åŸ¡ãããŒãè¿œå ããããšã«ã®ã¿é¢å¿ããããŸãã ç§ã®æèŠã§ã¯ããã®æ§æã¯æ£ç¢ºã«éã®å±æ§ãæã£ãŠããŸããããã¯åºãé©çšå¯èœã§ãéåžžã«ç·æ§çã§ãããä»ã®æ¹æ³ããããããã«äŸ¿å©ã§ãã
ããã«ããã®æ©èœã«ã¯ãã1ã€ã®éåžžã«æªãå質ããããšæããŸããããã¯ãäžäœäºææ§ã«ããäžèŠåæ§ã§ãã break
ãã©ãã«ä»ããããŠããªãã«ãŒãããæãåºããšãã«ãã©ãã«ä»ããããŠããå Žåã«ã®ã¿ãããã¯ããæãåºãã®ã¯éåžžã«äžèŠåã§ãã ããã«ãããæ©èœãéåžžã®å Žåãããç解ãã«ãããªãããã¬ãã£ããªå±æ§ãææªã ãšæãå Žæãã€ãŸãç解ãããããæªåããŸãã
ãŸããçŠç¹ãåœãŠãã¹ãã¯ããã«éèŠãªæ©èœããããããããšæããŸããããã«ã€ããŠã¯æ確ã«åãããŠããã®ã§ããã®ææ¡ã«ã€ããŠé·ãã³ã³ã»ã³ãµã¹ããã»ã¹ãçµãããããæ€èšã延æããããšæããŸãã
æ£ããããšã¯ããã®æ©èœã䜿çšãããã¹ãŠã®ã¯ã¬ãŒããèŠã€ããŠããã®æ©èœã䜿çšããªãããã«ã³ãŒããæžãçŽãããšã ãšæããŸãã
@withoutboatsç§ãåãå察æèŠã®å€ããéåžžã«å¹æçã«è¡šçŸããŠããã ãããããšãããããŸãã
ç§ã¯å ã«é²ãã§ãããã§å€§èã«ãªããŸãïŒ
@rfcbotãã£ã³ã»ã«
@rfcbot延æ
@joshtriplettã®ææ¡ã¯ãã£ã³ã»ã«ãããŸããã
ããŒã ã¡ã³ããŒã®@joshtriplettã¯ãããã延æããããšãææ¡ããŸããã 次ã®ã¹ãããã¯ãã¿ã°ä»ããããæ®ãã®ããŒã ã«ããã¬ãã¥ãŒã§ãã
çŸåšãªã¹ããããŠããæžå¿µã¯ãããŸããã
ã¬ãã¥ãŒã¢ã®éåæ°ãæ¿èªãããšïŒãããŠå察ã¯ãããŸããïŒãããã¯æçµã³ã¡ã³ãæéã«å ¥ããŸãã ãã®ããã»ã¹ã®ã©ã®æç¹ã§ãæèµ·ãããŠããªã倧ããªåé¡ãèŠã€ããå Žåã¯ã声ãäžããŠãã ããã
ã¿ã°ä»ããããããŒã ã¡ã³ããŒãç§ã«äžããããšãã§ããã³ãã³ãã«ã€ããŠã¯ããã®ããã¥ã¡ã³ããåç §ããŠãã ããã
@withoutboats
Rustã®å¶åŸ¡ãããŒããŒã«ããã¯ã¹ã«ãããåºãé©çšå¯èœã§æè»æ§ã®é«ãéžæè¢ãè¿œå ããããšã¯é¿ããããšæããŸãã ç§ã¯ãç¹å®ã®éèŠãªãŠãŒã¹ã±ãŒã¹ã察象ãšãã人éå·¥åŠã«å€§ããªåœ±é¿ãäžããå¶åŸ¡ãããŒãè¿œå ããããšã«ã®ã¿é¢å¿ããããŸãã
ç§ã¯ãã®ååã«åæãããã®æ©èœã¯ãã®åºæºãæºãããŠãããšæããŸãïŒç¹å®ã®éèŠãªãŠãŒã¹ã±ãŒã¹ã察象ãšãã䜿ãæ
£ããå¶åŸ¡ãããŒïŒã äžèšã®äŸã®ãããªã³ãŒãã確èªãŸãã¯èšè¿°ããããšãäœåºŠããããŸãããããããã®ã³ãŒããèšè¿°ããããã®æãã¯ãªãŒã³ã§èªã¿ãããæ¹æ³ã§ãããšæããŠããŸãã loop
ãããªæ¢åã®å¶åŸ¡ãããŒæ§é ãåå©çšããæåŸã«ç¡æ¡ä»¶ã®break
ãä»ãããšããŠãŒã¶ãŒã¯èª€è§£ãæããŸãããŸãã ?
ã await!
ã䜿çšãããããããã«é©çšã§ããé¢æ°ã§ã¯äžååãªããšããããããŸãã
loop
+æ«å°Ÿã®break
ã¯æ··ä¹±ãæãããã代ããã«ãç°ãªãã¹ã¿ã€ã«ã®å¶åŸ¡ãããŒçšã«äœæãããããŒã«ãæªçšããããã«ãŠãŒã¶ãŒã«èŠæ±ãããããããŠãŒã¶ãŒã«æ¬åœã®æå³ãè¡šæããŠãããããšããå§ãããŸãã ããã¯ãä»ã®èšèªãwhile true { ... }
æºè¶³ããŠããã®ã«å¯Ÿãã loop
æ§é ããæã£ãŠãããšããäºå®ã«äŒŒãŠããŸãã ããããããšã§ãããæ確ãªæå³ãè¡šçŸããçµæãšããŠããèªã¿ãããã³ãŒããæžãããšãå¯èœã«ãªããŸãã
ããã«ããã®æ©èœã¯ãRustã«åžžã«æåŸ ãããŠãããã®ã§ããããã¯ãã©ãã«ä»ãããããã®ãšã©ãã«ä»ãããããã®ããã®ãã¬ãŒã¯ãèæ ®ããå Žåããããã¯ã«ã©ãã«ãä»ãããããããã¯ãå£ãããã§ããªããšããäºå®ã¯æ··ä¹±ãæããŸããç§ã«ã¯ééã£ãŠããŸãã
TL; DRïŒãã®æ©èœã¯ããã¹ããããif
ã¹ããŒãã¡ã³ããä»ããŠããŸãã¯loop-break-valueãªã©ã®ä»ã®æ§é ãæªçšããããšã«ãã£ãŠã®ã¿èšè¿°ã§ãããå®éã®ãŠãŒã¹ã±ãŒã¹ããµããŒãããŠãããšæããŸãã ããã¯ããããã¯ãæåŸ
ã©ããã«åäœããããã«ããè¡šé¢æ§æãžã®å°ããªè¿œå ã§ãããããªãããã¯ãªãã®ã§ã¯ãªããç§ãæå³ããã³ãŒããèšè¿°ã§ããããã«ããŸãã
@cramertjç³ãèš³ãããŸããããå°ãæ··ä¹±ããŠããŸãã ããªããš@ withoutboats / @joshtriplettãæ£å察ã®ããšãèšã£ãŠããããã§ããã
ïŒFWIWãç§ã¯@withoutboats / @ joshtriplettã«åæããŸãïŒ
@ mark-imãã®æ©èœãéããå¿ èŠãããããšã«åæããŸããã ç§ã¯ãããããŒãžããå¿ èŠããããšæããŸãïŒç§ã®ã³ã¡ã³ããšäžã®ãã§ãã¯ããã¯ã¹ã§ç€ºãããŠããããã«ïŒã
ç§ã¯@withoutboatsã«åæããŸããç¹å®ã®éèŠãªãŠãŒã¹ã±ãŒã¹ã«åæ©ä»ããããŠããªãããªãã¿ã®ãªãæ°ããããŒã«ãè¿œå ããã¹ãã§ã¯ãªããšããããšã§ãã ãã®æ©èœã¯èŠªãã¿ããããç¹å®ã®éèŠãªãŠãŒã¹ã±ãŒã¹ã«ãã£ãŠåæ©ä»ããããŠãããšæããŸãã
@withoutboats
ãã®å®éšã«åæããã®ã¯å°ãäžå ¬å¹³ã ãšæããŸãã ãã¬ãã£ãã§ããããšã蚌æããã®ã¯é£ããã§ããããã®åœ¢åŒã®å¶åŸ¡ãããŒãèšèªã«è¿œå ããããšãžã®å察ãã©ã®ãããªã³ãŒããµã³ãã«ã§å æã§ãããããããŸããã
ç§ãã¡ãèšå®ããåºæºã¯ããlabel-break-valueã§ããé©åã«èšè¿°ã§ããã³ãŒããååšããªãããšã瀺ããŠãã ãããã§ã¯ãªããšæããŸãããlabel-break-valueãå¿ èŠãªç¹å®ã®ã³ãŒããå¥ã®æ¹æ³ã§ããæ確ã«æžãããŠããŸããã ãã®äŒè©±ã¯ãããªããä»ã®äººããã®æ©èœã圹ç«ã€å Žæã®åæ©ä»ãã®äŸãæ±ãããšãã«å§ãŸãããã®ã¹ã¬ããã®å€ãã®äººã ïŒç§ãå«ãïŒãäŸãæäŸããŸããã 圌ãã¯ããªãã@joshtriplettã«èª¬åŸåããªãã£ãã®ã§ãç§ã¯ä»ãããªããšããªãã®äž¡æ¹ãlabel-break-valueãªãã§ãããã®äŸãã©ã®ããã«æžãããå°ããŠããŸãã äŸãlabel-break-valueã䜿çšããŠããé©åã«èšè¿°ãããŠããããšã«åæããŸããïŒ ãããããªãããŠãŒã¶ãŒãæœåšçã«è€éãªãããã¯ç Žå£ã³ãŒããæžãããšãèš±å¯ããã³ã¹ããäžåãã»ã©äžè¬çã§ã¯ãªããšããããªãã®ç«å Žã¯ãããŸããïŒ
ç§ã¯å ã«é²ãã§ãããã§å€§èã«ãªããŸãïŒ
@rfcbotãã£ã³ã»ã«
@scottmcmã®ææ¡ã¯ãã£ã³ã»ã«ãããŸããã
ãããã¯ãã©ãã«ä»ããããŠããªãã«ãŒãããæãåºããšãã«ãã©ãã«ä»ããããŠããå Žåã«ã®ã¿ããããã¯ããæãåºãã®ã¯éåžžã«äžèŠåã§ãã
ã¹ã¬ããã§èšåãããŠãããã©ããã¯ããããŸãããããããã¯ãbreak;
ã§ã¿ãŒã²ããã«ã§ããªããããããæå³ã§ã©ãã«ä»ããããã¯ã¯ã©ãã«ä»ãloop
ããã質çã«åŒ·åã«ãªããŸãã
ã©ãã«ä»ããããã¯ã䜿çšãããšããã®å
éšã§break;
ããµããŒãããå¶åŸ¡ãããŒãã¯ããäœæã§ããŸãããã¯ãã€ã³ãã©ã¯ãŠãŒã¶ãŒã«ã¯å®å
šã«èŠããŸããã
ã©ãã«ä»ãã«ãŒãã§ã¯ãã©ãã«ãªãã®break;
ã䜿çšãããæå³ããã¿ãŒã²ããã§ã¯ãªãã以äžã®ãã¯ãã«ãã£ãŠãã£ããããããªã¹ã¯ãåžžã«ãããŸãã
ç§ã®EXPR is PAT
ãããã¿ã€ãã§ã¯ãæåã¯éåžžã®loop
ãè±ç³ã«äœ¿çšããŸããããåè¿°ã®åé¡ã®ããã«åé¡ãçºçããç¹ã«ã³ã³ãã€ã©ãããŒãã¹ãã©ããã§ããŸããã§ããã
åœæãã©ãã«ä»ããããã¯ã¯å®è£
ãããŠããªãã£ãã®ã§ãç¹å¥ãªãã¿ãŒã²ããäžå¯èœãªloop
ããASTã«å°å
¥ããè±ç³ã«äœ¿çšããå¿
èŠããããŸããã
ç§ã®ãã§ãã¯ããã¯ã¹ã§ç€ºãããŠããããã«ãç§ã¯ä»ãããå®å®ãããããšã«è³æã§ãã ããã¯ããã¯ãã容æã«ããèšèªã®èªç¶ãªæ¡åŒµã§ãããæ©èœãã¿ãŒã³ã«ããŸãé©åããªãå¶åŸ¡ãããŒã ãšæããŸãã NLLã«ãã£ãŠã©ã€ãã¿ã€ã ãéåå¥ã«ãªããŸãããã¿ã€ãã¢ã¯ãªãã·ã§ã³ãšåãããã«ããããã¯ã«ã©ã€ãã¿ã€ã ã§æ³šéãä»ããããšãã§ããããšããæè²çã«åœ¹ç«ã€ãšæããŸãã
ãã ããã³ã³ã»ã³ãµã¹ãåŸãã®ã¯é£ãããããã³ã³ã»ã³ãµã¹ãèŠã€ããããã«ã httpsïŒ//github.comã§ã®å®éšã®äœæ¥ãã¹ããŒãã¢ããããã ãã§ãªãã try { ... }
äœæ¥ãã¹ããŒãã¢ããããããšããå§ãããŸãã / rust-lang / rust / issues / 53667 ïŒãŸãã¯@petrochenkovã®EXPR is PAT
æ§æãšåæã«ïŒã
ç³ãèš³ãããŸããããããã®çŸåšã®ç¶æ³ã¯ã©ãã§ããïŒ ç§ãã¡ã¯FCPã«ããŸããïŒ
@ mark-imã©ãã«proposed-final-comment-period
ãŸãã¯final-comment-period
ããããåé¡ã«ãªã£ãŠããªããããFCPãŸãã¯ãã®ææ¡ã¯ãããŸããã
ïŒ3ã€ãé€ããã¹ãŠã®ãã§ãã¯ããã¯ã¹ããªã³ã«ããŠFCPã«å ¥ããšããæåã®ææ¡ããããŸããããFCPã«åå ããããšã¯ãããŸããïŒ
@scottmcm
ç§ã¯å ã«é²ãã§ãããã§å€§èã«ãªããŸãïŒ
@joshtriplettã®èšèé£ãã®ãã®ç¹°ãè¿ãã¯ãç§ãéåžžã«ç®èã ãšèªãã ã langããŒã ã®ã¡ã³ããŒãšããŠãä»ã®å¯çš¿è ãšã®ã³ãã¥ãã±ãŒã·ã§ã³æ¹æ³ã«æ³šæããŠãã ããã
å®éãããã¯è¯ãèãã ãšç§ã¯ç¢ºä¿¡ããŠããŸãã ç§ã¯ä»¥åããã®æ©èœã«éåžžã«å察ããŠããŸããããããã¯ããã°ã©ããŒã䜿çšãã¹ãæ©èœã§ã¯ãªããšæããŸãã äžèšã®ãŠãŒã¹ã±ãŒã¹ã¯ãã説åŸåããããŸãããããã§ãå°ããªé¢æ°ã«çµã¿èŸŒãæ¹ããããšæããŸãã ç§ãæ¬åœã«èª¬åŸåããããšæã£ãã®ã¯ããã¯ãããã®åºåã§ãã ãŠãŒã¶ãŒããªãããã®æ¹æ³ã§return
æ¿å
¥ã§ããå Žåãããã¯é¢æ°ãžã®å€æãæé€ããŸãã ããããç§ãã¡ãæ¬åœã«æãã§ããã®ã¯ãåçŽãªgoto
ã§ãã ã倧ããªã解決çã¯ãããŒã¯ã³ã§ã¯ãªããHIRãåºåã§ãããã¯ãã§ãããã©ããçåã«æããŸãããããã¯å°ããããŸãã ãããŸã§ã®éããã¯ãã®äœè
ã®ããã«ãã®æ©èœãããã°ããã®ã§ããã©ã³ã¹ããšã£ãŠå®å®ãããå¿
èŠããããšæããŸãã
誰ããç©äºãããé ããçŽæçã§ãªãã人éå·¥åŠçã§ãªãæ¹æ³ã§æžãçŽãããšããããšããããŸããïŒ
ãããã¯ãå£ãã®ã¯äººéå·¥åŠçãªåŸè€ã®ãããªãã®ã§ãã gotoã®åé¡ã¯ã»ãšãã©ãããŸããããåãããã匷åã§ãã
@nrcã®å¿ã®å€åã«åºã¥ããŠãç§ã¯label_break_value
ãå®å®ãããããã«ç§»åããŸãã
ç§ã®ã¬ããŒãã¯https://github.com/rust-lang/rust/issues/48594#issuecomment-421625182ã«ãããŸãã
@rfcbotããŒãž
@rfcbotã¯FIXME -in-testsã«é¢ä¿ããŸã
@joshtriplettãš@withoutboatsããŸã æ±ããŠããæžå¿µãæèµ·ããæéã確ä¿ããããã«ããã®ãããªæžå¿µãèšé²ããŸãã 圌ãããã®ãããªæžå¿µãæã£ãŠããªããšç§ã«èšã£ããããŸãã¯åœŒãã®äžäººã圌ãèªèº«ã®æžå¿µãæèµ·ãããšããç§ã¯ãããæã¡äžããŸãã
@rfcbotã®æžå¿µgive-boats-and-josh-time-to-raise-any-concerns-they-might-still-have
ãã®åé¡ããã³ä»ã®ãã¹ãŠã®åé¡ã®ããã»ã¹ããŒããšããŠãææ¡ãååŸã«ãã£ã³ã»ã«ããããšã¯é¿ããŠãã ãã...äœããåé²ããå¿ èŠããªããšæãããå Žåã¯ãæžå¿µäºé ã䜿çšããŠãã ããã
ããŒã ã¡ã³ããŒã®@Centrilã¯ããããããŒãžããããšãææ¡ããŸããã 次ã®ã¹ãããã¯ãã¿ã°ä»ããããæ®ãã®ããŒã ã¡ã³ããŒã«ããã¬ãã¥ãŒã§ãã
æžå¿µïŒ
ã¬ãã¥ãŒã¢ã®éåæ°ãæ¿èªãããšïŒãããŠæ倧2ã€ã®æ¿èªãæªè§£æ±ºã«ãªããšïŒããããæçµã³ã¡ã³ãæéã«å ¥ããŸãã ãã®ããã»ã¹ã®ã©ã®æç¹ã§ãæèµ·ãããŠããªã倧ããªåé¡ãèŠã€ããå Žåã¯ã声ãäžããŠãã ããã
ã¿ã°ä»ããããããŒã ã¡ã³ããŒãç§ã«äžããããšãã§ããã³ãã³ãã«ã€ããŠã¯ããã®ããã¥ã¡ã³ããåç §ããŠãã ããã
@rfcbotæžå¿µããããã³ã°
ç§ã¯ãã§ã«ç§ã®ç«å Žãè¡šæããŸãããããã¯ãRustã«ãã®æ©èœãæãããã¹ãã§ã¯ãªããšããããšã§ãã ããããããžã§ã¯ãã«ãšã£ãŠååã«é«ãåªå é äœã§ãããè¿ãå°æ¥ãã€ã§ããã®ææ¡ã«ã€ããŠåæã«éããããã»ã¹ã«åŸäºããããšã«æéãå²ãããšãã§ãããšã¯æããŸããã
@rfcbotã¯ã give-boats-and-josh-time-to-raise-any-concerns-they-might-still-haveã解決ããŸã
éèŠãªå ŽåïŒ Zigã«ããã®æ©èœããããŸãã
2019幎1æ5æ¥åå9æ18å29ç§AM PSTã§ãããºãã¯æFarrokhzadã®[email protected]ã¯æžããŸããïŒ
@rfcbot解決
ããŒããäžããŠãæžå¿µãæèµ·ããæéãäžãã-圌ãã¯ãŸã æã£ãŠãããããããªã
ç§ãã¡ã¯ãã§ã«æžå¿µãæèµ·ããŠããããããã¯ãããã¯ãã®èšèªã§ãã£ãŠã¯ãªããªãããšããããšã«ãªããŸãã ãããã®æžå¿µã¯æ¶ããŸããã
ç§ã¯ããã¯ããIRãçæã§ããã¯ãã§ãããšããnrcã®æŠå¿µã奜ã¿ãŸãã ããã¯ãèšèªã®è¡šé¢çãªæ§æã«å¿ ãããè¿œå ããããšãªãããããšå€ãã®å°æ¥ã®å¯èœæ§ã«å¯Ÿããå®å šã«åççãªè§£æ±ºçã®ããã«æãããŸãã
@joshtriplett
ç§ãã¡ã¯ãã§ã«æžå¿µãæèµ·ããŠããããããã¯ãããã¯ãã®èšèªã§ãã£ãŠã¯ãªããªãããšããããšã«ãªããŸãã ãããã®æžå¿µã¯æ¶ããŸããã
æ確ã«ããããã«ãç§ã¯ãããã@rfcbot
ç»é²ããããšãæå³ããŸãããããã¯ãææ¡ããã£ã³ã»ã«ãããåŸãããããç»é²ãããå€ãæžå¿µãèªèããªãããã§ãã ç§ã¯ããªããæžå¿µãæã£ãŠããããšãç¥ã£ãŠãã
ç§ã¯ããã¯ããIRãçæã§ããã¯ãã§ãããšããnrcã®æŠå¿µã奜ã¿ãŸãã ããã¯ãèšèªã®è¡šé¢çãªæ§æã«å¿ ãããè¿œå ããããšãªãããããšå€ãã®å°æ¥ã®å¯èœæ§ã«å¯Ÿããå®å šã«åççãªè§£æ±ºçã®ããã«æãããŸãã
ãããã©ã®ããã«èŠããã®ãããããããè¯ãã¢ã€ãã¢ã§ããã®ããç§ã«ã¯ããããŸããã ããã¯ããªãæšæž¬çã§ããïŒãèšèšãåæããããŸã§ã«äœå¹Žãããããããããªãããšããæå³ã§ïŒããã¯ãã®çµæã§ãã以äžã®å©ç¹ãããbreak 'label expr
ã®ããªãäœã³ã¹ãã®ãœãªã¥ãŒã·ã§ã³ãããã³ã¹ãããããããã§ãæ¡åŒµã
_ãã®åé¡ããã³ä»ã®ãã¹ãŠã®åé¡ã®ããã»ã¹ããŒããšããŠãææ¡ãååŸã«ãã£ã³ã»ã«ããããšã¯é¿ããŠãã ãã...äœããåé²ããå¿ èŠããªããšæãããå Žåã¯ãæžå¿µäºé ã䜿çšããŠãã ããã_
ç§ã¯ç¢ºãã«ããã«åæããŸãã ãã ããããã§ã®é©åãªã¡ã«ããºã ã¯æžå¿µäºé ã§ã¯ãªããšæããŸãã æžå¿µã¯ãããã解決ãããããç§ã¯æ¿èªããã ãããã®ããã§ãã ããã§ã®åé¡ã¯ããããã¯ãŸã£ããå ã«é²ãŸãªãã¯ãã§ãããããŒãžãã¯ééã£ãã¿ãŒã²ããã§ãã代ããã«ãéãããããšãæã¿ãŸããã§ãã ããã¯ãæžå¿µãã®ã¡ã«ããºã ã«ãã£ãŠããŸãåŠçãããªãããã§ãã
@joshtriplettèå³æ·±ãç¹ãšããŠãããªãã以åã«èšåããæèµ·ãããæžå¿µã«ç§ãåããããšãã§ããŸããïŒ ç§ã¯å ã®RFCã¹ã¬ããã調ã¹ãŸããããå ·äœçã«äœãåç §ãããŠããã®ãããããŸããã ããããšãã
@rfcbotã¯ã人éå·¥åŠãšæé©å/ããã©ãŒãã³ã¹ã«é¢ãããã®ã§ãïŒããã©ãŒãã³ã¹ãšäººéå·¥åŠã®äœäžã®éã³ãªãäŸhttps://gist.github.com/SoniEx2/fc5d3614614e4e3fe131#file-special-luaïŒ
ãã®æš©å©ã䜿çšããŠããå Žåã¯idk
ïŒãè±ç³ãã®äžéšïŒå®éã«ã¯è±ç³ãšã¯æ£å察ã ãšæããŸã-gotoã¯ããªããã£ãã§ãããè±ç³ãgotoã«ã«ãŒãããŸãïŒãéåžžã«ã²ã©ãããšã«æ³šæããŠãã ããïŒ
ïŒluaã«ã¯ã©ãã«ãä»ããŠããªããããgotoã䜿çšããå¿ èŠãããããšã«ã泚æããŠãã ãããããã§ããå°ãªããšã1ã€ã®ãã¬ãŒã¯ãããã¯ãå¿ èŠã«ãªããšæããŸãããããããããã¯ãªãŒã³ãªãè±ç³ããå¿ èŠã§ããïŒ
@rfcbotã®æžå¿µã¯
ïŒ @centrilãDiscordã§ææ¡ãã
ãããå®å®åã«è³æãå察ãã¯ããããŸããããä»æ¥ã®å®å®ããRustã§ãšã³ã³ãŒãããã®ã¯ç°¡åã§ãã
fn main() {
'foo: for _ in 0..1 {
println!("break");
break 'foo;
println!("broken");
}
}
ãããã£ãŠãäžæ¹ã§ã¯ãèšèªãã»ãšãã©æé·ããŠãããã for _ in 0..1
çç¥ããŠããããããããå®å®ãããå¿
èŠããããŸããäžæ¹ãä»æ¥ã¯ç°¡åãªæ¹æ³ãããããããããå®å®ãããã¹ãã§ã¯ãããŸããïŒããã¯æ¬åœã«å¿
èŠã§ãïŒãããŠç§ãã¡ã¯ãã®ãããªã¢ã³ããã¿ãŒã³ã®äœ¿çšã奚å±ãã¹ãã§ã¯ãããŸããã
ã¡ãã£ãšçŽããããããã§ãã©ãã«ã¯äžèŠã§ãã
ãããã¯ãå£ãã®ã¯ã¯ããã«æ··ä¹±ãå°ãªããã©ãã«ãå¿ èŠã§ãã
ãããã¯ãå£ãããšãã¢ã³ããã¿ãŒã³ã ãšæãçç±ãããããŸããã Xã«é©çšãããããšã¯ãå¿ ãããnot-quite-Xã«é©çšããããšã¯éããŸããã ç§ã¯299.99ãã«ã§ã³ã³ãã¥ãŒã¿ãŒãè³Œå ¥ã§ãããããããŸãããã299.98ãã«ã§ã¯ãªãããåºæ¬çã«ãåãã§ãã
@nrc
ãããå®å®åã«è³æãå察ãã¯ããããŸããããä»æ¥ã®å®å®ããRustã§ãšã³ã³ãŒãããã®ã¯ç°¡åã§ãã
'foo: for _ in 0..1 { break 'foo; }
ãããã£ãŠãäžæ¹ã§ã¯ãèšèªãã»ãšãã©æé·ããŠãããã
for _ in 0..1
çç¥ããŠããã ããªã®ã§ããããå®å®ãããå¿ èŠããããŸãã
'a: for _ in 0..1 { break 'a }
ã¯ãæ瀺çãªç®æšã誰ã«ã'a: { ... break 'a e; ... }
æžãããªãããšã§ããå Žåã«æ©èœããå¯èœæ§ããããŸãã ãã ããã¬ããŒãžIRãçæãããšããæ¬ ç¹ããããã¿ã€ããã§ãã«ãŒãMIRãããã³LLVMãåŠçããå¿
èŠããããããã³ã³ãã€ã«æéãæªåããŸãïŒå°ãªããšãLBVãšæ¯èŒããŠïŒã
äžæ¹ãä»æ¥ïŒæ¬åœã«å¿ èŠãªå Žåã«ïŒç°¡åã«å®è¡ã§ããæ¹æ³ãããããããããå®å®ãããã¹ãã§ã¯ãããŸããããŸãããã®ãããªã¢ã³ããã¿ãŒã³ã®äœ¿çšãæšå¥šããã¹ãã§ã¯ãããŸããã
LBVãã¢ã³ããã¿ãŒã³ã§ããããšã«åæã§ããªããšæããŸãã çµå±ã®ãšãããRustãé¢æ°åããã°ã©ãã³ã°èšèªã«ããã ãã§ãªããRustã«åœä»€åã®å¶åŸ¡ãããŒãå¹ã蟌ãããšãéžæããŸããã ç§ã¯ãã®ãããªå¶åŸ¡ãããŒãæããªãæ¹ãããã£ããããããŸããããããã¯äºå®ã§ãã åé¡ã¯ãLBVãRustã®ä»ã®åœä»€åã¡ã«ããºã ãããã©ããããããèªã¿ã«ãããåé¡ããããã©ããã§ãã ããã§ã¯ãªããšæããŸãã
é¢æ°ã¯çãïŒåçŽã«ïŒæµ ãïŒã€ã³ãã³ãïŒã«ä¿ã€ã¹ãã ãšæããŸãããé·ããŠæ·±ããããé·ããŠæµ ãæ¹ãè¯ãã§ãã LBVã¯ãããè€éãªãããŒã®äžéšã§æ·±ããåé¿ããã®ã«åœ¹ç«ã€ããšãããããŸããã LBVã¯ããžã£ã³ãå ãæ瀺çã«ç€ºãããããŒãããç解ããŠããã®ã§ãç§ã«ãèªã¿ãããããã«èŠããŸãã å šäœãšããŠãLBVã¯æãåé¡ã®å°ãªãåœä»€åå¶åŸ¡ãããŒã®1ã€ã§ããããšãããããŸããã
'a: for _ in 0..1 { break 'a }
'a: { ... break 'a e; ... }
ãããã¯äŒŒãŠããããã«èŠãããããããŸãããããŸã£ããåãã§ã¯ãããŸããã åè ã¯ééããªãã¢ã³ããã¿ãŒã³ã§ãããåŸè ã¯ééããªãããã§ã¯ãããŸããã
loop {}
ãšwhile true {}
ïŒ loop
ã¯å€ãè¿ãããšãã§ããŸããã while
ã¯è¿ãããšãã§ããŸããããå°ãç¡èŠããŸãããïŒ
@nrcãã ãããŸã£ããåãåäœã¯ãããŸããïŒ https ïŒ
ç¹ã«ã break;
ãšcontinue;
ã¯ç°ãªããŸãã ãã®æ¶ç©ºã®ã³ãŒããèããŠã¿ãŸãããã
some_macro! {
...
break;
...
}
some_macro
ã'a { ... }
ã«å±éãããå Žåã 'a: for _ 0..1 { ... }
ã«å±éãããå Žåãšã¯åäœãç°ãªããŸãã
@ SoniEx2
誰ããç©äºãããé ããçŽæçã§ãªãã人éå·¥åŠçã§ãªãæ¹æ³ã§æžãçŽãããšããããšããããŸããïŒ
ããç©æ¥µçãã€çç£çãªæ¹æ³ã§ããªãã®æžå¿µãäŒããŠã¿ãŠãã ããã ä»äººãå²ç¬ããŠãç§ãã¡ã¯ã©ãã«ãè¡ããã人ã ã¯æ°åãæªããªããŸãã Rustãå¯èœãªéãæé«ã®ããã°ã©ãã³ã°èšèªã§ããããšã確èªãããã®ã§ãç§ãã¡å šå¡ãããã«ããŸãããã®ããã»ã¹ã®äžéšã¯ãã³ãã¥ããã£ãå¯èœãªéãååãã§å±ã¿ã«ãªãããšãä¿èšŒããããšã§ãã
ãããããç§ã¯ããã€ãã®å€§ããªèª€è§£ã«é¥ã£ãŠããŸãã ç§ã¯LLVMãRustã®å éšããŸãã¯åæ§ã®ãã®ã®å°é家ã§ãããµããããŸããã ãšã¯èšããã®ã®ãç§ã¯ã³ã³ãã€ã©ãŒã®èšèšã«ã€ããŠåºæ¬çãªçµéšãæã£ãŠãããæžå¿µäºé ã«ã€ããŠæ··ä¹±ããŠããŸãã 誰ãã説æããŠããããæ¬åœã«ãããããã§ãã
ç§ãç©äºãèŠãæ¹æ³ïŒ
1ïŒããã¯ãããŒå¶åŸ¡ã®äººéå·¥åŠãå€æŽããŸããã Rustã«ã¯ã 'a: loop { if x { break 'a; } break; }
ãªã©ã®ãã®ãããªæ§é ããã§ã«ååšããŸãã
2ïŒããã¯ããããã¯ãªã¿ãŒã³ã®äººéå·¥åŠãç¹ã«å€æŽãããã®ã§ã¯ãããŸãããã«ãŒãã¯ãã§ã«å€ãè¿ãããšãã§ããŸãã
ç§ã«ã¯ãããã¯Rustããã§ã«æã£ãŠããäžé£ã®æ©èœã®çŽæçãªå®æã®ããã«æããŸã-ãã¹ãŠã®ïŒãŸãã¯å°ãªããšããã以äžã®ïŒãããã¯ã«å¯ŸããŠãããã®æ©èœãäžè¬åããŸãã
ãããgoto
ã«ããŸãã«ã䌌ãŠãããšããæžå¿µã«é¢ããŠãç§ã¯ããã«æ··ä¹±ããŠããŸãã ããã¯ãRustã§ãŸã å¯èœã§ã¯ãªããã®ãè¿œå ãããåŸæ¹ãžã£ã³ãïŒ goto
䜿çšãäžååã§ã¹ãã²ããã£ã³ãŒãã«ååž°ããäž»ãªåé¡ïŒãèš±å¯ããªãããã倱æããŸããããã¯äºå®äžãåžžã«å£ããŠããã«ãŒãã®åãªãæ§æç³è¡£ã§ããããã«æãããããããã®æ©èœãcodegenã«ã©ã®ãããªåœ±é¿ãäžããå¯èœæ§ãããããç解ããããã
誰ããç§ã«ãã£ãšå ·äœçãªèšèã§ã©ããªåé¡ãååšããã説æã§ããŸããïŒ
æç¶ãäžãIMOã¯concern blocking
ãŸãã¯concern should-close-not-merge
ã¹ã¿ã€ã«ã®æžå¿µäºé
ãæåºããããšã¯é©åã§ã¯ãããŸããããã®æžå¿µäºé
ã«ã¯ãææ¡ãããæ©èœã®åé¡ãã解決ã«åããŠåãçµãããšãã§ãããã®ã¯ãªã¹ããããŠããŸããã -ããã¯åãªãããŒããããã«ãŒã§ãã rfcbotã®æžå¿µã¡ã«ããºã ã䜿çšããŠæ©èœãæ°žç¶çã«ãããã¯ããå¿
èŠã¯ãªããšæããŸãããæžå¿µã®è§£æ±ºã远跡ããããããé©åã«å¯ŸåŠ/解決ãããŠããããšã確èªããããã«ã®ã¿äœ¿çšããå¿
èŠããããŸãã ããã»ã¹ã«ã€ããŠã®ç§ã®ç解ã¯ããã§ãã¯ãããŠããªããã§ãã¯ããã¯ã¹ã䜿çšããŠäžäžèŽãããŒã¯ããããšã§ããããã®æžå¿µã¯ãæ©èœãšãã®æ©èœã«é¢ããç¹å®ã®è°è«å¯èœãªåé¡ãæåºããããã«äœ¿çšãããããšã§ããã
ç§ãå人çã«åæããªãã£ãä»ã®æ©èœïŒããšãã°ãuniform_pathsãåç §ïŒã«ã€ããŠåæ§ã®ãç§ã¯ããã奜ãã§ã¯ãªãããšããæžå¿µãæèµ·ããããšãã§ããŸããããç¡éã®è°äºåŠšå®³ãèšèªèšèšãè¡ãããã®çç£çãªæ¹æ³ã§ãããšã¯æããŸããã
ãã®æ©èœãèšèªã®ä»ã®éšåãšçžäºäœçšããæ¹æ³ã«ã€ããŠç¹å®ã®æžå¿µãããå Žåã¯ã話ãåã/解決ããå¿
èŠããããŸãïŒããšãã°ããããã¯try { ... }
ã«ãã£ãŠåé¿ã§ããããã§ãããŸãã¯ãæ
£çšçã«å€§ããªé¢æ°ãïŒãã®ããã«ãã¡ã€ã«ããæ¹ãçç£çã ãšæããŸãã
@cramertj @Centrilãæ瀺çã«ææ¡ããŠããªããã°ããã®ãããªæžå¿µããã®åœ¢åŒã§æåºããããšã¯ãªãã£ãã§ãããã ïŒFCPãææ¡ãããŠããªãã£ãããç§ã¯å人çã«å¥œãã§ããã§ããããïŒ
誰ãããè¿ãã以å€ã®äœããrfcbotãšP-FCPãæåºããå Žåã¯ããããã¯éããªããã°ãªããŸãããã®ããã®é©åãªããã»ã¹ãšããŠäœã瀺åããŠããŸããïŒ ãé©åã«å¯ŸåŠ/解決ãããŠããããšã確èªããŠãã ãããã¯ããããã¯ãã€ãå®å®ããäºå®ã§ãããããã«å°éããã«ã¯äœãå¿ èŠã§ããïŒããšåçã«èãããŸãã ããã¯ããããã¯æ±ºããŠå®å®åãããã¹ãã§ã¯ãªããããã¯èšèªã®äžéšã§ãã£ãŠã¯ãªããªãããšããæµãã«éãæ®ããŸããã
ããã»ã¹ã«ã€ããŠã®ç§ã®ç解ã¯ãããªãã®æèŠã®çžéãããŒã¯ããããã«ãã§ãã¯ãããŠããªããã§ãã¯ããã¯ã¹ã䜿çšããããšãæå³ãããšããããšã§ãã
次ã«ãããã»ã¹ãå ã«æ»ããŠãç¶è¡ããããã«ãã¹ãŠã®ãã§ãã¯ããã¯ã¹ããªã³ã«ããå¿ èŠããããŸãã
ç§ã¯ãç¡éã®è°äºåŠšå®³ãèšèªèšèšãè¡ãããã®çç£çãªæ¹æ³ã§ãããšã¯æããŸããã
ç§ãããã¯æããªãã ç§ããããçµè«ä»ããéãèŠã€ããããšæããŸããç§ã¯ãããå¥ã®æ¹åã«çµè«ä»ããããããšãæãã§ããŸãã
ã¡ãªã¿ã«ããã®RFCã®çµéšã«åºã¥ããŠããå®å®åäžã«ç¶è¡ãããã©ãããè©äŸ¡/察åŠã§ããããšããèŠåãä»ããŠRFCã«å¿çããããšã¯ãç§ã«ã¯æããã§ãããããå床è¯ãèãã§ã¯ãªããšæããŸããããããããšã§ããã®ãããªé倧ãªæé äžã®åé¡ãçºçããŸãã
ãã¯ãããã®åã ã®æ©èœãã©ã®ããã«èšèªãããè¡šçŸåè±ãã«ãããã¯ããããŸãããèšèªã®å šäœçãªè©äŸ¡ã«åºã¥ããŠãããã¯ãã®éã¿ãæããªãã®ã§ããã以äžæ¡åŒµããããããŸããããã®ããã«èšèªã®è¡šé¢ç©ãã ææ¡ããããã¹ãŠã®æ©èœãäœããã®åœ¢ã§äžå¯é¿ã§ãããå察æèŠãé®ããæç¶ããã ãã®åé¡ã§ãããšèŠãªãããªããã
èŠéãããŠããããã§ãã®ã§ãåã«èšã£ãããšãç¹°ãè¿ããŸãïŒ //github.com/rust-lang/rust/issues/48594#issuecomment -451795597
åºæ¬çã«ãã«ãŒãã䜿çšããå Žåãšãã¬ãŒã¯ãããã¯ã䜿çšããå Žåã®éãã«ã€ããŠèª¬æããŸããã
äž»ã«ããã¬ãŒã¯ãããã¯ã¯ç°ãªãæ§æãïŒãããã«ïŒç°ãªãã»ãã³ãã£ã¯ã¹ïŒå°ãªããšãã©ãã«ã®ãªããã¬ãŒã¯ã«é¢ããŠïŒãç°ãªãæå³ãããã³ãã®ä»ã®ããã€ãã®ãã€ããŒãªããšãæå³ããŸãã
rfcbotã¯æžå¿µäºé ããµããŒãããŠããŸããïŒ
@joshtriplett
ãã¯ãããã®åã ã®æ©èœãã©ã®ããã«èšèªãããè¡šçŸåè±ãã«ãããã¯ããããŸãããèšèªã®å šäœçãªè©äŸ¡ã«åºã¥ããŠãããã¯ãã®éã¿ãæããªãã®ã§ããã以äžæ¡åŒµããããããŸããããã®ããã«èšèªã®è¡šé¢ç©ãã ææ¡ããããã¹ãŠã®æ©èœãäœããã®åœ¢ã§äžå¯é¿ã§ãããå察æèŠãé®ããæç¶ããã ãã®åé¡ã§ãããšèŠãªãããªãããã«ãå®æçã«é»è©±ããããå¿ èŠããããšæããŸãã
ãããæ©èœãåãå ¥ãããæåŠãããã®ã©ã¡ãããé©åãªããŒã ã®å®å šãªã³ã³ã»ã³ãµã¹ãå¿ èŠãšããããšã¯ãç§ãã¡ã®çŸåšã®ããã»ã¹ã®äžå¹žãªå±éºã§ãã langããŒã ãçŸåšã®ããã«å€§ããå Žåããããåžžã«éæããããšã¯å°é£ã§ã-äžèšã®ã³ã¡ã³ãããããã®æ©èœãéèŠã§ããçç±ãåæ©ä»ããããã®ã³ãŒãäŸãæ¬ èœããŠããã ãã ãšæããŸããããä»ã§ã¯ããã«åæããŠããããã§ãã¯ããã®æ©èœã䜿çšããŠããé©åã«èšè¿°ã§ããã³ãŒãã§ãããããã«è¡šç€ºãããã³ã¹ãã«èŠåã䟡å€ããããšã¯ç¢ºä¿¡ããŠããŸããã äŸïŒå¥ã®ã¹ã¿ã€ã«ã§æžãããšã¯æåéãäžå¯èœãªãã¯ãã®äŸãå«ãïŒãæäŸãç¶ããã ãã§ã¯ååã§ã¯ãªãããã«æãããããããããã®ã±ãŒã¹ãååãªåæ©ã§ãããšããªãã«çŽåŸãããæ¹æ³ãããããŸããã
åæ§ã«ãç§ã¯å人çã«ãã®æ©èœãããŒãžããå¿ èŠããããšç¢ºä¿¡ããŠããŸããIMOã¯ããããæè¯/å¯äžã®ãªãã·ã§ã³ã§ããããŸããŸãªäŸãéããŠãã®éã¿ãåŒãåºãã ãã§ãªããèšèªã¯å®éã«ã¯è¿œå ãããŠããã·ã³ãã«ã«ãªããŸãïŒä»ã®ã©ãã«ä»ãã³ã³ã¹ãã©ã¯ããèš±å¯ããããšãèãããšãã©ãã«ä»ããããã¯ãèš±å¯ããªãããšã¯ç§ã«ãšã£ãŠé©ãã¹ãããšã§ãïŒã
ç§ã®äžèšã®ããªãã®ç«å Žã®èŠçŽã«åæãããªããç§ãã¡ã¯äžå¹žãªããšã«ïŒãããŠãç§ã¯ä¿¡ããŠããŸãããæŽå²çã§ãïŒïŒããã»ã¹ãæ¬ ããŠããããã§ãã 1ã€ã®ãªãã·ã§ã³ã¯ãäžèšã®ããã«çŸåšã®rfcbotã«ãŒã«ã解éããŠãããã§ãã¯ããã¯ã¹ããªãããšã¯ããªãã®æèŠã®çžéã瀺ããŸããéåæ°ãåŽäžããã«ã¯3人ã®ã¡ã³ããŒãå¿ èŠã§ãããšããæå³ã§ãããã«ãŒã«ãå°å ¥ããããšãã®æå³ã¯ããã¯æããªãã®ã§ããã®æé ã«åŸãã¹ãã ãšææ¡ããã®ã¯ç§ã«ãšã£ãŠäžèª å®ã ã£ããšæããŸãïŒç§ã¯ä»ã®å Žæã§ãããèªåã§è¡ããŸãããïŒã
以åãæ¿èªæžã¿->å®è£ æžã¿->å®å®åãããæ©èœã«æéãèšããããšãã§ããããã¯ãã°ã®å¢å ãåé¿ããããã«é ããæ©èœããèªåã¯ããŒãºãããå¿ èŠããããšããææ¡ãèããããšããããŸãã ãã®ãããªãã®ã¯ãç§ïŒãããŠãç§ãæãã«ãããŒã ã®ä»ã®äœäººãïŒããã§ãã¯ããã¯ã¹ãéããããã«ããŒã¯ãããããªãããã§ãã¯ããã¯ã¹ãåãå ¥ããããã«ããŒã¯ããªããšãããã®ã±ãŒã¹ã«å¯ŸåŠããããšãã§ããŸãïŒç§ã¯ä»ã§ãç§ããããèšã£ãŠãæããŠããŸãmããªãã説åŸããããã®æåŸã®åªåãæšãŠãïŒïŒsmile :)ã
æé·ãç¶ããããŒã ã§ã¯ãæ©èœã«ã€ããŠã³ã³ã»ã³ãµã¹ãåŸãããšãã§ããªããªããç¹ã«lang-designããŒã ã§ã¯ãäžè²«ããæ¹æ³ã§èšèªãæäœããããšãé£ãããªãã®ã§ã¯ãªãããšå¿é ããŠããŸãã ããŒã ã®ãµã€ãºå¶éã¯ãããã«å¯Ÿããæãããªè§£æ±ºçã®ããã«æãããŸããå€æ°ã®äººã ããæèŠãåãåãããšã¯å¯èœã§ãããååã«å€§ããªã°ã«ãŒãéã§çµ¶å¯Ÿçãªã³ã³ã»ã³ãµã¹ãæ§ç¯ããããšã¯ãŸã£ããäžå¯èœã§ãã ä»ã®äººã¯ãããããèšèªã誀ã£ãæ©èœããä¿è·ããããã«ãè«äºã®ããæ©èœãããŒãžãã¹ãã§ã¯ãªããšäž»åŒµããã§ãããã å人çã«ã¯ãã³ãã¥ããã£ãé©åãªèŠåãªãã«ãããã®ééãã®å€ããç¯ãããšãèš±ãå¯èœæ§ã¯äœããšæããŸãããããã¯èãã§ãã
ããã§ããã»ã¹ã®é²åã«ã€ããŠèª¬æããããã«å¥ã®ã¹ã¬ãããéå§ããŸãããããŸã§ã®éããã®ã¹ã¬ããã§ãã£ã€ã ã鳎ãããŠãã人ã¯ããšã¯èããç°ãªããšèŠãªãæ°ããéèŠãªãŠãŒã¹ã±ãŒã¹ãããå Žåã«ã®ã¿æçš¿ããŠãã ãããäžèšã®ãã®ããŸãã¯ãã®æ©èœãèšèªã«è¿œå ãã¹ãã§ã¯ãªããšããé倧ãªèæ ®ãããŠããªãçç±ãããå Žåã ãããã®ã¡ã¬ã¹ã¬ããã®å±¥æŽå šäœãèªãããšã¯å°é£ã§ãããæçš¿ãäœåºŠãç¹°ãè¿ãããããã¹ã¬ããã圹ã«ç«ããªã解説ã§ãã£ã±ãã«ãªã£ãããããšãããã«é£ãããªããŸãã ïŒåœŒã¯ãã¹ã¬ããXDå šäœã§æãé·ãã³ã¡ã³ãã®1ã€ãå ¥åãããšèšããŸãïŒ
TL; DRïŒè¡ãè©°ãŸã£ãŠãããšæããŸãããã®ããã®ããã»ã¹ãå¿ èŠã§ãããã®äŒè©±ãå¥ã®å Žæã§éå§ããããã«ãªã³ã¯ããŸãã ãã以å€ã®å Žåã¯ãèæ ®ããå¿ èŠã®ããéèŠãªæ°ããæ å ±ããªãéããã³ã¡ã³ãããªãã§ãã ããã
@cramertj
æ©èœãåãå ¥ãããæåŠãããã®ãããããé©åãªããŒã ã®å®å šãªã³ã³ã»ã³ãµã¹ãå¿ èŠãšããããšã¯ãçŸåšã®ããã»ã¹ã®äžå¹žãªå±éºã§ã
ç§ã¯æ£çŽã«ãããæ©èœãšèããŸãã
äžèšã®ã³ã¡ã³ãããããã®æ©èœãéèŠã§ããçç±ãåæ©ä»ããããã®ã³ãŒãäŸãæ¬ èœããŠããã ãã ãšæããŸãããããã®æ©èœã䜿çšããŠããé©åã«èšè¿°ã§ããã³ãŒããããããšã«åæããããã§ãããããã䟡å€ããããšã¯ç¢ºä¿¡ããŠããŸããããã«è¡šç€ºãããã³ã¹ãã
äŸã®å€ãã¯ä»ã®æ¹æ³ã§æžãããšãã§ãããšä»ã§ãæããŠããŸãã ããã«ãããè¡šçŸã§ããªãè¡šçŸåãèšèªã«è¿œå ãããããšã¯ãããŸããã åœåã¯ååãªäŸã§åæ©ä»ãããããšæããŠããŸãããããã®æ©èœã䜿çšã§ããäŸãå€ããã°@withoutboatsã«åæããããã«ãªããŸãã
ïŒãŸãã泚ç®ã«å€ããïŒ@nrcã®ã¯ã¬ãŒãproc-macro-rules
䜿çšlabel_break_value
ããããé¿ããããã«æžãçŽãããŠããããã§ããïŒ
1ã€ã®ãªãã·ã§ã³ã¯ãäžèšã®ããã«çŸåšã®rfcbotã«ãŒã«ã解éããŠãããã§ãã¯ããã¯ã¹ããªãããšã¯ããªãã®æèŠã®çžéã瀺ããŸããéåæ°ãåŽäžããã«ã¯3人ã®ã¡ã³ããŒãå¿ èŠã§ãããšããæå³ã§ãããã«ãŒã«ãå°å ¥ããããšãã®æå³ã¯ããã¯æããªãã®ã§ããã®æé ã«åŸãã¹ãã ãšææ¡ããã®ã¯ç§ã«ãšã£ãŠäžèª å®ã ã£ããšæããŸãïŒç§ã¯ä»ã®å Žæã§ãããèªåã§è¡ããŸãããïŒã
ç§ã¯ããããæ£æš©ãã®ããã®æ£ããæé ã ãšæããŸãããå察ããããã§ã¯ãããŸããã
IMOã¯ããããæè¯/å¯äžã®ãªãã·ã§ã³ã§ããããŸããŸãªäŸãéããŠãã®éã¿ãåŒãåºãã ãã§ãªããèšèªã¯å®éã«ã¯è¿œå ã«ãã£ãŠåçŽã«ãªããŸãïŒä»ã®ã©ãã«ä»ãæ§é ãèš±å¯ããããšãèãããšãã©ãã«ä»ããããã¯ãèš±å¯ããªãããšã¯ç§ã«ãšã£ãŠé©ãã¹ãããšã§ãïŒã
ç§ã¯éåžžãçŽäº€æ§ã®è°è«ã«èª¬åŸåããããšæããŸãããå人çã«ã¯èšèªã§ã«ãŒããã¬ãŒã¯ã«ã©ãã«ãä»ããããªãã®ã§ãããã¯ç¹ã«èª¬åŸåããªããšæããŸãã
æé·ãç¶ããããŒã ã§ã¯ãæ©èœã«ã€ããŠã³ã³ã»ã³ãµã¹ãåŸãããšãã§ããªããªããç¹ã«lang-designããŒã ã§ã¯ãäžè²«ããæ¹æ³ã§èšèªãæäœããããšãé£ãããªãã®ã§ã¯ãªãããšå¿é ããŠããŸãã
ã¹ãã¢ãªã³ã°ã ãã§ãªããåæ¢ãæ°ã«ãªããŸãã ããã»ã¹ããã¯ãããžã®ãã¹ãèŠã€ããããšã«çŠç¹ãåãããŠããããã«èŠãããããŒãã£ãŒãã«ãããããã«ã€ãªããã°ã©ããšããžããªããåã«ããŸã ãã§ã¯ãªãå Žåã«çºçããç¹å®ã®å¿ ç¶æ§ããããŸãã
2018幎ãš2019幎ã«ã¯ãèšèªã®æ©èœã®æé·ã«ã€ããŠå€ãã®æçš¿ããããŸãããèšèªããŒã ã§ã¯ãèšèªã®ç·è¡šé¢ç©ãçå£ã«æ€èšããå¿ èŠããããšæããŠããŸãã ãããŠãç§ãã¡ã«ã¯ããã奚å±ããè¯ãããã»ã¹ããªãããã«æããŸãã
@joshtriplett
ããã«ãããè¡šçŸã§ããªãè¡šçŸåãèšèªã«è¿œå ãããããšã¯ãããŸããã
éåžžã«æ確ã«ããããã«ïŒããã¯ãŸãã«ãããè¡ããŸãã çŸåšãä»ã®å¶åŸ¡ãããŒæ§é ã«å¹²æžããªããã®ã³ãŒããè¡šçŸããæ¹æ³ã¯ãããŸãããããã¯ãïŒä»ã®äººãææããŠããããã«ïŒãã¯ãã§ç¹ã«æãŸãããã®ã§ãããã¯ãã§ã¯ããããã©ãã«ã®ãªããã¬ãŒã¯ãä»ããŠã¿ãŒã²ããã«ã§ããªãå¯äžã®æ§é ã«ãªããŸãããã¯ãäœæè
ãããŠãŒã¶ãŒæäŸã®break
ãšéè€ãããªã¹ã¯ãåãããšãªããã»ã¯ã·ã§ã³ããæããããšãã§ããŸãã
ãŸãããžã°ã¶ã°ïŒã©ãã«ããŸã£ãããªãå Žå-Luaã®äŸãåç §ïŒãã«ãŒãã§å¥åŠãªããšãããå¿ èŠããªããããã³ãŒããèªã¿ããããªããŸãã ããã«ã¯ãllvmããžã°ã¶ã°ã³ãŒããæé©åã§ããã¯ãã®å Žåã§ããããã©ãŒãã³ã¹äžã®ããããªå©ç¹ããããŸãã
@joshtriplett
ç§ã¯ãŸã ãäŸã®å€ããä»ã®æ¹æ³ã§æžãããŠããå¯èœæ§ããããšæããŠããŸãã ããã«ãããè¡šçŸã§ããªãè¡šçŸåãèšèªã«è¿œå ãããããšã¯ãããŸããã åœåã¯ååãªäŸã§åæ©ä»ãããããšæããŠããŸãããããã®æ©èœã䜿çšã§ããäŸãå€ããã°å€ãã»ã©ããã®æ©èœãèšèªã«åãå ¥ããã¹ãã§ã¯ãªããšãã
ããã¯ããããç§ãã¡ãæãäžããããšãã§ãããã®ã§ããïŒ
ç§ã¯éåžžãçŽäº€æ§ã®è°è«ã«èª¬åŸåããããšæããŸãããå人çã«ã¯èšèªã§ã«ãŒããã¬ãŒã¯ã«ã©ãã«ãä»ããããªãã®ã§ãããã¯ç¹ã«èª¬åŸåããªããšæããŸãã
ãã®äžé£ã®æšè«ã¯å¥åŠã ãšæããŸãïŒãšãã£ã·ã§ã³ã§ã©ãã«ä»ãã®ã«ãŒããã¬ãŒã¯ãåé€ãããå Žåãé€ãïŒã ããªããèšèªã«ãªãã£ããšæã£ãããšã«åºã¥ããŠèšèšäžã®æ±ºå®ãäžãã®ã¯é©åã§ã¯ãªãããã§ãã ããã¯ããã«ããã®ã§ããã®è¿œå ããããšéŠå°Ÿäžè²«ããŠãããã©ãããæ€èšããå¿ èŠããããŸãã ããã§ãªããã°ãRustã«ã€ããŠç§ãéã£ãããæ¹ã§ãã£ããããããªãå€ãã®ããšããããŸãããç§ã¯ãã¹ãã§ã¯ãªããã§ããŸããã
ã¹ãã¢ãªã³ã°ã ãã§ãªãã_åæ¢_ã«ã€ããŠãå¿é ããŠããŸãã ããã»ã¹ããã¯ãããžã®ãã¹ãèŠã€ããããšã«çŠç¹ãåãããŠããããã«èŠãããããŒãã£ãŒãã«ãããããã«ã€ãªããã°ã©ããšããžããªããåã«ããŸã ãã§ã¯ãªãå Žåã«çºçããç¹å®ã®å¿ ç¶æ§ããããŸãã
ã¯ããªãã§ã¯å®å®ããªããšããæå³ã§ãããèªäœã®ãããããã®åœ¢ã¯ãŸã ãããŸããã ããã«ããããããããŸããLBVã¯æªãèãã§ãã/ XãYãããã³Zã®çç±ã§ååã«åæ©ä»ããããŠããªãããšãæ®ãã®äººã«çŽåŸãããŠãã ããã ãã®ãããªå ·äœçãªè°è«ã¯ãŸã èããããšããããŸããã ãŸããããã§ã¯å¿ ç¶æ§ããªãããšãæ確ã«ç€ºããŠããŸãã
2018幎ãš2019幎ã«ã¯ãèšèªã®æ©èœã®æé·ã«ã€ããŠå€ãã®æçš¿ããããŸãããèšèªããŒã ã§ã¯ãèšèªã®ç·è¡šé¢ç©ããçå£ã«ãèæ ®ããå¿ èŠããããšæããŠããŸãã ãããŠãç§ãã¡ã«ã¯ããã奚å±ããè¯ãããã»ã¹ããªãããã«æããŸãã
ç§ã¯å人çã«ãããã®èšäºã®å€ãã¯çŽããããã§ããããšãæããŠãæç¶å¯èœæ§ïŒ@nikomatsakisããã£ããšããŠã§ã¯ãªããšããŠé©åãªè¡šçŸã§ã¯ãªã...ïŒãŸãã¯ãã®å€ãã®äººã ã¯ãèšèªããŒã ãã©ã®ããã«åäœããããç解ããŠããªãïŒç§ãã¡ã¯ãã§ã«åèšã«çå£ãªæ€èšãäžããªããããªãã¡ãè¡šé¢ç©ïŒã Rustã®å šäœçãªè¡šé¢æ§æã¯ãããããå®éã«ã¯æšå¹Žã«çž®å°ããæé·ããŠããŸããã LBVã¯ãããç¹ã«å¢å ãããããšã¯ãªããå®éã«èšèªã®ãããã¯ã·ã§ã³ã®æ°ãæžãããæ§æãããåäžã«ãããšããè°è«ãããããšãã§ããŸãã
ææ³ã®çæãçµã¿åãããã ãã§ã¯ãèšèªã®è¡šé¢ç©ã¯çž®å°ãããŸã
åãããšãã§ããæ¡ä»¶ä»ãåå²ã®æ°ãæžããããšã¯ãééããªãèšèªã®è¡šé¢ç©ãçž®å°ããããšã§ãã
ãã®ç¹å®ã®æ©èœã¯ã©ã¡ãã®æ¹åã«ãé²ããšã¯æããªãã®ã§ãããããäžç«ã§ãã ããããããšãã°ãèšèªæ§é ãçµ±åãããã®ïŒbool letã誰ãïŒïŒã¯ãè¡šé¢ç©ãçž®å°ããŸãã
䟡å€ã®ããããšãšããŠãCommon Lispã¯ããã¯ããåãããã«ããã©ãã€ã èšèªã§ãããšããæå³ã§Rustã«äŒŒãŠããããã®æ©èœïŒ block
/ return-from
ãšããååïŒãåããŠããŸãã ããã§èª¬æããã®ãšåæ§ã«ãCommon Lispã§ã¯ããã®æ§é ã¯ããã¯ããèšè¿°ããããéå
äžå¯èœãªã»ã©è€éãªå¶åŸ¡ãããŒãè¡šçŸãããããå Žåã«åœ¹ç«ã€ããšããããããŸãã
(block foo
(return-from foo "value"))
ç§ã®æèŠã§ã¯ãCommonLispã§ã¯ãã®æ©èœã¯æåãããšèŠãªãããŠããŸãã èšèªã®åŠç¿ãå®è£ ãå°é£ã«ããæ©èœã«ã€ããŠã®äŒè©±ã§ã¯åºãŠããŸããã
å å«ããããŸã
early return from block â exceptions â call/cc
ããšãã°ãSchemeã§ã¯ã次ã®return-from
ãšãã¥ã¬ãŒã·ã§ã³ãå®è¡å¯èœã§ãã
(define call/cc call-with-current-continuation)
(define-syntax block
(syntax-rules ()
((_ label statements ...)
(call/cc (lambda (label) (begin statements ...))))))
(block foo
(display "Visible text")
(foo "value")
(display "Phantom text"))
ã¹ããŒã ã§ã¯ã call/cc
ã¯ç©è°ãéžãã»ã©æåããŠãããšèŠãªãããŠããŸãã ããã«ã€ããŠè©±ãããšãã§ããããã«ããã«ã¯ãæåã«ãªããžã§ã¯ããäœæããå¿
èŠããããããããã¯ç¹ã«èå³æ·±ããšæããŸãã call/cc
ã誀ã£ãæ©èœãšèŠãªããŠããç¥çæå³ã§èšèªãããå®è³ªçã«ãªããŸããã
Nemerleèšèªã«ã¯Namedãããã¯æ©èœããããŸãã
ãšãŠã䟿å©ã§äŸ¿å©ã§ãã
@jhprattãã®å·ã®è°è«ãèªãã§ãã ããã
@Centrilã®ææ¡ã§ç§ãIRLOã«ã€ããŠè¡ã£ãããã€ãã®ã³ã¡ã³ããç¹°ãè¿ã
ãã®æ©èœã«ã€ããŠèª¬æããéã«ã次ã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ãææ¡ããŸããïŒéåžžã®ã«ãŒãé¢é£ããŒãžã§ã³ãšã¯ç°ãªããŸãïŒã
ãšã«ãããã«ãŒãã¯ããã§ã®ç§ã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ã§ã¯ãããŸããã tryãããã¯ãèŠããšããã¯ããŒãžã£ãŒãäœæããæéããããã«ãæ©æã«æ»ãçãããŒã«ã«èšç®ãèšè¿°ã§ãããšäŸ¿å©ã ãšæããŸããã tryãããã¯ã¯ãããªãå¶çŽã®ãããimpl Tryãè¿ããããã§æ©èœããã©ã®ãããªçš®é¡ã®ã©ãã«ããµããŒãããŠããŸããã
äžèšã¯ããã®ããã®ç§ã®äž»ãªãŠãŒã¹ã±ãŒã¹ã§ããç§ã¯ã¢ãŒãªãŒãªã¿ãŒã³ã¹ã¿ã€ã«ã奜ãã§ãã try {}
ãããã¯ã¯ã»ãšãã©ã®å Žåããã«å°éããŸãããããã§ããã©ãã«ãå®éã«ã¯ãµããŒãããŠããŸããïŒãã¹ãããããããã¯ã«ã¯try {}?
ãèšè¿°ãããããå¿
èŠã§ã¯ãããŸããïŒãã¿ã€ãããã£ãããªãŒã«ã§ã¯ãªãç¹å®ã®ã¢ããã£ãã¯åœ¢ç¶ã«éŽã¹ãããŸãïŒæäŸãããŠãããŠãŒã¹ã±ãŒã¹ã§èšŒæãããŠããŸãïŒã
ãŸããC ++ã«ã€ããŠããã€ãã®èŠ³å¯ãè¡ããŸãããããã§ã¯ãç¹ã«Rustã®ãããªã€ãã¬ãŒã¿ããªãå Žåã«ãã©ãã«ã®äžæ/ç¶ç¶ããªãããšãéåžžã«èŠçã§ãã ããšãã°ãUB goto
ãŸãã¯ããŒã«ã«break
å ããŠãå
åŽã«ãŒãã®å€åŽã«æ¡ä»¶ä»ãcontinue
ãªããã°ãå
åŽã«ãŒãããå€åŽã«ãŒããç¶ç¶ããæ¹æ³ã¯ãããŸããã
å°ãªããšãC ++ã«ã¯ãããŒãã§ãã«ãŒããªããããã€ã³ã©ã€ã³ã©ã ãããªãã¯ã®èŠçã¯å°ãªããªããŸããããã¯ãã€ã³ã©ã€ã³ã©ã ãã«æ»ããšLLVMã®ã€ã³ã©ã€ã³ã©ãŒã«ãã£ãŠLVBã®ãããªãã®ã«å€æããããããå¹æçã«LVBããµããŒãããŸãã ãã®ãããªãã®ã¯... Rustã§ã¯ããªãçãããã§ãã
ãŸãããã®æ©èœã¯ãGoã®goto
ãšã»ãŒåçã®è¡šçŸåãåããŠããããšãææããŠããå¿
èŠããããŸããããã¯ãã³ã³ãã€ã«æã«å®£èšãªã©ãé£ã³è¶ããªãããã«ãããã®ã§ãïŒççŽã«èšã£ãŠãRob Pikeãgoto
ãåãå
¥ãããããšèããå Žåã C ++ã®åé¡ãæã¡è² ããããšããæŽå²ãç§ã¯åœŒãããçšåºŠä¿¡é ŒããŸãïŒã
æã
ã¯ãåŸæ¥æè¡ã«å
¥ãã€ãããªããŸããKotlinã¯ãŸãã®åœ¢ã§ããã®æ£ç¢ºãªæ©èœãæäŸããŸãreturn<strong i="24">@label</strong> expr;
ã
c'ishèšèªã§ã¯ããããã¬ãŒãbreak function:label
èªèã§ãããããã«ãŒãã®äžã®å®å®ãããã¬ãŒã¯ãã€ã³ãã®å ŽæãšããŠãçä¿¡gotoããªããŠãã©ãã«ã䜿çšããããšããããããŸãã
äŒæ©ã«ã€ããŠã®ã³ã³ã»ã³ãµã¹ããªããŠããã©ãã«ã¯ãããããããŸããã
ç·šéïŒ1ã€ã®æœåšçãªããŒãã«ã¯ãéåžžãã©ãã«ãã·ã³ãã«ã®åœåèŠåã«åŸãããšã§ããRFCãç解ããŠããå Žåããããã®ã©ãã«ã¯ã·ã³ãã«ã®åœåèŠåã«åŸããã 'ã¯ã·ã³ãã«åã§ã¯ç¡å¹ã§ãã
Dwarfããgdbèªäœã«åé¡ããããã©ããã¯ããããŸããããå®éã«ããã«åé¡ããããŸãã
Edit2ïŒ
éåžžã®cããŒã¹ã®ã©ãã«ã®åŒçšåäœãèŠããšãããã«ã¯å€å°ã®ç
ãããããšã¯ééããããŸããã
ãããã¬ãŒã§ã¯ãgdbã¯å°ãªããšããã·ã³ãã«åã®äžéšã§ã¯ãªãåŒçšç¬ŠãšããŠåŒçšç¬ŠãåŠçããŸãã 次ã®çµæã¯
0x401114ã®ãã¬ãŒã¯ãã€ã³ã1ïŒãã¡ã€ã«
ã ã©ã€ã³1ã
æ¯é¡ã®ãªãèŠç©ãã
echo "void main() { } void hmm() { umm: return; }" | gcc -g -x c -;
gdb -ex "b hmm:'umm'" -ex "b hmm:'umm" -batch ./a.out
ãããŠããã®åŒçšã¯èšå·ã®äžèŽã®åã«è¡ããããšç§ã¯ä¿¡ããŠããã®ã§ããããgdbã§ã®rustèšèªåºæã®ãµããŒãã®åœ±é¿ãåããå¯èœæ§ã¯ãªããšæããŸãã
ç·šéïŒæ¢åã®ã«ãŒãã©ãã«ã®ãããè¹ã¯ããããããã§èªæµ·ããŸããã
ãããã¯ããã®æ©æ埩垰ãæ¯æãããã€ããŒãªãã€ã³ãã¯ã貧ä¹äººã®å¥çŽããã°ã©ãã³ã°ã§ãã äºåæ¡ä»¶ãšäºåŸæ¡ä»¶ãšããŠassertã¹ããŒãã¡ã³ããè¿œå ããã ãã§ãã å¿«é©ããç¶æããããã«ã return
ãbreak 'ret
ã«çœ®ãæããŠã次ã®æ§æãå¯èœã«ããå¿
èŠããããŸãã
let value = 'ret: {
// ...
};
assert!(postcondition(value));
return value;
ãã ããããã¯äžå®å
šãªè§£æ±ºçã§ãããããã¯å
ã§return
ãçŠæ¢ããå¿
èŠãããããã§ãã
ãã®æ©èœã欲ããã£ãã®ã§ãããååšããããšãç¥ããªãã£ãã®ã§äœ¿çšããªãã£ããšããã¡ã¢ãè¿œå ããŸããããã¯ãã䜿çšãã人ãå°ãªãããšãããããããã«ã人ã ã¯ãããæãŸãªãããšããåŠå®çãªä¿®æ£ã ãšæããŸãã
ç§ã¯ä»æãIRLOã®ã³ã³ã»ãããç¬èªã«
ç§ã¯ä»æ¥ããã§éãã§ããŸãããããŠããã¯async
ãããã¯ã§_è¶
_䟿å©ã«ãªããŸãã ãã ãã try_blocks
æ©èœãšçµã¿åããããšãåé¡ãçºçããããã§ãã
#![feature(try_blocks, label_break_value)]
fn main() {
let _: Result<(), ()> = try {
'foo: {
Err(())?;
break 'foo;
}
};
}
error[E0695]: unlabeled `break` inside of a labeled block
--> src/main.rs:6:20
|
6 | Err(())?;
| ^ `break` statements that would diverge to or through a labeled block need to bear a label
error: aborting due to previous error
ãã©ã€ãããã¯ã¯ééãã§ãã
... ?
èªäœã«ã©ãã«ãä»ããããšã¯ã§ããŸãããïŒ ïŒ Err(()) 'foo?;
ïŒ
ãã©ã€ãããã¯ãééãã§ããããšã«åŒ·ãå察ããŸãããããã¯å¥ã®è°è«ã§ãããããããããã§è¡ã£ããæ¥ãããã䟡å€ã¯ãããŸããã
ãã®ç¹å®ã®äŸã§ã¯å®è¡å¯èœãããããŸãããã 'foo
ã«ãŸãšããªã³ãŒãã®ãã£ã³ã¯ãšããã€ãã®?
ãå«ãŸããŠããå®éã®ã³ãŒããšæ¯èŒãããšãããã¯éåžžã«æå°éã«æããããŠããŸãã
@ SoniEx2
ãã©ã€ãããã¯ã¯ééãã§ãã
ãã®ã³ã¡ã³ãã¯äžé©åã§ãã @jonhooã®ã³ã¡ã³ãã¯ãïŒããããïŒãã°ã®ããçžäºäœçšãå ±åããŠããŸããã try
ãããã¯ïŒãŸãã¯label-break-valueïŒã«ã€ããŠã®æèŠã«é¢ä¿ãªããããããã¹ã ãŒãºã«çžäºéçšããå¿
èŠãããããšã¯æããã§ãã
Err(()) 'foo?;
æ§æã䜿çšããå¿
èŠããããŸãã
@jonhoo try
ãã©ã®ããã«è±ç³ãããããšããç¹ã§ãimplã®è©³çŽ°ãæŒããŠããã®ãèŠãŠãããšæããŸãããããå¥ã®åé¡ãšããŠæåºããŠãå¯èœãªä¿®æ£ã®è°è«ãããã«ç§»ãããšãã§ããŸããïŒ
RFCã¯ãããèšããŸã
'BLOCK_LABEL: { EXPR }
ã®ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒã§ã
'BLOCK_LABEL: loop { break { EXPR } }
ç§ã¯ãã®çœ®æãè©Šã¿ãŸããããããŠã³ãŒãã¯å°éäžèœã³ãŒãã«ã€ããŠã®èŠåãšãšãã«ã³ã³ãã€ã«ãããŸãã
#![feature(try_blocks, label_break_value)]
fn main() {
let _: Result<(), ()> = try {
'foo: loop {
break {
Err(())?;
break 'foo;
}
}
};
}
@ nikomatsakis @ ciphergothã¯https://github.com/rust-lang/rust/issues/72483ãšããŠæåºãããŸãã
ç§ã¯ãã¯ãããã«å察ããŠããŸããã ä»æ¥æ€èšãããŠããã°ãã©ãã«ä»ããã¬ãŒã¯ã®æåã®æŠå¿µã«ãã£ãšåŒ·ãå察ããã§ããããããã®æŠå¿µãååšããããšãèãããšãä»»æã®ãããã¯ãžã®é©çšã«å察ãç¶ããããšã¯æå³ããªããšæããŸãã
ïŒããã¯ã break
ã䜿çšããçŸåšã®ãã©ãŒã ã«é©çšãããä»ã®æ§æã«ã¯é©çšãããŸãããïŒ
@rfcbot resolve should-close-not-merge
@rfcbotã¬ãã¥ãŒ
@joshtriplettããã¯ãæ©æè¿åããè¡ãå¯äžã®æ¹æ³ã§ããããã async
ãããã¯ã§éåžžã«åœ¹ç«ã€ããšãããããŸããã ããã¯ãæžã代ããã«æ¬¡ã®ããšãæå³ããŸãã
async {
// do thing a
if thing_a_failed {
// handle specially (note, _not_ ?)
} else {
// do thing b
if thing_b_failed {
// handle specially (note, _not_ ?)
} else {
// do thing c, etc..
}
}
}
ç§ã¯æžãããšãã§ããŸãïŒ
async {
'block {
// do thing a
if thing_a_failed {
// handle specially (note, _not_ ?)
break 'block;
}
// do thing b
if thing_b_failed {
// handle specially (note, _not_ ?)
break 'block;
}
// do thing c, etc..
}
}
ããã¯ããšãããã«äŒŒãŠã©ã®ããã«ããããšãã§ããŸããšæ©æ埩垰return
ã®é¢æ°/ããšããŠéécontinue/break
ã«ãŒãã€ã³ã確ãã«ãäœåãªãããã¯ãå¿
èŠãªããã°ããã®ã§ããïŒ async 'block {
ã®å¯èœæ§ã¯ãããŸããïŒïŒããã¹ããããif-sãããééããªãåã£ãŠããŸãã
éåæãããã¯ã«ã©ãã«ã§çŽæ¥æ³šéãä»ããããšãã§ããããã«ããããšã¯ããã®æ©èœã®éåžžã«åªããæ¡åŒµæ©èœã®ããã«æããŸãã
@rfcbotfcpãã£ã³ã»ã«
FCPã¯æ°žä¹ ã«ãããã¯ãããŠãããããããã§ãã£ã³ã»ã«ããŸãã ããããããã®æªæ¥ãæšãé²ããããã©ããã«ã€ããŠè©±ãåãå¿ èŠããããŸãã ä»ã«äœããªããšããŠããéåæãããã¯ãèæ ®ã«å ¥ããããã«æŽæ°ããå¿ èŠãããããã§ããããã«ããããã®æ©èœã®æ°ãããŠãŒã¹ã±ãŒã¹ãè¿œå ãããããã§ãã
@nikomatsakisã®ææ¡ã¯ãã£ã³ã»ã«ãããŸããã
éåæãããã¯ãååšããå Žåããã®ææ¡ã®ã»ãã³ãã£ã¯ã¹ã«ã€ããŠãããŸããããªãããšã«æ³šæããŠãã ãããRFCã®å®çŸ©ã¯åŒãç¶ãé©çšãããŸãã
'BLOCK_LABEL: { EXPR }
ã®ããã®åãªãæ§æç³ã§ã
'BLOCK_LABEL: loop { break { EXPR } }
ãã ããæé»ã®ã«ãŒãã«ãã€ã³ããããã©ãã«ã®ãªããã¬ãŒã¯ãŸãã¯ã³ã³ãã£ãã¥ãŒã¯ãEXPRå ã§çŠæ¢ãããŠããŸãã
break
ã®ã©ãã«ãä»ãã代ããã«ãéåæãããã¯ããïŒæ©æã«ïŒ return
ã䜿çšã§ããããšã«æ³šæããŠãã ããããããã£ãŠãéåæãããã¯ã«ã©ãã«ãä»ããããšã¯ããŸãæå³ããããŸããã
let fut = async {
return 42;
0
};
println!("{}", fut.await); // prints 42
ïŒéã³å ŽïŒ
@WaffleLapkinç§ã¯æè¿ããã«æ¥ãŠãã§ãã®ããšãã«æ°ã¥ããŸããã ãã®æ©èœã¯ãã³ãŒãã®ã»ã¯ã·ã§ã³ã_ã¹ããã_ã§ããããã«ããããã«ãŸã éåžžã«äŸ¿å©ã ãšæããŸãïŒãã®ãããã¯ã®æ®ãã®éšåãå®è¡ããªãã§ãã ããããŸããæ»ããªãã§ãã ããïŒãã async
_ç¹ã«_ãžã®é©çšæ§ã¯ä»¥äžã§ããç§ã¯æåã«æã£ãã
æãåèã«ãªãã³ã¡ã³ã
@withoutboats
ç§ã¯ãã®ååã«åæãããã®æ©èœã¯ãã®åºæºãæºãããŠãããšæããŸãïŒç¹å®ã®éèŠãªãŠãŒã¹ã±ãŒã¹ã察象ãšãã䜿ãæ £ããå¶åŸ¡ãããŒïŒã äžèšã®äŸã®ãããªã³ãŒãã確èªãŸãã¯èšè¿°ããããšãäœåºŠããããŸãããããããã®ã³ãŒããèšè¿°ããããã®æãã¯ãªãŒã³ã§èªã¿ãããæ¹æ³ã§ãããšæããŠããŸãã
loop
ãããªæ¢åã®å¶åŸ¡ãããŒæ§é ãåå©çšããæåŸã«ç¡æ¡ä»¶ã®break
ãä»ãããšããŠãŒã¶ãŒã¯èª€è§£ãæããŸãããŸãã?
ãawait!
ã䜿çšãããããããã«é©çšã§ããé¢æ°ã§ã¯äžååãªããšããããããŸããloop
+æ«å°Ÿã®break
ã¯æ··ä¹±ãæãããã代ããã«ãç°ãªãã¹ã¿ã€ã«ã®å¶åŸ¡ãããŒçšã«äœæãããããŒã«ãæªçšããããã«ãŠãŒã¶ãŒã«èŠæ±ãããããããŠãŒã¶ãŒã«æ¬åœã®æå³ãè¡šæããŠãããããšããå§ãããŸãã ããã¯ãä»ã®èšèªãwhile true { ... }
æºè¶³ããŠããã®ã«å¯Ÿããloop
æ§é ããæã£ãŠãããšããäºå®ã«äŒŒãŠããŸãã ããããããšã§ãããæ確ãªæå³ãè¡šçŸããçµæãšããŠããèªã¿ãããã³ãŒããæžãããšãå¯èœã«ãªããŸããããã«ããã®æ©èœã¯ãRustã«åžžã«æåŸ ãããŠãããã®ã§ããããã¯ãã©ãã«ä»ãããããã®ãšã©ãã«ä»ãããããã®ããã®ãã¬ãŒã¯ãèæ ®ããå Žåããããã¯ã«ã©ãã«ãä»ãããããããã¯ãå£ãããã§ããªããšããäºå®ã¯æ··ä¹±ãæããŸããç§ã«ã¯ééã£ãŠããŸãã
TL; DRïŒãã®æ©èœã¯ããã¹ãããã
if
ã¹ããŒãã¡ã³ããä»ããŠããŸãã¯loop-break-valueãªã©ã®ä»ã®æ§é ãæªçšããããšã«ãã£ãŠã®ã¿èšè¿°ã§ãããå®éã®ãŠãŒã¹ã±ãŒã¹ããµããŒãããŠãããšæããŸãã ããã¯ããããã¯ãæåŸ ã©ããã«åäœããããã«ããè¡šé¢æ§æãžã®å°ããªè¿œå ã§ãããããªãããã¯ãªãã®ã§ã¯ãªããç§ãæå³ããã³ãŒããèšè¿°ã§ããããã«ããŸãã