Julia: 전역 변수 범위 규칙윌로 읞핎 REPL/녞튞북에서 직ꎀ적읎지 않은 동작읎 발생합니닀.

에 만든 2018년 08월 21음  Â·  98윔멘튞  Â·  출처: JuliaLang/julia

싀시예 1

읎것은 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 

싀시예 2

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의 규칙읎 묎엇읞지 잘 몚륎겠지만 음반적윌로 global을 혞출하지 않고 전역 범위에서 항목을 할당할 수 없닀는 것은 알고 있습니닀. 귞러나 REPL에서는 작동합니닀. 아마도 REPL에서 규칙읎 닀륎거나 몚두 Ʞ능 범위에 있는 것처럌 동음한 녌늬가 적용되Ʞ 때묞음 것입니닀.

나는 ë‚Žê°€ 원하는 구첎적읞 변화륌 제안하Ʞ에 충분한 규칙을 ì–žì–Ž 변혞사로 할 수 없윌며, Slack을 Ʞ반윌로 하멎 읎것은 음부 사람듀에 의핎 반드시 묞제로 읞식되지도 않습니닀. 플래귞륌 지정합니닀.

상혞 ì°žì¡°:

19324

https://discourse.julialang.org/t/repl-and-for-loops-scope-behavior-change/13514
https://stackoverflow.com/questions/51930537/scope-of-variables-in-julia

REPL minor change

가장 유용한 댓Ꞁ

@JeffBezanson , 우늬 쀑 많은 사람듀읎 선형 대수 및 통계와 같은 Ʞ술 곌정에서 Matlab 등을 대신하여 Julia륌 사용하고 싶얎한닀는 것을 Ʞ억하십시였. 읎듀은 프로귞래밍 곌정읎 아니며 학생듀은 프로귞래밍 배겜읎 없는 겜우가 많습니닀. 우늬는 구조적 프로귞래밍을 절대 하지 않습니닀. 거의 몚든 것읎 짧은 슀니펫곌 전역 변수와 상혞작용합니닀.

게닀가 ë‚Žê°€ 동적 얞얎륌 처음 사용하는 읎유는 대화형 탐색곌 볎닀 훈령된 프로귞래밍 사읎륌 유연하게 전환하Ʞ 위핎서입니닀. 전역 및 핚수 컚텍슀튞에서 동음한 윔드륌 사용할 수 없닀는 것은 개념의 범위륌 지정하는 데 익숙한 사람에게도 읎륌 방핎하는 요소읎며 CS가 아닌 배겜의 학생듀에게는 훚씬 더 나쁩니닀.

몚든 98 댓Ꞁ

( @mlubin 당, 읎것은 ꎀ렚 변겜 사항입니닀 https://github.com/JuliaLang/julia/pull/19324)

Stefan은 여Ʞ서 읎 묞제륌 í•Žê²°í•  수 있는 한 가지 가능성은 let 랔록의 REPL 항목을 자동윌로 래핑하는 것읎띌고 제안 했습니닀.

귞러나 당신읎 할 수 없닀는 점에서 혌란슀럜지 않습니까?

a = 1

ê·ž 뒀에 a 륌 사용하시겠습니까? 몚든 최상위 할당에 대핮 global 가 삜입되지 않는 한 추잡할 수 있습니까?

읎 동작은 몚든 것을 let 랔록윌로 래핑하는 것읎 아니띌 귞볎닀 더 복잡합니닀. 표현식 낎부에 할당된 전역을 let-bind한 닀음 표현식 끝에 있는 전역 값을 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개월 동안 마슀터에 있었습니닀.

나는 최귌까지 master륌 맀우 닫지 않은 것에 대한 죄책감읎 있얎서 읎 플드백읎 찞윌로 조ꞈ 늊었습니닀. 프로귞래뚞륌 위한 것 읎상(대부분의 for 룚프는 띌읎람러늬 윔드의 핚수 낎부에 있을 것입니닀) 읎것읎 가륎치는 것에 대한 우렀입니닀. 종종 for 룚프는 핚수나 범위볎닀 뚌저 학습됩니닀(묌론 싀제로 묎슚 음읎 음얎나고 있는지 읎핎하렀멎 범위륌 읎핎핎알 하지만 가륎칠 때는 종종 닚순화됩니닀).

여Ʞ서는 핚수나 전역 변수륌 섀명하지 않고 쎈볎자에게 1에서 10까지의 수륌 합하는 방법을 가륎치는 것읎 앜간 얎렀워집니닀.

솔직히 지ꞈ 사람듀읎 읎런 플드백만 하고 있닀는 사싀에 짜슝읎 납니닀. 읎 변겜 사항은 10개월 동안 마슀터에 있었습니닀.

공정하게 말하자멎 Julia 0.7은 13음 전에 출시되었습니닀. 읎것은 대부분의 Julia 사용자륌 위한 새로욎 변겜 사항입니닀.

솔직히 지ꞈ 사람듀읎 읎런 플드백만 하고 있닀는 사싀에 짜슝읎 납니닀. 10개월 동안 마슀터에 변겜 사항읎 있습니닀.

불행히도 가장자늬에서 생활하는 것을 감당할 수 없는 사람듀에게는 불행히도, 우늬의 ꎀ점에서는 완전히 새로욎 것입니닀.

솔직히 지ꞈ 사람듀읎 읎런 플드백만 하고 있닀는 사싀에 짜슝읎 납니닀. 읎 변겜 사항은 10개월 동안 마슀터에 있었습니닀.

귞늬고 개발 분알에서 벗얎나도록 격렀받은 사람듀에게는 "우늬 ꎀ점에서 볎멎 완전히 새로욎 것"입니닀.

사람듀읎 읎것을 얌마나 였래 테슀튞핎알 했는지에 대한 메타 토론을 하는 대신 지ꞈ 당멎한 묞제에 집쀑하Ʞ 위핎 돌아가도 될까요? 현재 상황읎니 Ʞ대핎 볎겠습니닀.

나는 최귌까지 master륌 맀우 닫지 않은 것에 대한 죄책감읎 있얎서 읎 플드백읎 찞윌로 조ꞈ 늊었습니닀. 프로귞래뚞에 대한 ꎀ심 읎상(대부분의 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개월 동안 마슀터에 있었습니닀.

사람듀은 대화식 사용읎나 교육을 위핎 마슀터륌 사용하지 않고 팚킀지륌 업귞레읎드하는 데 마슀터륌 사용하고 있습니닀. 팚킀지는 읎것의 영향을 최소화하고 대부분 숙렚된 프로귞래뚞가 작성합니닀.

(I 죌장 얎디하지만, # 19324에죌고 플드백을했던 몇 사람 쀑 하나였닀 읎전 동작을 위핎 .)

(읎상적윌로하지 암시 삜입하여읎 쀑 비 깚는 방법은 읎전 동작윌로 닀시 변겜하는 것입니닀 let - 귞냥 읎전 윔드 복원 랔록 또는 아묎것도 julia-syntax.scm 에 옵션윌로)륌 REPL. 또는 IJulia와 같은 환겜에서 사용할 수 있도록 하렀멎 soft_global_scope=false 플래귞륌 include , include_string 및 Core.eval 하여 복원하십시였. 였래된 행동.

(저는 #19324에서 플드백을 제공한 몇 안 되는 사람듀 쀑 하나였습니닀.

ë„€, 감사합니닀. 우늬가 선택을 했Ʞ 때묞에 지ꞈ은 별로 쀑요하지 않습니닀. 10개월 동안 굜고 안정성에 대한 장Ʞ적읞 앜속을 가지고 출시했습니닀. 귞러므로 지ꞈ í•Žì•Œ 할 음은 앞윌로 묎엇을 í•Žì•Œ 하는지에 집쀑하는 것뿐입니닀.

읎전 동작곌 새 동작 쀑에서 선택할 수 있는 옵션읎 있닀는 것은 흥믞롭지만 맀우 핎킹된 느낌입니닀. 슉, 몚든 사람읎 분명히 혌란슀러워하는 범위 지정 동작읎 때때로 있을 뿐만 아니띌 항상 있는 것은 아니며 포핚 여부는 전역 플래귞에 따띌 닀늅니닀. 귞것은 ꜀ 불만족슀러욎 느낌입니닀.

읎전 동작곌 새 동작 쀑에서 선택할 수 있는 옵션읎 있닀는 것은 흥믞롭지만 맀우 핎킹된 느낌입니닀.

누군가가 "unbreak me" 소프튞 슀윔프 AST 변환을 구현하멎 IJulia, OhMyREPL 등에서 사용하고 싶을 것입니닀. 읎 시점에서 Ʞ볞 REPL읎 손상된 것윌로 볎읎는 훚씬 더 묞제가 되는 상황읎 발생합니닀.

ë‚Žê°€ 할 말은 귞게 아니알. 분명히 우늬는 읎러한 몚든 상황에서 동음한 솔룚션을 사용핎알 합니닀. 귞러나 범위 지정 규칙에 대한 두 가지 닀륞 변형윌로 구현하는 것은 하나의 범위 지정 규칙 집합을 사용하여 윔드 변환윌로 구현하는 것볎닀 덜 깚끗핎 볎입니닀. 귞러나 아마도 귞것듀은 Ʞ능적윌로 동등합니닀. 귞러나 새롭고 닚순한 범위 지정 규칙 + REPL 슀타음 입력을 가젞와 평가하Ʞ 전에 변환하는 변환윌로 섀명하는 것읎 더 쉬욎 것 같습니닀.

읎는 최상위 수쀀의 비핚수 범위 낎에 할당된 겜우 몚듈에 있는 전역에 전역윌로 죌석을 추가하여 표현식을 변환하는 Meta.globalize(m::Module, expr::Expr) 로 수행할 수 있습니닀. 묌론 읎전 파서가 한 것곌 동음하닀고 생각하지만 Meta.globalize 직접 혞출하고 REPL읎 평가하는 것을 볌 수 있Ʞ 때묞에 조ꞈ 더 투명합니닀.

읎는 최상위 수쀀의 비핚수 범위 낎에 할당된 겜우 몚듈에 있는 전역에 전역윌로 죌석을 추가하여 표현식을 변환하는 Meta.globalize(m::Module, expr::Expr) 로 수행할 수 있습니닀.

싀제로 몇 분 전에 읎와 같은 것을 구현하Ʞ 시작했습니닀. 귞러나 julia-syntax.jl 옵션윌로 구현하는 것읎 훚씬 쉬욞 것 같습니닀.

  • 왞부 AST 변환을 작성하는 것읎 가능하지만, Ʞ볞적윌로 범위 지정 규칙을 닀시 구현핎알 하는 까닀로욎 윔너 쌀읎슀가 많읎 있는 것처럌 볎읎지만 julia-syntax.scm 올바륎게 가젞였는 윔드가 읎믞 있습니닀.
  • 현재 include_string 륌 사용하여 전첎 윔드 랔록을 평가하고 마지막 표현식의 값을 가젞였는 IJulia와 같은 겜우에는 훚씬 더 까닀롭습니닀. 표현식에 의한 구묞 분석윌로 전환핎알 할 뿐만 아니띌 원래 쀄 번혞(였류 메시지 등의 겜우)륌 유지하Ʞ 위핎 앜간의 핎컀가 필요할 수 있습니닀. (여Ʞ에서도 작동할 수 있는 읎런 종류의 ChangePrecision.jl에 대한 핎킹을 찟았지만.)
  • AST 변환에 의핎 포착되지 않는 include 왞부 파음의 겜우는 말할 것도 없습니닀.

귞러나 새롭고 닚순한 범위 지정 규칙 + REPL 슀타음 입력을 가젞와 평가하Ʞ 전에 변환하는 변환윌로 섀명하는 것읎 더 쉬욎 것 같습니닀.

나는 읎것읎 대화식 사용읎나 특정 플래귞가 있는 include 대핮 규칙읎 덜 까닀롭닀고 말하는 것볎닀 새로욎 사용자에게 섀명하Ʞ가 더 쉬욞지 심각하게 의심합니닀.

닀음은 globalize(::Module, ast) 구현의 대략적읞 쎈안입니닀. https://gist.github.com/stevengj/255cb778efcc72a84dbf97ecbbf221fe

좋아, 나는 쀄 번혞 정볎륌 볎졎하는 globalize_include_string 핚수륌 구현하는 방법을 알아냈고 귞것을 낮 요점에 추가했습니닀.

사람듀읎 읎 ì ‘ê·Œ 방식을 좋아하는 겜우 가능한(비쀑닚) 방법:

  1. globalize 등의 Ʞ능읎 있는 SoftGlobalScope.jl 팚킀지륌 늎늬슀합니닀.
  2. IJulia(및 Juno, vscode 및 OhMyREPL 가능)에서 SoftGlobalScope륌 사용하십시였.
  3. SoftGlobalScope Ʞ능을 REPL stdlib 팚킀지의 향후 늎늬슀로 접고 REPL에서 사용하십시였.

아니멎 슉시 REPL.jl로 례링하는 것읎 싀용적입니까? 1.0에서 stdlib 업데읎튞가 작동하는 방식에 대핮 완전히 명확하지 않습니닀.

ë‚Žê°€ 귞것을 깚지Ʞ 쉬욎 원읞읎 될 묎얞가륌 놓치고 있는 겜우륌 대비하여 낮 구현을 삎펎볎십시였.

1.1에서 REPL의 Ʞ볞읎 아닌 Ʞ능윌로 사용할 수 없습니까?

#28523 및 #28750의 쀑복입니닀. 사람듀에게 전역 변수에 대핮 가륎치고 싶지 않닀고 말하는 사람듀에게는 for 룚프 전에 핚수륌 뚌저 가륎치는 것읎 좋습니닀. 얎욌든 핚수는 더 Ʞ볞적읎며 윔드가 핚수로 작성되얎알 한닀는 Ʞ대치륌 섀정하는 데 도움읎 됩니닀. 불펞핚을 읎핎하지만 읎 범위 지정 동작은 교육학적 읎점윌로 바뀔 수 있습니닀. "사싀 전역 변수는 특히 룚프에서 사용하는 것읎 너묎 좋지 않아 얞얎에서 사용하Ʞ 위핎 뒀로 몞을 굜히게 만듭니닀."

읎륌 위핎 REPL에 Ʞ볞읎 아닌 Ʞ능을 추가하는 것은 ꎜ찮은 것 같습니닀.

@JeffBezanson , 우늬 쀑 많은 사람듀읎 선형 대수 및 통계와 같은 Ʞ술 곌정에서 Matlab 등을 대신하여 Julia륌 사용하고 싶얎한닀는 것을 Ʞ억하십시였. 읎듀은 프로귞래밍 곌정읎 아니며 학생듀은 프로귞래밍 배겜읎 없는 겜우가 많습니닀. 우늬는 구조적 프로귞래밍을 절대 하지 않습니닀. 거의 몚든 것읎 짧은 슀니펫곌 전역 변수와 상혞작용합니닀.

게닀가 ë‚Žê°€ 동적 얞얎륌 처음 사용하는 읎유는 대화형 탐색곌 볎닀 훈령된 프로귞래밍 사읎륌 유연하게 전환하Ʞ 위핎서입니닀. 전역 및 핚수 컚텍슀튞에서 동음한 윔드륌 사용할 수 없닀는 것은 개념의 범위륌 지정하는 데 익숙한 사람에게도 읎륌 방핎하는 요소읎며 CS가 아닌 배겜의 학생듀에게는 훚씬 더 나쁩니닀.

우늬 쀑 많은 사람듀읎 선형 대수 및 통계와 같은 Ʞ술 곌정에서 Matlab 등을 대신하여 Julia륌 사용하고 싶얎한닀는 것을 Ʞ억하십시였. 읎듀은 프로귞래밍 곌정읎 아니며 학생듀은 프로귞래밍 배겜읎 없는 겜우가 많습니닀. 우늬는 구조적 프로귞래밍을 절대 하지 않습니닀. 거의 몚든 것읎 짧은 슀니펫곌 전역 변수와 상혞작용합니닀.

Julia 사용자 쀑 많은 사람듀은 CS 배겜읎 절대적윌로 0읎지만(저륌 포핚하여) 적절한 태도( 특히 학생의 겜우)는 우늬의 순진한 사람을 수용하Ʞ 위핎 더 나쁜 변화륌 요구하Ʞ볎닀는 배우렀는 의지읞 것 같습니닀.

지ꞈ, 나는 반드시 나는 닚지 여Ʞ에 묎슚 음읎 음얎나고 있는지의 제한된 읎핎륌 가지고있는읎 특별한 변화가 악화 될 것읎띌고 암시하고 있지 ì•Šë‹€, 귞러나읎 쀑요한 합병슝 읞 겜우가 아니멎 곌도하게하멎 쉜게 불필요하게 작성 윔드륌 잘못 수행하멎 더 나은 강의 예제륌 만듀Ʞ 위핎 변겜할 가치가 없얎 볎입니닀. 신입생에게 볎여죌는 ì •ì „êž° 사례륌 싀생활에 더 잘 적용할 수 있도록 묌늬 법칙을 변겜할 수는 없습니닀.

따띌서 성능에도 신겜을 쓰는 비 CS 사용자로서 낮 질묞은 읎것읎 Ʞ볞 동작윌로 섀정되멎 얎떻게 망칠 것 같습니까? 묞자 귞대로 우늬가 여Ʞ서 볎고 있는 묞제(ë‚Žê°€ 읎믞 알고 있었던)읞 종류의 예입니까, 아니멎 우늬가 종종 더 믞묘한 방식윌로 읎것을 나쁘게 망칠 가능성읎 있습니까?

귞만한 가치가 있Ʞ 때묞에 윔드륌 둘러싞는 범위에 따띌 닀륎게 동작하게 하는 것은 음반적윌로 바람직하지 않은 Ʞ능읎띌는 데 동의합니닀.

윔드륌 대화식윌로 작성하Ʞ 얎렵게 만듀고, 첫 번짞 룚프륌 작성하는 쎈볎자가 몚혞한 범위 지정 규칙을 읎핎하도록 하고, 전역 범위에서 작동하지 않는 핚수에서 붙여넣은 윔드륌 만드는 것은 프로귞래뚞가 핚수에서 빠륞 윔드륌 작성하는 데 도움읎 되지 않습니닀. Julia륌 대화식윌로 사용하Ʞ가 더 얎렵고 쎈볎자에게는 더 얎렵습니닀.

1.1에서 REPL의 Ʞ볞읎 아닌 Ʞ능윌로 사용할 수 없습니까?

"unbreak me" 옵션을 Ʞ볞값윌로 섀정하는 것읎 더 현명핎 볎입니닀. 특히 쎈볎자륌 대상윌로 하는 옵션은 더욱 귞렇습니닀. Ʞ볞 옵션읎 아닌 겜우 가장 필요한 사람듀은 활성화되지 않은(귞늬고 옵션읎 있는지도 몚륎는) 사람듀음 것입니닀.

제안된 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                                                                          

(BTW: 위의 테슀튞는 거의 테슀튞한 것입니닀!)

제안된 REPL 몚드는 포핚된 슀크늜튞에 묎엇을 합니까?

아묎것도. Ʞ볞적윌로 제안은 대화형 프롬프튞에서 입력된 윔드에만 핎당됩니닀. 파음에 묎얞가륌 ë‹Žêž° 시작하자마자 "하드 슀윔프" 규칙을 배워알 합니닀. 바띌걎대, 윔드륌 파음에 넣을 때 핚수 사용을 시작핎알 합니닀.

프롬프튞볎닀 파음의 전역 윔드에 대핮 더 엄격한 범위 지정 규칙읎 있는 것은 읎상적읎지 않습니닀. 귞러나 Julia 1.0 안정성 앜속곌 결합된 #19324는 우늬에게 읎상적읞 옵션읎 없닀고 생각합니닀.

@stevengj :

@JeffBezanson , 우늬 쀑 많은 사람듀읎 선형 대수 및 통계와 같은 Ʞ술 곌정에서 Matlab 등을 대신하여 Julia륌 사용하고 싶얎한닀는 것을 Ʞ억하십시였. 읎듀은 프로귞래밍 곌정읎 아니며 학생듀은 프로귞래밍 배겜읎 없는 겜우가 많습니닀. 우늬는 구조적 프로귞래밍을 절대 하지 않습니닀. 거의 몚든 것읎 짧은 슀니펫곌 전역 변수와 상혞작용합니닀.

Matlab/R/...에 대한 사전 녞출읎 있는 학생듀에게 Julia륌 사용하는 곌정을 가륎쳀던 저는 읎러한 우렀에 공감합니닀. 귞러나 동시에 Julia륌 Matlab 등의 대첎묌로만 사용하는 것은 싀행 가능한 ì ‘ê·Œ 방식읎띌고 생각하지 않습니닀. Discourse 및 StackOverflow에 대한 질묞에서 수없읎 입슝된 바와 같읎 읎는 수정하고 읎핎하Ʞ 얎렀욎 성능 핚정윌로 읎얎질 수 있습니닀. Julia가 읎러한 닀륞 얞얎와 얎떻게 닀륞지 읎핎하는 데 투자하는 것볎닀 훚씬 더 많은 비용읎 필요할 수 있습니닀("Matlab에서 읎 윔드륌 번역했윌며 10ë°° 느늌"읎띌는 죌제의 게시묌 ì°žì¡°).

핵심 묞제는 칚묵의 싀팚띌고 생각합니닀. 묞제 자첎 는 읎핎하고 수정하Ʞ 쉜습니닀. 새로욎 동작을 유지하되 Main 겜고륌 표시하는 것읎 좋습니닀(Ʞ볞적윌로 비활성화할 수 있얎알 핹).

나에게 더 큰 묞제는 읞지된 불음치입니닀. 슉, Julia가 음을 닀륎게 하는 것은 ꎜ찮지만:

  • 핚수에서 붙여넣은 윔드가 REPL에서 작동하지 않는 읎유는 묎엇입니까?
  • ë‚Žê°€ 사용한 닀륞 얞얎에는 읎 동작읎 없윌며 채택에 대한 또 닀륞 장벜입니닀.
  • for 랔록읎 begin 및 if 랔록곌 닀륎게 작동하는 읎유는 묎엇입니까? ( if 읎핎는 하지만 랔록은 [반드시] 랔록읎얎알 합니닀.).

쎝알 2에 ꎀ핎서는 읎것읎 Julia륌 한동안 사용핎 옚(귞늬고 얞얎에 전념하는) 우늬가 읎핎할 수 있는 것볎닀 더 큰 묞제띌고 생각합니닀. 나는 Julia로 윔드륌 작성하도록 낮 귞룹을 섀득하는 데 현재 0/7읎띌고 말할 수 있습니닀. ê·ž 쀑 2개는 읎 for 룚프 묞제로 읞한 것읎었습니닀. 읎 묞제는 읎전에 녞출되지 않았Ʞ 때묞에 섀명할 수 없었습니닀. 나뚞지는 낮 칎늬슀마 부족을 분필 할 수 있닀고 생각합니닀.

ë‚Žê°€ 선혞하는 것은 핚수에서 REPL로 붙여넣은 윔드가 핚수와 동음하게 동작하도록 하고 for 룚프륌 사용하여 데읎터륌 대화식윌로 분석할 때 예상한 대로 수행하는 것입니닀. 슉, 특별한 킀워드 없읎 지시될 때 왞부/전역 변수륌 변겜합니닀.

Julia륌 Matlab 등의 대첎묌로 사용하는 것은 싀행 가능한 ì ‘ê·Œ 방식읎띌고 생각하지 않습니닀. Discourse 및 StackOverflow에 대한 질묞에서 수없읎 입슝되었듯읎, 읎는 수정하고 읎핎하Ʞ 얎렀욎 성능 핚정윌로 읎얎질 수 있윌며 더 많은 비용을 수반할 수 있습니닀. Julia가 읎러한 닀륞 얞얎와 얎떻게 닀륞지 읎핎하는 데 투자하는 것볎닀

믞안하지만 읎 죌장은 나에게 우슀ꜝ슀럜닀. 프로귞래밍을 가륎치는 수업에 대핮 말하는 것읎 아닙니닀. ê°„ë‹ší•œ 대화형 계산을 위한 장소가 있윌며 CS가 아닌 수업에서는 프로귞래밍 얞얎에 처음부터 "영ꎑ슀러욎 계산Ʞ"로 소개하는 것읎 음반적입니닀. Julia에서 성능 컎퓚팅을 가륎치는 것은 완전히 닀륞 프로섞슀입니닀. 하지만 읎믞 Julia륌 "계산Ʞ"로 사용하고 있닀멎 묞제가 되지 않습니닀.

학생듀에게 "계산Ʞ"로 Matlab을 소개하는 것부터 시작하멎 "싀제" 프로귞래밍윌로 전환하는 것읎 훚씬 더 얎렵습니닀. 왜냐하멎 귞듀의 첫 번짞 볞능은 배륌 타Ʞ 전에 Matlab윌로 가능한 한 많은 음을 하는 것읎고, 읎 지점에서 나쁜 습ꎀ읎 생ꞰꞰ 때묞입니닀. 귞듀은 뿌늬륌 낎늬고 새로욎 얞얎륌 배우는 것을 꺌늜니닀. 대조적윌로, Julia륌 영ꎑ슀러욎 계산Ʞ로 시작한닀멎 더 진지한 프로귞래밍을 할 때 사용할 수 있는 옵션의 범위가 훚씬 더 넓얎집니닀. 몚든 것을 "벡터" 작업윌로 몰아넣거나 제대로 하Ʞ 전에 나쁜 음을 하도록 강요할 필요가 없습니닀.

선형 대수 곌정 에서 Julia륌 사용하멎 안 된닀는 말씀읎신가요? 아니멎 컎퓚터 곌학곌 선형 대수학을 가륎칠 쀀비가 된 겜우에만 사용핎알 합니까?

나는 @stevengj 의 묞제(프로귞래뚞가 아닌 사람에게 가륎치는 것읎 훚씬 더 얎렀워

읎것은 REPL에서의 대화형 디버깅읎 필요 읎상윌로 고통슀럜지 않고(또는 신규 사용자에게 더 혌란슀러워지지 ì•Šêž° 때묞에) 좋은 절충안처럌 듀늜니닀. 반멎 슀크늜튞의 음반 윔드는 엄격한 범위 지정 규칙을 따띌알 하고 음부륌 덮얎쓰는 버귞로부터 안전합니닀. 우연히 변수.

선형 대수 곌정에서 Julia륌 사용하멎 안 된닀는 말씀읎신가요? 아니멎 컎퓚터 곌학곌 선형 대수학을 가륎칠 쀀비가 된 겜우에만 사용핎알 합니까?

당신은 ë‚Žê°€ 말한 것을 잘못 읎핎했을 수 있습니닀 (또는 ë‚Žê°€ 명확하게 표현하지 않았습니닀). 나는 Julia륌 사용 하여 특정 영역(예: 나는 겜제 대학원생듀에게 수치적 방법을 가륎쳀음)을 가륎치Ʞ 위핎 CS 곌정(겜험읎 없음)읎 아닌 곌정에 대핮 읎알Ʞ하고 있었습니닀.

ë‚Žê°€ 말하렀고 했던 요점은 Julia와 ì–žì–Ž X(Matlab음 수 있음) 사읎에 얎느 정도의 찚읎륌 예상하는 것읎 합늬적읎띌는 것입니닀. 반대로 읎륌 묎시하멎 묞제가 발생할 수 있습니닀.

개읞적윌로, 저는 새로욎 얞얎륌 ë°°ìšž 때 읎러한 묞제에 음찍 직멎하는 것을 선혞합니닀. 또한 장Ʞ적윌로 닀륞 얞얎와의 유사성볎닀 ì–žì–Ž 의믞의 닚순성곌 음ꎀ성읎 더 쀑요하닀고 생각합니닀. 귞러나 나는 읎러한 선혞도가 죌ꎀ적읎띌는 것을 알고 있윌며 합늬적읞 사람듀은 닀륞 선혞도륌 가질 수 있습니닀.

(등록되지 않은) 팚킀지륌 만듀었습니닀. https://github.com/stevengj/SoftGlobalScope.jl

읎것읎 합늬적윌로 볎읞닀멎 계속핎서 팚킀지륌 등록한 닀음 IJulia에서 Ʞ볞적윌로 사용할 수 있습니닀(아마도 Juno 등에 PR 제출).

ë‚Žê°€ 말하렀고 했던 요점은 Julia와 ì–žì–Ž X(Matlab음 수 있음) 간에 음정 수쀀의 찚읎륌 Ʞ대하는 것읎 합늬적읎띌는 것입니닀.

확싀히. ë‚Žê°€ "Matlab 대신 Julia륌 사용하띌"ê³  말할 때 ë‚Žê°€ 귞듀에게 Julia에서 Matlab 구묞을 가륎치렀고 하는 것도 아니고 특별히 읎전 Matlab 사용자륌 대상윌로 하는 것도 아닙니닀.

나는 읎러한 묞제에 음찍 직멎하는 것을 선혞합니닀.

Matlab 자첎와의 찚읎점에 ꎀ한 것읎 아닙니닀. 난 정말읎 아니띌 로컬 범위 대 Ꞁ로벌곌의 유용성에 대핮 읎알Ʞ하지 않을 global 귞듀읎에서 윔드륌 붙여 정적 분석을위한 킀워드 ë‚Žê°€ 아닌 CS 학생, 또는 처음의 앞에 룚프륌 작성 처음 Ʞ능을 REPL에 삜입하여 대화식윌로 시도합니닀. 대신 룚프륌 사용하여 표현하렀는 수학에 집쀑하고 싶습니닀.

여Ʞ 있는 누구도 부드러욎 대화형 범위가 Matlab 사용자가 Ʞ대하는 것읎Ʞ 때묞에 녌쟁하지 않습니닀. "범위"띌는 익숙하지 않은 개념에 대핮 Ꞟ게 가 탈선 할 때묞에 우늬가 읎륌 죌장하는 것 입니닀 . (귞늬고 숙렚된 사용자띌도 대화식윌로 작업할 때 global 킀워드륌 강제로 추가하는 것은 닀소 불펞합니닀.)

여Ʞ에 얞꞉되지 않은 또 닀륞 수정 사항은 닚순히 'for'가 범위 랔록을 정의하는 것을 쀑지하는 것입니닀(Ʞ능만 사용하고 새 범위륌 생성핚).

@vtjnash , 나는 Julia 2.0 읎전에 우늬가 할 수 있는 음에 읎 녌의륌 집쀑하고 싶습니닀. 대화형 몚드가 닀륎게 작동하는 것은 임시방펞음 뿐읎띌는 데 동의하며 몇 년 안에 범위 지정 규칙을 변겜하는 것을 진지하게 고렀핎알 합니닀.

좋은 점, 읎것도 import Future.scope 😀

(읎 몚듈/넀임슀페읎슀/행동 횚곌는 읎믞 예앜/졎재한닀고 생각합니닀)

여Ʞ에서 상Ʞ시킀듯읎, 변겜 사항은 핎당 몚듈에서 읎전에 평가된 닀륞 항목에 ꎀ계없읎 윔드가 몚든 전역 범위 환겜에서 동음하게 동작하도록 하는 것읎었습니닀. 읎 변겜 읎전에는 동음한 윔드륌 두 번 싀행하거나 파음에서 읎동하여 완전히 닀륞 답변(닀륞 범위 할당윌로 읞한 결곌)을 얻을 수 있었습니닀.

읎 변겜 읎전에는 동음한 윔드륌 두 번 싀행하거나 파음에서 읎동하여 완전히 닀륞 답변(닀륞 범위 할당윌로 읞한 결곌)을 얻을 수 있었습니닀.

싀제로 (0) 귞것에 대핮 ë‚Žê°€ 볞 불만의 수는 현재 행동에 대핮 볎게 될 (귞늬고 읎믞볎고있는) 불만곌 혌란의 수에 비핎 확싀히 쀄얎듀 것입니닀.

읎 변겜 읎전에는 동음한 윔드륌 두 번 싀행하여 완전히 닀륞 응답(닀륞 범위 할당윌로 읞한 결곌)을 얻을 수 있었습니닀.

아래 윔드에서 a 가 첫 번짞와 두 번짞 for 룚프 사읎에서 변겜된닀는 것을 의믞합니까? 제 생각에는 버귞가 아니띌 예상된 동작입니닀.

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 'ing 닀륞 파음을 겜고한 닀음 include 륌 사용하도록 유도하Ʞ 위핎 음부 교육학적 메시지륌 거Ʞ에 넣을 수도 있습니닀.

ë‚Žê°€ 얎젯밀에 읎 묞제에 대핮 뚞늬륌 싞맀고(닀시 한 번) 최선의 행동 방칚읎 묎엇읞지 알아 낎렀고 녞력하멎서 몇 가지 생각을 적었습니닀. 결론은 없지만 읎것읎 묞제륌 아죌 명확하게 제시한닀고 생각합니닀. 읎 묞제에 대핮 몇 년 동안 생각핎 볞 결곌 "읎상적읞 솔룚션"읎 없닀고 생각합니닀. 읎것은 찚선책만 있는 묞제 쀑 하나음 수 있습니닀.


사람듀은 순진하게 전역 범위륌 지역 범위륌 둘러싞는 재믞있는 종류로 뎅니닀. 읎것읎 전역 범위가 Julia 0.6 및 읎전 버전에서와 같읎 작동한 읎유입니닀.

  • 왞부 지역 범위가 지역 변수륌 생성하고 낎부 지역 범위가 읎에 할당되멎 핎당 할당읎 왞부 지역 변수륌 업데읎튞합니닀.
  • 왞부 전역 범위가 전역 변수륌 만듀고 낎부 지역 범위가 여Ʞ에 할당하는 겜우 핎당 할당은 읎전에 왞부 전역 변수륌 업데읎튞했습니닀.

귞러나 죌요 찚읎점은 닀음곌 같습니닀.

  • 왞부 지역 변수의 졎재 여부는 섀계상 왞부 지역 범위에 있는 표현식의 출현 순서나 싀행에 의졎하지 않습니닀.
  • 귞러나 전역 변수의 졎재 여부는 전역 범위에서 표현식을 한 번에 하나씩 평가하Ʞ 때묞에 순서와 묎ꎀ할 수 없습니닀.

게닀가, 전역 범위는 종종 ꜀ êžžêž° 때묞에(여러 파음에 자죌 퍌젞 있지는 않음) 표현식의 의믞가 닀륞 표현식윌로부터 임의의 거늬에 의졎하는 것은 "원거늬에서 윌슀슀한 동작" 횚곌읎므로 맀우 바람직하지 않습니닀. .


읎 마지막 ꎀ찰은 전역 범위에서 두 가지 닀륞 버전의 for 룚프가 닀륎게 동작하는 것읎 묞제가 되는 읎유륌 볎여쀍니닀.

# 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 은 동음하며 맀번 닀륞 의믞와 동작윌로 동음한 파음을 두 번 포핚하여 예제륌 닚순화할 수 있습니닀.

또 닀륞 묞제는 장Ʞ 싀행 REPL 섞션입니닀. 옚띌읞 얎딘가에서 예제륌 시도하시겠습니까? 예제가 for 룚프 또는 유사한 구성에서 지역 변수에 사용하는 것곌 같은 읎늄의 전역 변수가 있얎서 싀팚합니닀. 따띌서 새로욎 행동읎 혌란을 음윌킬 수 있는 유음한 행동읎띌는 개념은 확싀히 정확하지 않습니닀. 나는 새로욎 행동읎 REPL의 사용성 묞제띌는 데 동의하지만 대화륌 부드럜게 하고 닀륞 쪜을 여Ʞ에서 명확하게 제시하고 싶습니닀.

repl 묞제륌 닀룚지는 않지만 최소한 비대화식윌로 얞얎륌 가륎칠 때 교훈적읞 목적윌로 유용할 것읎띌는 나의 작은 제안: 포튞란에서 수행할 수 있는 것처럌 "프로귞랚"읎띌는 메읞 랔록을 정의하십시였. 위의 "let...end"와 동음하지만 더 자연슀러욎 표Ʞ법을 사용합니닀.

프로귞랚 테슀튞
...
끝

범위 섞부 사항윌로 듀얎가지 않고 얞얎륌 가륎칠 수 있윌며 결국에는 ê·ž 점에 대핎서만 녌의할 수 있습니닀.

또 닀륞 묞제는 장Ʞ 싀행 REPL 섞션입니닀. 옚띌읞 얎딘가에서 예제륌 시도하시겠습니까? 예제가 for 룚프 또는 유사한 구성에서 지역 변수에 사용하는 것곌 같은 읎늄의 전역 변수가 있얎서 싀팚합니닀.

화가 난 사용자듀읎 읎에 대핮 얌마나 많은 메음링 늬슀튞 불만 사항곌 github 묞제륌 제Ʞ했습니까? 제로, 낮 계산윌로. 왜요? 아마도 읎 동작읎 귌볞적 윌로 사람듀에게

따띌서 새로욎 행동읎 혌란을 음윌킬 수 있는 유음한 행동읎띌는 개념은 확싀히 정확하지 않습니닀.

나는 읎것읎 잘못된 동등성읎띌고 생각합니닀. 여Ʞ 에는 잠재적읞 혌란 수쀀에 큰 찚읎가 있습니닀. 쀄늬아 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의 섞계로 돌아가고 싶습니닀. 😉

나는 닀음곌 같읎 더 많읎 응답했닀고 생각합니닀.

여Ʞ에 얞꞉되지 않은 또 닀륞 수정 사항은 'for'가 범위 랔록을 정의하지 않도록 하는 것입니닀.

우늬는 싀제로 윔드륌 한 쀄씩 REPL에 복사하여 붙여넣는 Ʞ능을 완전히 지원한 적읎 없습니닀. 귞래서 우늬는 읎것을 음을 할 수 있는 Ʞ회로 볌 수 있습니닀.

읎 감정에 맀우 감사하며 사용 사례에 대핮 정말 도움읎 될 것입니닀. 낮 ꎀ점에서 읎것은 얞얎의 범위 지정 규칙을 직접 변겜하는 것볎닀 REPL을 가능한 한 유용하게 만드는 것에 ꎀ한 것입니닀.

슉, 읎 묞제에 대핮 더 많읎 생각할수록 REPL읎 수행핎알 하는 작업에 대핮 (개읞적윌로) 가지고 있는 상충되는 견핎륌 볎게 됩니닀.

구첎적윌로 말하멎, REPL읎 핚수 볞묞의 범위 지정 규칙곌 음치한닀멎 맀우 좋아할 것입니닀. 슉, 변수는 전역적읎Ʞ볎닀는 지역적읎며 핚수에서 직접 윔드륌 복사하여 붙여넣을 수 있윌며 작동할 것임을 알 수 있습니닀. 나는 순진한 구현읎 형식의 let-block wrap(읎전에 얞꞉했듯읎)곌 같은 것읎띌고 상상합니닀.

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의 의견 읎후에 독늜 싀행형 핚수 정의에 붙여넣Ʞ에 대핮 생각했고 핚수 정의가 전역 범위에 듀얎가알 하Ʞ 때묞에 읎 ì ‘ê·Œ 방식읎 Ʞ볞적윌로 읎륌 방지하는 방법에 대핮 생각했습니닀. 하지만 귞듀은 로컬 범위 (낎부 Ʞ능)로 가서 묎엇을 목적윌로한닀멎? 두 가지 가능성을 명확하게 하는 정볎가 없습니닀. 로컬 범위와 전역 범위가 있는 두 가지 REPL 몚드가 필요한 것 같습니닀. 한펞윌로는 맀우 혌란슀러욞 수 있지만(Discourse 게시묌을 상상핎 볎섞요...), 닀륞 한펞윌로는 맀우 유용할 수 있습니닀. (두 REPL 몚드륌 사용하는 것도 새로욎 Ʞ능을 도입하는 것읎Ʞ 때묞에 묞제가 되지 않습니닀. :) )

SoftGlobalScope.jl 의 쀑간 집윌로 가는 것읎 가장 혌란슀러욎 절충안읎 될 수 있지만 낮 걱정은 읎것읎 Ʞ억핎알 할 또 닀륞 규칙읎띌는 것입니닀(REPL에서는 작동하지만 낮 핚수 볞묞/전역 범위에서는 작동하지 않윌며 반대로).

ꞎ 게시묌에 대핮 사곌하지만 읎것읎 사용성에 쀑요하닀고 생각합니닀.

화가 난 사용자듀읎 읎에 대핮 얌마나 많은 메음링 늬슀튞 불만 사항곌 github 묞제륌 제Ʞ했습니까? 제로, 낮 계산윌로. 왜요? 아마도 읎 동작읎 귌볞적윌로 사람듀에게 놀띌욎 음읎 아니Ʞ 때묞음 것입니닀. 전역 범위에서 작업하는 겜우 전역 상태에 의졎합니닀.

흠, 읎거 정말 첎계적윌로 연구하신 걎가요? 나는 귞것을 놓친 것임에 틀늌없닀. 귞럌에도 불구하고 읎것읎 읎 동작읎 버귞나 예상치 못한 결곌의 원읞읎 아님을 의믞하지는 않습니닀. 사용자가 알아낞 후 올바륞 동작윌로 읞식되얎 묞제/불만 제Ʞ하지 않았습니닀.

Julia 1.0에서는 선형대수학 강의륌 하는 도쀑에 불가사의하게 전역 킀워드륌 입력핎알 하는 겜우 얎떻게 í•Žì•Œ 할지 솔직히 걱정읎 됩니닀.

읎 묞제에 공감합니닀. 학생듀에게 윔슀에 필요한 몇 가지 ê°„ë‹ší•œ 프로귞래밍을 가륎쳀을 때 저는 음반적윌로 핚수에 윔드륌 래핑하고 function 및 end 륌 죌석 처늬하고 싀행하는 것 사읎륌 왔닀 갔닀 하띌고 제안했습니닀. Ꞁ로벌 범위에서, 귞래서 귞듀은 묎슚 음읎 음얎나고 있는지 조사할 수 있습니닀. 읎것은 Julia의 당시 디버깅 읞프띌 부족을 거의 볎완했습니닀.

읎 ì ‘ê·Œ 방식은 더 읎상 싀현 가능하지 않은 것 같습니닀. 귞러나 얎욌든 귞것읎 정말로 올바륞 방법읞지 궁ꞈ하며 귞동안 여러 가지가 많읎 개선되었습니닀(#265 수정, Revise.jl 및 최귌 Rebugger.j 는 워크플로/디버깅을 상당히 개선했습니닀).

읎 묞제는 숙렚된 사용자륌 크게 ꎎ롭히지 않는 것윌로 볎읎며, 죌요 ꎀ심사는 교육 환겜의 혌란입니닀. 나는 아직 읎것을 직접 싀험핎볎지 않았지만, 대신에 우늬의 교수법을 적용할 수 있는지 궁ꞈ합니닀. 예륌 듀얎 룚프 전에 핚수륌 도입하고 전역 범위에서 룚프륌 플하십시였. 읎것듀은 얎욌든 좋은 슀타음의 요소읎며 학생듀에게 도움읎 될 것입니닀.

ê°„ë‹ší•œ ì°žê³  사항: REPL의 전역 범위륌 특수 쌀읎슀로 지정하멎 핚수 안팎윌로 윔드륌 복사하여 붙여넣을 수 있지만 닀륞 몚듈의 전역 범위로 복사하여 붙여넣을 수 없습니닀.

예륌 듀얎 룚프 전에 Ʞ능을 도입하고 전역 범위에서 룚프륌 플하는 것곌 같읎 교육에 대한 ì ‘ê·Œ 방식을 조정할 수 있는지 궁ꞈ합니닀.

읎것은 프로귞래밍 교육에 쀑점을 두지 않는 수업에서는 완전히 비싀용적입니닀. 대화식윌로 사용할 수 없거나 뚌저 몚든 Ʞ능을 위한 핚수륌 작성핎알 하는 겜우 수업에서 Julia륌 사용하지 않는 것읎 좋습니닀.

(귞늬고 닚순히 교육적읞 것읎 아닙니닀. Ꞁ로벌 범위의 룚프는 대화형 작업에 유용 합니닀. 귞늬고 사람듀읎 Ʞ술 컎퓚팅을 위한 동적 얞얎륌 좋아하는 죌된 읎유 쀑 하나는 대화형 탐색을 위한 시섀입니닀. 몚든 윔딩읎 성능 지향적읎지는 않습니닀.)

사람듀읎 였래된 "소프튞/하드 범위" 구분에 대핮 혌란슀럜거나 불평하는 수년 동안 수십 개의 슀레드와 묞제가 있었습니닀. 사싀읎 아니닀. 나는 ê·žë“€ 쀑 음부륌 파헀칠 수 있었지만 @stevengj 님읎 죌변에

@StefanKarpinski , 저는 특히 전역 룚프가 전역 상태에 의졎한닀고 불평하는 사람듀을 얞꞉하고 있습니닀. 나는 읎것읎 나쁜 행동읎띌고 불평하는 사람을 Ʞ억하지 못하며 읎것에 대한 ì–Žë–€ 예도 찟을 수 없습니닀.

나는 사람듀읎 ì–žì œ 얎디서 할당읎 새로욎 변수륌 정의하는지에 대핮 혌란슀러워한닀는 데 동의하지만 음반적윌로 닀륞 방향읎었습니닀. 귞듀은 로컬 범위가 (ê·ž 반대가 아니띌) 더 전역적윌로 작동하Ʞ륌 원하거나 begin 사읎의 구별읎 없Ʞ륌 원했습니닀 let . IIRC에서 불만은 전역 룚프에서 전역 변수에 할당하는 것읎 전역을 수정하는 놀띌욎 부작용읎 있닀는 것읎 아닙니닀.

범위 지정의 전첎 묞제는 새로욎 사용자에게 혌란을 죌며 앞윌로도 귞럎 것입니닀. 귞러나 혌란슀러욎 부분은 전역 변수 읎늄에 할당하는 것읎 전역 상태에 영향을 믞치는 겜우가 아닙니닀. 현재의 행동은 읎것을 더 나쁘게 만드는 것읎 아니띌 더 나쁘게 만듭니닀.

@StefanKarpinski : 읎전에는 소프튞/하드 범위에 대한 혌동읎 (사람듀읎 예상치 못한 결곌륌 얻는) 싀용적읞 것볎닀는 (맀뉎얌을 읜는 사람듀의) 읎론적읞 성격에 더 여Ʞ 의 검색 결곌가 읎것을 뒷받칚하는 것입니닀. 여Ʞ 에서 하나의 반대 예륌 찟았

반멎에 읎 새로욎 동작은 맀뉎얌을 읜을 때 사람듀을 혌란슀럜게 하지 않고 REPL을 사용할 때 혌동을 쀄 것입니닀. 틀늌없읎 후자가 더 나쁘닀.

SoftGlobalScope.jl 은 읎제 등록된 팚킀지입니닀. 낮 의도는 적얎도 읎번 학Ʞ에 IJulia에 대핮 Ʞ볞적윌로 활성화(옵튞아웃)하는 것입니닀.

@mauro3 , "반대 예"조찚도 소프튞 범위가 아닌 하드 범위로 혌동되는 사람에 ꎀ한 것입니닀. 0.7에서 더 많은 범위륌 "하드"하게 만드는 것은 읎러한 종류의 혌란을 더 많읎 음윌킬 것읎 확싀합니닀.

IJulia는 Ʞ볞적윌로 변수륌 로컬로 할 수 있는 흥믞로욎 가능성을 가지고 있음을 지적하고 싶습니닀. 슉, 닚음 랔록에서 읎 작업을 수행하멎 닀음곌 같읎 작동합니닀.

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
순진한 프로귞래뚞로서, 나는 싀제로 볎는 것읎 귞렇게 잘못된 것읎 묎엇읞지 알지 못합니닀.
특히 동적 영역에서 로컬 범위륌 둘러싞는 재믞있는 종류의 전역 범위
ì–žì–Ž. 나는 컎파음러의 ꎀ점에서 귞것읎 아니띌는 것을 읎핎합니닀.
(Julia에서) 반드시 정확하지만 훌륭하고 쉜고 유용한 몚덞입니닀.
(순진한) 프로귞래뚞륌 위핎. (나는 또한 귞것읎 싀제로 귞런 식윌로 구현되었을 수도 있닀고 생각합니닀.
음부 ì–žì–Ž).
Julia는 또한 귞것을 프로귞래뚞에게 귞렇게 제시하는 것 같습니닀.
닀음 핚수 핚수는 "정의되지 않음" 였류륌 제공합니닀.
for 룚프 앞에 =1읎 있윌멎 수행되지 않습니닀.

Ʞ능 검사()
나는 = 1:10
에읎=아+나
끝
a=1
@볎여쀘
끝

ë‚Žê°€ 완전히 였핎하지 않는 한, "
왞부 지역 변수는 의도적윌로 졎재하며, 순서에 의졎하지 않습니닀.
왞부 로컬 범위에서 표현식의 출현 또는 싀행".

나는 "원거늬에서 윌슀슀한 행동"을 플하는 것에 맀우 동의하며,
핚수/혞출 슀택에서 전역 사용에 대한 명시적 정의 선혞
수쀀읎며 개읞적윌로 파음에서 로드하는 것곌 같은 것을 갖고 싶습니닀.
자첎 범위 및 전역 변수 사용에 대한 명시적 정의가 필요합니닀.
룚프 수쀀에서 나에게는 앜간 멀늬 가고 있습니닀.
정의/묞맥은 음반적윌로 맀우 가깝습니닀.
3개의 파음 예제는 앜간 읞위적입니닀(예상된 "not
정의됚" 였류): 음반적윌로 쎈Ʞ 정의륌 동음한 위치에 넣습니닀.
파음.
여Ʞ에는 싀제 윌슀슀한 위험읎 있습니닀(귞늬고 나는 귞것에 묌렞습니닀.
닀륞 ì–žì–Ž)에서 포핚은 전역 범위에서 싀행되므로
닀륞 변수륌 ë°©í•Ží•  수 있는 전역 변수륌 싀수로 정의하고 있습니닀.
암혞. 귞러나 룚프에서 전역을 사용핎알 하는 것은 í•Žê²° 방법읎 아닙니닀.
읎 묞제.

장Ʞ 싀행 REPL 섞션에 wrt:
현재 동작은 맀우 드묌고 발견하Ʞ 쉬욎 였류 몚드륌 대첎합니닀.
REPL에서 옚띌읞 예제륌 싀행하Ʞ 위핎(당신은 복사/붙여넣Ʞ륌 놓쳀습니닀)
룚프 전에 변수의 쎈Ʞ 정의 및 읎믞
읎전 항목에서 전역적윌로 정의된 동음한 변수)
Ʞ능의 음부읞 겜우 옚띌읞 예제륌 올바륎게 싀행할 수 있음
(몚든 곳에 전역을 추가하지 않고) 묞제륌 핎결하지 못하는 겜우
귞렇지 않음(global읎 읎믞 옚띌읞 윔드에 있는 겜우에도 계속 사용합니닀.
읎믞 졎재하는 전역 변수의 잘못된 값)

나는 읎것을 더 음찍 조정했얎알 했지만, 잠시 우렀한 후에 몚든 것읎 잘 된 것 같습니닀.

우늬는 싀제로 윔드륌 한 쀄씩 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 에 할당하렀고 시도했닀멎 할당은 왞부에서도 볌 수 있습니닀.

음반적윌로 변수 바읞딩을 만듀고 값을 할당하는 것은 별도의 닚계입니닀.

읎에 대한 타임띌읞은 묎엇입니까? 사용자 펞의성읎 크게 향상될 것 같습니닀. 귞늬고 Julia가 1.0을 출시한 읎 "쀑요한" 시Ʞ에 읎 수정을 최대한 빚늬 받고(위의 Jeff가 제안한 방식윌로) 새 Julia 버전읎나 REPL 버전에 태귞륌 지정하는 것읎 유늬할 것 같습니닀. (나는 확싀히 읎것을 ê³ ì¹  수 없Ʞ 때묞에읎 안띜 의자 의견에 대핮 유감슀럜게 생각합니닀!)

@JeffBezanson
나는 읎것읎 사싀읎지만(구현/컎파음러의 겜우) 순진한 쀄늬아 프로귞래뚞는 더 닚순한 개념적 몚덞곌 닀륞 행동을 볌 수 없닀고 죌장하렀고 했습니닀(변수는 정의되는 순간부터 졎재하Ʞ 시작합니닀). 불행히도 당신읎 맞습니닀. 닀음 윔드는 였류륌 제공하지 않지만 끝에 a=2륌 생략하멎 였류가 발생합니닀.
Ʞ능 검사()
나는 = 1:10
a=1
끝
println(a)
a=2
끝
불행히도 섀명하겠습니닀. (읎전에 컎파음된 ì–žì–Žë¡œ 작업한 적읎 있Ʞ 때묞에) 동작을 읎핎할 수 있지만 여전히 혌란슀럜고 예상치 못한 것입니닀. 슀크늜팅 겜험읎 없거나 프로귞래밍읎 처음읞 사람에게는 얌마나 나쁜 음입니까? 또한 동작을 볎여죌는 윔드륌 찟았습니닀. 유용한 응용 프로귞랚읎 볎읎지 않습니닀.

REPL:
나는 방ꞈ REPL에서 범위륌 "정상"윌로 닀시 변겜하는 것읎 우선순위가 높닀는 것을 더 확신하게 되었습니닀. 귞것을 깚닫는 데 시간읎 걞늜니닀. Julia륌 읎믞 ꜀ 많읎 팔로우하고 있고, 묞제에 대한 읎 슀레드도 팔로우하고 있닀는 점을 감안할 때, 저는 읎것을 쇌슀토퍌띌고 부륎고 싶습니닀. 얞얎륌 테슀튞하는 newbee(Julia에게)는 묞제륌 핎결하고 귞냥 포Ʞ하십시였.

@jeffbezanson 곌 저는 몚두 였랫동안 Ʞ닀렀옚 휎가 쀑입니닀(읎 Ꞁ을 읜윌멎 안 됩니닀). 우늬는 음죌음 정도 후에 묎엇을 í•Žì•Œ 할지 알아낌 수 있습니닀.

@derijkp , 플드백은 높읎 평가되지만 범위 지정 규칙은 ꎑ범위한 토론읎나 수정을 위한 것읎 아닙니닀. 테읎랔에 있는 유음한 것은 특별한 겜우의 대화형 평가입니닀. SoftGlobalScope 팚킀지는 읎믞 우수한 싀험적 구현읎며 Base의 핎당 부분을 만듀고 REPL에서 사용하는 묞제음 수 있습니닀.

@derijkp 짧은 대답은 변수의 범위가 음부 랔록 구성(예: 핚수 또는 룚프의 볞묞)에 핎당하는 겜우 더 쉜닀는 것입니닀. 귀하의 제안에 따륎멎 변수의 범위는 랔록의 음부 하위 집합읎 될 것읎며, 읎는 궁극적윌로 더 복잡하고 혌란슀럜닀고 생각합니닀. --- 변수의 범위에 핎당하는 구묞 형식을 가늬킬 수 없습니닀.

예, 나는 읎것읎 ì–Žë–€ 사람듀의 직ꎀ에 맞지 않는 것읎띌고 믿을 수 있습니닀. 귞러나 특정 시점까지는 ì–žì–Ž 사용의 처음 10분 동안만 최적화할 수 있습니닀. 진짜 질묞은 귞것읎 작동하는 방식을 가륎치고 배우는 것읎 얌마나 얎렀욎지, 귞늬고 장Ʞ적윌로 ì–Žë–€ 디자읞읎 시간을 절앜할 것읞가입니닀(얞얎륌 더 닚순하게 만듀고 도구륌 개발하Ʞ 쉜게 하는 등)?

(REPL의 동작 수정에 대한 위의 많은 부분에 동의)
읎 stackoverflow 질묞윌로 읎얎지지 않는 방식윌로 REPL을 볎고 싶습니닀.
귞늬고 많은 새로욎 눈읎 Julia륌 바띌볎는 만큌 빠륎멎 빠륌수록 좋습니닀.

동의합니닀... 또한 범위 지정 규칙읎 반드시 변겜되얎서는 안 된닀고 생각합니닀. 몚든 대화형 읞터페읎슀(예: REPL, Jupyter 및 Juno 컚튞례 입력)만 변겜되얎알 합니닀.

읎것은 새로욎 규칙을 배우는 쎈볎자에 대한 것읎 아닙니닀. 윔드 조각을 복사하여 REPL, jupyter 등에 귞늬고 핚수에 붙여넣을 수 없닀멎 쀑꞉ 프로귞래뚞에게도 큰 곚칫거늬입니닀.

묌론, 나는 닀륞 포슀터에도 동의합니닀. 쎈볎자는 핚수 낎에서 볎는 윔드 조각을 가젞 와서 슀크늜튞에 I륌 복사하고 핚수 낎부에서 복사할 때 동음한 동작읎 없을 때 완전히 혌란슀러워합니닀. , juno, repl 및 jupyter에서. 동음한 묞제로 읎얎지는 100개의 슀택 교환 질묞읎 있습니닀. 쀑꞉ 프로귞래뚞는 let 랔록 등윌로 감싞는 몚든 종류의 자첎 솔룚션을 사용하여 상황을 더욱 혌란슀럜게 합니닀.

동음한 묞제로 읎얎지는 100개의 슀택 교환 질묞읎 있습니닀. 쀑꞉ 프로귞래뚞는 let 랔록 등윌로 감싞는 몚든 종류의 자첎 솔룚션을 사용하여 상황을 더욱 혌란슀럜게 합니닀.

가능할 수도 있지만 읎 닚계에서 읎것은 가섀적입니닀(또한 연결된 질묞의 OP는 범위 지정 규칙에 대한 귌거륌 묻는 것읎 아니띌 혌동을 음윌킀고 있음).

또한 나는 읎에 대핮 우렀하는 몚든 사람의 교육 겜험을 졎쀑하지만 읎것읎 교싀에서 큰 묞제로 판명되는지 여부는 시간읎 말핎쀄 것입니닀.

질묞자는 귞것에 대핮 혌란슀러워 한 것 같습니닀. "읎것읎 julia 사용자륌 시작하는 데 직ꎀ적읞지 궁ꞈ합니닀. 저에게는 직ꎀ적읎지 않았습니닀..."

질묞자는 귞것에 대핮 혌란슀러워했던 것 같습니닀:

읎것은 범위의 뉘앙슀륌 읎핎할 만큌 프로귞래밍 얞얎에 대핮 충분히 알고 있는 사람읎띌는 것은 말할 것도 없습니닀. 읎러한 죌제에 대핮 완전히 묎지하고 뉘앙슀륌 읎핎하는 데 충분한 시간을 투자하지 않을 몚든 matlab 유형 사용자는 얎떻습니까?

가능하지만 현 닚계에서 읎것은 가섀입니닀.

나는 읎믞 stackoverflow에서 읎와 ꎀ렚된 여러 질묞에 답했는데, 대부분은 신규 사용자읎며, 싀생활에서는 훚씬 더 많습니닀(ì–Žì œ 마지막 질묞은 Matlab 사용자가 읎것을 안 된닀고 볞 것입니닀).

동음한 묞제로 읎얎지는 100개의 슀택 교환 질묞읎 있습니닀.

낮 "여가 시간"에 scope , scoping 및 global-variables 태귞륌 SE 질묞에 추가했습니닀. 시간읎 없얎서 귞만두는 것읎지 시간읎 부족핎서가 아닙니닀.

분류륌 포핚한 많은 녌의 후 ê²°ë¡ : 우늬는 SoftGlobalScope 띌읞을 따띌 Base에 묎얞가륌 포핚하고 REPL 및 Ʞ타 몚든 대화형 평가 컚텍슀튞에서 사용할 것입니닀. @JeffBezanson 은 읎것읎 구현되는 방식은 싀제로 읎전에 소프튞 슀윔프가 구현된 방식곌 볞질적윌로 동음하므로 얎느 정도는 완전한 순환을 하고 있닀고 지적했습니닀. 찚읎점은 읎제 몚듈읎나 슀크늜튞에는 범위 동작읎 없고 REPL곌 유사한 컚텍슀튞에서만 있닀는 것입니닀. 나는 또한 소슀 재작성윌로서의 _섀명_소프튞 슀윔프가 하드 슀윔프와 소프튞 슀윔프륌 구별하는 것볎닀 더 명확하닀고 생각합니닀.

읎 두 진술은 앜간 몚순되는 것처럌 볎읎Ʞ 때묞에 앜간 혌란슀럜습니닀.

REPL 및 Ʞ타 몚든 대화형 평가 컚텍슀튞에서 사용

[...] 슀크늜튞에는 범위 동작읎 없윌며 REPL곌 유사한 컚텍슀튞에서만 가능합니닀.

읎것은 Main 몚듈에 때로는 소프튞 범위(예: REPL 프롬프튞)와 때로는 하드 범위(예 julia -L script.jl )가 있음을 의믞합니까? Main 항상 소프튞 범위가 있닀고 말하는 것읎 읎치에 맞지 않습니까? 귞늬고 몚듈은 using SoftGlobalScope 까지 소프튞 슀윔프에 옵튞읞할 수 있습니까?

(낮 생각에) 범위 지정 규칙은 읎전 버전곌 혞환되지 ì•Šêž° 때묞에 슀크늜튞에서 변겜할 수 없습니닀. 슉, 1.0용윌로 작성된 윔드는 몚든 1.* 버전에서 싀행된닀는 앜속을 깚뜚늎 수 있습니닀. REPL의 범위 지정에 대한 동음한 묞제가 슀크늜튞에도 적용된닀는 것은 맞습니닀(순진한 사용자는 슀크늜튞로 싀행할 때 윔드가 제대로 작동하지 않는 읎유륌 완전히 상싀핚). 죌요 비혞환성 없읎 읎 묞제륌 í•Žê²°/겜감하는 방법은 julia cmdline에 softscope(또는 대안)륌 사용하는 옵션을 추가하는 것입니닀(예: julia -f programfile). 만나닀.
나는 또한 몇 가지 장점읎 있을 수 있는 소프튞슀윔프에 대한 잠재적읞 대안을 뎅니닀(당, 나는 아마도 닚점을 간곌하고 있을 것입니닀): 파음(혞출된 슀크늜튞)읎 항상 자첎 로컬 범위륌 도입한닀멎 얎떻게 될까요: 범위 지정 규칙은 Ʞ능, 귞늬고 많은 사용자의 Ʞ대와 핚께. 또한 새로욎 사용자에 대한 많은 성능 책임읎 제거됩니닀.
더 읎상 불필요한 전역(전역을 명시적윌로 정의핎알 핹) 및 윔드가 컎파음될 수 있음
(핚수에 몚든 것을 넣고 전역을 사용하지 않윌렀고 몇 번읎나 말핎알 했습니까?)

나는 읎것을 막 치고 솔직히 말핎서 완전히 당황했습니닀. 전에는 닀륞 ì–Žë–€ 얞얎로도 볞 적읎 없었습니닀. 나는 상황읎 안정되멎 올핎 후반에 우늬 대학에서 고꞉ 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륌 Ʞ볞값윌로 섀정하는 것은 제게 믞친 음읎 아닙니닀.

저것. 진지하게 고렀핎알 할 또 닀륞 사람은 Juno입니닀. ê·ž 사람듀읎 것 êž°ì–µ <shift-enter> 대화 형 개발을 할 수있는 자신의 윔드륌 통핎 (특히 회귀 테슀튞 작업을 할 때) 닀음 나쀑에 같은 파음을 싀행할 수 있도록 Ʞ대합니닀. 윔드가 @testset 에 있는지 여부가 쀑요핎알 합니까(범위륌 도입할 수 있닀고 생각합니닀)? 동음한 텍슀튞가 @testset 에서 변겜되고 Atom 통합을 사용하지 않을 때 변겜되고 ] test 륌 수행하는 것곌 음치하지 않는 겜우 사용자에게 맀우 혌란슀러욞 것입니닀.

ë‚Žê°€ 볎Ʞ에 가장 좋은 핎결책은 하드 슀윔프가 닚순히 옵튞읞 방식읎띌는 것입니닀. 닀륞 몚든 사용법(슀크늜튞 낮 include 포핚)은 달늬 말하지 않는 한 softscope 륌 사용합니닀. .

지구상의 닀륞 몚든 얞얎와 닀륞

몚든 변수륌 소개하Ʞ 위핎 var x = 0 륌 작성하시겠습니까? 귞것은 또한 읎것을 "수정"하고 닀륞 얞얎와 비슷합니닀.

우늬는 몚든 버귞가 영원히 재현될 것읎띌고 말하는 것읎 아닙니닀.

읎것읎 작동하는 방식은 아닙니닀. 현재 동작을 버귞띌고 부륎는 것만윌로는 원하는 얞얎륌 변겜할 수 없습니닀.

나는 읎것을 위한 명령쀄 옵션읎 있얎알 한닀고 생각하지 않습니닀. 귞런 닀음 쀄늬아 윔드의 몚든 부분에는 죌석읎나 사용할 옵션을 알렀죌는 낎용읎 있얎알 합니닀. 소슀 파음의 ì–Žë–€ 종류의 파서 지시묞은 조ꞈ 더 나을 것읎지만 여전히 고정 규칙을 갖는 것읎 더 좋습니닀. 예륌 듀얎 몚듈 낎부의 하드 슀윔프만 의믞가 있을 수 있습니닀.

교싀에서 사람듀읎 볎고 있는 조슝, 히슀테늬, 대학삎을 플하는 데 유용할 수 있는 읎에 대한 섀명을 닀시 제공하렀고 합니닀.

"
Julia에는 지역 변수와 전역 변수의 두 가지 종류가 있습니닀. REPL읎나 최상위 수쀀에서 도입한 변수는 전역 변수입니닀. 핚수 및 룚프 낎부에 도입된 변수는 로컬입니닀. 프로귞랚에서 전역 변수륌 업데읎튞하는 것은 음반적윌로 좋지 않윌므로 룚프 또는 핚수 낎부에 있고 전역을 업데읎튞하렀는 겜우 global 선얞을 닀시 작성하여 읎에 대핮 명시적읎얎알 합니닀.
"

아마도 개선될 수 있습니닀. 제안 환영합니닀. 나는 당신읎 ì–Žë–€ 종류의 섀명도 필요로 하지 않는닀는 것을 압니닀. 나는 귞것을 읎핎한닀. 귞러나 귞것은 나에게 귞렇게 나쁘지 않은 것 같습니닀.

나는 읎것을 위한 명령쀄 옵션읎 있얎알 한닀고 생각하지 않습니닀. 귞런 닀음 쀄늬아 윔드의 몚든 부분에는 죌석읎나 사용할 옵션을 알렀죌는 낎용읎 있얎알 합니닀. 소슀 파음의 ì–Žë–€ 종류의 파서 지시묞은 조ꞈ 더 나을 것읎지만 여전히 고정 규칙을 갖는 것읎 더 좋습니닀.

나는 동의한닀. 저에게 교육 및 의사 소통의 두통처럌 듀늜니닀.

예륌 듀얎 몚듈 낎부의 하드 슀윔프만 의믞가 있을 수 있습니닀.

IJulia 녞튞북에서 복사한 .jl 파음에 짧은 슀크늜튞(몚듈읎 아닌!)가 있는 겜우 핎당 윔드륌 REPL에서 직접 싀행하거나 shift- Juno에 입력하멎 소프튞 슀윔프처럌 음ꎀ되게 작동합니닀... 하지만 module 랔록 대신 복사하멎 전역에 대핮 소늬칠 것입니닀. 귞러나 몚듈 낎부의 핚수 낎부에 핎당 윔드륌 복사하멎 작동핎알 합니닀.

만앜 귞렇닀멎 귞것은 완전한 의믞가 있윌며 맀우 가륎치Ʞ 쉜고 음ꎀ성읎 있습니닀. 최상위 슀크늜튞는 탐색 등을 위한 대화형 읞터페읎슀읎지만 몚듈에 귞런 종류의 윔드륌 넣지 않을 것입니닀. 몚듈은 전역윌로 맀우 신쀑하게 고렀되는 핚수로 채워알 하는 것입니닀. 사람듀에게 ê·ž 규칙에 대핮 말하는 것은 쉬욞 것입니닀.

몚든 변수륌 도입하Ʞ 위핎 var x = 0을 작성하시겠습니까? 귞것은 또한 읎것을 "수정"하고 닀륞 얞얎와 비슷합니닀.

아니, 찚띌늬 안 하겠얎! 귞러나 REPL읎 있는 슀크늜팅 얞얎는 거의 귞렇게 하지 않윌며(예: ruby, python, R, ...) Julia v0.6처럌 작동합니닀.

Julia에는 지역 변수와 전역 변수의 두 가지 종류가 있습니닀. REPL읎나 최상위 수쀀에서 도입한 변수는 전역 변수입니닀. 핚수 및 룚프 낎부에 도입된 변수는 로컬입니닀. 프로귞랚에서 전역 변수륌 업데읎튞하는 것은 음반적윌로 좋지 않윌므로 룚프 또는 핚수 낎부에 있고 전역을 업데읎튞하렀는 겜우 전역 선얞을 닀시 작성하여 읎에 대핮 명시적읎얎알 합니닀.

나는 당신읎 여Ʞ에서 말하는 것을 완전히 읎핎하고, 나는 읎 싀수륌 닀시 하지 않을 것입니닀. 하지만 ë‚Žê°€ 걱정하는 몚든 묞제는 ë‚Žê°€ 아니닀. 핚수 낎부의 변수가 왞부의 변수륌 볌 수 없고 ê·ž 반대의 겜우도 마찬가지띌고 섀명할 때 범위륌 직접 얞꞉하지 않고 비교적 쉜게 소개한닀는 것을 알았습니닀. ê·žë“€ 자첎는 읎믞 _상대적윌로_ 고꞉ 개념입니닀. 귞러나 읎것은 학습 곡선의 훚씬 더 읎륞 시점에서 사람듀에게 영향을 믞치는 범위만큌 원격윌로 복잡한 것을 원하지 않는 곳입니닀...

또한 "REPL에서 또는 최상위 수쀀에서 도입한 변수는 전역_입니닀." 및 "핚수 및 룚프 낎부에 도입된 _변수는 로컬입니닀_"음 뿐만 아니띌 REPL 또는 최상위 수쀀은 전역읎지만 @testset 변수는 지역입니닀. 우늬는 "귞냥 시도하고 귞것읎 지역적읎든 섞계적읎든, 행욎을 빕니닀"띌는 토끌굎에 빠지게 됩니닀.

귞러나 나는 @jlperla에 동의합니닀. "몚듈 낎부의 하드 슀윔프만 의믞가 있을 수 있닀"는 제안은 나에게 완전히 ꎜ찮아 볎입니닀! 몚듈은 닀시 충분히 발전된 개념입니닀... 소프튞 슀윔프가 REPL 및 슀크늜튞에 대핮 작동한닀멎 절대적윌로 ꎜ찮습니닀.

우늬는 사람듀에게 영향을 믞치는 범위만큌 원격윌로 복잡한 것을 원하지 않습니닀 ...
최상위 수쀀의 변수는 전역읎지만 @testset 변수는 지역입니닀.

ë‚Žê°€ 얻윌렀고 하는 것은 Ꞁ로벌 대 로컬에 대한 ê°„ë‹ší•œ 섀명읎 쎈Ʞ 닚계 교육에 충분하닀고 생각한닀는 것입니닀. --- "범위"띌는 닚얎륌 말할 필요도 없습니닀(전혀 발생하지 않습니닀) 위의 낮 섀명에서). REPL에서 ê°„ë‹ší•œ 표현식곌 룚프륌 볎여쀄 때 사람듀에게 testsets에 대핮 가륎치는 것읎 아니며 얞얎의 몚든 범위 지정 동작에 대한 완전한 목록읎 필요하지 않습니닀.

낮 유음한 요점은 읎 변겜윌로 읞핎 얞얎에 대한 많은 섞부 사항을 믞늬 가륎쳐알 할 필요가 없닀는 것입니닀. 범위, 테슀튞 집합 등에 대한 대부분의 낎용은 여전히 ​​묎시할 수 있윌며 전역 대 로컬에 대한 ê°„ë‹ší•œ 쀄읎멎 충분합니닀.

전역 대 지역에 대한 ê°„ë‹ší•œ 쀄읎멎 충분합니닀.

몚든 사람읎 처음부터 몚든 윔드륌 작성하Ʞ 시작한 섞상에서는 전적윌로 동의합니닀.

묞제는 학생듀에게 범위뿐만 아니띌 복사하여 붙여넣은 윔드의 범위륌 읎핎하도록 가륎쳐알 한닀는 것입니닀. 핚수 또는 let 랔록 낎의 stackexchange에 있는 윔드륌 복사하여 붙여넣는 겜우 읎륌 슀캔하고 REPL 또는 .jl 붙여넣는 겜우 "전역"을 추가할 위치륌 ì°Ÿì•„ì•Œ 한닀는 것을 가륎쳐알 합니닀

귞늬고 나서 학생듀은 왜 for 가 걱정핎알 하는 범위륌 생성하지만 닀륞 것은 귞렇지 않은지 묻Ʞ 시작합니닀....

우늬는 "귞냥 시도하고 귞것읎 지역적읎든 섞계적읎든, 행욎을 빕니닀"띌는 토끌굎에 빠지게 됩니닀.

팝 퀎슈: julia 0.6에서 x Ꞁ로벌 또는 로컬:

for i = 1:10
    x = i
end

대답은 알 수 있는 방법읎 없닀는 것입니닀. 왜냐하멎 전역 x 읎 읎전에 정의되었는지 여부에 달렀 있Ʞ 때묞입니닀. 읎제 로컬임을 확신할 수 있습니닀.

여러분, 읎 녌의는 더 읎상 생산적읎지 않습니닀. Jeff는 REPL에서 읎전 동작읎 좋았닀는 것을 잘 알고 있습니닀. 누가 처음에 귞것을 섀계하고 구현했닀고 생각합니까? 우늬는 읎믞 대화형 동작을 변겜하Ʞ로 앜속했습니닀. "슀크늜튞"가 대화식읞지 여부는 여전히 ê²°ì •í•Žì•Œ 합니닀. "슀크늜튞"띌고 하멎 대화식윌로 듀늬지만 "프로귞랚"읎띌고 하멎 훚씬 덜 대화식윌로 듀늬지만 정확히 같은 것입니닀. 답변을 짧고 걎섀적윌로 유지하고 아직 ê²°ì •í•Žì•Œ 할 사항에 집쀑하십시였. 읎와 닀륞 의견읎 있윌멎 숚겚젞 슀레드가 ìž êžž 수 있습니닀.

ë‚Žê°€ 가지고 있는 한 가지 생각은 "너묎 성가시닀" 및 "마을 사람듀읎 갈퀎에서 나였게 할 가능성읎 있닀"는 것윌로 음축했습니닀. 비대화형 컚텍슀튞에서는 local 또는 global "소프튞 범위"의

Julia륌 처음 소개받았을 때(얌마 전읎고 죌로 Fortran 배겜에서 왔습니닀) "Julia는 컎파음되고 핚수 수쀀에서 빠륎므로 횚윚적읎얎알 하는 몚든 것은 핚수 낎부에서 수행되얎알 합니닀. . 메읞 '프로귞랚'에서는 슀크늜팅 얞얎처럌 작동합니닀." 나는 ê·ž 진술을 읎핎하지 않고는 계산적윌로 너묎 많은 것을 요구하는 사람을 상상할 수 없Ʞ 때묞에 충분히 공정하닀는 것을 알았습니닀. 따띌서 Ʞ능에서와 동음한 표Ʞ법곌 구성을 사용하Ʞ 위핎 메읞 프로귞랚에서 성능에 희생읎 있닀멎 읎러한 범위 지정 규칙을 읎핎하고 가륎치렀고 녞력하고 복사 및 복사륌 할 수 없는 것볎닀 완전히 수용 가능하고 훚씬 더 수용 가능하닀는 것을 알았습니닀. 한 곳에서 닀륞 곳윌로 윔드륌 붙여넣습니닀.

귞걎 귞렇고, 저는 Julia에서 아직 쎈볎자읎며 음부 고등학생 및 학부생에게 묌늬적 시슀템 시뮬레읎션의 Ʞ볞 사항을 가륎치Ʞ 위핎 Julia륌 선택했습니닀. 귞늬고 나는 읎믞 읎 묞제가 읎전 버전의 '정상' 동작윌로 돌아가Ʞ륌 희망하고 있습니닀.

읎 대화는 현재 잠겚 있윌며 Julia 컀믞터만 댓Ꞁ을 달 수 있습니닀.

@JeffBezanson , 읎 ë‹Žë¡  슀레드 에서 처음에는 REPL에서만 제안한 의믞 첎계륌 구현하고 닀륞 곳에서는 옵튞읞할 계획은 묎엇입니까?

SoftScope.jl을 닀시 작성하는 구묞읎 아니띌 낮추는 윔드( julia-syntax.scm )에 직접 넣을 계획읞 것 같습니까? 아니멎 뚌저 구묞을 닀시 작성하고(SoftScope륌 제안된 규칙윌로 수정하고 읎륌 stdlib로 변환) 나쀑에 Julia 늎늬슀륌 위핎 낮추는 윔드에 넣는 것을 연Ʞ하시겠습니까?

읎 페읎지가 도움읎 되었나요?
0 / 5 - 0 등꞉

ꎀ렚 묞제

StefanKarpinski picture StefanKarpinski  Â·  3윔멘튞

StefanKarpinski picture StefanKarpinski  Â·  3윔멘튞

iamed2 picture iamed2  Â·  3윔멘튞

i-apellaniz picture i-apellaniz  Â·  3윔멘튞

wilburtownsend picture wilburtownsend  Â·  3윔멘튞