dev2.0
ãã©ã³ãããã§ã«å©ããæ±ãå§ããããšãã§ããç¶æ
ã«ãããã©ããã¯ããããŸãããããšã«ãããããŸãïŒwinkïŒãã®ãã©ã³ãã§èµ·ãã£ãŠããäž»ãªå€æŽã以äžã«ãªã¹ãããŸããããã«ãã¹ãããŠãæåã®ã¢ã«ãã¡ãªãªãŒã¹ã§ä¿çäžã®ã¿ã¹ã¯ã確èªã§ããŸããã ãããã®ãããããæ¯æŽããããšã«èå³ãããå Žåã¯ã以äžã«ã³ã¡ã³ãããŠãã ãããäžç·ã«äœæ¥ããããã®è©³çŽ°ãæäŸããŸãðª
FableTransforms
åé¢ãã¹ã«ãªããŸããã ããã«ãããã³ãŒãã¯éåžžè€æ°ã®å Žæã§æé©åãé©çšãããFable 1ãããä¿å®ãããããªããŸãïŒç¹ã«ãFable 2ã§ã¯ããã«ããŸãæ©èœããå¯èœæ§ã®ããäžç¢ºå®ãªæé©åïŒã ãã ããäžéšã®æé©åã¯ãæåŸã®Fable2Babelãã¹ã§å®è¡ããå¿
èŠããããŸããæ«å°ŸåŒã³åºããšæ±ºå®æšïŒãã¿ãŒã³ãããã³ã°ïŒã§ããgit checkout dev2.0
cd src/tools
bash quicktest.sh --build-core
ããã«ãããåããã©ã«ããŒå
ã®QuickTest.fs
ãã¡ã€ã«ãã³ã³ãã€ã«ããã³å®è¡ãããŸãã Fable 2ã®æ©èœããã¹ãããããã®éã³å ŽãšããŠèªç±ã«äœ¿çšããŠãã ããïŒãã ããPRã«ã¯å«ããªãã§ãã ããïŒã 2åç®ã¯ã src/js/fable-core
ãã¡ã€ã«ãå€æŽãããŠããªãå Žåã¯ã bash quicktest.sh
å®è¡ã§ããŸãïŒ src/dotnet/Fable.Compiler
ãã¡ã€ã«ãå€æŽãããŠããªãå Žåã¯ã bash quicktest.sh --no-build
ãå®è¡ã§ããŸãã2.1.300-preview1ã䜿çšãããšãå€æŽãªãã§ãããžã§ã¯ããæ§ç¯ããã®ã¯ããšã«ããéåžžã«é«éã§ããã¯ãã§ãïŒã
Windowsã§ã¯ãGitbashã䜿çšããŠã¹ã¯ãªãããå®è¡ã§ããã¯ãã§ãã
ã³ãŒãå
šäœã«TODO!!!
ã³ã¡ã³ããå€æ°ãããŸãããããããèªåã§åŠçããå¿
èŠããããŸãã
ãã©ã°ã€ã³ã¯æåã®ã¢ã«ãã¡ãªãªãŒã¹ã«å«ãŸããªãããããã¹ãã§ã¯Expecto APIã䜿çšããããã«ãªããŸãããããã¯ãJSãã¹ãã©ã³ããŒãšã®å
±æãã¯ããã«ç°¡åã§ãã ç§ã¯ãã§ã«ããã€ãã®ãã¡ã€ã«ïŒArithmeticTestsãArrayTestsãListTestsïŒãå€æããŸãããããããã®ã»ãšãã©ã¯ãŸã ããã€ãã®æãåŸ
ã£ãŠããŸãã æ£èŠè¡šçŸã䜿çšããŠã¡ãœããã®ã·ã°ããã£ãtestCase
ããŸããããã¹ã¯ãªãããäœæããããšããå§ãããŸãã äž»ãªèª²é¡ã®1ã€ã¯ããã¹ããçŸåšãªã¹ãå
ã®å€ã§ããå Žåããã¡ã€ã«ã®äžå€®ã«è¡šç€ºãããè¿œå ã®é¢æ°ãäžçªäžã«ç§»åããå¿
èŠãããããšã§ããããã«ãããå Žåã«ãã£ãŠã¯ä»ã®å€ãã·ã£ããŠãããå¯èœæ§ããããŸãã
Fable-Coreã®Setã¢ãžã¥ãŒã«ãšMapã¢ãžã¥ãŒã«ã¯FïŒã«ç§»æ€ããå¿
èŠããããŸãã ç§ã¯éšåçã«Setã®ããã«ãããè¡ããŸããïŒãããã¯ãã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãŠæåã«çãã FunScriptãªããžããªãããååŸã§ããŸãïŒã ããããJSã«æ£ããã³ã³ãã€ã«ãããŠããããšããããªãã¯é¢æ°åãæ£ããå
¬éãããŠããããšã以åã®.tsãã¡ã€ã«ïŒ src/tools/old
ä¿åãããŠããïŒããã¡ãœããã移æ€ããå¿
èŠããããã©ããããã¹ããæ£ããæ©èœããŠãããã©ããã確èªããå¿
èŠããããŸãã ã
ASTãå€§å¹ ã«å€æŽããããããReplacementsã¢ãžã¥ãŒã«ã®ã»ãšãã©ãæžãçŽãå¿ èŠããããŸãã ç§ã¯ãã§ã«çŽ1000è¡ãå®è¡ããŸããããããš1000è¡ãããŸãã ããã¯å°ãéå±ãªäœæ¥ã§ããã誰ããããã«å€¢äžã«ãªã£ãŠããå Žåã¯ãç§ã«ç¥ãããŠãã ããã ããããæéã®æ¹æ³ã¯ãç»é¢å ±æã»ãã·ã§ã³ãéããŠäœãããå¿ èŠããããã瀺ããæ®ãã®ã³ãŒããåå²ããŠãããæ©ãçµäºã§ããããã«ããããšã§ãã
æåã®ã¢ã«ãã¡ãªãªãŒã¹ã«å«ãŸããªããã®ïŒbigintãreflectionãpluginsã
ä»ã®ãšããååãªæ å ±ã§ããããšãé¡ã£ãŠããŸããäºåã«ãååããã ãããããšãããããŸãã
@alfonsogarciacaroSetã¢ãžã¥ãŒã«ãšMapã¢ãžã¥ãŒã«ãfable-coreã¿ã¹ã¯ã§äœ¿çšãããšæããŸãã ããããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãããšãã§ããããã«ãã¬ã€ãã³ã¹ãæããŠãã ããããŸãã¯ãéšåçã«ç§»æ€ãããSet
æããŠãã ãã:)ïŒ
ãã ããªãã€ã³ããŒãç§ãã¡ããã€ã³ã¹ãã¬ãŒã·ã§ã³ãçãã ããšãå€ãã®ã¬ãååŒãããã
ããããšãã@ zaaackã ã¯ããFunScriptãã¡ã€ã«ã¯å
ã
FSharp.CoreããååŸãããŸããã å€ããªã£ãŠãããã©ããã¯ããããŸãããããã§ã«æ©èœããŠããããïŒ Map.ts
ãå
ã
ã¯ç¿»èš³ãããŠããããïŒãç§ã¯ããã奜ãåŸåããããŸãã JSã§ã®å¿
èŠæ§ã Bucklescriptã«ã€ããŠã¯ãã¢ãžã¥ãŒã«ãOCamlã®å€ã§ãããšããäºå®ãåé¡ã«ãªãå¯èœæ§ããããã©ããã¯ããããŸããããŸããFïŒã®Mapã¯ããã€ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã«æºæ ããå¿
èŠããããŸããæãæéãããã£ãã®ã¯ãã«ã¹ã¿ã æ¯èŒã䜿çšããåãããŒãšããŠé©åã«æ©èœãããããšã§ãã OCamlã§ãå€å°éããšæããŸãã
ãšããã§ãBigintã¯ç¢ºãã«FSharp.CoreããååŸãããŠããŸãããåŸã®ãªãªãŒã¹ã§ç§»æ€ãããšæããŸãã
@zaaackã«æè¬ããŸããããŒãã§äœæ¥ãããšãã¯ããã®ããšã念é ã«çœ®ããŠãããŸãã
ããã«ã¡ã¯ã¢ã«ãã©ã³ãœç§ã¯expectoãã¹ãã®éšåãæäŒãããã§ã
ããã¯çŽ æŽããã@EdouardMã§ããããããšãïŒ å€æã®å€§éšåãèªåçã«è¡ãã¹ã¯ãªãããäœæã§ããã°çŽ æŽããããšæããŸãã å¿ èŠã«å¿ããŠãçãç»é¢å ±æã»ãã·ã§ã³ãè¡ã£ãŠãäœãããå¿ èŠããããã瀺ãããšãã§ããŸã:)
確ãã«ãè»éã«ä¹ãã«ã¯çãããã¯ãªããå¿ èŠã§ãã
ä»å€ãããªã®ãããªããæéã®ååŸ6æ30åãããå©çšããã ããŸããã
ãŸãã¯æ¥ææ¥ã«ïŒ
ãããããã°ãã¹ã«ã€ãé話ã®æåŸ ç¶ãéã£ãŠãã ããã
ããããšã
ãšãã¥ã¢ãŒã«
Levenã 23ã®ç«æ2018幎11æ43åà ãã¢ã«ãã©ã³ãœã»ã¬ã«ã·ã¢ã»ã«ã[email protected]
ãšã¯ãªããïŒ
ããã¯çŽ æŽããã@EdouardMhttps ïŒ//github.com/edouardm ãããããšãïŒ ããã¯
å€æãæ倧éã«æŽ»çšããããã®ã¹ã¯ãªãããæžãããšãã§ããã°çŽ æŽãããã§ã
èªåçã å¿ èŠã«å¿ããŠãçãç»é¢å ±æã»ãã·ã§ã³ãè¡ãããšãã§ããŸã
äœãããå¿ èŠããããã瀺ããŠãã ãã:)â
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/fable-compiler/Fable/issues/1370#issuecomment-375619541 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AG_t3dil59Mz38u4cCN9f0JEZMyK7OLRks5thNHPgaJpZM4S03ig
ã
ç§ã®ã¡ãŒã«ã¢ãã¬ã¹ã¯edouardã§ãã [email protected]
Levenã 23ã®ç«æ2018幎11æ43åà ãã¢ã«ãã©ã³ãœã»ã¬ã«ã·ã¢ã»ã«ã[email protected]
ãšã¯ãªããïŒ
ããã¯çŽ æŽããã@EdouardMhttps ïŒ//github.com/edouardm ãããããšãïŒ ããã¯
å€æãæ倧éã«æŽ»çšããããã®ã¹ã¯ãªãããæžãããšãã§ããã°çŽ æŽãããã§ã
èªåçã å¿ èŠã«å¿ããŠãçãç»é¢å ±æã»ãã·ã§ã³ãè¡ãããšãã§ããŸã
äœãããå¿ èŠããããã瀺ããŠãã ãã:)â
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/fable-compiler/Fable/issues/1370#issuecomment-375619541 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AG_t3dil59Mz38u4cCN9f0JEZMyK7OLRks5thNHPgaJpZM4S03ig
ã
æåã®ã¢ã«ãã¡ãªãªãŒã¹ã«å«ãŸããªããã®ïŒbigintãreflectionãpluginsã
ãã 奜å¥å¿ã匷ãã§ãããã¢ã«ãã¡ã®åŸã«ãããã®ãã®ãå«ããããã®ããŒãããã/èšç»ã¯ãããŸããïŒ
@jgrundç¹å®ã®ããŒããããã¯ãããŸããããbigintã¯ç°¡åã«è¿œå ã§ãïŒFSharp.Coreããã³ãŒãã移æ€ããã ãïŒããªãã¬ã¯ã·ã§ã³ãå®å®ãªãªãŒã¹ã®æºåãã§ããŠããå¿ èŠããããŸãã ãã©ã°ã€ã³ã«ã€ããŠã¯ããã©ã°ã€ã³ã®äœ¿çšç¶æ³ã«é¢ããæ å ±ãåéãããã©ã°ã€ã³ãã©ã®ããã«å°å ¥ãããããŸãã¯ãã©ã°ã€ã³ãå¿ èŠãã©ããããŸãšããŠæ±ºå®ããããšæããŸãã
ãããããããšãïŒ Git-Bashã§æ©èœãããã«ã¯ã quicktest.sh
ã«å°ããªå€æŽãå ããå¿
èŠããããŸããã
https://github.com/fable-compiler/Fable/blob/07ddd104cbeb6ad7adf98b6600ac3fe4d1fcfd70/src/tools/quicktest.sh#L30 -L33
32è¡ç®ã次ã®ããã«å€æŽããŸããã
./quickfsbuild.sh --no-build
ããã«ããbash
ïŒãšã«ããå¿
èŠã§ã¯ãªããšæããŸããïŒïŒãåå ã§ãWSLã代ããã«èµ·åããããšãããããç§ã¯èšå®ããŠããŸããã
ããã«ã¡ã¯@EdouardMïŒ ããã¯ããã¹ãã®æŽæ°ã«ã€ããŠfsharpXã§è©±ãåã£ãããšã§ãã
let ``(.*)``.*=
ãšçœ®ætestCase "$1" <| fun () ->
ã䜿çšããŠããã¹ãã®çœ²åãå€æŽããŸã[<Test>]
ã [<TestFixture>]
åé€ããŸãallTests
ã«è¿œå ããŸã@alfonsogarciacaroç§ã¯dev2.0ãã©ã³ãã®ãœãŒã¹ã³ãŒããèªãã§ããŠãä»ã®2ã€ãäž¡æ¹ãšãåãããŠããã®ã§ãæ®ãã®Replacement.fs
ã§äœæ¥ããããã®ãã¯ã¬ã€ãžãŒãªãã®ãã«ãªãããšããŠããŸãðã å€ãReplacement.fs
ããparse
é¢æ°ã移æ€ãããšãã«ãããã€ãã®åé¡ãçºçããŸããã parse
é¢æ°ã¯ãFableã®Fable.ApplyInfo
ã«ååšããreturnType
äŸåããŸãã 1.0ã§ããã CallInfo
ã§èŠã€ãããŸããããããåŠçããæ¹æ³ãããããŸãããå©ããŠããã ããŸãããïŒ
ãããç§ã®ã³ãããã§ãïŒ
https://github.com/fable-compiler/Fable/compare/dev2.0...zaaackïŒdev2.0ïŒexpand = 1ïŒdiff-a34e57b30a53951ff9b99ce4076feaa4R1390
ããã¯çŽ æŽããã@zaaackã§ããããã©ããããããšãã ã¯ããç³ãèš³ãããŸãããã眮æã®é¢æ°ã®ã·ã°ããã£ãå°ãå€æŽããŠãä»ã®ã¢ãžã¥ãŒã«ã®é¢æ°ã®ããã«èŠããŸããæåã®3ã€ã®åŒæ°ã¯éåžžã次ã®ããã«ãªããŸãïŒã³ã³ããã¹ãã¯2çªç®ã«ç¶ãå ŽåããããŸãïŒã
let myFableHelper (com: ICompiler) (range: SourceLocation option) (typ: Type) ... =
ãã®ãããæ»ãå€ã®åïŒããã³ç¯å²ïŒãCallInfo
ããé¢æ°ã®æåã®åŒæ°ã«ç§»åããŸããã let parse com r t info thisArg args =
ãããªãã®ã䜿çšã§ããŸãïŒã¯ããç§ã¯éåžžt
ã ãã䜿çšããŸãããããŸãæå³ããªãããšã«åæããŸãïŒã
ç§ã¯Replacementsã¢ãžã¥ãŒã«ã§ãåããŠããŸãã ä»ã®é¢æ°ãå®äºããŠããéãã³ã¬ã¯ã·ã§ã³ïŒSeqãListãArrayïŒã«åãçµãããšãã§ããŸãããã©ãæããŸããïŒ
æè¿ããªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒã§éçã¡ã³ããŒã䜿çšããããã«ã Helper
éçã¿ã€ããè¿œå ããŸããã InstanceCall
ã CoreCall
...ãã«ããŒãã©ã®ããã«äœ¿çšãããŠãããã確èªããã«ã¯ãæ¢åã®ã³ãŒããã芧ãã ããã ãã®ä»ã®æ³šæäºé
ïŒ
CallInfo
ããçŽæ¥æž¡ããŸãã ããã§ããå Žåã¯ãargåãåèšç®ããå¿
èŠããããŸããThisArg
ã¯ãªãã·ã§ã³ã§ãã ååšããå Žåã¯ãããããåæ ŒããŸãã Fable 2ã§ã¯ãåã€ã³ã¹ã¿ã³ã¹ã¡ã³ããŒã¯å®éã«ã¯éçé¢æ°ãšããŠã³ã³ãã€ã«ãããããã this
ãåŒæ°ãšããŠæž¡ãããŸãã ArgTypes
ã¯ThisArg
ã¯å«ãŸããŸãããInstanceCall
çš®é¡ãæå®ãããŠããå Žåã ThisArg
åŒã¯å®éã®ã€ã³ã¹ã¿ã³ã¹åŒã³åºããšããŠã³ã³ãã€ã«ãããŸãïŒ thisArg.member(arg1, arg2...)
ãä»ã®ãšããããã§ååã§ã:)質åãããã°ç§ã«ç¢ºèªããŠãã ããããŸããå©ããŠãããŠããããšãïŒ
è¿ éã§è©³çŽ°ãªè¿ä¿¡ãããããšãããããŸããææ¥è©ŠããŠã¿ãŸãã
ç§ã¯Replacementsã¢ãžã¥ãŒã«ã§ãåããŠããŸãã ä»ã®é¢æ°ãå®äºããŠããéãã³ã¬ã¯ã·ã§ã³ïŒSeqãListãArrayïŒã«åãçµãããšãã§ããŸãããã©ãæããŸããïŒ
çŽ æŽãããã§ããã»ãšãã©ã®å Žåãå¹³æ¥ã¯2æéãé±æ«ã¯1æ¥ãéããããšãã§ãããšæããŸãã
ã¡ãªã¿ã«ã誰ãããã¹ããã¡ã€ã«ã移æ€ããŠããå Žåã¯ã SetTests.fs
ãšMapTests.fs
ã移æ€ããå¿
èŠã¯ãããŸãããã¢ãžã¥ãŒã«ã®çµ±åããã¹ãããããã«è¡ããŸãã
ãŸããVSCodeã䜿çšããå Žåã¯ãè€æ°éžæã䜿çšããŠããã¡ã€ã«å ã§ãã¹ãŠã®äœæ¥ãäžåºŠã«å®è¡ã§ããŸãã ã¹ã¯ãªãããæžãããšã¯ãããã§å°ããšã³ãžãã¢ãªã³ã°ããããŠããããã§ã:)ã
Maximeã«æè¬ããŸãããã¹ããã¡ã€ã«ã®å€æãåŠçããŸãã
ãšãã¥ã¢ãŒã«
2018幎4æ18æ¥15:16ããMaximeMangelã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
æ
å ±ã®ããã«ã誰ãããã¹ããã¡ã€ã«ã移æ€ããŠããå Žåã¯ç§»æ€ããå¿
èŠã¯ãããŸãã
SetTests.fsãšMapTests.fsã¢ãžã¥ãŒã«ã®çµ±åããã¹ãããããã«è¡ããŸãã
ãŸããVSCodeã䜿çšããå Žåã¯ãè€æ°éžæã䜿çšããŠãã¹ãŠã®äœæ¥ãè¡ãããšãã§ããŸã
ãã¡ã€ã«å
ã§äžåºŠã«ã ã¹ã¯ãªãããæžãããšã¯ããšã³ãžãã¢ãªã³ã°ãå°ãããéããŠããããã§ã
ãã ïŒïŒã
[ç»åïŒ2018-04-18 15 14 27]
https://user-images.githubusercontent.com/4760796/38934173-59a5fc84-431b-11e8-81be-13f624e72817.gif
â
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/fable-compiler/Fable/issues/1370#issuecomment-382382463 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AG_t3YjH5jvU1CXc-27gpz4-tGQNC7AHks5tpzyegaJpZM4S03ig
ã
ããã«ã¡ã¯ïŒ src / js / fable-core / List.fsã«æ¬¡ã®ã¡ãœãããå®è£ ããå¿ èŠããããŸãïŒJSã§é åžãããŸãããFïŒãã¡ã€ã«ã§ããããšã«æ³šæããŠãã ããïŒã
ãããã¯å®è£ ãããŠããŸããããã¹ãã¯åæ ŒããŠããŸããã
Fableã¯è¿œå ã®åŒæ°ãšããŠIEqualityComparer
ãæ¿å
¥ããå¿
èŠãããããããããã¯å°ãç¹æ®ã§ãã ç§ã¯èªåã§ãããè¡ãããšãã§ããŸãããããªããååã«åæ¢ã§ãããªãã°ãããªãã¯äŸãšããŠsort
ãåãããšãã§ããŸãïŒ
倱æãããã¹ããQuickTest.fsãã¡ã€ã«ã«å ¥ããã®ã§ãFable + fable-coreãåã³ã³ãã€ã«ããŠã次ã®ããã«å ¥åããã ãã§ãã¹ããå®è¡ã§ããã¯ãã§ãã
cd src/tools
sh quicktest.sh --build-core
ãã©ã³ãã£ã¢ã¯ããŸããïŒ ;ïŒ@ valery-vitko @zaaack
ä»é±æ«ã«äœãã§ãããèŠãŠãããŸãã
æ®å¿µãªãããç§ã¯ä»åŸæ°é±éã¯æºå¡ã§ãã ïŒãããŠã»ãšãã©ã®å Žåãããã°ã©ãã³ã°ã«é¢é£ããªããã®ããããŸãð¢ïŒã ã¿ããªãç§ãªãã§æ¥œããã§ãã ããã
ïŒ1405ã®partition
ãšfoldBack2
ãä¿®æ£ããŸããã
truncate
ãšindexed
ãå®è¡ããŠãä»ã®ããã€ãã®ç°¡åãªæ©èœãå®è¡ããŠã¿ãŸãã
unfold
ã tryItem
ã splitAt
ã concat
å®è£
ããŸããã
ããïŒ äžèšã®ãªã¹ãã«ã¯ãŸã ããã€ãã®æ¬ èœããŠããã¡ãœãã
@alfonsogarciacaroå šéšåããããšæã£ãŠãã¿ãŸãããæ®ãã¯åããŸãã
PRïŒ https ïŒ
ã¡ãœãããšã€ã³ã¿ãŒãã§ãŒã¹ãæ±ãæ°ããæ¹æ³ãæ€èšãã質åã 以äžã¯ã©ã®ããã«åŠçãããŸããïŒ
type Base () =
abstract M: unit -> string
default __.M () = "base"
type A () =
inherit Base ()
member __.M () = "a" // NOTE: Not override, hides parent M
type B () =
inherit Base ()
override __.M () = "b"
let a = A ()
let b = B ()
printfn "%s" <| (a :> Base).M ()
printfn "%s" <| (b :> Base).M ()
Fable 2ã¯ãã¢ãžã¥ãŒã«é¢æ°ãšããŠç¬èªã®ã¡ã³ããŒãå®è£ ããã³ã³ãã€ã«æã«åç §ã解決ããŸãã ãã ããä»®æ³ã¡ãœããã¯JSãããã¿ã€ãã«ã¢ã¿ãããããŠããããããªããžã§ã¯ããã¢ãããã£ã¹ãããåŸã§ãåŒã³åºãããšãã§ããŸãã ãããã£ãŠããã®ãããã«æ¡åŒµãããããŒãžã§ã³ã®ã³ãŒãïŒãªããžã§ã¯ãã芪ã¡ã³ããŒãåŒã³åºãæ¹æ³ã瀺ãããïŒïŒ
type Base () =
abstract M: unit -> string
default __.M () = "base"
type A () =
inherit Base ()
member __.M () = base.M() + " + a" // NOTE: Not override, hides parent M
type B () =
inherit Base ()
override __.M () = base.M() + " + b"
let a = A ()
let b = B ()
printfn "A: %s" <| a.M ()
printfn "A upcast: %s" <| (a :> Base).M ()
printfn "B: %s" <| b.M ()
printfn "B upcast: %s" <| (b :> Base).M ()
ææ°ã®dotnet-fable2.0.0-alphaã§ã³ã³ãã€ã«ãããšã次ã®ããã«ãªããŸãã
function Base() {}
function Base$$$$002Ector() {
return this != null ? Base.call(this) : new Base();
}
Base.prototype.M = function () {
return "base";
};
function A() {
Base$$$$002Ector.call(this, null);
}
(0, _Types.inherits)(A, Base);
function A$$$$002Ector() {
return this != null ? A.call(this) : new A();
}
function A$$M(__$$1) {
return Base.prototype.M.call(this) + " + a";
}
function B() {
Base$$$$002Ector.call(this, null);
}
(0, _Types.inherits)(B, Base);
function B$$$$002Ector() {
return this != null ? B.call(this) : new B();
}
B.prototype.M = function () {
return Base.prototype.M.call(this) + " + b";
};
const a = exports.a = A$$$$002Ector();
const b = exports.b = B$$$$002Ector();
(0, _String.toConsole)((0, _String.printf)("A: %s"))(A$$M(a));
(0, _String.toConsole)((0, _String.printf)("A upcast: %s"))(a.M());
(0, _String.toConsole)((0, _String.printf)("B: %s"))(b.M());
(0, _String.toConsole)((0, _String.printf)("B upcast: %s"))(b.M());
ãããŠããªã³ãïŒ
A: base + a
A upcast: base
B: base + b
B upcast: base + b
@alfonsogarciacaroã¡ãœãã->ã¢ãžã¥ãŒã«å€æãå®å šã«ç¡å¹ã«ããŠãã¯ãªãŒã³ãªFable 1ã®çµæãååŸããæ¹æ³ã¯ãããŸããïŒ
@vbfoxããããããããªããã ããã¯ãFable 2ã®åäœã«å€§ããªåœ±é¿ãäžããŸãããæ®å¿µãªãããããŸããŸãªåºåãçæããããã®ã³ã³ãã€ã©ãã©ã°ãç¶æããããã®ãªãœãŒã¹ããããŸããïŒ/
ç§ã¯ãªãœãŒã¹ã®åé¡ãå®å šã«ç解ããŠããŸãããå°ãªããšãã©ãã§ãã¯ã©ã¹ã䜿çšããå Žåãå¯è©±ãšJSã®äžçã®éã®äºææ§ã®å€ããå£ãã®ã§æ²ããã§ãïŒ
ïŒå€éšã©ã€ãã©ãªãã¡ãœããæ€åºãå®è¡ããŠããå Žåããã€ã³ã¿ãŒãã§ã€ã¹ã®äœæãå¿ èŠã«ãªããŸãããã»ãšãã©ã®å Žåãããã¯è¯ãç¿æ £ã§ãïŒ
ãŸããå°ãªããšãã¯ã©ã¹ã§ã¯èªãã«æãããšãã§ããJSããé¢ããŠããŸã-ç§ãã¡ãããã»ã©æ°ã«ããªããŠã;ïŒ
ã¯ããçæãããã³ãŒãã¯Fable 2ã§ã¯ãããçŸãããªããã§ãããããããããã®äºå®ãè£ãããšãé¡ã£ãŠããä»ã®å©ç¹ïŒããè¯ãããªãŒã·ã§ã€ã¯ãéçãã£ã¹ãããïŒããããŸãã JSã§äœ¿çšããããã«Fableã§ã©ã€ãã©ãªãäœæããããšã«ã€ããŠã¯ãå®éã®äŸã¯èŠãããšããããŸããããããã§ãå¯èœã§ãã ãããŠã.fsãã¡ã€ã«ãã€ã³ããŒãããããšãããšåžžã«ã³ã³ãã€ã«ããããããFableãããžã§ã¯ãã§ã®Typescriptã®äœ¿çšããããããŸãã;ïŒ
JSãšçžäºéçšããæ¹æ³ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã§ããå¿ èŠããããŸãã Fableã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã®ååããã³ã°ã«ãããŠããªããªããžã§ã¯ãã©ãããŒãçæããããã«ãªã£ãããããããã䜿çšããŠJSãŸãã¯ä»ã®èšèªã«åãéä¿¡ã§ããŸãã
@alfonsogarciacaro Fableã§äœæããJSã§äœ¿çšããããã®ã©ã€ãã©ãªãäœæãããã£ãã®ã§ãããããã¯éåžžã«å€§ããªèŠçã§ããããããããŸããã ããããç§ãçŸåšãããã¯ããã«å€ãFableã䜿çšããŠããªãæ倧ã®çç±ã§ãã ç§ã¯ãããã¢ããªãæ§ç¯ããããã«ã®ã¿æ©èœãããšçµè«ä»ããŸããïŒãŠã§ããã©ããã«ãããããïŒã
@Alxandrã®ç¢ºèªããããšãããããŸãã ãããã£ãŠãFable 1ã§ã¯ãã§ã«èŠçã§ãããã€ãŸããFable2ã¯ãããæªåãããããšã¯ã§ããŸãã;ïŒ
@alfonsogarciacaroã¯æ¬åœã®ãããªãã®ã§ãã ãããŠãç§ã¯éååŠãžã®ç§»è¡ãéèŠã«ãªããšã¯æããŸããïŒã€ã³ã¿ãŒãã§ãŒã¹ãªããžã§ã¯ãã¯ããªãè¯ã解決çã ããã§ãïŒã ãããããã®äžéšã¯fable 2ã§è§£æ±ºãããå¯èœæ§ãããããããªããããéåžžã«èŠçã§ãããã«ã€ããŠè©±ãå¿
èŠããããšæããŸãããããŠãäž»èŠãªåé¡ã¯ãfable-coreãnpmïŒjsãã¡ã€ã«ïŒã ã€ãŸããã©ã€ãã©ãªãšã¢ããªãFïŒã«çµã¿èŸŒãŸããŠããå Žåã Map
ãšList
ãªã©ã®2ã€ã®ã³ããŒããããŸãããŸãã instanceof
ãå£ããŠããŸãã ã
NSã å®éãç§ãã¡ã¯ããæç¹ã§ãã®åé¡ã解決ããããšããŸãããïŒFable 0.7ã§ã¯ãfable-coreãšFableèªäœãnpmãä»ããŠé åžããããšãïŒãfable-coreã¯å€§å¹ ã«å€æŽãããããŒãžã§ã³ãé©åã«ç®¡çããããšã¯åé¡ã§ããïŒããŒãžã§ã³ãä¿æããå¿ èŠããããŸããïŒç°ãªãã¢ãžã¥ãŒã«ã·ã¹ãã çšïŒã Fable 1ã¯fableã§ãã£ããããç¶æ³ã¯ã¯ããã«è¯ããªããŸãããã³ã¢ãã¡ã€ã«ã¯ã³ã³ãã€ã©ã«ãã£ãŠæ¿å ¥ãããã°ããã§ããããã¡ã€ã«ã¯åžžã«åæãããŠããŸãã Fableã«ãã£ãŠãã€ãã£ãã«æ¶è²»ãããããšãæå³ããnpmçšã®Fableã©ã€ãã©ãªãäœæããããšã¯å®çŸå¯èœã§ã¯ãªããšæããŸãã JSã©ã€ãã©ãªãäœæããïŒJS APIãµãŒãã§ã¹ãå ¬éããã§ããã°ãã³ãã«ããïŒããNugetãä»ããŠé åžãããFable / FïŒã©ã€ãã©ãªãäœæããŸãã
JSãšã³ã·ã¹ãã ã¯éåžžã«åºããFableã¯FïŒã«å€ãã®æ©äŒããããããŸãã æ®å¿µãªãããç§ã®ãªãŒãã¯éãããŠãããèšèšäžã®æ±ºå®ãè¡ãéã«ãã¹ãŠãèæ ®ã«å ¥ããããšã¯ã§ããŸããã ãããŸã§ã®ãšãããéåžžãããŸããŸãªåéã§ã®Fableã®å°å ¥ïŒElmish Webã¢ããªãReact NativeãElectron ...ã¯ãã¢ããª/ã©ã€ãã©ãª/ããŒã«ãäœæããå¯çš¿è ã®ãããã§ããããã®åŸãç§ãã¡ã¯ååããŠãšã¯ã¹ããªãšã³ã¹ã容æã«ããŸããã ããããããã€ãã®å°ããªãµã³ãã«ãé€ããŠãFableã§äœæãããJSã©ã€ãã©ãªã«ã€ããŠã¯ãŸã èŠãŠããŸããã
ãããããããç§ã¯å®å šã«ãããç解ããŠããŸãã ç§ã®ããã¹ãŠãç¶²çŸ ããããœãªã¥ãŒã·ã§ã³ã¯ãCIäžã«fable-coreïŒandy FïŒ/ jsã©ã€ãã©ãªïŒãæ§ç¯ããNuGetãšNPMã«åæã«å ¬éããç¶æ³ã§ããå¯èœæ§ããããŸãã ããããã°ãnugetã«FïŒãœãŒã¹ãã¡ã€ã«ãå¿ èŠãããŸããïŒbuild-metadataã®ã¿ãå¿ èŠã§ãããnpmã€ã³ããŒãåãå¿ èŠã«ãªããŸãïŒã ãã ãããããæ©èœãããã«ã¯ããŸãšããå¿ èŠã®ããéšåããããããããnugetããã±ãŒãžã«å€§éã®ã¡ã¿ããŒã¿ãæ ŒçŽããå¿ èŠãããå ŽåããããŸãïŒçæãããJSé¢æ°åãžã®ãããã³ã°ïŒã
ãã®ãããä»æ¥ã¯æ°ããFableã®åºåã«ã€ããŠå€ãã®ããšãèããŠããŠãèæ ®ãããŠããªãå Žåã«åããŠåãäžãããåé¡ãããã€ãèãåºããŸããã
ç§èªèº«ã¯JSã®ã¯ã©ã¹ã®å€§ãã¡ã³ã§ã¯ãããŸããããé¢æ°ã§ã¯éæã§ããªã1ã€ã®éèŠãªç®çãã€ãŸããã€ãã£ãã¯ã©ã¹ã®æ¡åŒµïŒ Map
ãArray
ïŒã ããã§ãã¯ã©ã¹ã®ä»£ããã«é¢æ°ã䜿çšããäž»ãªçç±ã¯ãè€æ°ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŠçããå¿
èŠããããšããäºå®ã§ãããšæ³å®ããŠããŸãããä»ã®æ¹æ³ã§è§£æ±ºã§ããããšã¯ããªã確ãã§ãïŒããã«ã€ããŠã¯ããå°ã詳ããèŠãŠãããŸãïŒãææ¥ïŒã ããŠãæ確ã«ããããã«ãç§ã¯ãã¹ãŠããããã¿ã€ãã«æ·»ä»ããããšã«æ»ãããšã«ã€ããŠè©±ããŠããã®ã§ã¯ãããŸããã ãã©ã€ããªïŒãŸãã¯åæïŒã³ã³ã¹ãã©ã¯ã¿ãã¯ã©ã¹ã«ããããšã«ã€ããŠè©±ããŠããã ãã§ãã new
ãªãã§ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãæ©èœã«ã€ããŠã¯ãFïŒãåä»ãèšèªã§ãããFableãnew
ãçºè¡ããå¿
èŠããããã©ãããéçã«ææ¡ã§ããã¯ãã§ããããšãèãããšãããã¯ããªãè°è«ã®äœå°ããããšæããŸãã
åéå±€ãããŸãåŠçããåãã§ãã¯ãšä»®æ³ã¡ã³ããŒã®åŒã³åºããå¯èœã«ããã³ãŒããèŠãŠããŸããããããã¯ãã¹ãŠéåžžã«åªããŠããŸãããæ°ããåºåã¯åãã§ãã¯ãšæšæž¬ããŠã€ã³ã¿ãŒãã§ã€ã¹ã§ã©ã®ããã«æ©èœããŸããïŒ ããšãã°ã次ã®ã³ãŒããèããŠã¿ãŸãããã
type IFoo =
abstract Foo: string
type IBar =
abstract Bar: string
type FooBar () =
interface IFoo with
member __.Foo = "foo"
interface IBar with
member __.Bar = "bar"
let check (t: bool) =
if not t then failwithf "test failed"
let test () =
let foobar = FooBar ()
let foo = foobar :> IFoo
let bar = foobar :> IBar
let obj = foobar :> obj
check (foo :? FooBar)
check (bar :? FooBar)
check (foo :? IBar)
check (bar :? IFoo)
check (obj :? IFoo)
check (obj :? IBar)
()
Fable 2ã®ãªãªãŒã¹ã«ãååããã ããèª ã«ããããšãããããŸãã
æãåèã«ãªãã³ã¡ã³ã
ã¡ãªã¿ã«ã誰ãããã¹ããã¡ã€ã«ã移æ€ããŠããå Žåã¯ã
SetTests.fs
ãšMapTests.fs
ã移æ€ããå¿ èŠã¯ãããŸãããã¢ãžã¥ãŒã«ã®çµ±åããã¹ãããããã«è¡ããŸãããŸããVSCodeã䜿çšããå Žåã¯ãè€æ°éžæã䜿çšããŠããã¡ã€ã«å ã§ãã¹ãŠã®äœæ¥ãäžåºŠã«å®è¡ã§ããŸãã ã¹ã¯ãªãããæžãããšã¯ãããã§å°ããšã³ãžãã¢ãªã³ã°ããããŠããããã§ã:)ã