ããã¯ã0.6ãã1.0ã«çŽæ¥ã¢ããã°ã¬ãŒãããåŠçãæãã€ããã®ã§ãæ°ããåäœã®èª¬æãèŠã€ããããšã¯èšããŸã§ããªããéæšå¥šã®èŠåãèŠãæ©äŒãããããŸããã§ããã
julia> beforefor = true
true
julia> for i in 1:2
beforefor = false
end
julia> beforefor # this is surprising bit
true
julia> beforeif = true
true
julia> if 1 == 1
beforeif = false
end
false
julia> beforeif # Another surprise!
false
julia> function foo()
infunc = true
for i in 1:10
infunc = false
end
<strong i="7">@show</strong> infunc
end
foo (generic function with 1 method)
julia> foo() # "I don't get this"
infunc = false
julia> total_lines = 0
0
julia> list_of_files = ["a", "b", "c"]
3-element Array{String,1}:
"a"
"b"
"c"
julia> for file in list_of_files
# fake read file
lines_in_file = 5
total_lines += lines_in_file
end
ERROR: UndefVarError: total_lines not defined
Stacktrace:
[1] top-level scope at ./REPL[3]:4 [inlined]
[2] top-level scope at ./none:0
julia> total_lines # This crushs the students willingness to learn
0
ã¹ã³ãŒããå°å ¥ãããã®ãšå°å ¥ããªããã®ã«ã€ããŠã®ããã¥ã¢ã«ã®ã¢ã«ã«ããååã«åç §ããŠã説æã§ãããšæãæå³ã§ãããçºçããçç±ããç解ãããŸãããããã¯ã€ã³ã¿ã©ã¯ãã£ããªäœ¿çšã«ã¯åé¡ããããšæããŸãã
äŸ1ã§ã¯ããµã€ã¬ã³ããšã©ãŒãçºçããŸãã äŸ2ã§ã¯ãââã¹ããŒã³ããŸã£ãããªããšãããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã ããã¯ãä»æ¥ä»äºã§ããŒãããã¯ã«æžããPythonã³ãŒãã«ã»ãŒå¹æµããŸãã
Pythonã®ã«ãŒã«ãäœã§ãããã¯ããããŸããããäžè¬çã«ãã°ããŒãã«ãåŒã³åºããã«ã°ããŒãã«ã¹ã³ãŒãã§ç©äºã«å²ãåœãŠãããšã¯ã§ããªãããšãç§ã¯ç¥ã£ãŠããŸãã ããããREPLã§ã¯æ©èœããŸããããããREPLã§ã¯ãã«ãŒã«ãç°ãªããããã¹ãŠãæ©èœã®ç¯å²å ã«ãããã®ããã«åãããžãã¯ãé©çšãããããã§ãã
ç§ã¯èªåãæãå ·äœçãªå€æŽãææ¡ããã®ã«ååãªã«ãŒã«ãèšèªåŒè·å£«ã«äŒããããšãã§ãããSlackã«åºã¥ããŠãããã¯å¿ ãããäžéšã®äººã ã«ãã£ãŠåé¡ãšããŠèªèãããŠããªãã®ã§ããã©ã°ãç«ãŠãŸãã
çžäºåç §ïŒ
https://discourse.julialang.org/t/repl-and-for-loops-scope-behavior-change/13514
https://stackoverflow.com/questions/51930537/scope-of-variables-in-julia
ïŒ @mlubinã«ãããšãããã¯é¢é£ããå€æŽã§ãhttps://github.com/JuliaLang/julia/pull/19324ïŒ
Stefanã¯ããã®åé¡ã解決ãã1ã€ã®å¯èœæ§ã¯ã let
ãããã¯ã§ã®REPLãšã³ããªã®èªåã©ããã³ã°ã§ãããšããã§ææ¡ã
ããããããã¯ããªããããããšãã§ããªãã£ããšããç¹ã§æ··ä¹±ããŸãããïŒ
a = 1
ãã®åŸa
ã䜿çšããŸããïŒ ãã¹ãŠã®ãããã¬ãã«ã®å²ãåœãŠã«global
ãæ¿å
¥ãããŠããªãéããç§ã¯æšæž¬ããŸããïŒ
åäœã¯ããã¹ãŠãlet
ãããã¯ã§ã©ããããã ãã§ã¯ãªãããããããè€éã§ãã åŒå
ã§å²ãåœãŠãããŠããã°ããŒãã«ãlet-bindããŠãããåŒã®æåŸã«ããglobalã«let-boundå€ãæœåºããå¿
èŠããããŸãã
ãããã£ãŠã a = 1
ãa = let a; a = 1; end
ãããªãã®ã«å€æããŸãã ãããŠäœãã®ãããª
for i in 1:2
before = false
end
ããã«å€ãããŸãïŒ
before = let before = before
for i in 1:2
before = false
end
end
ççŽã«èšã£ãŠãç§ã¯äººã ãä»ãã®ãã£ãŒãããã¯ãããŠããã ãã§ããããšã«ããªãè ¹ãç«ãŠãŠããŸãã ããã¯10ã¶æéãã¹ã¿ãŒã«å€æŽããããŸããã
ç§ã¯æè¿ãŸã§ãã¹ã¿ãŒãéåžžã«éããŠãã©ããŒããŠããªãã£ã眪ãç¯ããŠããã®ã§ããã®ãã£ãŒãããã¯ã¯ç¢ºãã«å°ãé
ããŠããŸãã ããã°ã©ããŒã®æžå¿µä»¥äžã®ãã®ïŒã»ãšãã©ã®for
ã«ãŒãã¯ã©ã€ãã©ãªã³ãŒãã®é¢æ°å
ã«ãããŸãïŒããã¯æè²ã®æžå¿µã§ã¯ãªãããšæããŸãã å€ãã®å Žåã for
ã«ãŒãã¯ãé¢æ°ãŸãã¯ã¹ã³ãŒãã®åã«æããããŸãïŒãã¡ãããäœãèµ·ãã£ãŠããã®ããå®éã«ç解ããã«ã¯ã¹ã³ãŒããç解ããå¿
èŠããããŸãããæããå Žåã¯åçŽåãããããšããããããŸãïŒã
ããã§ã¯ãé¢æ°ãã°ããŒãã«å€æ°ã説æããã«1ãã10ãŸã§ã®æ°å€ãåèšããæ¹æ³ãåå¿è ã«æããã®ã¯å°ãé£ãããªããŸãã
ççŽã«èšã£ãŠãç§ã¯äººã ãä»ãã®ãã£ãŒãããã¯ãããŠããã ãã§ããããšã«ããªãè ¹ãç«ãŠãŠããŸãã ããã¯10ã¶æéãã¹ã¿ãŒã«å€æŽããããŸããã
å ¬å¹³ãæãããã«ãJulia0.7ã¯13æ¥åã«ãªãªãŒã¹ãããŸããã ããã¯ãã»ãšãã©ã®JuliaãŠãŒã¶ãŒã«ãšã£ãŠæ°ããå€æŽã§ãã
ççŽã«èšã£ãŠãç§ã¯äººã ãä»ãã®ãã£ãŒãããã¯ãããŠããã ãã§ããããšã«ããªãè ¹ãç«ãŠãŠããŸãã ããã¯å€æŽã10ã¶æéãã¹ã¿ãŒã«ãããŸãã
æ®å¿µãªããããšããžã§ã®ç掻ãåŠçã§ããªãç§ãã¡ã«ãšã£ãŠã¯ãç§ãã¡ã®èŠ³ç¹ããã¯ãŸã£ããæ°ãããã®ã§ãã
ççŽã«èšã£ãŠãç§ã¯äººã ãä»ãã®ãã£ãŒãããã¯ãããŠããã ãã§ããããšã«ããªãè ¹ãç«ãŠãŠããŸãã ããã¯10ã¶æéãã¹ã¿ãŒã«å€æŽããããŸããã
ãããŠãéçºéšéããé¢ããããšã奚å±ãããŠããç§ãã¡ã«ãšã£ãŠããããã¯ç§ãã¡ã®èŠ³ç¹ããã¯ãŸã£ããæ°ãããã®ã§ããã
人ã ãããããã¹ãããªããã°ãªããªãã£ãæéã«ã€ããŠã¡ã¿ãã£ã¹ã«ãã·ã§ã³ããã代ããã«ãä»ç®åã®åé¡ã«çŠç¹ãåãããããã«æ»ã£ãŠãã ããã ä»ã®ç¶æ ã§ãã®ã§ã楜ãã¿ã«ããŸãããã
ç§ã¯æè¿ãŸã§ãã¹ã¿ãŒãéåžžã«éããŠãã©ããŒããŠããªãã£ã眪ãç¯ããŠããã®ã§ããã®ãã£ãŒãããã¯ã¯ç¢ºãã«å°ãé ããŠããŸãã ããã°ã©ããŒã®æžå¿µä»¥äžã®ãã®ïŒã»ãšãã©ã®forã«ãŒãã¯ã©ã€ãã©ãªã³ãŒãã®é¢æ°å ã«ãããŸãïŒããã¯æè²ã®æžå¿µã§ã¯ãªãããšæããŸãã å€ãã®å Žåãforã«ãŒãã¯é¢æ°ãŸãã¯ã¹ã³ãŒãã®åã«æããããŸãïŒãã¡ãããäœãèµ·ãã£ãŠããã®ããå®éã«ç解ããã«ã¯ã¹ã³ãŒããç解ããå¿ èŠããããŸãããæããå Žåã¯åçŽåãããããšããããããŸãïŒã
ããã§ã¯ãé¢æ°ãã°ããŒãã«å€æ°ã説æããã«1ãã10ãŸã§ã®æ°å€ãåèšããæ¹æ³ãåå¿è ã«æããã®ã¯å°ãé£ãããªããŸãã
ããã倧ããªãã€ã³ãã§ãã åé¡ãå®éã«äœã§ããããèŠã€ããåŸããããå®éã«ã»ãšãã©çŸããªãã®ã¯é©ãã¹ãããšã§ãã éçããã³ãã¹ãã§ã®å€ãã®Juliaã³ãŒãã§ã¯ããã»ã©åé¡ã§ã¯ãªãã誀ã£ãŠã°ããŒãã«ã§ãã£ãå€ãã®å€æ°ãæããã«ãªããŸããïŒå ã®PRã«ããJulia Baseã®äž¡æ¹ã®ãã¹ãã§ãã»ãšãã©ã®å Žåã«ããã«æ°ã¥ããŸããã DiffEqã®ãã¹ãïŒã ã»ãšãã©ã®å Žåã埮åŠã«ééã£ãåäœã¯ïŒã«ãŒãã®å€æŽãæåŸ ããŠïŒåŸããããã®ã§ã¯ãªãããã§ãããã«ãŒãã§å€æ°ã䜿çšã§ããããšãæåŸ ããããšã¯ãç§ã倧å€æ°ã§ããããšãããã£ããã®ã§ãããã¯ããã¹ãã¹ã¯ãªãããv1.0ã«æŽæ°ãããšãã«è¡šç€ºãããŸãã ãããã£ãŠãè¯ãç¹ã¯ãã»ãšãã©ã®å ŽåããŠãŒã¶ãŒã«ãšã©ãŒã衚瀺ãããä¿®æ£ããã®ã¯é£ãããªããšããããšã§ãã
æªãç¹ã¯ãã«ãŒãå
ã«global x
ãé
眮ããå¿
èŠãããã®ã¯å°ãåé·ã§ãããREPLã³ãŒããé¢æ°ã³ãŒããšã¯ç°ãªãããšã§ãã ããŒã/ãœããããŒã«ã«ã¹ã³ãŒãã«ã¯ç¢ºãã«ããã€ãã®ãšããžã±ãŒã¹ããããããã¯æããã«èª¬æããããããã以åãããçŽæçãªåäœã§ãããã©ããã¯é£ããæèŠã§ãã ãããåæã«ã以åã®åäœãããã¯ããã«ç°¡æœãªèª¬æããããªãããã¹ã³ãŒãã«ãŒã«ãç解ããããšãéèŠãªãšããžã±ãŒã¹ã«ç°¡åã«å°éã§ããããã«ãªããŸããã ð€·ââïžã
ç§ã¯let
ããããã³ã°ã䜿ã£ãå®éšãèŠãããšæã£ãŠããŸãã ããã«ããããããã»ã©å€ãã®ã°ããŒãã«ãå¿
èŠã§ã¯ãªãã£ãããšããåŽé¢ãç¶æãããã¹ã³ãŒãã®èª¬æãç°¡ç¥åããããšåæã«ãREPLã³ãŒããé¢æ°å
éšã®ããã«åäœããããã«ãªããŸãïŒããã¯ç§ãã¡ãåžžã«æãã§ããããšã®ããã§ãïŒã ãŸãã¯éã«ãã°ããŒãã«ãšããŠæ©èœããããå€æ°ãæå®ããã
global x = 5
for i = 1:5
println(x+i)
end
æ瀺æ§ãç¶æããããã®åªããæ¹æ³ã§ããå¯èœæ§ãããããã°ããŒãã«ã®ããã«REPLã³ãŒããé
ããããšãã¯ããã«æçœã«ãªããŸãã æ¬ ç¹ã¯ãé¢æ°ã«ç©ãæã蟌ãã®ã«global
ããŒã«ãŒãå¿
èŠãªãããšã§ãã
ãããããããã©ã®ããã«çŸããåŸåãããããèãããšãããã¯å®éã«ã¯ã²ãŒã ãã¬ã€ã¯ãã·ã§ãŒããããŒã§ã¯ãããŸããã ç§ã¯ãããã©ã®ã¯ãŒã¯ã·ã§ããã§ãèšåãããã¹ãç£èŽ ãšããŠåé¡ããŸããããããåå ã§v1.0ã䜿çšã§ããªãããã§ã¯ãããŸããã ãã ãããã®åäœã®å€æŽãç ŽæãšããŠåé¡ããããv2.0ãå¿ èŠã«ãªãããšãé¡ã£ãŠããŸãã
REPLãé¢æ°å éšã®ããã«åäœããå¿ èŠããããšããèãã奜ããã©ããã¯ããããŸããã æããã«ããã§ã¯ãªãã®ã§ãã°ããŒãã«ã¹ã³ãŒãã®ããã«åäœããããšãæåŸ ããŠããŸãã ç§ã«ãšã£ãŠãã°ããŒãã«ã¹ã³ãŒãã®ããã«åäœããªãREPLã¯ããã®åé¡ãåŒãèµ·ããäžäžèŽãããããã«æ··ä¹±ããå¯èœæ§ããããŸãã
ãšã«ãããå°ãªããšããããã¥ã¡ã³ãã¯ãã®åé¡ã«ã€ããŠããå°ãæ確ã«ãã¹ãã ãšæããŸãã ããã¥ã¡ã³ããäœæ°ãªãèªãã§ãããšãããã©ã«ãã§ã°ããŒãã«ã¹ã³ãŒãã§åäœãçºçããããã«ããã«ã¯ã local
ããŒã¯ãŒãã䜿çšããå¿
èŠããããšæããŸãã
ç§ã¯
let
ããããã³ã°ã䜿ã£ãå®éšãèŠãããšæã£ãŠããŸãã ããã«ããããããã»ã©å€ãã®ã°ããŒãã«ãå¿ èŠã§ã¯ãªãã£ãããšããåŽé¢ãç¶æãããã¹ã³ãŒãã®èª¬æãç°¡ç¥åããããšåæã«ãREPLã³ãŒããé¢æ°å éšã®ããã«åäœããããã«ãªããŸãïŒããã¯ç§ãã¡ãåžžã«æãã§ããããšã®ããã§ãïŒã
ãREPLã¯é¢æ°ã®å
éšãšåãã§ãããšããå Žåã¯ã outer
ã«ã€ããŠãèæ
®ããå¿
èŠããããŸãã
julia> i = 1
1
julia> for outer i = 1:10
end
ERROR: syntax: no outer variable declaration exists for "for outer"
察ïŒ
julia> function f()
i = 0
for outer i = 1:10
end
return i
end
f (generic function with 1 method)
julia> f()
10
ççŽã«èšã£ãŠãç§ã¯äººã ãä»ãã®ãã£ãŒãããã¯ãããŠããã ãã§ããããšã«ããªãè ¹ãç«ãŠãŠããŸãã ããã¯10ã¶æéãã¹ã¿ãŒã«å€æŽããããŸããã
人ã ã¯ãã€ã³ã¿ã©ã¯ãã£ããªäœ¿çšãæè²ã®ããã«ãã¹ã¿ãŒã䜿çšããŠããŸãããããã±ãŒãžãã¢ããã°ã¬ãŒãããããã«ãã¹ã¿ãŒã䜿çšããŠããŸããããã±ãŒãžã¯ãããã«ãã圱é¿ãæå°éã§ãããã»ãšãã©ãçµéšè±å¯ãªããã°ã©ããŒã«ãã£ãŠäœæãããŠããŸãã
ïŒç§ã¯ïŒ19324ã§ãã£ãŒãããã¯ãæäŸããæ°å°ãªã人ã®äžäººã§ããããå€ãæ¯ãèãã«ã€ããŠè°è«ã
ãããå£ããªãæ¹æ³ã¯ãå€ãåäœã«æ»ãããšã§ãïŒçæ³çã«ã¯ãæé»ã®let
ãããã¯ãªã©ãæ¿å
¥ããã®ã§ã¯ãªãããªãã·ã§ã³ãšããŠjulia-syntax.scm
ã®å€ãã³ãŒãã埩å
ããã ãã§ãïŒã REPLã ããããIJuliaã®ãããªç°å¢ã§å©çšã§ããããã«ããã«ã¯ã include
ã include_string
ãããã³Core.eval
ã«soft_global_scope=false
ãã©ã°ãè¿œå ããŠåŸ©å
ããŸããå€ãæ¯ãèãã
ïŒç§ã¯ïŒ19324ã§ãã£ãŒãããã¯ãæäŸããæ°å°ãªã人ã®äžäººã§ããããå€ãæ¯ãèãã«ã€ããŠè°è«ããŸãããïŒ
ã¯ãããšãŠãæè¬ããŠããŸãã ç§ãã¡ãéžãã ã®ã§ãä»ã¯ããã»ã©éèŠã§ã¯ãããŸãããããã10ã¶æéçŒããŠããããŠä»ãå®å®æ§ãžã®é·æçãªã³ãããã¡ã³ãã§ããããªãªãŒã¹ããŸããã ãããã£ãŠãä»ããã¹ãããšã¯ãä»åŸäœããã¹ããã«çŠç¹ãåœãŠãããšã ãã§ãã
å€ãåäœãšæ°ããåäœã®ã©ã¡ãããéžæã§ãããªãã·ã§ã³ãããã®ã¯èå³æ·±ãããšã§ãããéåžžã«ããããŒãªæããããŸãã ã€ãŸãã誰ããä¿¡ããããªãã»ã©æ··ä¹±ããŠãããšæãããã¹ã³ãŒãåäœãçºçããããšãããã ãã§ãªããåžžã«ãããååšãããšã¯éãããååšãããã©ããã¯ã°ããŒãã«ãã©ã°ã«äŸåããŸãã ããã¯ããªãç©è¶³ããªãæãã§ããç§ã¯æããŠããŸãã
å€ãåäœãšæ°ããåäœã®ã©ã¡ãããéžæã§ãããªãã·ã§ã³ãããã®ã¯èå³æ·±ãããšã§ãããéåžžã«ããããŒãªæããããŸãã
誰ãããunbreakmeããœããã¹ã³ãŒãASTå€æãå®è£ ãããšãIJuliaãOhMyREPLãªã©ã§ããã䜿çšããããªãã§ãããããã®æç¹ã§ãããã©ã«ãã®REPLãå£ããŠãããšèŠãªããããšããããã«åé¡ã®ããç¶æ³ã«ãªããŸãã
ããã¯ç§ãèšã£ãŠããããšã§ã¯ãããŸããã æããã«ãããããã¹ãŠã®ã³ã³ããã¹ãã§åããœãªã¥ãŒã·ã§ã³ã䜿çšããå¿ èŠããããŸãã ãã ããã¹ã³ãŒãã«ãŒã«ã®2ã€ã®ç°ãªãããªãšãŒã·ã§ã³ãšããŠå®è£ ããããšã¯ã1ã»ããã®ã¹ã³ãŒãã«ãŒã«ã䜿çšããŠã³ãŒãå€æãšããŠå®è£ ãããããã¯ãªãŒã³ã§ã¯ãªãããã§ãã ãããããããããããã¯æ©èœçã«åçã§ãã ãã ããæ°ããããåçŽãªã¹ã³ãŒãèŠåãšãREPLã¹ã¿ã€ã«ã®å ¥åãåãåãããããè©äŸ¡ããåã«å€æããå€æã®èŠ³ç¹ãã説æããæ¹ãç°¡åãªããã§ãã
ããã¯ãã¢ãžã¥ãŒã«ã«ååšããã°ããŒãã«ããããã¬ãã«ã®éé¢æ°ã¹ã³ãŒãå
ã«å²ãåœãŠãããŠããå Žåããããã«ã°ããŒãã«ãšããŠèªåçã«æ³šéãä»ããããšã«ãã£ãŠåŒãå€æããMeta.globalize(m::Module, expr::Expr)
ãšããŠå®è¡ã§ããŸãã ãã¡ãããããã¯å€ãããŒãµãŒãè¡ã£ãããšãšåçã ãšæããŸãããèªåã§Meta.globalize
åŒã³åºããŠãREPLãäœãè©äŸ¡ãããã確èªã§ãããããããå°ãééçã§ãã
ããã¯ãã¢ãžã¥ãŒã«ã«ååšããã°ããŒãã«ããããã¬ãã«ã®éé¢æ°ã¹ã³ãŒãå ã«å²ãåœãŠãããŠããå Žåããããã«ã°ããŒãã«ãšããŠèªåçã«æ³šéãä»ããããšã«ãã£ãŠåŒãå€æãã
Meta.globalize(m::Module, expr::Expr)
ãšããŠå®è¡ã§ããŸãã
ç§ã¯å®éã«æ°ååã«ãã®ãããªãã®ãå®è£
ããããšãæ€èšãå§ããŸããã ãã ãã julia-syntax.jl
ãªãã·ã§ã³ãšããŠå®è£
ããæ¹ãã¯ããã«ç°¡åãªããã§ãã
julia-syntax.scm
ãããæ£ããè¡ãããã®ã³ãŒãã¯ãã§ã«ãããŸããinclude_string
ã䜿çšããŠã³ãŒãã®ãããã¯å
šäœãè©äŸ¡ããæåŸã®åŒã®å€ãååŸããIJuliaã®ãããªãã®ã§ã¯ãããã«æ³šæãå¿
èŠã§ãã åŒãåŒããšã«è§£æããããã«åãæ¿ããå¿
èŠãããã ãã§ãªããå
ã®è¡çªå·ãä¿æããããã«ïŒãšã©ãŒã¡ãã»ãŒãžãªã©ã®ããã«ïŒããã€ãã®ããã«ãŒãå¿
èŠã«ãªãå ŽåããããŸãã ïŒãã ããããã§ãæ©èœããå¯èœæ§ã®ããinclude
å€éšãã¡ã€ã«ãASTå€æã«ãã£ãŠææãããªããšãã人ã
ã®å Žåã¯èšããŸã§ããããŸããããã ããæ°ããããåçŽãªã¹ã³ãŒãèŠåãšãREPLã¹ã¿ã€ã«ã®å ¥åãåãåãããããè©äŸ¡ããåã«å€æããå€æã®èŠ³ç¹ãã説æããæ¹ãç°¡åãªããã§ãã
ã€ã³ã¿ã©ã¯ãã£ããªäœ¿çšãç¹å®ã®ãã©ã°ãä»ããinclude
å Žåãã«ãŒã«ã®éžæãé£ãããšèšããããããããæ°ãããŠãŒã¶ãŒã«èª¬æããããã®ã§ã¯ãªãããšçå£ã«çã£ãŠããŸãã
globalize(::Module, ast)
å®è£
ã®å€§ãŸããªãã©ããã¯æ¬¡ã®ãšããã§ãïŒ https ïŒ
ããŠãè¡çªå·æ
å ±ãä¿æããglobalize_include_string
é¢æ°ãå®è£
ããæ¹æ³ãç解ãããããç§ã®èŠç¹ã«è¿œå ããŸããã
人ã ããã®ã¢ãããŒãã奜ãå Žåãå¯èœãªïŒéç Žå£çãªïŒåé²ã®æ¹æ³ïŒ
globalize
ãªã©ã®é¢æ°ãå«ãSoftGlobalScope.jlããã±ãŒãžããªãªãŒã¹ããŸãããããšããããã«REPL.jlã«ããŒã«ã€ã³ããã®ãå®çšçã§ããïŒ 1.0ã§stdlibã®æŽæ°ãã©ã®ããã«æ©èœãããã«ã€ããŠã¯å®å šã«ã¯ããããŸããã
å£ãããããªããããªãã®ãæ¬ ããŠããå Žåã«åããŠãç§ã®å®è£ ãèŠãŠãã ããã
1.1ã®REPLã®ããã©ã«ã以å€ã®æ©èœãšããŠããã䜿çšããããšã¯ã§ããŸãããïŒ
ïŒ28523ãšïŒ28750ã®è€è£œã ã°ããŒãã«å€æ°ã«ã€ããŠäººã
ã«æããããªããšèšã人ã«ã¯ã for
ã«ãŒãããåã«ããŸãé¢æ°ãæããããšããå§ãããŸãã ãšã«ããé¢æ°ã¯ããåºæ¬çã§ãããããã¯ã³ãŒããé¢æ°ã§æžãããã¹ãã§ãããšããæåŸ
ãèšå®ããã®ã«åœ¹ç«ã¡ãŸãã äžäŸ¿ãã¯ç解ããŠããŸããããã®ã¹ã³ãŒãã³ã°åäœã¯æè²åŠçãªå©ç¹ã«å€ããå¯èœæ§ããããŸãããå®éãã°ããŒãã«å€æ°ã¯ãç¹ã«ã«ãŒãã§äœ¿çšããå Žåã¯éåžžã«æªãèãã§ãããããèšèªã䜿çšããããã«åŸãåãã«æ²ãããŸããã
ãã®ããã«ããã©ã«ã以å€ã®æ©èœãREPLã«è¿œå ããããšã¯ãç§ã«ã¯åé¡ãªãããã§ãã
@JeffBezanson ãç§ãã¡ã®å€ãã¯ãç·åœ¢ä»£æ°ãçµ±èšãªã©ã®æè¡ã³ãŒã¹ã§ãMatlabãªã©ã®ä»£ããã«Juliaã䜿çšããããšèããŠããããšãå¿ããªãã§ãã ããã ãããã¯ããã°ã©ãã³ã°ã³ãŒã¹ã§ã¯ãªããåŠçã¯ããã°ã©ãã³ã°ã®ããã¯ã°ã©ãŠã³ããæã£ãŠããªãããšããããããŸãã æ§é åããã°ã©ãã³ã°ãè¡ãããšã¯ãããŸãããã»ãšãã©ãã¹ãŠãçãã¹ãããããšã°ããŒãã«å€æ°ã䜿çšããŠã€ã³ã¿ã©ã¯ãã£ãã§ãã
ããã«ãç§ãæåã«åçèšèªã䜿çšããŠããçç±ã¯ãã€ã³ã¿ã©ã¯ãã£ããªæ¢çŽ¢ãšããçµ±å¶ã®ãšããããã°ã©ãã³ã°ãæµåçã«åãæ¿ããããã§ãã ã°ããŒãã«ã³ã³ããã¹ããšé¢æ°ã³ã³ããã¹ãã§åãã³ãŒãã䜿çšã§ããªãããšã¯ãæŠå¿µã®ã¹ã³ãŒãã«æ £ããŠãã人ã«ãšã£ãŠãããã®ç®çã劚ãããã®ã§ãããCS以å€ã®ããã¯ã°ã©ãŠã³ããæã€åŠçã«ãšã£ãŠã¯ããã«æªãããšã§ãã
ç§ãã¡ã®å€ãã¯ãç·åœ¢ä»£æ°ãçµ±èšãªã©ã®æè¡ã³ãŒã¹ã§ãMatlabãªã©ã®ä»£ããã«Juliaã䜿çšããããšèããŠããããšãå¿ããªãã§ãã ããã ãããã¯ããã°ã©ãã³ã°ã³ãŒã¹ã§ã¯ãªããåŠçã¯ããã°ã©ãã³ã°ã®ããã¯ã°ã©ãŠã³ããæã£ãŠããªãããšããããããŸãã æ§é åããã°ã©ãã³ã°ãè¡ãããšã¯ãããŸãããã»ãšãã©ãã¹ãŠãçãã¹ãããããšã°ããŒãã«å€æ°ã䜿çšããŠã€ã³ã¿ã©ã¯ãã£ãã§ãã
ç§ãã¡JuliaãŠãŒã¶ãŒã®å€ãã¯ïŒç§ãå«ããŠïŒCSã®ããã¯ã°ã©ãŠã³ãããŸã£ãããããŸããããé©åãªæ 床ïŒç¹ã«åŠçã«ãšã£ãŠïŒã¯ãç§ãã¡ã®ãã€ãŒãã«å¯Ÿå¿ããããã«ç¶æ³ãæªåãããããšãèŠæ±ããã®ã§ã¯ãªããåŠã¶æ欲ãããããã§ãã
ããŠãç§ã¯ããã§äœãèµ·ãã£ãŠããã®ãã«ã€ããŠã®ç解ãéãããŠããã®ã§ããã®ç¹å®ã®å€æŽãæªåããããšãå¿ ãããæå³ããŠããŸãããããããé倧ãªè€éãã§ããããäžå¿ èŠã«æžãã®ãé床ã«ç°¡åã«ãªãå Žåããã©ãŒãã³ã¹ã®æªãã³ãŒãã¯ãããè¯ãè¬çŸ©äŸãåŸãããã«å€æŽãå ãã䟡å€ããªãããã§ãã ç©çæ³åãå€æŽããŠãæ°å ¥çã«ç€ºãéé»æ°ã®äŸãå®éã®ç掻ã«ããé©ãããã®ã«ããããšã¯ã§ããŸããã
ãããã£ãŠãããã©ãŒãã³ã¹ãæ°ã«ããéCSãŠãŒã¶ãŒãšããŠã®ç§ã®è³ªåã¯ããããããã©ã«ãã®åäœã«ãããå Žåãã©ã®ããã«å€±æããå¯èœæ§ãããããšããããšã§ãã åé¡ãããã®ã¯æåéãããã§èŠãŠããçš®é¡ã®äŸã ãã§ããïŒç§ã¯ãã§ã«ç¥ã£ãŠããŸããïŒããããšããã£ãšåŸ®åŠãªæ¹æ³ã§ãããã²ã©ãå°ç¡ãã«ããå¯èœæ§ããããŸããïŒ
䟡å€ã®ããããšãšããŠãã³ãŒããå²ãã¹ã³ãŒãã«å¿ããŠç°ãªãåäœãããããšã¯ãäžè¬çã«æãŸãããªãæ©èœã§ããããšã«åæããŸãã
ã³ãŒããã€ã³ã¿ã©ã¯ãã£ãã«æžãã®ãé£ããããæåã®ã«ãŒããæžãåå¿è ã«ãããŸããªã¹ã³ãŒãèŠåãç解ãããé¢æ°ãã貌ãä»ããã³ãŒããã°ããŒãã«ã¹ã³ãŒãã§æ©èœãããªãããã«ããããšã¯ãããã°ã©ããŒãé¢æ°ã§é«éã³ãŒããæžãã®ã«åœ¹ç«ã¡ãŸããã ãžã¥ãªã¢ãã€ã³ã¿ã©ã¯ãã£ãã«äœ¿çšããã®ãé£ãããªããåå¿è ã«ãšã£ãŠã¯é£ãããªããŸãã
1.1ã®REPLã®ããã©ã«ã以å€ã®æ©èœãšããŠããã䜿çšããããšã¯ã§ããŸãããïŒ
ãunbreakmeããªãã·ã§ã³ãããã©ã«ãã«ããæ¹ãè³¢æãªããã§ããç¹ã«ãåå¿è ãŠãŒã¶ãŒãçã£åããçããªãã·ã§ã³ã§ãã ãããããã©ã«ã以å€ã®ãªãã·ã§ã³ã§ããå Žåãæ£ç¢ºã«ãããæãå¿ èŠãšãã人ã ã¯ããããæå¹ã«ããŠããªãïŒãããŠãããååšããããšãç¥ããªãïŒäººã ã§ãã
ææ¡ãããREPLã¢ãŒãã¯include
edã¹ã¯ãªããã«äœãããŸããïŒ ã°ããŒãã«ã¹ããŒãã¡ã³ãã®è©äŸ¡ã¯ãREPLã¢ãŒããã¢ã¯ãã£ãã«ãªã£ãŠãããã©ããã«ãã£ãŠç°ãªããŸããïŒ ãããããªããIMOããã¯1.0ã®å®å®æ§ã®çŽæãšå¯Ÿç«ããã§ãããã
ãã®ãããªããšãããå Žåãã¢ãžã¥ãŒã«ãã©ã®ããã«æ©èœããããå€æããã®ã¯çã«ããªã£ãŠããããã§ãã ãããã£ãŠã Main
ã¯ããœããã¹ã³ãŒããã¢ãžã¥ãŒã«ã«ãªããŸãããããã©ã«ãã§ã¯ä»ã®ã¢ãžã¥ãŒã«ã¯ãããŒãã¹ã³ãŒããã¢ãžã¥ãŒã«ã«ãªããŸãã
@stevengjã®globalize
é¢æ°ã䜿çšããããã«REPLã«ã¢ã³ããŒããããé©çšããããšãå¯èœãã©ããã確èªããããšã«èå³ããããŸããããããŸãåŽåããããªããŠãããããã§ãïŒããªãããããŒã§ããïŒã èŠæšãã芧ãã ããã ããã¯ãJunoïŒãŸãã¯Core.eval
çŽæ¥åŒã³åºãä»ã®ãã®ïŒã§ã¯æ©èœããŸããã
ããã人ã ã«å§ããã€ããã¯ãããŸããããè¿ éã§æ±ãããŒã¿åæãè¡ããšãã«éåžžã«åœ¹ç«ã¡ãŸãã é¢æ°ããREPLã«ã³ãŒããã³ããŒããŠè²Œãä»ããŠè¡šç€ºã§ããªãå Žåãçµéšã®æµ ãããã°ãã°æ¶æ¥µçãªã³ãŒããŒïŒã€ãŸããç§ã®åŠçïŒã«ãšã£ãŠã¯éåžžã«æ··ä¹±ãããããïŒããããèããããïŒãœãªã¥ãŒã·ã§ã³ãéåžžã«æãã§ããŸãããããäœãããã®ãããŸããã®éãåæ§ã§ãã
julia> a = 0
0
julia> for i = 1:10
a += i
end
ERROR: UndefVarError: a not defined
Stacktrace:
[1] top-level scope at .\REPL[2]:2 [inlined]
[2] top-level scope at .\none:0
julia> using SoftGlobalScope
[ Info: Precompiling SoftGlobalScope [363c7d7e-a618-11e8-01c4-4f22c151e122]
julia> for i = 1:10
a += i
end
julia> a
55
ïŒãšããã§ïŒäžèšã¯ãããæã£ãŠããã®ãšã»ãŒåããããã®ãã¹ãã§ãïŒïŒ
ææ¡ãããREPLã¢ãŒãã¯å«ãŸããŠããã¹ã¯ãªããã«å¯ŸããŠäœãããŸããïŒ
äœããªãã åºæ¬çã«ãããã¯ã€ã³ã¿ã©ã¯ãã£ããªããã³ããã§å ¥åãããã³ãŒãã«å¯ŸããŠã®ã¿ã§ãããšããææ¡ã§ãã ãã¡ã€ã«ã«ç©ãå ¥ãå§ãããšããã«ããããŒãã¹ã³ãŒããã«ãŒã«ãåŠã¶å¿ èŠããããŸãã ããŸãããã°ãã³ãŒãããã¡ã€ã«ã«å ¥ãå§ãããšãã¯ãé¢æ°ã®äœ¿çšãéå§ããå¿ èŠããããŸãã
ããã³ããããããã¡ã€ã«å ã®ã°ããŒãã«ã³ãŒãã®ã¹ã³ãŒãã«ãŒã«ãå³ãããªãã®ã¯çæ³çã§ã¯ãããŸããã ããããïŒ19324ãšJulia 1.0ã®å®å®æ§ã®çŽæãçµã¿åããããšãçæ³çãªéžæè¢ããªããªããšæããŸãã
@stevengj ïŒ
@JeffBezanson ãç§ãã¡ã®å€ãã¯ãç·åœ¢ä»£æ°ãçµ±èšãªã©ã®æè¡ã³ãŒã¹ã§ãMatlabãªã©ã®ä»£ããã«Juliaã䜿çšããããšèããŠããããšãå¿ããªãã§ãã ããã ãããã¯ããã°ã©ãã³ã°ã³ãŒã¹ã§ã¯ãªããåŠçã¯ããã°ã©ãã³ã°ã®ããã¯ã°ã©ãŠã³ããæã£ãŠããªãããšããããããŸãã æ§é åããã°ã©ãã³ã°ãè¡ãããšã¯ãããŸãããã»ãšãã©ãã¹ãŠãçãã¹ãããããšã°ããŒãã«å€æ°ã䜿çšããŠã€ã³ã¿ã©ã¯ãã£ãã§ãã
Matlab / R / ...ã«ä»¥åã«è§Šããããšã®ããåŠçã«ãJuliaã䜿çšããŠã³ãŒã¹ãæããããšãããã®ã§ããã®æžå¿µã«å ±æããŸãã ãããåæã«ãJuliaãMatlabãªã©ã®ä»£æ¿ãšããŠäœ¿çšããããšã¯å®è¡å¯èœãªã¢ãããŒãã§ã¯ãªããšæããŸããDiscourseãšStackOverflowã«é¢ãã質åã§äœåºŠã瀺ãããŠããããã«ãããã¯ä¿®æ£ãšç解ãé£ããããã©ãŒãã³ã¹ã®èœãšãç©Žã«ã€ãªããå¯èœæ§ããããŸãã Juliaããããã®ä»ã®èšèªãšã©ã®ããã«ç°ãªãããç解ããããã«æè³ãããããããã«å€§ããªã³ã¹ãããããå¯èœæ§ããããŸãïŒããã®ã³ãŒããMatlabãã翻蚳ãããã10åé ãããšãããããã¯ã®æçš¿ãåç §ïŒã
éèŠãªåé¡ã¯ãµã€ã¬ã³ãé害ã ãšæããŸãã åé¡èªäœã¯ç解ãããããä¿®æ£ãç°¡åã§ãã æ°ããåäœãç¶æããããšããå§ãããŸããã Main
èŠåã衚瀺ããŸãïŒããã©ã«ãã§ã¯ãç¡å¹ã«ã§ããã¯ãã§ãïŒã
ç§ã«ãšã£ãŠããã倧ããªåé¡ã¯ãç¥èŠãããççŸã§ãã ã€ãŸããç§ã¯ãžã¥ãªã¢ãå¥ã®æ¹æ³ã§ç©äºãè¡ãããšã«åé¡ã¯ãããŸãããã次ã®ããã«ãªããŸãã
for
ãããã¯ãbegin
ããã³if
ãããã¯ãšç°ãªãåäœãããã®ã¯ãªãã§ããïŒ ïŒ if
ç§ã¯ããçšåºŠç解ããŠããŸããããããã¯ã¯[ããã¹ã]ãããã¯ã§ããïŒç®æ¡æžã2ã«é¢ããŠã¯ãããã¯ããžã¥ãªã¢ããã°ãã䜿çšããŠããïŒãããŠèšèªã«åãçµãã§ããïŒç§ãã¡ãç解ã§ããããã倧ããªåé¡ã ãšæããŸãã ç§ã®ã°ã«ãŒãã«Juliaã§ã³ãŒããæžããã説åŸããããšã§ãç§ã¯çŸåš0察7ã§ãããšèšããŸãã ãã®ãã¡ã®2ã€ã¯ããã®for
ã«ãŒãã®åé¡ãåå ã§ãããããããŸã§ã«è§Šããããšããªãã£ãããã説æã§ããŸããã§ããã æ®ãã®éšåã¯ãã«ãªã¹ãæ§ã®æ¬ åŠã«ãã§ãŒã¯ã§æžãããšãã§ãããšæããŸãã
ç§ã®å¥œã¿ã¯ãé¢æ°ããREPLã«è²Œãä»ããããã³ãŒããé¢æ°ãšåãããã«åäœãã for
ã«ãŒãã䜿çšããŠããŒã¿ãã€ã³ã¿ã©ã¯ãã£ãã«åæãããšãã«æåŸ
ã©ããã®åäœãããããã«ããããšã§ãã ã€ãŸããç¹å¥ãªããŒã¯ãŒããªãã§æ瀺ãããå Žåãå€éš/ã°ããŒãã«å€æ°ãå€æŽããŸãã
ãžã¥ãªã¢ãMatlabãªã©ã®ä»£æ¿ãšããŠäœ¿çšããããšã¯å®è¡å¯èœãªã¢ãããŒãã§ã¯ãªããšæããŸããDiscourseãšStackOverflowã«é¢ãã質åã§äœåºŠã瀺ãããŠããããã«ãããã¯ä¿®æ£ãšç解ãå°é£ãªããã©ãŒãã³ã¹ã®èœãšãç©Žã«ã€ãªããå¯èœæ§ããããããã«å€§ããªã³ã¹ãããããå¯èœæ§ããããŸããžã¥ãªã¢ããããã®ä»ã®èšèªãšã©ã®ããã«éãããç解ããããšã«æè³ãããããã
ç³ãèš³ãããŸãããããã®è°è«ã¯ç§ã«ã¯ã°ãããŠããŸãã ç§ãããã°ã©ãã³ã°ãæããŠããã¯ã©ã¹ã«ã€ããŠè©±ããŠããã®ã§ã¯ãããŸããã åçŽãªå¯Ÿè©±åèšç®ã®å ŽæããããCS以å€ã®ã¯ã©ã¹ã§ã¯ãæåã«ãæ å ã®èšç®æ©ããšããŠããã°ã©ãã³ã°èšèªã玹ä»ããã®ãäžè¬çã§ãã Juliaã§ããã©ãŒãã³ã¹ã³ã³ãã¥ãŒãã£ã³ã°ãæããããšã¯ãŸã£ããç°ãªãããã»ã¹ã§ããããã§ã«Juliaããèšç®æ©ããšããŠäœ¿çšããŠããå Žåã§ãåé¡ã¯ãããŸããã
åŠçã«ãèšç®æ©ããšããŠMatlabã玹ä»ããããšããå§ããå Žåã圌ãã®æåã®æ¬èœã¯è¹ã«é£ã³ä¹ãåã«Matlabã§å¯èœãªéãå€ãã®ããšãè¡ãããšã§ããããã®æç¹ã§åœŒãã®æªãç¿æ £ãããããããå®éã®ãããã°ã©ãã³ã°ã«ç§»è¡ããããšã¯ã¯ããã«å°é£ã§ãã圌ãã¯æ ¹ä»ããŠãããæ°ããèšèªãåŠã¶ããšã«æ¶æ¥µçã§ãã å¯Ÿç §çã«ãæ å ã®èšç®æ©ãšããŠJuliaããå§ããå Žåãããæ¬æ Œçãªããã°ã©ãã³ã°ãè¡ããšãã¯ãã¯ããã«å¹ åºããªãã·ã§ã³ãå©çšã§ããŸãã ãã¹ãŠãããã¯ãã«ãæäœã«è©°ã蟌ãããã«ãã¬ãŒãã³ã°ããããæ£ããå®è¡ããåã«ã²ã©ãããšã匷å¶ãããããå¿ èŠã¯ãããŸããã
ç·åœ¢ä»£æ°ã®ã³ãŒã¹ã§ãžã¥ãªã¢ã䜿ãã¹ãã§ã¯ãªããšèšã£ãŠããã®ã§ããïŒ ãããšããç·åœ¢ä»£æ°ã ãã§ãªãã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ãæããæºåãã§ããŠããå Žåã«ã®ã¿äœ¿çšããå¿ èŠããããŸããïŒ
ç§ã¯@stevengjã«ãåé¡ïŒããã°ã©ããŒä»¥å€ã®äººãžã®æå°ãã¯ããã«é£ãããªãïŒãšè§£æ±ºçïŒREPLãšããŸããŸãªIDEã§æ©èœããããã«ããïŒã®äž¡æ¹ã«åæããŸãã ã¹ã¯ãªãããå«ãããšãJulia 1.0ã®ã¹ã³ãŒãèŠåãé©çšãããŸãããããã»ã©å¿é ããå¿ èŠã¯ãããŸããããforã«ãŒããé¢æ°ã«å ¥ããŠãããé¢æ°ãåŒã³åºãããšãã§ããŸããã¯ã©ã¹ãã眮ãããšãã§ãããã®åã«çœ®ãããã«æ³šæããå¿ èŠããããŸãããã¡ã€ã«å ã®forã«ãŒããšãfile "ã¯ã©ã¹ãå«ããŸãã
ããã¯ãREPLã§ã®ã€ã³ã¿ã©ã¯ãã£ããªãããã°ãå¿ èŠä»¥äžã«èŠçã«ãªããªãïŒãŸãã¯æ°ãããŠãŒã¶ãŒãæ··ä¹±ãããïŒã®ã§ãè¯ã劥åã®ããã«èãããŸãããã¹ã¯ãªããã®éåžžã®ã³ãŒãã¯å³å¯ãªã¹ã³ãŒãã«ãŒã«ã«åŸãå¿ èŠãããããã°ãäžéšãäžæžãããããšã¯ãããŸããã誀ã£ãŠå€æ°ã
ç·åœ¢ä»£æ°ã®ã³ãŒã¹ã§ãžã¥ãªã¢ã䜿ãã¹ãã§ã¯ãªããšèšã£ãŠããã®ã§ããïŒ ãããšããç·åœ¢ä»£æ°ã ãã§ãªãã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ãæããæºåãã§ããŠããå Žåã«ã®ã¿äœ¿çšããå¿ èŠããããŸããïŒ
ããªãã¯ç§ãèšã£ãŠããããšã誀解ããŠãããããããŸããïŒãŸãã¯ç§ã¯ãããæ確ã«è¡šçŸããŠããŸããã§ããïŒã ç§ã¯ãCSã³ãŒã¹ïŒç§ãçµéšããããšã®ãªãïŒã§ã¯ãªãããžã¥ãªã¢ã䜿çšããŠãã¡ã€ã³åºæã®äœããæããã³ãŒã¹ïŒããšãã°ã倧åŠé¢çã«æ°å€çæ¹æ³ãæããïŒã«ã€ããŠè©±ããŠããŸããã
ç§ãèšãããã£ãã®ã¯ãJuliaãšèšèªXïŒMatlabã®å ŽåãããïŒã®éã«ããçšåºŠã®éãããããšäºæ³ããã®ã¯åççã§ãããšããããšã§ãã éã«ããããç¡èŠãããšåé¡ãçºçããå¯èœæ§ããããŸãïŒå®éã«çºçããŸãïŒã
å人çã«ãæ°ããèšèªãåŠã¶ãšããç§ã¯ãããã®åé¡ã«æ©ã段éã§çŽé¢ããããšã奜ã¿ãŸãã ãŸããé·æçã«ã¯ãä»ã®èšèªãšã®é¡äŒŒæ§ããããèšèªã»ãã³ãã£ã¯ã¹ã®åçŽããšäžè²«æ§ã®æ¹ãéèŠã ãšæããŸãã ããããç§ã¯ãããã®å¥œã¿ã䞻芳çãªãã®ãšããŠèªèããŠãããåççãªäººã ã¯ç°ãªããã®ãæã€ããšãã§ããŸãã
ïŒæªç»é²ã®ïŒããã±ãŒãžhttps://github.com/stevengj/SoftGlobalScope.jlãäœæããŸãã
ããã劥åœãšæãããå Žåã¯ãå ã«é²ãã§ããã±ãŒãžãç»é²ããããã©ã«ãã§IJuliaã§äœ¿çšã§ããŸãïŒãããããJunoãªã©ã«PRãéä¿¡ããŸãïŒã
ç§ãèšãããã£ãã®ã¯ãJuliaãšèšèªXïŒMatlabã®å¯èœæ§ãããïŒã®éã«ããçšåºŠã®éããæåŸ ããã®ã¯åççã§ãããšããããšã§ãã
æããã«ã ãMatlabã®ä»£ããã«Juliaã䜿çšããããšèšã£ãŠããJuliaã§Matlabæ§æãæããããšããŠããããã§ã¯ãªãã以åã®MatlabãŠãŒã¶ãŒãç¹ã«å¯Ÿè±¡ãšããŠããããã§ããããŸããã
ç§ã¯ãããã®åé¡ã«æ©ã段éã§çŽé¢ããããšã奜ã¿ãŸã
Matlabèªäœãšã®éãã«ã€ããŠã§ã¯ãããŸããã CS以å€ã®åŠçã®åã§åããŠã«ãŒããäœæãããšãããŸãã¯CS以å€ã®åŠçããã³ãŒããåããŠè²Œãä»ãããšãã¯ãã°ããŒãã«ã¹ã³ãŒããšããŒã«ã«ã¹ã³ãŒããããã³éçåæã®ããã®global
ããŒã¯ãŒãã®æçšæ§ã«ã€ããŠã¯è©±ããããããŸããã REPLã«æ©èœããŠãã€ã³ã¿ã©ã¯ãã£ãã«è©ŠããŠãã ããã ã«ãŒãã䜿ã£ãŠè¡šçŸããããšããŠããæ°åŠã«çŠç¹ãåœãŠãããšæããŸãã
MatlabãŠãŒã¶ãŒãæåŸ
ããŠãããšããçç±ã ãã§ãããã§ã¯èª°ããœããã€ã³ã¿ã©ã¯ãã£ãã¹ã³ãŒãã«ã€ããŠè°è«ããŠããŸããã ããã¹ã³ãŒããã®ãªãã¿ã®ãªãæŠå¿µãžã®é·ããçãããããšãããç§ãã¡ã¯ããã䞻匵ããŠããŸãã ïŒçµéšè±å¯ãªãŠãŒã¶ãŒã§ããã€ã³ã¿ã©ã¯ãã£ãã«äœæ¥ããŠãããšãã«global
ããŒã¯ãŒããè¿œå ããªããã°ãªããªãã®ã¯ããªãäžäŸ¿ã§ããïŒ
ããã§èšåãããŠããªããã1ã€ã®ä¿®æ£ã¯ããforãã§ã¹ã³ãŒããããã¯ãå®çŸ©ããã®ããããããšã§ãïŒé¢æ°ã ãã§æ°ããã¹ã³ãŒããäœæã§ããŸãïŒ
@vtjnash ãç§ã¯ããããã®è°è«ãåã«ã§ããããš
è¯ãç¹ã§ãããããã«ãimport Future.scope
å¿
èŠã§ãð
ïŒãã®ã¢ãžã¥ãŒã«/åå空é/è¡åå¹æã¯ãã§ã«äºçŽãããŠãã/ååšããŠãããšæããŸãïŒ
ããã§ã®æ³šæç¹ãšããŠãå€æŽã¯ããã®ã¢ãžã¥ãŒã«ã§ä»¥åã«è©äŸ¡ããããã®ã«é¢ä¿ãªãããã¹ãŠã®ã°ããŒãã«ã¹ã³ãŒãç°å¢ã§ã³ãŒããåãããã«åäœããããšãä¿èšŒããããšã§ããã ãã®å€æŽã®åã¯ãåãã³ãŒãã2åå®è¡ãããããã¡ã€ã«å ã§ç§»åããã ãã§ãïŒã¹ã³ãŒãã®å²ãåœãŠãç°ãªãããã«ïŒãŸã£ããç°ãªãåçãåŸãããšãã§ããŸããã
ãã®å€æŽã®åã¯ãåãã³ãŒãã2åå®è¡ãããããã¡ã€ã«å ã§ç§»åããã ãã§ãïŒã¹ã³ãŒãã®å²ãåœãŠãç°ãªãããã«ïŒãŸã£ããç°ãªãåçãåŸãããšãã§ããŸããã
å®éã«ããã«ã€ããŠç§ãèŠãèŠæ ã®æ°ïŒãŒãïŒã¯ãçŸåšã®è¡åã«ã€ããŠããªããèŠãïŒãããŠãã§ã«èŠãŠããïŒèŠæ ãšæ··ä¹±ã®æ°ã«ãã£ãŠç¢ºå®ã«ç®å°åãããŠããŸãã
ãã®å€æŽã®åã¯ãåãã³ãŒãã2åå®è¡ããã ãã§ãïŒã¹ã³ãŒãã®å²ãåœãŠãç°ãªãããã«ïŒãŸã£ããç°ãªãåçãåŸãããšãã§ããŸããã
以äžã®ã³ãŒãã§ã a
ãæåã®for
ã«ãŒããš2çªç®ã®
a = 0
for i = 1:5
a += 1
end
for i = 1:5
a += 1
end
ææ¡ãããREPLã¢ãŒãã¯å«ãŸããŠããã¹ã¯ãªããã«å¯ŸããŠäœãããŸããïŒ
@ mauro3 @stevengjé¢æ°ïŒããšãã°ã exec("path/to/script.jl")
ïŒã®è¿œå ã¯ããã€ããŒããŒãžã§ã³ã®ãã³ãã ãã§å®è¡ã§ãããšæããŸããïŒ ãŸãã exec
'edã¹ã¯ãªããããå¥ã®ãã¡ã€ã«ãexec
'ã«èŠåããããã«ããã€ãã®æè²ã¡ãã»ãŒãžãå
¥ããŠã include
ã䜿çšããããã«ä¿ãããšãã§ããŸãã
æšå€ããã®åé¡ã«é ãæ©ãŸããªããïŒããäžåºŠïŒãæåã®è¡åæ¹éãèŠã€ããããšããŠæžãçããèããããã€ããããŸãã çµè«ã¯ãããŸããããããã¯åé¡ãéåžžã«æ確ã«ç€ºããŠãããšæããŸãã ãã®åé¡ã«ã€ããŠæ°å¹ŽéèããåŸããçæ³çãªè§£æ±ºçãã¯ãªããšæããŸããããã¯ãæé©ã§ã¯ãªãéžæè¢ãããªãåé¡ã®1ã€ã§ããå¯èœæ§ããããŸãã
人ã ã¯ãã°ããŒãã«ã¹ã³ãŒããããŒã«ã«ã¹ã³ãŒããå²ãé¢çœãçš®é¡ãšããŠçŽ æŽã«èŠãŠããŸãã ããããã°ããŒãã«ã¹ã³ãŒããJulia0.6以åãšåãããã«æ©èœããçç±ã§ãã
ãã ããäž»ãªéãã¯æ¬¡ã®ãšããã§ãã
ããã«ãã°ããŒãã«ã¹ã³ãŒãã¯éåžžã«é·ãããšãå€ããè€æ°ã®ãã¡ã€ã«ã«ãŸãããããšã¯ãã£ãã«ãããŸãããåŒã®æå³ãä»ã®åŒã«äŸåããŠãããããåŒããä»»æã®è·é¢ã«ãããšããé¢ããå Žæã§ã®äžæ°å³ãªã¢ã¯ã·ã§ã³ãå¹æã«ãªããéåžžã«æãŸãããããŸããã ã
ãã®æåŸã®èŠ³å¯çµæã¯ãã°ããŒãã«ã¹ã³ãŒãã§forã«ãŒãã®2ã€ã®ç°ãªãããŒãžã§ã³ãç°ãªãåäœãããçç±ã瀺ããŠããŸãã
# file1.jl
for i = 1:5
a += 1
end
# file2.jl
a = 1
md5-f03fb9fa19e36e95f6b80b96bac9811e
```jl
# main.jl
include("file1.jl")
include("file2.jl")
include("file3.jl")
ãŸãã file1.jl
ãšfile3.jl
ã¯åäžã§ãããæ¯åç°ãªãæå³ãšåäœã§åããã¡ã€ã«ã2åå«ããããšã§ãäŸãç°¡ç¥åã§ããããšã«ã泚æããŠãã ããã
ãã1ã€ã®åé¡ã®ããã±ãŒã¹ã¯ãé·æéå®è¡ãããREPLã»ãã·ã§ã³ã§ãã ãªã³ã©ã€ã³ã®ã©ããããäŸãè©ŠããŠã¿ãŸãããïŒ ãã®äŸã§forã«ãŒããŸãã¯åæ§ã®æ§é ã®ããŒã«ã«å€æ°ã«äœ¿çšããŠããã®ãšåãååã®ã°ããŒãã«å€æ°ãããããã倱æããŸãã ãããã£ãŠãæ··ä¹±ãåŒãèµ·ããå¯èœæ§ãããã®ã¯æ°ããåäœã ãã§ãããšããèãã¯ãééããªãæ£ç¢ºã§ã¯ãããŸããã æ°ããåäœãREPLã®ãŠãŒã¶ããªãã£ã®åé¡ã§ããããšã«åæããŸãããäŒè©±ãåãããããã§å察åŽãæ確ã«æ瀺ããããšæããŸãã
ç§ã®å°ããªææ¡ã¯ãreplã®åé¡ãæ±ã£ãŠããŸããããèšèªãé察話çã«æãããšãã«æèšçãªç®çã«åœ¹ç«ã¡ãŸããå°ãªããšããFortranã§å®è¡ã§ããããã«ãprogramããšããååã®ã¡ã€ã³ãããã¯ãå®çŸ©ããŸãïŒããã¯äžèšã®ãlet ... endããšåãã§ãããããèªç¶ãªè¡šèšããããŸãïŒïŒ
ããã°ã©ã ãã¹ã
..ã
çµãã
ã¹ã³ãŒãã®è©³çŽ°ã«ç«ã¡å ¥ãããšãªãèšèªãæããæçµçã«ãã®ç¹ã«ã€ããŠè©±ãåãããšããã§ããŸããã§ããã
ãã1ã€ã®åé¡ã®ããã±ãŒã¹ã¯ãé·æéå®è¡ãããREPLã»ãã·ã§ã³ã§ãã ãªã³ã©ã€ã³ã®ã©ããããäŸãè©ŠããŠã¿ãŸãããïŒ ãã®äŸã§forã«ãŒããŸãã¯åæ§ã®æ§é ã®ããŒã«ã«å€æ°ã«äœ¿çšããŠããã®ãšåãååã®ã°ããŒãã«å€æ°ãããããã倱æããŸãã
åæºããŠãããŠãŒã¶ãŒãããããã«é¢ããŠã¡ãŒãªã³ã°ãªã¹ãã®èŠæ ãgithubã®åé¡ãããã€æåºãããŠããŸããïŒ ãŒããç§ã®æ°ã§ã¯ã ã©ãããŠïŒ ããããããã®æ¯ãèãã¯åºæ¬çã«äººã ãªãããã§ããã°ããŒãã«ã¹ã³ãŒãã§äœæ¥ããå Žåã¯ãã°ããŒãã«ãªç¶æ ã«äŸåããŸãã
ãããã£ãŠãæ··ä¹±ãåŒãèµ·ããå¯èœæ§ãããã®ã¯æ°ããåäœã ãã§ãããšããèãã¯ãééããªãæ£ç¢ºã§ã¯ãããŸããã
ããã¯èª€ã£ãç䟡é¢ä¿ã ãšæããŸãâããã§ã¯æœåšçãªæ··ä¹±ã®ã¬ãã«ã«å€§ããªéãããããŸãã Julia 0.6ã§ã¯ãããªãã®äŸãæ°ç§ã§çåŸã«èª¬æã§ããŸãããããããã®ã«ãŒãã¯ããã§å€æŽããa
ã«äŸåããŠããã®ãèŠãŠãã ãããã Julia 1.0ã§ã¯ãç·åœ¢ä»£æ°ã®è¬çŸ©ã®æäžã«ãåèªãèããããšããªãåŠçã®åã§äžæè°ãªããšã«global
ããŒã¯ãŒããå
¥åããªããã°ãªããªãå Žåãã©ããªãããæ£çŽã«å¿é
ããŠããŸãã CSã®æå³ã§ã®ãã¹ã³ãŒããã
æ°å¹Žä»¥å ã«ã¹ã³ãŒãã«ãŒã«ãå€æŽããããšãçå£ã«æ€èšããå¿ èŠããããŸãã
絶察éãã ã«ãŒãã¹ã³ãŒãã®v0.2ããåã®äžçïŒïŒ1571ãšïŒ330ãåç §ïŒã«çå£ã«æ»ãããã§ããïŒ
å®éãé¢æ°ããè¡ããšã®REPLãžã®ã³ãŒãã®ã³ããŒãšè²Œãä»ããå®å
šã«ãµããŒãããããšã¯ãããŸããã ãããã£ãŠãããããããæ©èœãããæ©äŒãšèŠãªãããšãã§ããŸãã å
·äœçã«ã¯ã for
ã«ãŒãã§ã¯ãæ©èœãããŸããããå
éšé¢æ°ã§ã¯æ©èœããŸããã§ããã
x = 0
f(y) = (x=y)
é¢æ°å
ã§ã f
ã¯æåã®è¡ããx
ãå€æŽããŸãã REPLã§ã¯ããã§ã¯ãããŸããã ããããSoftGlobalScope.jlã®ãããªå€æã䜿çšãããšãæ©èœããå¯èœæ§ããããŸãã ãã¡ãããã¹ã¿ã³ãã¢ãã³ã®é¢æ°å®çŸ©ã貌ãä»ããããšã¯æ©èœããªããããããã©ã«ãã§ã¯ãªã³ã«ããããªãã§ãããã æåã«é ã«æµ®ãã¶ã®ã¯ãè¡ããšã®é¢æ°ãããã°ã®ããã®REPLã¢ãŒãã§ãã
v0.2ããåã®äžçã«çå£ã«æ»ãããã§ããïŒ
ãããã0.6ã®äžçã«æ»ãããã§ãã ð
ç§ã¯ãã£ââãšåå¿ããŠãããšæããŸãïŒ
ããã§èšåãããŠããªããã1ã€ã®ä¿®æ£ã¯ãã¹ã³ãŒããããã¯ãå®çŸ©ããããã®ãforãã®äœæãåã«åæ¢ããããšã§ãã
å®éãé¢æ°ããè¡ããšã®REPLãžã®ã³ãŒãã®ã³ããŒãšè²Œãä»ããå®å šã«ãµããŒãããããšã¯ãããŸããã ãããã£ãŠãããããããæ©èœãããæ©äŒãšèŠãªãããšãã§ããŸãã
ç§ã¯ãã®ææ ã«éåžžã«æè¬ããŠãããç§ã®ãŠãŒã¹ã±ãŒã¹ã«ãšã£ãŠã¯æ¬åœã«åœ¹ã«ç«ã¡ãŸãã ç§ã®èŠè§£ã§ã¯ãèšèªã®ã¹ã³ãŒãèŠåãçŽæ¥å€æŽããã®ã§ã¯ãªããREPLãå¯èœãªéãæçšã«ããããšãéèŠã§ãã
ãšã¯èšããã®ã®ããã®åé¡ã«ã€ããŠèããã°èããã»ã©ãREPLãäœããã¹ããã«ã€ããŠç§ãïŒå人çã«ïŒæ±ããŠããççŸããèŠè§£ãèŠãããã«ãªããŸãã
å ·äœçã«ã¯ãREPLãé¢æ°æ¬äœã®ã¹ã³ãŒãèŠåãšäžèŽããŠããã°éåžžã«æ°ã«å ¥ã£ãŠããŸãã ã€ãŸããå€æ°ã¯ã°ããŒãã«ã§ã¯ãªãããŒã«ã«ã§ãããé¢æ°ããçŽæ¥ã³ãŒããã³ããŒããŠè²Œãä»ããã ãã§ããããæ©èœããããšãããããŸãã ãã€ãŒããªå®è£ ã¯ããã©ãŒã ã®let-blockã©ããã³ã°ïŒåè¿°ã®ãšããïŒã®ãããªãã®ã«ãªããšæããŸã
julia> b = a + 1
ã«å€æãããŠããŸã
let a = _vars[:a]::Float64 # extract the variables used from the backing store
# Code from the REPL
b = a + 1
# Save assigned variables back to the backing store
_vars[:b] = b
end
é©åã«ïŒã€ãŸãã圌ããäœãããŠããã®ããç¥ã£ãŠãã誰ãã«ãã£ãŠïŒè¡ããããšãããã¯æ¢åã®REPLãããå€ãã®å©ç¹ããããšæããŸãã 1.ã€ã³ã¿ã©ã¯ãã£ããªããŒã¿åæ/èšç®ã䜿çšãã以åã®ã¯ãŒã¯ãããŒã¯æ£åžžã«æ©èœããŸãã 2.åºæ¬çãªå¿çããã°ããŒãã«å€æ°ã«ãããã³ãããŒã¯ãåæ¢ãããã§ããDiscourseãžã®æçš¿ãã¯ããã«å°ãªã-ãã¹ãŠãããŒã«ã«ã§ãããããŸãããã°é«éã§ãïŒ :) 3.é¢æ°æ¬äœãšã®éã®ã³ããŒã¢ã³ãããŒã¹ãã¯ãæåŸ
ã©ããã«æ©èœããŸãã 4.ãããã³ã°ã¹ãã¢ãããçš®ã®Dictã§ããå Žåã workspace()
ãããªé¢æ°ã¯ç°¡åã§ãã ãã ãããçä»ããªããã 5.ã°ããŒãã«ã¯æ瀺çã«ãªããŸã-ç¹ã«ã°ããŒãã«ã§ããããã«èŠæ±ããªãéããç©äºã¯ããŒã«ã«ã§ãã ããã¯ç§ã®èŠ³ç¹ããã¯å€§ããªå©ç¹ã§ããæé»çã«ã°ããŒãã«ãäœæããã®ã¯å¥œãã§ã¯ãããŸããã éåžžã«ãã€ããŒãªæåŸã®ãã€ã³ãïŒãããŠãããè¿œå ããããšãèºèºããŸãïŒïŒãããã¯Matlabã®åäœãšäžèŽãã移è¡ã容æã«ããŸã-Matlab REPLã§ã¯ãã°ããŒãã«ãšããŠæ瀺çã«æ³šéãä»ããããŠããªãéãããã¹ãŠã®å€æ°ãããŒã«ã«ã®ããã«èŠããŸãã
æ°æéåãŸã§ããã®è©±ã¯ç§ã«ã¯çŽ æŽããããšæããŸããã ããããé¢æ°ã«ã€ããŠã®Jeffã®ã³ã¡ã³ãã®åŸãã¹ã¿ã³ãã¢ãã³ã®é¢æ°å®çŸ©ã«è²Œãä»ããããšãšãé¢æ°å®çŸ©ã¯ã°ããŒãã«ã¹ã³ãŒãã«å ¥ãå¿ èŠãããããããã®ã¢ãããŒããåºæ¬çã«ãããã©ã®ããã«é²ããã«ã€ããŠèããŸããïŒå°ãªããšããããã¯ããããæå³ããããã®ã§ãïŒã ããããããããããŒã«ã«ã¹ã³ãŒãïŒå éšé¢æ°ïŒã«å ¥ãããšããå Žåã¯ã©ããªãã§ããããïŒ 2ã€ã®å¯èœæ§ãæ確ã«ããããã®æ å ±ã¯ãããŸããã 2ã€ã®REPLã¢ãŒããå¿ èŠã§ããããã«æãããŸãã1ã€ã¯ããŒã«ã«ã¹ã³ãŒãããã1ã€ã¯ã°ããŒãã«ã¹ã³ãŒãã§ãã äžæ¹ã§ã¯éåžžã«æ··ä¹±ããå¯èœæ§ããããŸããïŒè«è©±ã®æçš¿ãæ³åããŠãã ãã...ïŒãä»æ¹ã§ã¯éåžžã«åœ¹ç«ã€å¯èœæ§ããããŸãã ïŒæ°ããæ©èœãå°å ¥ããŠããã ããªã®ã§ãäž¡æ¹ã®REPLã¢ãŒãã䜿çšããŠãåé¡ã¯ãããŸãã:)ïŒ
SoftGlobalScope.jl
ã®äžéã®å®¶ã«è¡ãããšã¯ãæãæ··ä¹±ã®å°ãªã劥åæ¡ã«ãªããããããŸããããç§ã®å¿é
ã¯ããããèŠããŠããã¹ãå¥ã®ã«ãŒã«ã®ã»ããã«ãããªãããšã§ãïŒããã¯REPLã§æ©èœããŸãããé¢æ°æ¬äœ/ã°ããŒãã«ã¹ã³ãŒãã§ã¯æ©èœããŸãããéã«ïŒã
é·ãæçš¿ããè©«ã³ããŸãããããã¯äœ¿ããããã«ãšã£ãŠéèŠã ãšæããŸãïŒãããŠããã¯ç§ããããçèããã®ã«åœ¹ç«ã¡ãŸããïŒïŒã
åæºããŠãããŠãŒã¶ãŒãããããã«é¢ããŠã¡ãŒãªã³ã°ãªã¹ãã®èŠæ ãgithubã®åé¡ãããã€æåºãããŠããŸããïŒ ãŒããç§ã®æ°ã§ã¯ã ã©ãããŠïŒ ããããããã®æ¯ãèãã¯åºæ¬çã«äººã ã«ãšã£ãŠé©ãã¹ãããšã§ã¯ãªãããã§ããã°ããŒãã«ã¹ã³ãŒãã§äœæ¥ããå Žåã¯ãã°ããŒãã«ãªç¶æ ã«äŸåããŸãã
ããŒããããªãã¯æ¬åœã«ããã«ã€ããŠäœç³»çãªç 究ãããŸãããïŒ ç§ã¯ãããéããã«éããªãã ããã§ããããã¯ããã®åäœããã°ãäºæããªãçµæã®åå ã§ã¯ãªãããšãæå³ãããã®ã§ã¯ãããŸããã ãŠãŒã¶ãŒããããç解ããåŸãããã¯æ£ããåäœãšããŠèªèããããããåé¡/èŠæ ãä¿ããŸããã§ããã
Julia 1.0ã§ã¯ãç·åœ¢ä»£æ°ã®è¬çŸ©ã®æäžã«ãã°ããŒãã«ããŒã¯ãŒããäžæè°ã«å ¥åããªããã°ãªããªãå Žåã«ã©ãããããæ£çŽã«å¿é ããŠããŸãã
ç§ã¯ãã®åé¡ã«åæ
ããŸãã ã³ãŒã¹ã«å¿
èŠãªeconã®åŠçã«ç°¡åãªããã°ã©ãã³ã°ãæãããšããç§ã¯éåžžãé¢æ°ã§ã³ãŒããã©ãããã function
ãšend
ãã³ã¡ã³ãã¢ãŠãããŠå®è¡ããããšãè¡ã£ããæ¥ããããããšãææ¡ããŸãããã°ããŒãã«ã¹ã³ãŒãã§ã圌ãã¯äœãèµ·ãã£ãŠããã®ãã調ã¹ãããšãã§ããŸãã ããã¯ãåœæã®Juliaã§ã®ãããã°ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ¬ åŠãã»ãŒåãåãããŸããã
ãã®ã¢ãããŒãã¯ãã¯ãå®è¡å¯èœã§ã¯ãªãããã§ãã ãããããšã«ãããããæ¬åœã«æ£ããæ¹æ³ã ã£ãã®ã ããããšæããŸãããã®éã«ãããŸããŸãªããšãå€§å¹ ã«æ¹åãããŸããïŒïŒ265ãä¿®æ£ããã Revise.jlãšæè¿Rebugger.jã«ãã£ãŠã¯ãŒã¯ãããŒ/ãããã°ãå€§å¹ ã«æ¹åãããŸããïŒã
ãã®åé¡ã¯çµéšè±å¯ãªãŠãŒã¶ãŒãããŸãæ°ã«ããªãããã§ããäž»ãªæžå¿µã¯æè²ç°å¢ã§ã®æ··ä¹±ã§ãã ç§ã¯ãŸã ãããå®éšããŠããŸãããã代ããã«æè²ãžã®ã¢ãããŒããé©å¿ãããããšãã§ãããã©ããçåã«æããŸããããšãã°ãã«ãŒãã®åã«é¢æ°ãå°å ¥ããã°ããŒãã«ã¹ã³ãŒãã§ã«ãŒããåé¿ããŸãã ãããã¯ãšã«ããè¯ãã¹ã¿ã€ã«ã®èŠçŽ ã§ãããåŠçã«å©çãããããã§ãããã
ã¡ãã£ãšãã泚æïŒREPLã®ã°ããŒãã«ã¹ã³ãŒããç¹å¥ã«å€§æåã«ãããšãé¢æ°ãšã®éã§ã³ãŒããã³ããŒããŠè²Œãä»ããããšãã§ããŸãããå¥ã®ã¢ãžã¥ãŒã«ã®ã°ããŒãã«ã¹ã³ãŒããšã®éã§ã³ããŒã貌ãä»ããããšã¯ã§ããŸããã
代ããã«ãã«ãŒãã®åã«é¢æ°ãå°å ¥ããããã°ããŒãã«ã¹ã³ãŒãã§ã«ãŒããåé¿ããããããªã©ãæè²ãžã®ã¢ãããŒããé©å¿ãããããšãã§ããã§ããããã
ããã¯ãããã°ã©ãã³ã°ã®æå°ã«çŠç¹ãåœãŠãŠããªãã¯ã©ã¹ã§ã¯ãŸã£ããå®çšçã§ã¯ãããŸããã ã€ã³ã¿ã©ã¯ãã£ãã«äœ¿çšã§ããªãå Žåããæåã«ãã¹ãŠã®é¢æ°ãäœæããå¿ èŠãããå Žåã¯ãã¯ã©ã¹ã§Juliaã䜿çšããªãæ¹ãããã§ãããã
ïŒãããŠãããã¯æè²çãªã ãã§ã¯ãããŸãããã°ããŒãã«ã¹ã³ãŒãã®ã«ãŒãã¯ã€ã³ã¿ã©ã¯ãã£ããªäœæ¥ã«åœ¹ç«ã¡ãŸãããã¯ãã«ã«ã³ã³ãã¥ãŒãã£ã³ã°çšã®åçèšèªã奜ããªäž»ãªçç±ã®1ã€ã¯ãã€ã³ã¿ã©ã¯ãã£ããªæ¢çŽ¢ã®ããã®æ©èœã§ãããã¹ãŠã®ã³ãŒãã£ã³ã°ãããã©ãŒãã³ã¹æåã§ãããšã¯éããŸãããïŒ
äœå幎ã«ãããã£ãŠã人ã ãå€ãããœãã/ããŒãã¹ã³ãŒããã®åºå¥ã«ã€ããŠæ··ä¹±ãããäžå¹³ãèšã£ããããã¹ã¬ãããåé¡ãæ°åãããŸãããããã£ãŠãå€ãåäœã«ã€ããŠèª°ãæ··ä¹±ãããäžå¹³ãèšã£ããããããšããªããšäž»åŒµããã®ã¯...éããŸãã ç§ã¯ãããã®ããã€ããæãèµ·ããããšãã§ããŸããããããªãã¯@stevengjã®åšãã«ããã®ã§ãããªãã¯ããããåãããã«ç°¡åã«æãèµ·ããããšãã§ããããªãããããã®äžæºãäŒè©±ã«æ°ã¥ããªãã£ããèŠããŠããªãã£ããšã¯ä¿¡ããããŸããã
@StefanKarpinski ãç§ã¯ç¹ã«ãã°ããŒãã«ã«ãŒããã°ããŒãã«ç¶æ ã«äŸåããŠãããšäžå¹³ãèšã£ãŠãã人ã ã«èšåããŠããŸãã ãããæªãè¡åã ã£ããšäžå¹³ãèšã£ã人ã¯èª°ãèŠããŠããŸãããããã®äŸãèŠã€ãããŸããã
å²ãåœãŠãæ°ããå€æ°ãå®çŸ©ããææãšå Žæã«ã€ããŠäººã
ãæ··ä¹±ããŠããããšã«åæããŸãããéåžžã¯éã®æ¹åã«ãããŸããããŒã«ã«ã¹ã³ãŒããïŒãã®éã§ã¯ãªãïŒããã°ããŒãã«ã«åäœããããšããŸãã¯begin
åºå¥ããªãããšãæãã§ãlet
ã IIRCãäžæºã¯ãã°ããŒãã«ã«ãŒãå
ã®ã°ããŒãã«å€æ°ãžã®å²ãåœãŠãã°ããŒãã«ãå€æŽãããšããé©ãã¹ãå¯äœçšãæã£ãŠãããšããããšã§ã¯ãããŸããã§ããã
ã¹ã³ãŒãã³ã°ã®åé¡å šäœã¯ãæ°ãããŠãŒã¶ãŒãæ··ä¹±ããããã®ã§ãããä»åŸããããªãç¶ããã§ãããã ããããçŽããããéšåã¯ãã°ããŒãã«å€æ°åãžã®å²ãåœãŠãã°ããŒãã«ç¶æ ã«åœ±é¿ãäžããå Žåã§ã¯ãããŸããã§ããã çŸåšã®åäœã¯ãããæªåãããŸãããè¯ãã¯ãããŸããã
@StefanKarpinski ïŒä»¥åã¯ããœãã/ããŒãã¹ã³ãŒããšã®æ··åã¯ãïŒäºæããªãçµæãåŸã人ã ã®ïŒå®éçãªãã®ã§ã¯ãªããïŒããã¥ã¢ã«ãèªã人ã ã®ïŒçè«çãªæ§è³ªã§ãã£ããšæããŠããŸãã ããã¯ééããªãç§ã«ãšã£ãŠã®ããšã§ãããããšãã°ãããã§ã®æ€çŽ¢çµæãã
äžæ¹ããã®æ°ããåäœã¯ãããã¥ã¢ã«ãèªããšãã§ã¯ãªããREPLã䜿çšãããšãã«äººã ãæ··ä¹±ãããããšã¯ãããŸããã ããããåŸè ã®æ¹ãæªãã§ãã
SoftGlobalScope.jlãç»é²æžã¿ããã±ãŒãžã«ãªããŸããã ç§ã®æå³ã¯ãå°ãªããšãä»åŠæã¯ãIJuliaã§ããã©ã«ãã§æå¹ã«ããïŒãªããã¢ãŠãããïŒããšã§ãã
@ mauro3 ãããªãã®ãåäŸãã§ããããœããã¹ã³ãŒãã§ã¯ãªãããŒãã¹ã³ãŒãã«ãã£ãŠæ··ä¹±ããŠãã誰ãã«ã€ããŠã§ãã 0.7ã§ããå€ãã®ã¹ã³ãŒãããããŒããã«ããããšã¯ããã®çš®ã®æ··ä¹±ãããã«åŒãèµ·ããããšã¯ç¢ºå®ã§ãã
IJuliaã«ã¯ãããã©ã«ãã§å€æ°ãããŒã«ã«doãããã¯ã«ãããšããèå³æ·±ãå¯èœæ§ãããããšãææããŠãããŸãã ã€ãŸããããã1ã€ã®ãããã¯ã§è¡ããšã次ã®ããã«æ©èœããŸãã
t = 0
for i = 1:n
t += i
end
t
...ãããŠt
ã¯ããã®è©äŸ¡ãããã¯å
ã§ã®ã¿è¡šç€ºãããŸãã å€ã«è¡šç€ºãããå Žåã¯ã次ã®ããã«ããå¿
èŠããããŸãã
global t = 0
for i = 1:n
global t += i
end
t
ãŸãããããã¯ãã¢ãžã¥ãŒã«ã§ã¯ãªããã¡ã€ã«ã§ããJuliaã®åæ§ã®ã¢ãããŒããæ€èšããŸããã ã€ãŸãããããã¹ã³ãŒãã§t = 0
ãå®è¡ããã ãã§ãã°ããŒãã«ã§ã¯ãªããã¡ã€ã«ããŒã«ã«ã®å€æ°ãäœæãããŸãã çã®ã°ããŒãã«å€æ°ã宣èšããã«ã¯ã global t = 0
ãèšè¿°ããå¿
èŠããããŸããããã¯ãã¢ãžã¥ãŒã«å
šäœã§è¡šç€ºãããŸãã ããããããŸãã«ãå¥åŠã§ãããããã¯äœå¹Žã«ãããã£ãŠäœåºŠãç§ã«èµ·ãããŸããã
IJuliaã«ã¯ãå€æ°ãããã©ã«ãã§ããŒã«ã«doãããã¯ã«ãããšããèå³æ·±ãå¯èœæ§ããããŸã
@StefanKarpinski ãããã¯ããã«æ··ä¹±ãæããããŒãããã¯ã®éåžžã®äœ¿çšæ¹æ³ã«åãããšæããŸãã åãå€æ°ãè€æ°ã®ã»ã«ã§äœ¿çš/å€æŽãããããšã¯äžè¬çã§ããããããã¹ãŠã®ã»ã«éå€æ°ã«global
ããŒã¯ãŒããèŠæ±ããããšã¯ãç§ã«ãšã£ãŠã¯åå¿è
ã§ã¯ãããŸãããåé¡ãããã¹ã³ãŒãã®æŠå¿µã«ã€ããŠããã«å€ãã®è°è«ãå¿
èŠã«ãªããŸããããã§èª¬æããŠããfor
ã«ãŒãã䜿çšããŸãã
ç§ãã¡å šå¡ãåæããéã---ç§ãã¡ãããæãããããã«---ããã¯ã»ãšãã©ãŸãã¯å®å šã«çžäºäœçšã®åé¡ã§ãããšç§ã¯æããŸãããããŠç§ãã¡ã¯åé²ããæ¹æ³ããããŸãã ãããREPLã§ç¹å¥ãªå ŽåïŒIJuliaã§è¡ãããŠããããã«ïŒãå¯äžã®æªãã±ãŒã¹ã¯ãREPLã§äœããéçºããããããããã¬ãã«ã®ã¹ã¯ãªããã³ãŒãã«ç§»åããããšã§ãã ãããããããé¢æ°ãå°å ¥ãã¹ããã€ã³ããªã®ã§ãããã»ã©æªãã¯ãªããšæããŸãã REPLãšé¢æ°æ¬äœã®éã§ã³ãŒããã³ããŒããŠè²Œãä»ããããšã¯ïŒã»ãšãã©ïŒæ©èœããŸãããããã§ããããååã§ãã
次ã«ãREPLå€æ°ãäœããã®æ¹æ³ã§REPLã«å¯ŸããŠããŒã«ã«ã«ããããšã§ãåºå¥ãããã«æ£åœå/æ確åãããªãã·ã§ã³ããããŸããã€ãŸããéåžžã®ã°ããŒãã«å€æ°ã§ã¯ãªãã Main.x
ãšããŠäœ¿çšã§ããŸããã ããã¯ã @ StefanKarpinskiãäžèšã§ææ¡ãããã®ãšéåžžã«äŒŒãŠã
å®çšçãªèŠ³ç¹ãããREPLã§ããããä¿®æ£ãããããšã¯ã§ããŸãã
æè²/ããã°ã©ããŒä»¥å€ã®ãŠãŒã¶ãŒã«ãšã£ãŠã®ã¿éèŠã§ãã ãã®æ¯ãèãã
ïŒããŒããã³ããŒããŠè²Œãä»ããããšã«ããïŒREPLãä»ããã€ã³ã¿ã©ã¯ãã£ããªãããã°ãéåžžã«è¡ããŸã
å®çšçã§ã¯ãããŸããã ãã®ãããã°ã¢ãŒããæãŸããå ŽåããããŸãïŒ
åªãããããã¬ãŒãšïŒçµéšè±å¯ãªããã°ã©ããŒã«ãšã£ãŠãïŒãããŠå€ãã®å Žåã
åçèšèªã奜ãçç±ïŒã ãã¡ããçµéšè
ã®ããã«
ããã°ã©ããŒã¯ããªãã·ã§ã³ã§ããããšã¯åé¡ã§ã¯ãããŸããã åå¿è
ãŠãŒã¶ãŒã®å Žåã¯
ã§ããã°ããã©ã«ãã§ãã
@StefanKarpinski
çŽ æŽãªããã°ã©ããŒãšããŠãç§ã¯å®éã«äœããããªã«æªãã®ãããããŸããã
ç¹ã«åçãªå Žåã«ãããŒã«ã«ã¹ã³ãŒããå²ãé¢çœãçš®é¡ãšããŠã®ã°ããŒãã«ã¹ã³ãŒã
èšèªã ã³ã³ãã€ã©ã®èŠ³ç¹ããã¯ããã§ã¯ãªãããšãç§ã¯ç解ããŠããŸã
å¿
ç¶çã«æ£ããïŒãžã¥ãªã¢ã§ïŒããããã¯çŽ æŽããããç°¡åã§äŸ¿å©ãªã¢ãã«ã§ã
ïŒãã€ãŒããªïŒããã°ã©ããŒã®ããã«ã ïŒç§ã¯ãããå®éã«ãã®ããã«å®è£
ãããŠãããããããªããšæã
äžéšã®èšèªïŒã
ãžã¥ãªã¢ã¯ãŸãããããããã°ã©ããŒã«ãã®ããã«æ瀺ããŠããããã§ãã
次ã®é¢æ°é¢æ°ã¯ããå®çŸ©ãããŠããŸããããšãããšã©ãŒãåºããŸãã
forã«ãŒãã®åã«a = 1ãèšå®ãããŠããå Žåã¯ãå®è¡ãããŸããã
æ©èœãã¹ãïŒïŒ
i = 1:10ã®å Žå
a = a + i
çµãã
a = 1
@show a
çµãã
ããã¯ãç§ãå®å
šã«èª€è§£ããªãéããã
å€åŽã®ããŒã«ã«å€æ°ã¯ãèšèšäžã次ã®é åºã«äŸåããŸããã
å€åŽã®ããŒã«ã«ã¹ã³ãŒãã§ã®åŒã®åºçŸãŸãã¯å®è¡ãã
ç§ã¯ãé éäœçšããé¿ããããšã«éåžžã«åæããŸãã
é¢æ°/åŒã³åºãã¹ã¿ãã¯ã§ã°ããŒãã«ã䜿çšããããã®æ瀺çãªå®çŸ©ãåªå
ãã
ã¬ãã«ã§ãããå人çã«ã¯ãã¡ã€ã«ããããŒããããããªãã®ã欲ãã
ç¬èªã®ã¹ã³ãŒãã§ãããã°ããŒãã«å€æ°ã䜿çšããããã®æ瀺çãªå®çŸ©ãå¿
èŠã§ãã
ã«ãŒãã®ã¬ãã«ã§ã¯ãç§ã«ãšã£ãŠã¯å°ãé ãã§ããã
å®çŸ©/ã³ã³ããã¹ãã¯éåžžââãããªãè¿ãã§ãã
3ã€ã®ãã¡ã€ã«ã®äŸã¯å°ãäžèªç¶ã§ãïŒãããŠæåŸ
ããããã§ã¯ãªããã§å€±æããŸã
å®çŸ©æžã¿ããšã©ãŒïŒïŒéåžžãæåã®å®çŸ©ãåããã®ã«å
¥ããŸã
ãã¡ã€ã«ã
ããã«ã¯å®éã«äžæ°å³ãªå±éºããããŸãïŒãããŠç§ã¯ããã«åãŸããŸãã
ä»ã®èšèªã§ïŒã€ã³ã¯ã«ãŒãã¯ã°ããŒãã«ã¹ã³ãŒãã§å®è¡ãããããã
ä»ã®äººã«å¹²æžããå¯èœæ§ã®ããã°ããŒãã«å€æ°ã誀ã£ãŠå®çŸ©ããŠãã
ã³ãŒãã ãã ããã«ãŒãã§ã°ããŒãã«ã䜿çšããå¿
èŠãããããšã¯ã
ãã®åé¡ã
é·æéå®è¡ãããREPLã»ãã·ã§ã³ãžã®æžã蟌ã¿ïŒ
çŸåšã®åäœã¯ãéåžžã«ãŸãã§ç°¡åã«ç¹å®ã§ããé害ã¢ãŒãã«çœ®ãæãããã®ã§ãã
REPLã§ãªã³ã©ã€ã³ã®äŸãå®è¡ããããïŒã³ããŒ/貌ãä»ããèŠéããŠãã
ã«ãŒãã®åã®å€æ°ã®åæå®çŸ©ã§ããããã§ã«
以åã®ãã®ããã°ããŒãã«ã«å®çŸ©ãããåãå€æ°ïŒ
é¢æ°ã®äžéšã§ããå Žåããªã³ã©ã€ã³ã®äŸãæ£ããå®è¡ã§ããŸã
ïŒã©ãã«ã§ãã°ããŒãã«ãè¿œå ããã«ïŒãåé¡ã解決ããªãå Žå
ããã§ã¯ãããŸããïŒã°ããŒãã«ããªã³ã©ã€ã³ã³ãŒãã«ãã§ã«ååšããå Žåã§ãã
æ¢åã®ã°ããŒãã«å€æ°ã®å€ãééã£ãŠããŸãïŒ
ç§ã¯ãã£ââãšæ©ãããã«è³ãåŸããã¹ãã§ããããå°ãå¿é ããåŸããã¹ãŠãé 調ã«èŠããŸãã
å®éãé¢æ°ããè¡ããšã®REPLãžã®ã³ãŒãã®ã³ããŒãšè²Œãä»ããå®å šã«ãµããŒãããããšã¯ãããŸãã...æåã«é ã«æµ®ãã¶ã®ã¯ãè¡ããšã®é¢æ°ãããã°çšã®REPLã¢ãŒãã§ãã
å®éãRebuggerïŒãŸãã«ããã§ãïŒã¯ãã¹ã³ãŒãã®éæšå¥šã§ãã0.7ããªãã0.6ã§åäœãããããšãã§ããªãã£ããšããçç±ã ãã§ã1.0ã§æ£ããåäœããŸãã ãã ããSoftGlobalScope.jlããããå£ããŠããªãããã«èŠããããšã確èªã§ããŠããããã§ãã ããšãã°ã show([1,2,4])
ååæ·±ãèžã¿èŸŒããšã次ã®ããã«ãªããŸãã
show_delim_array(io::IO, itr::Union{SimpleVector, AbstractArray}, op, delim, cl, delim_one) in Base at show.jl:649
io = IOContext(Base.TTY(RawFD(0x0000000d) open, 0 bytes waiting))
itr = [1, 2, 4]
op = [
delim = ,
cl = ]
delim_one = false
i1 = 1
l = 3
rebug> eval(softscope(Main, :(<strong i="10">@eval</strong> Base let (io, itr, op, delim, cl, delim_one, i1, l) = Main.Rebugger.getstored("bbf69398-aac5-11e8-1427-0158b103a88c")
begin
print(io, op)
if !(show_circular(io, itr))
recur_io = IOContext(io, :SHOWN_SET => itr)
if !(haskey(io, :compact))
recur_io = IOContext(recur_io, :compact => true)
end
first = true
i = i1
if l >= i1
while true
if !(isassigned(itr, i))
print(io, undef_ref_str)
else
x = itr[i]
show(recur_io, x)
end
i += 1
if i > l
delim_one && (first && print(io, delim))
break
end
first = false
print(io, delim)
print(io, ' ')
end
end
end
print(io, cl)
end
end)))
[1, 2, 4]
ãããã£ãŠã1.0ã§ã¯æ£åžžã«åäœããŸãïŒ softscope
æç¡ã«ãããããïŒã 0.7ã§ã¯ããããè©äŸ¡ãããšïŒ softscope
æç¡ã«ãããããïŒã次ã®ããã«ãªããŸãã
â Warning: Deprecated syntax `implicit assignment to global variable `first``.
â Use `global first` instead.
â @ none:0
â Warning: Deprecated syntax `implicit assignment to global variable `first``.
â Use `global first` instead.
â @ none:0
[ERROR: invalid redefinition of constant first
Stacktrace:
[1] top-level scope at ./REBUG:9 [inlined]
[2] top-level scope at ./none:0
[3] eval(::Module, ::Any) at ./boot.jl:319
[4] top-level scope at none:0
[5] eval at ./boot.jl:319 [inlined]
[6] eval(::Expr) at ./client.jl:399
[7] top-level scope at none:0
ãããã£ãŠã0.7 / 1.0ã¯ééããªãäžæ©åé²ã§ããã softscope
ãããšãéèŠãªæ©èœãå£ãããšãªãç¹å®ã®äœæ¥ãç°¡åã«ãªããŸãã
ãããã£ãŠãæ倧ã®æžå¿µã¯ãä»ã®ããã±ãŒãžãã¿ã³ãã³ã°ããã«ãããé©åã«ã€ã³ã¿ãŒã»ããããæ¹æ³ã§ãïŒhttps://github.com/stevengj/SoftGlobalScope.jl/issues/2ïŒã
@ timholy ãSoftScopeã¯ãã¯ãåŒã³åºãã®åŒæ°ã«è§ŠããªãããïŒãã¯ããã©ã®ããã«ãããæžãæããããç¥ãæ¹æ³ããªãããïŒã :(<strong i="6">@eval</strong> ...)
ã¯ä¿è·ãããŸãã
ããã©ãã
å€åŽã®ããŒã«ã«å€æ°ã¯ãèšèšäžã次ã®é åºã«äŸåããŸããã
å€åŽã®ããŒã«ã«ã¹ã³ãŒãã§ã®åŒã®åºçŸãŸãã¯å®è¡ãã
ïŒå€éšïŒããŒã«ã«å€æ°a
ååšããŸããããŸã å²ãåœãŠãããŠããŸããã ã«ãŒãããããèªã¿åãåã«a
ã«å²ãåœãŠãããšããå Žåãå²ãåœãŠã¯å€éšã«ã衚瀺ãããŸãã
äžè¬ã«ãå€æ°ãã€ã³ãã£ã³ã°ã®äœæãšããã«å€ãå²ãåœãŠãããšã¯å¥ã ã®ã¹ãããã§ãã
ããã®ã¿ã€ã ã©ã€ã³ã¯äœã§ããïŒ ãŠãŒã¶ãŒã®äœ¿ãããããå€§å¹ ã«åäžããããã§ãã ãããŠã1.0ãåºãJuliaã®ãã®ãéèŠãªãææã«ããã®ä¿®æ£ãããã§ããã ãæ©ãïŒäžèšã®Jeffã«ãã£ãŠææ¡ãããæ¹æ³ã§ïŒååŸããæ°ããJuliaããŒãžã§ã³ãŸãã¯REPLããŒãžã§ã³ã«ã¿ã°ãä»ããããšãæå©ã§ããããã«æãããŸãã ïŒç§ã¯ç¢ºãã«ãããä¿®æ£ããªãã®ã§ããã®ã¢ãŒã ãã§ã¢ã®ã³ã¡ã³ãã¯ç³ãèš³ãããŸããïŒïŒ
@ãžã§ããã¶ã³ãœã³
ããã¯ïŒå®è£
/ã³ã³ãã€ã©ãŒã«ãšã£ãŠïŒçå®ã§ãããçŽ æŽãªãžã¥ãªã¢ããã°ã©ããŒã¯åœŒã®ããåçŽãªæŠå¿µã¢ãã«ãšç°ãªãæ¯ãèããèŠãããšãã§ããªããšäž»åŒµããããšããŸããïŒå€æ°ã¯å®çŸ©ãããç¬éã«ååšãå§ããŸãïŒã æ®å¿µãªãããããªãã¯æ£ããã§ãã次ã®ã³ãŒãã¯ãšã©ãŒãåºããŸããããæåŸã«a = 2ãçç¥ããå Žåã¯ãšã©ãŒãåºããŸã
æ©èœãã¹ãïŒïŒ
i = 1:10ã®å Žå
a = 1
çµãã
printlnïŒaïŒ
a = 2
çµãã
æ®å¿µãªãã説æããŸããåäœã¯ç解ã§ããŸããïŒä»¥åã«ã³ã³ãã€ã«èšèªã䜿çšããããšãããããïŒãããã§ãæ··ä¹±ãæããäºæããªãããšãããããŸãã ã¹ã¯ãªããã®çµéšãããªã人ãããã°ã©ãã³ã°ã«äžæ
£ããªäººã«ãšã£ãŠãããã¯ã©ãã»ã©æªãããšã§ãããã ãŸããåäœã瀺ãã³ãŒããããã€ãèŠã€ããŸãããã䟿å©ãªã¢ããªã±ãŒã·ã§ã³ãèŠã€ãããŸããïŒå€åããªãã¯ããã§ç§ãå©ããããšãã§ããŸãïŒ
REPLã«ã€ããŠïŒ
å°ãªããšãREPLã§ã¹ã³ãŒãããéåžžãã«æ»ãããšïŒã«ãŒãã«ã°ããŒãã«ãè¿œå ããå¿
èŠã¯ãªãïŒãåªå
床ãé«ãããšã確信ããŸãããä»æ¥REPLã§ããã€ãã®ããšããã¹ãããŠããŠãïŒåã³ïŒåãŸããŸããããããå®çŸããã®ã«å°ãæéãããããŸãã ç§ããã§ã«ãžã¥ãªã¢ããã©ããŒããŠããããšãèãããšãæ¬åœã«å€ãã®äººã奜ãã§ãåé¡ã«ã€ããŠãã®ã¹ã¬ããããã©ããŒããŠããŸããç§ã¯ãããã·ã§ãŒããããŒãšåŒã¶ããšãããããŸãïŒèšèªããã¹ãããïŒãžã¥ãªã¢ãžã®ïŒãã¥ãŒããŒã¯èŠã€ããããšãã§ããªãå¯èœæ§ãéåžžã«é«ãã§ãåé¡ã解決ãããã ãããããŸãã
@jeffbezansonãšç§ã¯äž¡æ¹ãšãåŸ æã®äŒæäžã§ãïŒç§ã¯ãããèªãã¹ãã§ã¯ãããŸããïŒã ç§ãã¡ã¯äžé±éããããã§äœããã¹ãããç解ããããšãã§ããŸãã
@derijkp ããã£ãŒãããã¯ã¯é«ãè©äŸ¡ãããŠããŸãããã¹ã³ãŒãã³ã°ã«ãŒã«ã¯ããåºç¯ãªè°è«ãæ¹èšã«å¯Ÿå¿ããŠããŸããã ããŒãã«ã«ããã®ã¯ãç¹å¥ãªã±ãŒã¹ã®ã€ã³ã¿ã©ã¯ãã£ããªè©äŸ¡ã ãã§ãã SoftGlobalScopeããã±ãŒãžã¯ãã§ã«åªããå®éšçå®è£ ã§ãããBaseã®ãã®éšåãäœæããREPLã§äœ¿çšããã ãã®åé¡ãããããŸããã
@derijkpç°¡åã«èšããšãå€æ°ã®ã¹ã³ãŒããäœããã®ãããã¯æ§é ïŒé¢æ°ãã«ãŒãã®æ¬äœãªã©ïŒã«å¯Ÿå¿ããŠããæ¹ãç°¡åã ãšæããŸãã ããªãã®ææ¡ã§ã¯ãå€æ°ã®ã¹ã³ãŒãã¯ãããã¯ã®ãµãã»ããã«ãªããŸãããããã¯æçµçã«ã¯ããè€éã§æ··ä¹±ãæããšæããŸã---å€æ°ã®ã¹ã³ãŒãã«å¯Ÿå¿ããæ§æ圢åŒãæãããšã¯ã§ããŸããã
ã¯ããããã¯äžéšã®äººã ã®çŽæã®ãã¹ãããã§ãããšç§ã¯ä¿¡ããããšãã§ããŸãã ãã ããèšèªã䜿çšããŠããæåã®10åéã¯ãããçšåºŠãŸã§ããæé©åã§ããŸããã æ¬åœã®åé¡ã¯ããããã©ã®ããã«æ©èœããããæãã/åŠã¶ã®ãã©ãã»ã©é£ãããããããŠã©ã®ãã¶ã€ã³ãé·æçã«æéãç¯çŽãããïŒèšèªãåçŽã«ãããããŒã«ã®éçºã容æã«ãããªã©ïŒã§ããïŒ
ïŒREPLã®åäœã®å€æŽã«é¢ããäžèšã®å€ãã«åæããŸãïŒ
REPLããã®ã¹ã¿ãã¯ãªãŒããŒãããŒã®è³ªåã«ã€ãªãããªãæ¹æ³ã§ããããã«ããããšæã
å€ãã®æ°ããç®ããžã¥ãªã¢ãèŠãŠããã®ã§ãæ©ãããã®ãæåã§ããã
åæããŸã...ãŸããã¹ã³ãŒãã«ãŒã«ã¯å¿ ãããå€æŽãããã¹ãã§ã¯ãªãããã¹ãŠã®ã€ã³ã¿ã©ã¯ãã£ãã€ã³ã¿ãŒãã§ã€ã¹ïŒã€ãŸããREPLãJupyterãããã³Junoã³ã³ãããŒã«ãå ¥åãããŸãïŒã ããå€æŽãããå¿ èŠããããšæããŸãã
ããã¯ãåå¿è ãæ°ããã«ãŒã«ãåŠã¶ããšã ãã§ã¯ãããŸããã ã³ãŒãã®ãã©ã°ã¡ã³ããã³ããŒããŠREPLãjupyterãªã©ã«è²Œãä»ããããšãã§ãããé¢æ°ã«ã貌ãä»ããããšãã§ããªãå Žåãããã¯äžçŽããã°ã©ããŒã«ãšã£ãŠã倧ããªè¿·æã§ãã
ãã¡ãããç§ã¯ä»ã®ãã¹ã¿ãŒã«ãåæããŸã...åå¿è
ã®å Žåãé¢æ°å
ã§èŠãã³ãŒããã©ã°ã¡ã³ããååŸããIãã¹ã¯ãªããã«ã³ããŒããé¢æ°å
ã§ã³ããŒãããšãã«åãåäœãããªããšå®å
šã«æ··ä¹±ããŸããjunoãreplãjupyterã§ã åãåé¡ã«åž°çãã100ã®ã¹ã¿ãã¯äº€æã®è³ªåããããŸãã äžçŽã®ããã°ã©ããŒã¯ã let
ãããã¯ãªã©ã§ã©ãããããããããçš®é¡ã®èªå®¶è£œãœãªã¥ãŒã·ã§ã³ã䜿çšããããšã«ãªããŸããããã«ãããäºæ
ã¯ããã«æ··ä¹±ããŸãã
åãåé¡ã«åž°çãã100ã®ã¹ã¿ãã¯äº€æã®è³ªåããããŸãã äžçŽã®ããã°ã©ããŒã¯ã
let
ãããã¯ãªã©ã§ã©ãããããããããçš®é¡ã®èªå®¶è£œãœãªã¥ãŒã·ã§ã³ã䜿çšããããšã«ãªããŸããããã«ãããäºæ ã¯ããã«æ··ä¹±ããŸãã
å¯èœæ§ã¯ãããŸããããã®æ®µéã§ã¯ããã¯æ¶ç©ºã®ãã®ã§ãïŒãªã³ã¯ããã質åã®OPããæ··ä¹±ããã®ã§ã¯ãªããã¹ã³ãŒãã«ãŒã«ã®è«ççæ ¹æ ã«ã€ããŠè³ªåããŠããŸãïŒã
ãŸãããããå¿é ããŠãããã¹ãŠã®äººã®æè²çµéšãå°éããŸããããããæ宀ã§å€§ããããšã«ãªããã©ããã¯ãæãçµãŠã°ãããããšã§ãã
質åè ã¯ããã«ãã£ãŠæ··ä¹±ããŠããããã§ãïŒãããã¯åå¿è ã®ãžã¥ãªã¢ãŠãŒã¶ãŒã«ãšã£ãŠçŽæçã§ãããã©ããçåã«æããŸããç§ã«ãšã£ãŠã¯çŽæçã§ã¯ãããŸããã§ãã...ã
質åè ã¯ããã«ãã£ãŠæ··ä¹±ããŠããããã§ãïŒ
èšããŸã§ããªããããã¯ã¹ã³ãŒãã®ãã¥ã¢ã³ã¹ãç解ããã®ã«ååãªããã°ã©ãã³ã°èšèªãæ確ã«ç¥ã£ãŠãã人ã§ãã ãããã®ãããã¯ãå®å šã«ç¥ããªããã¹ãŠã®matlabã¿ã€ãã®ãŠãŒã¶ãŒã¯ã©ãã§ãããã...ãããŠãããããã¥ã¢ã³ã¹ãç解ããã®ã«ååãªæéãè²»ããããšã¯æ±ºããŠãªãã§ãããã
ãããããããããã®æ®µéã§ã¯ããã¯æ¶ç©ºã®ãã®ã§ã
ç§ã¯ãã§ã«stackoverflowã§ããã«é¢é£ããè€æ°ã®è³ªåã«åçããŸããããäž»ã«æ°èŠãŠãŒã¶ãŒã«ãããã®ã§ãããå®éã«ã¯ããã«å€ãã®è³ªåã«åçããŸããïŒæåŸã®è³ªåã¯ãæšæ¥ããããããŒãŽãŒãšèŠãªããMatlabãŠãŒã¶ãŒããã®ãã®ã§ãïŒã
åãåé¡ã«åž°çãã100ã®ã¹ã¿ãã¯äº€æã®è³ªåããããŸãã
ç§ã®ãæãªæéãã§ã¯ãSEã®è³ªåã«scope
ã scoping
ãããã³global-variables
ã¿ã°ãè¿œå ããŠããŸãã ç§ã¯æéã®äžè¶³ã®ããã«åæ¢ããã ãã§ããã以äžãªãããã§ã¯ãããŸããã
ããªã¢ãŒãžãå«ãå€ãã®è°è«ã®åŸã®çµè«ïŒBaseã«SoftGlobalScope
ã®ç·ã«æ²¿ã£ãŠäœããå«ããREPLããã³ä»ã®ãã¹ãŠã®ã€ã³ã¿ã©ã¯ãã£ããªè©äŸ¡ã³ã³ããã¹ãã§ããã䜿çšããŸãã @JeffBezansonã¯ããããå®è£
ãããæ¹æ³ã¯ãå®éã«ã¯ãœããã¹ã³ãŒãã以åã«å®è£
ãããæ¹æ³ãšæ¬è³ªçã«åãã§ãããšææããŠãããããå®å
šã«äžå·¡ããŠããŸãã éãã¯ãã¢ãžã¥ãŒã«ãã¹ã¯ãªããã«ã¯ã¹ã³ãŒãã®åäœããªããREPLã®ãããªã³ã³ããã¹ãã§ã®ã¿åäœããããšã§ãã ãŸãããœãŒã¹ã®æžãæããšããŠã®_explaining_ãœããã¹ã³ãŒãã¯ãããŒãã¹ã³ãŒããšãœããã¹ã³ãŒããåºå¥ããããšãããããæ確ã ãšæããŸãïŒããã¯ãJeffãã©ã®ããã«èª¬æãããã¯ããããŸããããææãããããããŸããïŒã
ãããã®2ã€ã®ã¹ããŒãã¡ã³ãã¯ãå°ãççŸããŠããããã«èŠãããããå°ãæ··ä¹±ããŸãã
ãããŠãããREPLãšä»ã®ãã¹ãŠã®ã€ã³ã¿ã©ã¯ãã£ããªè©äŸ¡ã³ã³ããã¹ãã§äœ¿çšããŸã
[...]ã¹ã¯ãªããã«ã¯ã¹ã³ãŒãã®åäœã¯ãªããREPLã®ãããªã³ã³ããã¹ãã§ã®ã¿åäœããŸãã
ããã¯ãã¢ãžã¥ãŒã«Main
ãœããã¹ã³ãŒãïŒREPLããã³ãããªã©ïŒãšããŒãã¹ã³ãŒãïŒ julia -L script.jl
ïŒãããå Žåãããããšãæå³ããŸããïŒ Main
åžžã«ãœããã¹ã³ãŒããæã£ãŠãããšèšã£ãŠãæå³ããããŸãããïŒ ãããŠãã¢ãžã¥ãŒã«ã¯using SoftGlobalScope
ãœããã¹ã³ãŒãã«ãªããã€ã³ã§ããŸããïŒ
ïŒç§ã¯æšæž¬ããŸãïŒã¹ã³ãŒãã«ãŒã«ã¯åŸæ¹äºææ§ããªããããã¹ã¯ãªããã§å€æŽã§ããŸãããã€ãŸãã1.0çšã«èšè¿°ãããã³ãŒãã1. *ããŒãžã§ã³ã§å®è¡ããããšããçŽæãç Žãããšã«ãªããŸãã REPLã®ã¹ã³ãŒãã«é¢ããåãåé¡ãã¹ã¯ãªããã«ãåœãŠã¯ãŸããšããã®ã¯æ£ããã§ãïŒã¹ã¯ãªãããšããŠå®è¡ãããšãã«ã³ãŒããæ£ããæ©èœããªãçç±ãå®å
šã«å€±ã£ããã€ãŒããªãŠãŒã¶ãŒïŒã 倧ããªéäºææ§ãªãã«ãã®åé¡ã解決/軜æžããæ¹æ³ã¯ããœããã¹ã³ãŒãïŒãŸãã¯ä»£æ¿ïŒã䜿çšãããªãã·ã§ã³ïŒjulia -fããã°ã©ã ãã¡ã€ã«ãªã©ïŒãjuliaã³ãã³ãã©ã€ã³ã«è¿œå ããåå¿è
ãè¡ãå¯èœæ§ã®ãã説æ/ãã¥ãŒããªã¢ã«ã§ãã®ãªãã·ã§ã³ã衚瀺ããããšã§ããåºãããã
ãŸããããã€ãã®å©ç¹ãããå¯èœæ§ã®ãããœããã¹ã³ãŒãã®æœåšçãªä»£æ¿æ¡ããããŸãïŒããããæ¬ ç¹ãèŠèœãšããŠããŸããïŒïŒãã¡ã€ã«ïŒã¹ã¯ãªãããšåŒã°ããïŒãåžžã«ç¬èªã®ããŒã«ã«ã¹ã³ãŒããå°å
¥ããå ŽåïŒã¹ã³ãŒãã«ãŒã«ã¯ãæ©èœããå€ãã®ãŠãŒã¶ãŒã®æåŸ
ã«å¿ããŸãã ãŸããæ°ãããŠãŒã¶ãŒã®ããã©ãŒãã³ã¹äžã®åé¡ã®å€ãã解æ¶ãããŸãã
äžèŠãªã°ããŒãã«ïŒã°ããŒãã«ãæ瀺çã«å®çŸ©ããå¿
èŠããããŸãïŒããªããªããã³ãŒããã³ã³ãã€ã«ãããå¯èœæ§ããããŸã
ïŒãã¹ãŠãé¢æ°ã«å
¥ããã°ããŒãã«ã®äœ¿çšãé¿ããããã«ãäœåèšããªããã°ãªããŸããã§ãããïŒïŒ
ç§ã¯ããã«ã¶ã€ãã£ãã°ããã§ãæ£çŽã«èšããšå®å
šã«å°æããŠããŠãä»ã®èšèªã§ãããŸã§èŠãããšããããŸããã§ããã ç©äºãèœã¡çããããä»å¹ŽåŸåã«å€§åŠã®äžçŽRãŠãŒã¶ãŒåãã«ãªãã·ã§ã³ã®Juliaã³ãŒã¹ãå°å
¥ããäºå®ã§ããçåŸã¯ãREPLã§ã©ã³ãã ã«å
¥åãéå§ãã0æ¥ç®ã«ããããããããŸãã ãŸãã for
ã«ãŒããif
ã¹ããŒãã¡ã³ããšã¯ç°ãªãåäœããããšããäºå®ã¯ãå·å£ã«å¡©ããããã€ããã ãã§ãããããã¯ã¹ã³ãŒãã®èŠ³ç¹ããã¯è«ççãããããŸããã é¢æ°å
ã®ã¹ã³ãŒãã¯ãçç©åŠã®åŠçãç解ããã®ã«ååã«å°é£ã§ããREPL/ã¹ã¯ãªãã/ forã«ãŒã/ ifã¹ããŒãã¡ã³ãã§_èªèãããŠããã«ãããããã_æçœãªççŸã説æããå¿
èŠããããšããèãïŒãããç§ãã¡ã話ããŠããããšã ããã§ãïŒããã«ã€ããŠïŒå°çäžã®ä»ã®ãã¹ãŠã®èšèªãšã¯ç°ãªãæ¹æ³ã§ãç§ã¯éåžžã«æ²ãããªããŸãã
äžäœäºææ§ã®çŽæããªãããããšã¯ç解ããŠããŸããããã®äœæ¥ã_å°çäžã®ãã¹ãŠã®écsã®äººïŒããã³ç§ãçãã»ãšãã©ã®csã®äººïŒãæåŸ ããããã«_è¡ãããšã¯ãäžäœäºææ§ã®åé¡ãšããããã¯ãã°ä¿®æ£ã®ããã§ã-ç§ãã¡ã¯èšã£ãŠããŸãããã¹ãŠã®ãã°ãæ°žé ã«åçŸããããšããããšã§ããïŒ REPLã®ä¿®æ£ã¯æããã«äžå¯æ¬ ãªã®ã§ããããææ¡ããã®ã¯çŽ æŽãããããšã§ãããã¹ã¯ãªãããREPLã«ã³ããŒã§ãããåãåäœãå ã®åé¡ãšåããããããæªãããã«èŠããããšã説æããå¿ èŠããããŸãã
ããããã°ä¿®æ£ãšããŠæ±ããã¹ã¯ãªãããšREPLã䜿çšããŠããã·ã¥ããããšãæ€èšããŠãã ããïŒãå€ããåäœã«åãæ¿ããã¹ã€ãããããå Žåã§ãïŒã1.0.1ã§ã§ããã ãæ©ãå®è¡ããŠãã ããã
ç§ããžã¥ãªã¢ãåŠãŒããšããŠããååããããã«åºããããŸããã æåã®ã¹ãããã§ã°ããŒãã«å€æ°ãšããŒã«ã«å€æ°ã®å šäœã説æããªããã°ãªããªãã®ã¯çæ³çã§ã¯ãããŸãã...
ãããããã°ä¿®æ£ããšããŠæ±ãããšã¯ã1.0ã®å®å®æ§å¥çŽãç Žãããšã«ãªãã®ã§ãã«ãŒãã«ã¯ãªããšæããŸãã ãã ãã julia -i
å®è¡ãããã¹ã¯ãªããïŒã€ãŸãã察話åãã¢ãŒãïŒã«softscopeã䜿çšããããšã¯ç§ã«ã¯åççãšæãããŸãã
ïŒã€ãŸãããã©ã°--softscope={yes|no}
ãããããã©ã«ãã§isinteractive
ã®å€ã«ãªããŸããïŒ
ã¹ã¯ãªããã¢ãŒãã®éžæãæ€èšããå¿ èŠããããŸãã
ããã«èšãã°ããã¹ã¯ãªããããã€ãŸãjulia foo.jl
ã«å¯ŸããŠããã©ã«ãã§--softscope=yes
ãèšå®ããã¢ãžã¥ãŒã«ãšinclude
ã«å¯ŸããŠã®ã¿ãããŒããã¹ã³ãŒãã«ãŒã«ããªã³ã«ããã®ã¯ç§ã«ãšã£ãŠã¯ããããªããšã§ã¯ãããŸããã
ããã«èšãã°ããã¹ã¯ãªãããã«å¯ŸããŠããã©ã«ãã§--softscope = yesã䜿çšããã®ã¯ãç§ã«ãšã£ãŠã¯ããããªããšã§ã¯ãããŸããã
ãããã çå£ã«æ€èšãã¹ããã1ã€ã¯Junoã§ãã 人ã
ã¯ã³ãŒããä»ããŠã€ã³ã¿ã©ã¯ãã£ããªéçºãè¡ãããã«<shift-enter>
ãå®è¡ãïŒç¹ã«ååž°ãã¹ãã䜿çšããå ŽåïŒãåŸã§åããã¡ã€ã«ãå®è¡ã§ããããšãæåŸ
ããããšãå¿ããªãã§ãã ããã ã³ãŒãã@testset
ãã©ããã¯éèŠã§ããïŒã¹ã³ãŒããå°å
¥ãããå¯èœæ§ããããšæããŸãïŒïŒ @testset
å ŽåãšAtomã®çµ±åã䜿çšããªãå Žåã§åãããã¹ããå€æŽããã ] test
å®è¡ãšççŸããå ŽåããŠãŒã¶ãŒã¯éåžžã«æ··ä¹±ããŸãã
æåã®è§£æ±ºçã¯ãããŒãã¹ã³ãŒããåã«ãªããã€ã³ã®ãã®ã§ãããä»ã®ãã¹ãŠã®äœ¿çšæ³ïŒã¹ã¯ãªããå
ã®include
ãå«ãïŒãç¹ã«æèšããªãéãsoftscope
䜿çšããããšã§ããããã«ç§ã«ã¯ç¢ºãã«èãããŸãã
å°çäžã®ä»ã®ãã¹ãŠã®èšèªãšã¯ç°ãªããŸã
ãã¹ãŠã®å€æ°ãå°å
¥ããããã«var x = 0
ãèšè¿°ããŸããïŒ ããã¯ãŸãããããä¿®æ£ãããä»ã®èšèªã®ããã«ãªããŸãã
ãã¹ãŠã®ãã°ãæ°žé ã«åçŸããããšèšã£ãŠããããã§ã¯ãããŸããã
ããã¯ãããã©ã®ããã«æ©èœãããã§ã¯ãããŸããã çŸåšã®åäœããã°ãšåŒã¶ã ãã§ã¯ãå¿ èŠãªèšèªã«å€æŽãå ããããšã¯ã§ããŸããã
ãã®ããã®ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ãããã¹ãã§ã¯ãªããšç§ã¯å¿ããæã£ãŠããŸãã 次ã«ããžã¥ãªã¢ã³ãŒãã®ãã¹ãŠã®éšåã«ã䜿çšãããªãã·ã§ã³ã瀺ãã³ã¡ã³ããŸãã¯äœããæ·»ä»ããå¿ èŠããããŸãã ãœãŒã¹ãã¡ã€ã«å ã®ããçš®ã®ããŒãµãŒãã£ã¬ã¯ãã£ãã¯å°ãåªããŠããŸãããããã§ãåºå®ã«ãŒã«ãæã€ããšã¯ããã«åªããŠããŸãã ããšãã°ãã¢ãžã¥ãŒã«å ã®ããŒãã¹ã³ãŒãã®ã¿ãæå³ããªãå ŽåããããŸãã
æ宀ã§äººã ãèŠãŠããèºç ããã¹ããªãŒãããã³å€§è殺ãåé¿ããã®ã«åœ¹ç«ã€ãããããªãããã®èª¬æãããäžåºŠæäŸããããšæããŸãïŒ
ãã
Juliaã«ã¯ãããŒã«ã«å€æ°ãšã°ããŒãã«å€æ°ã®2çš®é¡ã®å€æ°ããããŸãã REPLãŸãã¯ãããã¬ãã«ã§å°å
¥ããå€æ°ã¯ãä»ã®ãã®ä»¥å€ã§ã¯ã°ããŒãã«ã§ãã é¢æ°ãšã«ãŒãå
ã«å°å
¥ãããå€æ°ã¯ããŒã«ã«ã§ãã ããã°ã©ã å
ã®ã°ããŒãã«å€æ°ã®æŽæ°ã¯äžè¬çã«æªãã®ã§ãã«ãŒããŸãã¯é¢æ°å
ã«ããŠã°ããŒãã«ãæŽæ°ãããå Žåã¯ã global
宣èšãå床èšè¿°ããŠãããã«ã€ããŠæ瀺çã«ããå¿
èŠããããŸãã
ãã
ããããããã¯æ¹åã§ããã§ãããã ææ¡ãæè¿ããŸãã ç§ã¯ç¥ã£ãŠããŸããããªãã¯ãããã©ããªçš®é¡ã®èª¬æãå šãå¿ èŠãšããªãã§ãããã ããããŸããã ããããããã¯ç§ã«ã¯ããã»ã©æªãã¯ãªãããã§ãã
ãã®ããã®ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ãããã¹ãã§ã¯ãªããšç§ã¯å¿ããæã£ãŠããŸãã 次ã«ããžã¥ãªã¢ã³ãŒãã®ãã¹ãŠã®éšåã«ã䜿çšãããªãã·ã§ã³ã瀺ãã³ã¡ã³ããŸãã¯äœããæ·»ä»ããå¿ èŠããããŸãã ãœãŒã¹ãã¡ã€ã«å ã®ããçš®ã®ããŒãµãŒãã£ã¬ã¯ãã£ãã¯å°ãåªããŠããŸãããããã§ãåºå®ã«ãŒã«ãæã€ããšã¯ããã«åªããŠããŸã
åæããŸãã ç§ã«ã¯æè²ãšã³ãã¥ãã±ãŒã·ã§ã³ã®é çã®çš®ã®ããã«èãããŸãã
ããšãã°ãã¢ãžã¥ãŒã«å ã®ããŒãã¹ã³ãŒãã®ã¿ãæå³ããªãå ŽåããããŸãã
ç§ãç解ããŠããã®ã¯ãIJuliaããŒãããã¯ããã³ããŒãã.jl
ãã¡ã€ã«ã«çãã¹ã¯ãªããïŒã¢ãžã¥ãŒã«ã§ã¯ãªãïŒïŒãããå Žåããã®ã³ãŒããREPLã§çŽæ¥å®è¡ãããshift- Junoã«å
¥ããšãäžè²«ããŠãœããã¹ã³ãŒããšããŠåäœããŸã...ãããã module
ãããã¯ã®ä»£ããã«ã³ããŒãããšãã°ããŒãã«ã«ã€ããŠæ鳎ããŸããïŒ ãããããã®ã³ãŒããã¢ãžã¥ãŒã«å
ã®é¢æ°å
ã«ã³ããŒãããšãæ©èœããã¯ãã§ãã
ãããããªããããã¯å®å šã«çã«ããªã£ãŠããŸããéåžžã«æãããããéŠå°Ÿäžè²«ããŠããŸãã ãããã¬ãã«ã®ã¹ã¯ãªããã¯ãæ¢çŽ¢ãªã©ã®ããã®ã€ã³ã¿ã©ã¯ãã£ããªã€ã³ã¿ãŒãã§ã€ã¹ã§ããããã®ãããªã³ãŒããã¢ãžã¥ãŒã«ã«é 眮ããããšã¯æ±ºããŠãããŸããã ã¢ãžã¥ãŒã«ã¯ãé¢æ°ã§åããå¿ èŠããããã®ã§ãããéåžžã«æ éã«ã°ããŒãã«ãšèŠãªãããŸãã ãããã®ã«ãŒã«ã«ã€ããŠäººã ã«äŒããã®ã¯ç°¡åã§ãããã
ãã¹ãŠã®å€æ°ãå°å ¥ããããã«varx = 0ãèšè¿°ããŸããïŒ ããã¯ãŸãããããä¿®æ£ãããä»ã®èšèªã®ããã«ãªããŸãã
ããããç§ã¯ãããããããªãã§ãïŒ ããããREPLãæã€ã¹ã¯ãªããèšèªïŒrubyãpythonãRãªã©ïŒããããè¡ãããšã¯ãã£ãã«ãªããJuliav0.6ãšåãããã«åäœããŸãã
Juliaã«ã¯ãããŒã«ã«å€æ°ãšã°ããŒãã«å€æ°ã®2çš®é¡ã®å€æ°ããããŸãã REPLãŸãã¯ãããã¬ãã«ã§å°å ¥ããå€æ°ã¯ãä»ã®ãã®ä»¥å€ã§ã¯ã°ããŒãã«ã§ãã é¢æ°ãšã«ãŒãå ã«å°å ¥ãããå€æ°ã¯ããŒã«ã«ã§ãã ããã°ã©ã å ã®ã°ããŒãã«å€æ°ã®æŽæ°ã¯äžè¬çã«æªãã®ã§ãã«ãŒããŸãã¯é¢æ°ã®å éšã«ããŠãã°ããŒãã«ãæŽæ°ãããå Žåã¯ãã°ããŒãã«å®£èšãå床èšè¿°ããŠãããã«ã€ããŠæ瀺çã«ããå¿ èŠããããŸãã
ç§ã¯ããªããããã§èšã£ãŠããããšãå®å šã«ç解ããŠããŸãããããŠç§ã¯ïŒæšã«è§ŠããïŒïŒãã®ééããäºåºŠãšç¯ããŸããã ããããç§ãå¿é ããŠããåé¡å šäœã¯ç§ã§ã¯ãããŸããã é¢æ°å ã®å€æ°ã¯å€éšã®å€æ°ãèŠãããšãã§ããããã®éãåæ§ã§ãããšèª¬æãããšãã¹ã³ãŒããïŒçŽæ¥èšåããã«ïŒå°å ¥ããã®ã¯æ¯èŒçç°¡åã§ããããšãããããŸããïŒRã®äºå®ãããé¡æã§ããïŒãããèªäœã¯ãã§ã«_æ¯èŒç_é«åºŠãªæŠå¿µã§ãã ããããããã¯ãã¹ã³ãŒãã人ã ã«åœ±é¿ãäžããã»ã©è€éãªãã®ããªã¢ãŒãã§æãŸãªããããã§ã®åŠç¿æ²ç·ã®ã¯ããã«æ©ã段éã§çºçããŸã...
ãŸãããREPLãŸãã¯ãããã¬ãã«ã§å°å
¥ããå€æ°ã¯ãä»ã®ãã®ä»¥å€ã§ã¯ã°ããŒãã«ã§ãããããã³ãé¢æ°ããã³ã«ãŒãå
ã§å°å
¥ãããå€æ°ã¯ããŒã«ã«ã§ãããã ãã§ãªããREPLãŸãã¯ã§ã®ifã¹ããŒãã¡ã³ãã®å€æ°ã§ãããããšã«æ³šæããŠãã ããããããã¬ãã«ã¯ã°ããŒãã«ã§ããã @testset
å€æ°ã¯ããŒã«ã«ã§ãã ãããŒã«ã«ã§ãã°ããŒãã«ã§ããé 匵ã£ãŠã¿ãŠãèªåã§è©ŠããŠã¿ãŠãã ããããšãããããã®ç©Žã«è¡ãçããŸãã
ãã ãã @ jlperlaã«åæããŸãããã¢ãžã¥ãŒã«å ã®ããŒãã¹ã³ãŒãã®ã¿ãæå³ããªãå¯èœæ§ãããããšããææ¡ã¯ãç§ã«ã¯ãŸã£ããåé¡ãªãããã§ãã ã¢ãžã¥ãŒã«ãååã«é«åºŠãªæŠå¿µã§ã...ãœããã¹ã³ãŒããREPLãšã¹ã¯ãªããã§æ©èœããå Žåãããã¯ãŸã£ããåé¡ãããŸããã
ã¹ã³ãŒãã»ã©è€éãªãã®ã人ã ã«åœ±é¿ãäžããããšã¯æãã§ããŸãã...
ãããã¬ãã«ã¯ã°ããŒãã«ã§ããã@testset
å€æ°ã¯ããŒã«ã«ã§ã
ç§ãåŸãããšããŠããã®ã¯ãã°ããŒãã«ãšããŒã«ã«ã®ç°¡åãªèª¬æã§åæ段éã®æè²ã«ååã ãšæããŠãããšããããšã§ãããã¹ã³ãŒãããšããèšèãèšãå¿ èŠãããããŸããïŒãŸã£ããçºçããŸããïŒãäžèšã®ç§ã®èª¬æã§ïŒã REPLã§ããã€ãã®åçŽãªåŒãšã«ãŒãã衚瀺ããŠããã ãã®å Žåããã¹ãã»ããã«ã€ããŠäººã ã«æããŠããããã§ã¯ãªããèšèªå ã®ãã¹ãŠã®ã¹ã³ãŒãåäœã®å®å šãªãªã¹ãã¯å¿ èŠãããŸããã
ç§ã®å¯äžã®ãã€ã³ãã¯ããã®å€æŽã«ãããèšèªã«ã€ããŠå€ãã®è©³çŽ°ãåãã£ãŠæããå¿ èŠãçªç¶ãªããªãããã§ã¯ãªããšããããšã§ãã ã¹ã³ãŒãããã¹ãã»ãããªã©ã«é¢ãã倧éšåã¯ç¡èŠã§ããŸãããã°ããŒãã«ãšããŒã«ã«ã®åçŽãªç·ã§ååã§ãã
ãããŠãã°ããŒãã«ãšããŒã«ã«ã®åçŽãªç·ã§ååã§ãã
誰ãããã¹ãŠã®ã³ãŒããæåããæžãå§ããäžçã§ã¯ãç§ã¯å®å šã«åæããŸãã
åé¡ã¯ãç¯å²ã ãã§ãªããååŸããã³ãŒããã³ããŒããŠè²Œãä»ããå Žæã®ç¯å²ãç解ããããšã«ã€ããŠãçåŸã«æããå¿
èŠããããšããããšã§ãã é¢æ°ãŸãã¯letãããã¯å
ã®stackexchangeã«ããã³ãŒããã³ããŒããŠè²Œãä»ããå Žåã¯ããããã¹ãã£ã³ããŠãREPLãŸãã¯.jl
貌ãä»ããå Žåã«ãã°ããŒãã«ããè¿œå ããå ŽæãèŠã€ããå¿
èŠãããããšãæããå¿
èŠããããŸãã
ãããŠãåŠçã¯ãªãfor
ãã®ã¹ã³ãŒããäœæããã®ããšå°ãå§ããŸãããä»ã®ããšã¯å¿é
ããå¿
èŠã¯ãããŸããã
ãããŒã«ã«ã§ãã°ããŒãã«ã§ããé 匵ã£ãŠã¿ãŠãèªåã§è©ŠããŠã¿ãŠãã ããããšãããããã®ç©Žã«è¡ãçããŸãã
ãããã¯ã€ãºïŒãžã¥ãªã¢0.6ã§ã¯ã x
ã°ããŒãã«ãŸãã¯ããŒã«ã«ã§ãïŒ
for i = 1:10
x = i
end
çãã¯ãã°ããŒãã«x
ã以åã«å®çŸ©ãããŠãããã©ããã«äŸåãããããç¥ãæ¹æ³ããªããšããããšã§ãã ä»ãããªãã¯ãããããŒã«ã«ã§ãããšç¢ºãã«èšãããšãã§ããŸãã
çããããã®è°è«ã¯ãã¯ãçç£çã§ã¯ãªãããšã«çŠç¹ãåœãŠãŠããŸãã ãžã§ãã¯ãREPLã§ã®å€ãåäœãè¯ãã£ãããšãããç¥ã£ãŠããŸãã ãããã誰ããããèšèšããå®è£ ãããšæããŸããïŒ ç§ãã¡ã¯ãã§ã«ã€ã³ã¿ã©ã¯ãã£ããªæ¯ãèããå€ããããšãçŽæããŸããã ãã¹ã¯ãªããããã€ã³ã¿ã©ã¯ãã£ãã§ãããã©ããã«ã€ããŠã¯ããŸã 決å®ãäžãå¿ èŠããããŸãã ãã¹ã¯ãªããããšåŒã¶ãšã€ã³ã¿ã©ã¯ãã£ãã«èãããŸããããããã°ã©ã ããšåŒã¶ãšã€ã³ã¿ã©ã¯ãã£ãã«èãããŸãããããŸã£ããåãã§ãã è¿ä¿¡ã¯çã建èšçãªãã®ã«ãããŸã 決å®ããªããã°ãªããªãããšã«çŠç¹ãåœãŠãŠãã ããã ããããéžè±ããã³ã¡ã³ãããããšãã³ã¡ã³ããé衚瀺ã«ãªããã¹ã¬ãããããã¯ãããå¯èœæ§ããããŸãã
ç§ãæã£ãŠãããšæã£ãã®ã§ããããç
©ãããããŠããæ人ã«çæãåºããããããšåŽäžããã®ã¯ãé察話åã®ã³ã³ããã¹ãã§ã¯ã local
ãŸãã¯global
ãå¿
èŠã«ãªãå¯èœæ§ããããšããããšglobal
ã¢ãããŒã·ã§ã³ã ããã«ãããã¢ãžã¥ãŒã«ããã®ã³ãŒããREPLã«è²Œãä»ããããå Žåã«åãããã«æ©èœããããšãä¿èšŒãããŸãã ããããã¹ã¯ãªããã/ãããã°ã©ã ãã«é©çšããå Žåãåãããšããããã«ãåœãŠã¯ãŸããŸãã
ç§ãæåã«Juliaã玹ä»ããããšãïŒå°ãåã§ãFortranã®ããã¯ã°ã©ãŠã³ããæã£ãŠããããšãã»ãšãã©ã§ãïŒããJuliaã¯é¢æ°ã¬ãã«ã§ã³ã³ãã€ã«ãããŠé«éã§ãããããå¹ççã§ãªããã°ãªããªãããšã¯ãã¹ãŠé¢æ°å ã§å®è¡ããå¿ èŠããããŸãã ãã¡ã€ã³ã®ãããã°ã©ã ãã§ã¯ãã¹ã¯ãªããèšèªã®ããã«åäœããŸãã ãã®ã¹ããŒãã¡ã³ããç解ããã«èšç®éãå€ãããããšãããŠãã人ãæ³åããããšã¯ã§ããªãã®ã§ãç§ã¯ãããååã«å ¬å¹³ã§ããããšã«æ°ã¥ããŸããã ãããã£ãŠãé¢æ°ãšåãè¡šèšæ³ãšæ§é ã䜿çšããããã«ã¡ã€ã³ããã°ã©ã ã§ããã©ãŒãã³ã¹ãç ç²ã«ãªã£ãå Žåããããã®ã¹ã³ãŒãèŠåãç解ããŠæããããšããŠã³ããŒã§ãããããå Žæããå¥ã®å Žæã«ã³ãŒãã貌ãä»ããŸãã
ã¡ãªã¿ã«ãç§ã¯ãŸã ãžã¥ãªã¢ã®åå¿è ã§ãããé«æ ¡çãšå€§åŠçã«ç©çã·ã¹ãã ã®ã·ãã¥ã¬ãŒã·ã§ã³ã®åºæ¬ãæããããã«ãããéžæããŸããã ãããŠãç§ã¯ãã§ã«ãã®åé¡ã以åã®ããŒãžã§ã³ã®ãéåžžã®ãåäœã«æ»ãããšãæãã§ããŸããããã¯ç§ãã¡ã«ããªãã®é çã®çš®ãäžããããã§ãã
ãã®äŒè©±ã¯çŸåšããã¯ãããŠãããJuliaã³ããã¿ãŒã®ã¿ãã³ã¡ã³ãã§ããŸãã
@JeffBezanson ãæåã¯REPLã§ã®ã¿ãä»ã®å Žæã§ãªããã€ã³ããŠããã®è«è©±ã¹ã¬ããã§ææ¡ããã»ãã³ãã£ã¯ã¹ãå®è£ ããèšç»ã¯äœã§ããããïŒ
SoftScope.jlãæ§ææžãæãããã®ã§ã¯ãªãããããçŽæ¥äžéã³ãŒãïŒ julia-syntax.scm
ïŒã«å
¥ããããšãèšç»ããŠããããã§ãã ãŸãã¯ãæåã«æ§æãæžãæããŠïŒSoftScopeãææ¡ãããã«ãŒã«ã«å€æŽããstdlibã«å€æããŠïŒãåŸã®JuliaãªãªãŒã¹ã®äžäœã³ãŒãã«å
¥ããã®ã延æããŸããïŒ
æãåèã«ãªãã³ã¡ã³ã
@JeffBezanson ãç§ãã¡ã®å€ãã¯ãç·åœ¢ä»£æ°ãçµ±èšãªã©ã®æè¡ã³ãŒã¹ã§ãMatlabãªã©ã®ä»£ããã«Juliaã䜿çšããããšèããŠããããšãå¿ããªãã§ãã ããã ãããã¯ããã°ã©ãã³ã°ã³ãŒã¹ã§ã¯ãªããåŠçã¯ããã°ã©ãã³ã°ã®ããã¯ã°ã©ãŠã³ããæã£ãŠããªãããšããããããŸãã æ§é åããã°ã©ãã³ã°ãè¡ãããšã¯ãããŸãããã»ãšãã©ãã¹ãŠãçãã¹ãããããšã°ããŒãã«å€æ°ã䜿çšããŠã€ã³ã¿ã©ã¯ãã£ãã§ãã
ããã«ãç§ãæåã«åçèšèªã䜿çšããŠããçç±ã¯ãã€ã³ã¿ã©ã¯ãã£ããªæ¢çŽ¢ãšããçµ±å¶ã®ãšããããã°ã©ãã³ã°ãæµåçã«åãæ¿ããããã§ãã ã°ããŒãã«ã³ã³ããã¹ããšé¢æ°ã³ã³ããã¹ãã§åãã³ãŒãã䜿çšã§ããªãããšã¯ãæŠå¿µã®ã¹ã³ãŒãã«æ £ããŠãã人ã«ãšã£ãŠãããã®ç®çã劚ãããã®ã§ãããCS以å€ã®ããã¯ã°ã©ãŠã³ããæã€åŠçã«ãšã£ãŠã¯ããã«æªãããšã§ãã