๊ณ ์ฑ๋ฅ, ๋์ ํ์ดํ ์ง์ ๋ฐ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ๋ด์ฅ ๋๊ตฌ์ ๊ฐ์ ํ์ง์ ๊ฒฐํฉํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด Julia 1.9๊ฐ ์ถ์๋์์ต๋๋ค. Julia์ ๊ตฌ๋ฌธ์ MATLAB๊ณผ ์ ์ฌํ๋ฉฐ ์ผ๋ถ ์์๋ Ruby ๋ฐ Lisp์์ ์ฐจ์ฉ๋์์ต๋๋ค. ๋ฌธ์์ด ์กฐ์ ๋ฐฉ๋ฒ์ Perl์ ์ฐ์์ํต๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ธ์ด์ ์ฃผ์ ํน์ง:
- ๊ณ ์ฑ๋ฅ: ํ๋ก์ ํธ์ ์ฃผ์ ๋ชฉํ ์ค ํ๋๋ C ํ๋ก๊ทธ๋จ์ ๊ฐ๊น์ด ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๊ฒ์ ๋๋ค. Julia ์ปดํ์ผ๋ฌ๋ LLVM ํ๋ก์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ ๋ง์ ๋์ ํ๋ซํผ์ ๋ํด ํจ์จ์ ์ธ ๊ธฐ๋ณธ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
- ๊ฐ์ฒด ์งํฅ ๋ฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์์๋ฅผ ํฌํจํ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ์ง์ํฉ๋๋ค. ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฌด์๋ณด๋ค๋ ๋น๋๊ธฐ I/O, ํ๋ก์ธ์ค ๊ด๋ฆฌ, ๋ก๊น , ํ๋กํ์ผ๋ง ๋ฐ ํจํค์ง ๊ด๋ฆฌ๋ฅผ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๋์ ํ์ดํ: ์คํฌ๋ฆฝํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด ์ธ์ด์์๋ ๋ณ์ ์ ํ์ ๋ํ ๋ช ์์ ์ธ ์ ์๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๋ํํ ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค.
- ์ ํ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ๋ ์ ํ์ ๊ธฐ๋ฅ.
- ์์น ๊ณ์ฐ, ๊ณผํ ๊ณ์ฐ, ๊ธฐ๊ณ ํ์ต ์์คํ ๋ฐ ๋ฐ์ดํฐ ์๊ฐํ์ ํ์ํ ๊ตฌ๋ฌธ์ ๋๋ค. ๊ณ์ฐ ๋ณ๋ ฌํ๋ฅผ ์ํ ๋ค์ํ ์ซ์ ๋ฐ์ดํฐ ์ ํ ๋ฐ ๋๊ตฌ๋ฅผ ์ง์ํฉ๋๋ค.
- ์ถ๊ฐ ๋ ์ด์ด ์์ด C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํจ์๋ฅผ ์ง์ ํธ์ถํ๋ ๊ธฐ๋ฅ.
Julia 1.9์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ:
- ์๋ก์ด ์ธ์ด ๊ธฐ๋ฅ
- "setproperty!(::Module, ::Symbol, x)"๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ชจ๋์์ ํ ๋น์ด ์ด๋ฃจ์ด์ง๋๋ก ํ์ฉํฉ๋๋ค.
- ์ต์ข ์์น๊ฐ ์๋ ๋ค์ค ํ ๋น์ด ํ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฌธ์์ด "a, b..., c = 1, 2, 3, 4"๋ "a = 1; bโฆ, = 2, 3; c = 4". ์ด๋ Base.split_rest๋ฅผ ํตํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ๋จ์ผ ๋ฌธ์ ๋ฆฌํฐ๋ด์ ์ด์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด๊ณผ ๋์ผํ ๊ตฌ๋ฌธ์ ์ง์ํฉ๋๋ค. ์ ๊ฒ๋ค. ๊ตฌ๋ฌธ์ Char ์ ํ์์ ํ์ฉํ๋ ์๋ชป๋ UTF-8 ์ํ์ค๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค.
- ์ ๋์ฝ๋ 15 ์ฌ์์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ด์ ํํ๊ณผ ๋ช ๋ช ๋ ๋ฌธ์ ํํ์ ์ค์ฒฉ๋ ์กฐํฉ์ ์ ํ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ ์ญ ๋ณ์๋ฅผ ๋จ๋ ์ผ๋ก ์ฝ๊ณ ์ฐ๊ธฐ ์ํ ์๋ก์ด ๋ด์ฅ ํจ์ "getglobal(::Module, ::Symbol[, order])" ๋ฐ "setglobal!(::Module, ::Symbol, x[, order])". ์ด์ ์ ์ญ ๋ณ์์ ์ก์ธ์คํ ๋ getfield ๋ฉ์๋๋ณด๋ค getglobal ๋ฉ์๋๋ฅผ ์ ํธํด์ผ ํฉ๋๋ค.
- ์ธ์ด ๋ณ๊ฒฝ
- ์ด์ ๋ฒ์ 1.7์ ๋์ ๋ "@invoke" ๋งคํฌ๋ก๋ฅผ ๋ด๋ณด๋ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ ์ด์ "x" ์ธ์์ ๋ํด ์ ํ ์ฃผ์์ด ์๋ต๋ ๊ฒฝ์ฐ "Any" ๋์ "Core.Typeof(x)" ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์ธ์๋ก ์ ๋ฌ๋ ์ ํ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๊ธฐ ์ํด ํ์ํฉ๋๋ค.
- ๋ฒ์ 1.7์ ๋์ ๋ "invokelatest" ํจ์์ "@invokelatest" ๋งคํฌ๋ก ๋ด๋ณด๋ด๊ธฐ๊ฐ ํ์ฑํ๋์์ต๋๋ค.
- ์ปดํ์ผ๋ฌ/๋ฐํ์ ๊ฐ์
- ์ฒซ ๋ฒ์งธ ์คํ๊น์ง์ ์๊ฐ์ด ํฌ๊ฒ ๋จ์ถ๋์์ต๋๋ค(TTFX - ์ฒซ ๋ฒ์งธ ์คํ๊น์ง์ ์๊ฐ). ์ด์ ํจํค์ง ์ฌ์ ์ปดํ์ผ์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ "pkgimage"์ ์ ์ฅํฉ๋๋ค. ์ฆ, ์ฌ์ ์ปดํ์ผ ์ค์ ์์ฑ๋ ์ฝ๋๋ ํจํค์ง๊ฐ ๋ก๋๋ ํ ๋ค์ ์ปดํ์ผํ ํ์๊ฐ ์์ต๋๋ค. "--pkgimages=no" ์ต์ ์ ์ฌ์ฉํ๋ฉด pkgimages ๋ชจ๋ ์ฌ์ฉ์ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
- ์ ํ ์ถ๋ก ์ XNUMX์ฐจ ๋ณต์ก์ฑ์ด๋ผ๋ ์๋ ค์ง ๋ฌธ์ ๊ฐ ์์ ๋์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ถ๋ก ์ ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ ์์ฑ๋ ๊ธด ํจ์(์: ํธ๋ฏธ๋ถ ๋ฐฉ์ ์ ๋ฐ ๋๊ท๋ชจ ์ธ๊ณผ ๋ชจ๋ธ์ด ํฌํจ๋ ModelingToolkit.jl)๊ฐ ์๋ ์ผ๋ถ ๊ทน๋จ์ ์ธ ์ฌ๋ก๋ ํจ์ฌ ๋น ๋ฅด๊ฒ ์ปดํ์ผ๋ฉ๋๋ค.
- ์ ํ๋ณ ์ธ์๊ฐ ์๋ ํธ์ถ์ ์ด์ ๋ค์ํ ์ ํ์ ๋์คํจ์น ํ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ฝ์ ๋๋ ์ ์ ํด๊ฒฐ์ ์ํด ํตํฉ ๋ถํ ์ต์ ํ๋ ์ ์์ต๋๋ค. ์ด๋ "@nospecialize-d" ํธ์ถ ์ฌ์ดํธ๋ฅผ ์ ์ ์ผ๋ก ํด๊ฒฐํ๊ณ ์ฌ์ปดํ์ผ์ ๋ฐฉ์งํจ์ผ๋ก์จ ๊ฐ์ฒด ์ ํ์ด ์์ ํ ์ ์ ์ผ๋ก ํด๊ฒฐ๋์ง ์๋ ํน์ ์ํฉ์์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ๋ชจ๋์์ @pure ๋งคํฌ๋ก์ ๋ชจ๋ ์ฌ์ฉ์ Base.@assume_ํจ๊ณผ๋ก ๋์ฒด๋์์ต๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก f(args...)์ ์ฌ์ฉ๋๋ ์ ํ๋ณด๋ค ๋ ๊ตฌ์ฒด์ ์ธ ์ ํ์ ์ฌ์ฉํ์ฌ ํธ์ถ(f, Invokesig, args...)์ ํธ์ถํ๋ฉด ๋ ์ด์ ํจํค์ง๊ฐ ๋ค์ ์ปดํ์ผ๋์ง ์์ต๋๋ค.
- ๋ช
๋ น์ค ๋งค๊ฐ๋ณ์ ๋ณ๊ฒฝ
- Linux ๋ฐ Windows์์ "--threads=auto" ์ต์ ์ ์ด์ CPU ์ ํธ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ก์ธ์ ์๋ฅผ ๊ฒฐ์ ํ๋ ค๊ณ ์๋ํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก HPC ๋ฐ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ์ค์ ๋๋ ๋ง์คํฌ์ ๋๋ค.
- "--math-mode=fast" ์ต์ ์ด ๋นํ์ฑํ๋์์ต๋๋ค. ๋์ ์๋ฏธ๊ฐ ์ ์ ์๋ "@fastmath" ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- "--threads" ๋งค๊ฐ๋ณ์์ ํ์์ ์ด์ "auto | N[,auto|M]", ์ฌ๊ธฐ์ M์ ์์ฑํ ๋ํํ ์ค๋ ๋ ์๋ฅผ ์ง์ ํฉ๋๋ค(ํ์ฌ ์๋์ 1์ ์๋ฏธํจ).
- "--heap-size-hint= ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค. โ๋ ํ์ฑ ๊ฐ๋น์ง ์์ง์ด ์์๋๋ ์๊ณ๊ฐ์ ์ค์ ํฉ๋๋ค. ํฌ๊ธฐ๋ ๋ฐ์ดํธ, ํฌ๋ก๋ฐ์ดํธ(1000KB), ๋ฉ๊ฐ๋ฐ์ดํธ(300MB) ๋๋ ๊ธฐ๊ฐ๋ฐ์ดํธ(1,5GB)๋ก ์ง์ ํ ์ ์์ต๋๋ค.
- ๋ฉํฐ์ค๋ ๋ฉ ๋ณ๊ฒฝ ์ฌํญ
- "Threads.@spawn"์๋ ์ด์ ":default" ๋๋ ":interactive"๋ผ๋ ์ ํ์ ์ฒซ ๋ฒ์งธ ์ธ์๊ฐ ์์ต๋๋ค. ๋ํํ ์์ ์๋ ๋ฎ์ ๋๊ธฐ ์๊ฐ์ ์๋ต์ด ํ์ํ๋ฉฐ ์งง๊ฑฐ๋ ์์ฃผ ์ํ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ํํ ์์ ์ Julia๋ฅผ ์์ํ ๋ ์ง์ ๋ ๊ฒฝ์ฐ ๋ํํ ์ค๋ ๋์์ ์คํ๋ฉ๋๋ค.
- Julia ๋ฐํ์ ์ธ๋ถ(์: C ๋๋ Java)์์ ์์๋ ์ค๋ ๋๋ ์ด์ "jl_adopt_thread"๋ฅผ ์ฌ์ฉํ์ฌ Julia ์ฝ๋๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ์ด๋ "cfunction" ๋๋ "@ccallable" ์ง์ ์ ์ ํตํด Julia ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ๋ฐ์ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด์ ์ค๋ ๋ ์๊ฐ ๋ฐํ์์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
- ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฅ
- ์๋ก์ด "Iterators.Flatmap" ๊ธฐ๋ฅ.
- ์๋ก์ด "pkgversion(m::Module)" ํจ์๋ "pkgdir(m::Module)"๊ณผ ์ ์ฌํ๊ฒ ํน์ ๋ชจ๋์ ๋ก๋ํ ํจํค์ง ๋ฒ์ ์ ๊ฐ์ ธ์ต๋๋ค.
- "reduce(hcat, x::Vector{<:Vector})"๋ฅผ ๋ชจ๋ ์ฐจ์์ผ๋ก ์ผ๋ฐํํ๊ณ ๋ฐ๋ณต์์ ๋ฐ๋ณต์๋ฅผ ํ์ฉํ๋ ์๋ก์ด "stack(x)" ํจ์์ ๋๋ค. "stack(f, x)" ๋ฉ์๋๋ "mapreduce(f, hcat, x)"๋ฅผ ์ผ๋ฐํํ๋ฉฐ ๋ ํจ์จ์ ์ ๋๋ค.
- ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฒด ํฌ๊ธฐ๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์๋ฅผ ๋ฐํํ๋ค๋ ์ ์ ์ ์ธํ๋ฉด "@allocations"์ ์ ์ฌํ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ "@allocations"๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๊ธฐ ์ํ ์๋ก์ด ๋งคํฌ๋ก์ ๋๋ค.
- ๋์๊ด์ ์๋ก์ด ๊ธฐ๋ฅ
- "RoundFromZero"๋ ์ด์ "BigFloat" ์ด์ธ์ ์ ํ์์๋ ์๋ํฉ๋๋ค.
- ์ด์ "Dict"๋ฅผ "sizehint!"๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์ถ์ํ ์ ์์ต๋๋ค.
- ์ด์ "@time"์ ์ ํจํ์ง ์์ ๋ฉ์๋๋ฅผ ๋ค์ ์ปดํ์ผํ๋ ๋ฐ ์์๋ ์๊ฐ์ ๋น์จ์ ๋ณ๋๋ก ๋ํ๋ ๋๋ค.
- ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ณ๊ฒฝ ์ฌํญ
- Dict ๋ฐ ๊ธฐํ ํ์ ๊ฐ์ฒด(์: ํค(::Dict), ๊ฐ(::Dict) ๋ฐ Set)์ ๋ํ ๋ฐ๋ณต ๋ฉ์๋์ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ์ด๋ฌํ ๋ฐ๋ณต ๋ฉ์๋๋ ์ด์ ์ฌ์ ์ด๋ ์งํฉ์ ์์ ํ๋ ์์ ์ด ์๋ ํ ๋ฌด์ ํ์ ์ค๋ ๋์์ Dict ๋๋ Set์ ๋ํด ๋ณ๋ ฌ๋ก ํธ์ถ๋ ์ ์์ต๋๋ค.
- ์ด์ ์กฐ๊ฑด์ ํจ์ "!f"๋ฅผ ๋ถ์ ํ๋ฉด ์ต๋ช ํจ์ ๋์ ๋ณตํฉ ํจ์ "(!) DF"๊ฐ ๋ฐํ๋ฉ๋๋ค.
- ์ฐจ์ ์กฐ๊ฐ ํจ์๋ ์ด์ ์ฌ๋ฌ ์ฐจ์์์ ์๋ํฉ๋๋ค. "eachslice", "eachrow" ๋ฐ "eachcol"์ ๋์คํจ์น๋ฅผ โโํ์ฉํ๋ "Slices" ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ฌ ๋ณด๋ค ํจ์จ์ ์ธ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ณต๊ฐ API์ "@kwdef" ๋งคํฌ๋ก๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- "fld1"์ ์์ ์์ ๋ฌธ์ ๋ฅผ ์์ ํ์ต๋๋ค.
- ์ด์ ์ ๋ ฌ์ ํญ์ ์๊ฐ์ ์์ ์ ์ ๋๋ค(QuickSort๋ฅผ ์ฌ์ค๊ณ).
- ์ด์ "Base.splat"์ด ๋ด๋ณด๋ด์ง๋๋ค. ๋ฐํ ๊ฐ์ ์ต๋ช ํจ์๊ฐ ์๋ "Base.Splat" ์ ํ์ด๋ฏ๋ก ์ ์ ํ๊ฒ ์ถ๋ก ํ ์ ์์ต๋๋ค.
- ํจํค์ง ๊ด๋ฆฌ์
- "ํจํค์ง ํ์ฅ": Julia ์ธ์ ์ ๋ก๋๋ ๋ค๋ฅธ ํจํค์ง์์ ์ฝ๋ ์กฐ๊ฐ ๋ก๋๋ฅผ ์ง์ํฉ๋๋ค. ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ "Requires.jl" ํจํค์ง์ ์ ์ฌํ์ง๋ง ์ฌ์ ์ปดํ์ผ ๋ฐ ๊ตฌ์ฑ ํธํ์ฑ์ด ์ง์๋ฉ๋๋ค.
- ์ ํ๋์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์์๋ณ ๋ถํ ๊ณผ์ ํผ๋ ์ํ์ผ๋ก ์ธํด ์ค์นผ๋ผ "a" ๋ฐ ๋ฒกํฐ "b"๊ฐ ํฌํจ๋ "a / b" ๋ฐ "b \ a" ๋ฉ์๋๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค. ์ด๋ "a * pinv(b)"์ ๋์ผํฉ๋๋ค.
- BLAS ๋ฐ LAPACK ํธ์ถ์ ์ด์ "libblastrampoline(LBT)"์ ์ฌ์ฉํฉ๋๋ค. OpenBLAS๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋์ง๋ง ๋ค๋ฅธ BLAS/LAPACK ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์คํ ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ์ง์๋์ง ์์ต๋๋ค. ๋์ LBT ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ BLAS/LAPACK์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธํธ๋ก ๊ต์ฒดํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- "lu"๋ ์๋ก์ด ์ฐ์ ์ ํ ๋ฐ ๊ต์ก ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด XNUMX์ด ์๋ ์ฒซ ๋ฒ์งธ ํ์ ์์๋ฅผ ์ ํํ๋ ์๋ก์ด "RowNonZero()" ํ๋ ฌ ํ์ ์ ๋ต์ ์ง์ํฉ๋๋ค.
- "normalize(x, p=2)"๋ ์ด์ ์ค์นผ๋ผ๋ฅผ ํฌํจํ ๋ชจ๋ ์ ๊ทํ๋ ๋ฒกํฐ ๊ณต๊ฐ "x"๋ฅผ ์ง์ํฉ๋๋ค.
- ์ด์ ๊ธฐ๋ณธ BLAS ์ค๋ ๋ ์๋ ARM ์ํคํ ์ฒ์ CPU ์ค๋ ๋ ์์ ๋์ผํ๊ณ ๋ค๋ฅธ ์ํคํ ์ฒ์ CPU ์ค๋ ๋ ์์ ์ ๋ฐ์ ๋๋ค.
- Printf: ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ์๋ชป๋ ๋ฌธ์์ด์ ๋ํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ฌ์์ ํ์ต๋๋ค.
- ํ๋กํ: Chrome์์ ์ง์ํ๋ JSON ๊ธฐ๋ฐ ".heapsnapshot" ํ์์ผ๋ก ํ์ผ์ ์บก์ฒํ๋ ์๋ก์ด "Profile.take_heap_snapshot(file)" ํจ์์ ๋๋ค.
- Random: ์ด์ randn ๋ฐ randexp๊ฐ rand๋ฅผ ์ ์ํ๋ ๋ชจ๋ AbstractFloat ์ ํ์ ๋ํด ์๋ํฉ๋๋ค.
- ๊ต์ฒด
- ์ด์ "Alt-e" ํค ์กฐํฉ์ ๋๋ฅด๋ฉด ํธ์ง๊ธฐ์์ ํ์ฌ ์ ๋ ฅ์ด ์ด๋ฆฝ๋๋ค. ์ฝํ ์ธ (๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ)๋ ํธ์ง๊ธฐ๊ฐ ์ข ๋ฃ๋ ๋ ์คํ๋ฉ๋๋ค.
- REPL์์ ํ์ฑํ๋ ํ์ฌ ๋ชจ๋ ์ปจํ ์คํธ๋ "REPL.activate(::Module)" ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฑฐ๋ REPL์ ๋ชจ๋์ ์ ๋ ฅํ๊ณ "Alt-m" ํค๋ฅผ ๋๋ฌ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค(๊ธฐ๋ณธ์ ์ผ๋ก Main). ์ฝค๋น๋ค์ด์ .
- ๊ฐ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ์ ๋ํ ์ซ์๋ฅผ ์ธ์ํ๊ณ ํ๊ฐ ๊ฒฐ๊ณผ๋ฅผ Out์ ์ ์ฅํ๋ "๋ฒํธ ๋งค๊ธฐ๊ธฐ ํ๋กฌํํธ" ๋ชจ๋๋ "REPL.numbered_prompt!()"๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฑํํ ์ ์์ต๋๋ค.
- ํญ ์์ฑ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ํค์๋ ์ธ์๊ฐ ํ์๋ฉ๋๋ค.
- SuiteSparse: "SuiteSparse" ์๋ฒ์ ์ฝ๋๋ฅผ "SparseArrays.jl"๋ก ์ด๋ํ์ต๋๋ค. ์ด์ ์๋ฒ๋ "SuiteSparse.jl"์ ์ํด ๋ค์ ๋ด๋ณด๋ด์ง๋๋ค.
- ์คํ์ค๋ฐฐ์ด
- ์ด์ SuiteSparse ์๋ฒ๋ฅผ SparseArrays์ ํ์ ๋ชจ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- UMFPACK ๋ฐ CHOLMOD ์คํธ๋ฆผ ๋ณดํธ ๋ชจ๋๋ ์ ์ญ ๋ณ์๋ฅผ ์ ๊ฑฐํ๊ณ ์ ๊ธ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋์์ต๋๋ค. ๋ฉํฐ์ค๋ ๋ "ldiv!" ์ด์ UMFPACK ๊ฐ์ฒด๋ฅผ ์์ ํ๊ฒ ์คํํ ์ ์์ต๋๋ค.
- ์คํ์ ํจ์ "SparseArrays.allowscalar(::Bool)"๋ฅผ ์ฌ์ฉํ๋ฉด ํฌ์ ๋ฐฐ์ด์ ์ค์นผ๋ผ ์ธ๋ฑ์ฑ์ ๋นํ์ฑํํ๊ฑฐ๋ ํ์ฑํํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฑ๋ฅ ๋ฌธ์ ์ ์ผ๋ฐ์ ์ธ ์์ธ์ธ "SparseMatrixCSC" ๊ฐ์ฒด์ ๋ฌด์์ ์ค์นผ๋ผ ์ธ๋ฑ์ฑ์ ๊ฐ์งํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ์คํจ ๋๋ ์ค๋ฅ ๋ฐ์ ์ ํ ์คํธ ์คํ์ ์กฐ๊ธฐ์ ์ข ๋ฃํ๋ ํ ์คํธ ๋ชจ์์ ์ํ ์๋ก์ด ์ฅ์ ์กฐ์น ๋ชจ๋์ ๋๋ค. "@testset kwarg failurefast=true" ๋๋ "export JULIA_TEST_FAILFAST=true"๋ฅผ ํตํด ์ค์ ํ์ธ์. ์ด๋ CI ์คํ ์ ์ด๊ธฐ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ฐ๊ธฐ ์ํด ํ์ํ ์ ์์ต๋๋ค.
- ๋ ์ง: ๋น ๋ฌธ์์ด์ ๋ ์ด์ ์ ํจํ "DateTime", "Dates" ๋๋ "Times" ๊ฐ์ผ๋ก ์๋ชป ๊ตฌ๋ฌธ ๋ถ์๋์ง ์์ผ๋ฉฐ ๋์ ์์ฑ์ ๋ฐ ๊ตฌ๋ฌธ ๋ถ์์์ "ArgumentError" ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ง "tryparse"๋ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค.
- ๋ถ์ฐ ํจํค์ง
- ์ด์ ๋ก์ปฌ ์์ ์ ํ๋ก์ธ์ค๊ฐ ์ถ๊ฐ๋๋ฉด(์: "addprocs(N::Int)" ๋๋ ๋ช ๋ น์ค ํ๋๊ทธ "-procs=N") ํจํค์ง ๊ตฌ์ฑ(ํ์ฑ ํ๋ก์ ํธ, "LOAD_PATH", "DEPOT_PATH")์ด ์ ํ๋ฉ๋๋ค.
- ๋ก์ปฌ ์์ ์ ํ๋ก์ธ์ค์ ๋ํ "addprocs"๋ ์ด์ "env"๋ผ๋ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ฒฝ ๋ณ์๋ฅผ ์์ ์ ํ๋ก์ธ์ค์ ์ ๋ฌํฉ๋๋ค.
- ์ ๋์ฝ๋: "graphemes(s, m:n)"์ "s"์ m๋ฒ์งธ๋ถํฐ n๋ฒ์งธ ๋ฌธ์์๊น์ง์ ํ์ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
- DelimitedFiles ํจํค์ง๋ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ฑฐ๋์์ผ๋ฉฐ ์ด์ ์ฌ์ฉํ๋ ค๋ฉด ๋ช ์์ ์ผ๋ก ์ค์นํด์ผ ํ๋ ๋ณ๋์ ํจํค์ง๋ก ๋ฐฐํฌ๋ฉ๋๋ค.
- ์ธ๋ถ ์ข
์์ฑ
- Linux๋ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ libstdc++์ ๋ฒ์ ์ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ์ต์ ๋ฒ์ ์ธ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ก๋ํฉ๋๋ค. ์์คํ ๋ฒ์ ์ ๊ด๊ณ์์ด ๋ด์ฅ๋ libstdc++๋ฅผ ๋ก๋ํ๋ ์ด์ ๋์์ "JULIA_PROBE_LIBSTDCXX=0" ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ์ฌ ๋ณต์ํ ์ ์์ต๋๋ค.
- "RUNPATH" ๋ณ์๋ฅผ ์ ์ํ์ง ๋ชปํ Linux์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์์ํฌ ์ ์๋ "RPATH"๋ฅผ julia ๋ฐ์ด๋๋ฆฌ์์ ์ ๊ฑฐํ์ต๋๋ค.
- ๋๊ตฌ ๊ฐ์ : ์ด์ "MethodError" ๋ฐ ๋ฉ์๋(์: "methods(my_func)")์ ์ถ๋ ฅ์ด ์คํ ์ถ์ ์์ ๋ฉ์๋๊ฐ ์ถ๋ ฅ๋๋ ๋ฐฉ์์ ๋ฐ๋ผ ํ์์ด ์ง์ ๋๊ณ ์์์ด ์ง์ ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru