๊ณ ์ฑ๋ฅ, ๋์ ํ์ดํ ์ง์ ๋ฐ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ๋ด์ฅ ๋๊ตฌ์ ๊ฐ์ ํ์ง์ ๊ฒฐํฉํ Julia 1.8 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ถ์๋์์ต๋๋ค. Julia์ ๊ตฌ๋ฌธ์ MATLAB๊ณผ ์ ์ฌํ๋ฉฐ Ruby ๋ฐ Lisp์ ์ผ๋ถ ์์๋ฅผ ์ฐจ์ฉํ์ต๋๋ค. ๋ฌธ์์ด ์กฐ์ ๋ฐฉ๋ฒ์ Perl์ ์ฐ์์ํต๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ธ์ด์ ์ฃผ์ ํน์ง:
- ๊ณ ์ฑ๋ฅ: ํ๋ก์ ํธ์ ์ฃผ์ ๋ชฉํ ์ค ํ๋๋ C ํ๋ก๊ทธ๋จ์ ๊ฐ๊น์ด ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๊ฒ์ ๋๋ค. Julia ์ปดํ์ผ๋ฌ๋ LLVM ํ๋ก์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ ๋ง์ ๋์ ํ๋ซํผ์ ๋ํด ํจ์จ์ ์ธ ๊ธฐ๋ณธ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
- ๊ฐ์ฒด ์งํฅ ๋ฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์์๋ฅผ ํฌํจํ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ์ง์ํฉ๋๋ค. ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฌด์๋ณด๋ค๋ ๋น๋๊ธฐ I/O, ํ๋ก์ธ์ค ๊ด๋ฆฌ, ๋ก๊น , ํ๋กํ์ผ๋ง ๋ฐ ํจํค์ง ๊ด๋ฆฌ๋ฅผ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๋์ ํ์ดํ: ์คํฌ๋ฆฝํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด ์ธ์ด์์๋ ๋ณ์ ์ ํ์ ๋ํ ๋ช ์์ ์ธ ์ ์๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๋ํํ ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค.
- ์ ํ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ๋ ์ ํ์ ๊ธฐ๋ฅ.
- ์์น ๊ณ์ฐ, ๊ณผํ ๊ณ์ฐ, ๊ธฐ๊ณ ํ์ต ์์คํ ๋ฐ ๋ฐ์ดํฐ ์๊ฐํ์ ํ์ํ ๊ตฌ๋ฌธ์ ๋๋ค. ๊ณ์ฐ ๋ณ๋ ฌํ๋ฅผ ์ํ ๋ค์ํ ์ซ์ ๋ฐ์ดํฐ ์ ํ ๋ฐ ๋๊ตฌ๋ฅผ ์ง์ํฉ๋๋ค.
- ์ถ๊ฐ ๋ ์ด์ด ์์ด C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํจ์๋ฅผ ์ง์ ํธ์ถํ๋ ๊ธฐ๋ฅ.
Julia 1.8์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ:
- ์๋ก์ด ์ธ์ด ๊ธฐ๋ฅ
- ์ด์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ตฌ์กฐ์ฒด์ ํ๋์ ์์๋ก ์ฃผ์์ ๋ฌ์ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ๊ณ ์ต์ ํํ ์ ์์ต๋๋ค.
- ์ ํ ์ฃผ์์ ์ ์ญ ๋ณ์์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ๋น n์ฐจ์ ๋ฐฐ์ด์ ๋๊ดํธ ์์ ์ฌ๋ฌ ์ธ๋ฏธ์ฝ๋ก ์ ์ฌ์ฉํ์ฌ ๋ง๋ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด "[;;]"๋ 0x0x0 ๋ฐฐ์ด์ ๋ง๋ญ๋๋ค.
- Try ๋ธ๋ก์ ์ด์ ์ ํ์ ์ผ๋ก else ๋ธ๋ก์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด ๋ธ๋ก์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ ๊ฒฝ์ฐ ๋ณธ๋ฌธ ๋ฐ๋ก ๋ค์์ ์คํ๋ฉ๋๋ค.
- @inline ๋ฐ @noinline์ ํจ์ ๋ณธ๋ฌธ ๋ด์ ๋ฐฐ์นํ์ฌ ์ต๋ช ํจ์์ ์ฃผ์์ ๋ฌ ์ ์์ต๋๋ค.
- ์ด์ @inline ๋ฐ @noinline์ ํธ์ถ ์ฌ์ดํธ ๋๋ ๋ธ๋ก์ ํจ์์ ์ ์ฉํ์ฌ ํด๋น ํจ์ ํธ์ถ์ ๊ฐ์ ๋ก ํฌํจ(๋๋ ํฌํจํ์ง ์์)ํ ์ ์์ต๋๋ค.
- โ, โ ๋ฐ โ๋ ์๋ณ์ ๋ฌธ์๋ก ํ์ฉ๋ฉ๋๋ค.
- ์ ๋์ฝ๋ 14.0.0 ์ฌ์์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- Module(:name, false, false) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฆ์ด ์๊ณ , Base ๋๋ Core๋ฅผ ๊ฐ์ ธ์ค์ง ์์ผ๋ฉฐ, ์์ฒด ์ฐธ์กฐ๋ ์๋ ๋ชจ๋์ ๋ง๋ค ์ ์์ต๋๋ค.
- ์ธ์ด ๋ณ๊ฒฝ
- ์๋ก ์์ฑ๋ Task ๊ฐ์ฒด(@spawn, @async ๋ฑ)๋ ์ด์ ์์ฑ ์ ์์ Task์ ๋ฉ์๋์ ๋ํ world_age๋ฅผ ๊ฐ์ง๋ฏ๋ก ์ต์ ํ๋ ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด์ ํ์ฑํ ์ต์ ์ Base.invokelatest ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ฝ์ ์ ํผํ๊ธฐ ์ํด ์ ๋์ฝ๋ ๋ถ๊ท ํ ์๋ฐฉํฅ ํ์ ์ง์ ์ง์๋ฌธ์ ์ด์ ๋ฌธ์์ด๊ณผ ์ฃผ์์์ ๊ธ์ง๋ฉ๋๋ค.
- Base.ifelse๋ ์ด์ ๋ด์ฅ ํจ์๊ฐ ์๋ ์ผ๋ฐ ํจ์๋ก ์ ์๋์ด ํจํค์ง์์ ํด๋น ์ ์๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
- ์ด์ ์ ์ญ ๋ณ์์ ๋ํ ๋ชจ๋ ํ ๋น์ ์ ์ญ ๋ณ์๊ฐ T ์ ํ์ผ๋ก ์ ์ธ๋ ๊ฒฝ์ฐ ๋จผ์ ๋ณํ(Any, x) ๋๋ ๋ณํ(T, x) ํธ์ถ์ ๊ฑฐ์นฉ๋๋ค. ์ ์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ถ๋ณ ๋ณํ(Any , x) === x๋ ํญ์ true์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๊ธฐ์น ์์ ๋์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋ด์ฅ ํจ์๋ ์ด์ ์ผ๋ฐ ํจ์์ ์ ์ฌํ๋ฉฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ด๊ฑฐํ ์ ์์ต๋๋ค.
- ์ปดํ์ผ๋ฌ/๋ฐํ์ ๊ฐ์
- ๋ถํ ์๊ฐ์ด ์ฝ 25% ๋จ์ถ๋์์ต๋๋ค.
- LLVM ๊ธฐ๋ฐ ์ปดํ์ผ๋ฌ๋ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ libjulia-codegen์ผ๋ก ๋ถ๋ฆฌ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก๋๋๋ฏ๋ก ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ค์๋ ๋ณ๊ฒฝ์ด ์์ด์ผ ํฉ๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ํ์ํ์ง ์์ ๋ฐฐํฌ(์: ํ์ํ ๋ชจ๋ ์ฝ๋๊ฐ ์ฌ์ ์ปดํ์ผ๋ ์์คํ ์ด๋ฏธ์ง)์์๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋ฐ ํด๋น LLVM ์ข ์์ฑ)๋ฅผ ๊ฐ๋จํ ์๋ตํ ์ ์์ต๋๋ค.
- ์ด์ ๋ฉ์๋์ ์ธ์๋ฅผ ์ ๋ฌํ์ฌ ์กฐ๊ฑด๋ถ ํ์ ์ ์ถ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด Base.ifelse(isa(x, Int), x, 0)์ ๊ฒฝ์ฐ x ์ ํ์ ์ ์ ์๋ ๊ฒฝ์ฐ์๋ ::Int๋ฅผ ๋ฐํํฉ๋๋ค.
- SROA(Scalar replacement of Aggregates)๊ฐ ๊ฐ์ ๋์์ต๋๋ค. ์๊ตฌ ์ ์ญ ํ๋๊ฐ ์๋ getfield ํธ์ถ์ ์ ๊ฑฐํ๊ณ , ์ด๊ธฐํ๋์ง ์์ ํ๋๊ฐ ์๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ์ ๊ฑฐํ๊ณ , ์ค์ฒฉ๋ getfield ํธ์ถ์ ์ฑ๋ฅ ๋ฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
- ์ ํ ์ถ๋ก ์ ๋ถ์์ฉ๊ณผ ๋น๋๋กญ ๋ฑ ๋ค์ํ ํจ๊ณผ๋ฅผ ์ถ์ ํฉ๋๋ค. ์ง์์ ์ธ ์ ํ๊ฐ ๊ณ ๋ ค๋์ด ์ปดํ์ผ ์๊ฐ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ๋ผ์ธ๋ ์ ์์ง๋ง ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ์ง ์๋ ํจ์์ ๋ํ ํธ์ถ์ ๋ฐํ์ ์ ์ญ์ ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ํจ๊ณผ ๊ท์น์ Base.@assume_ํจ๊ณผ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
- ์ด์ ์ฌ์ ์ปดํ์ผ(๋ช ์์ ์ธ ์ฌ์ ์ปดํ์ผ ์ง์๋ฌธ ๋๋ ์ง์ ๋ ์์ ๋ถํ ํฌํจ)์ ํตํด ๋ ๋ง์ ์ ํ ์ ์ ์ฝ๋๊ฐ ์ ์ฅ๋๋ฏ๋ก ์ต์ด ์คํ์ด ๋ ๋นจ๋ผ์ง๋๋ค. ํด๋น ๋ฉ์๋๊ฐ ์ ์๋ ์์น์ ๊ด๊ณ์์ด ํจํค์ง์ ํ์ํ ๋ชจ๋ ์๋ก์ด ๋ฉ์๋/์ ํ ์กฐํฉ์ ์ด์ ํจํค์ง์ ์ํ ๋ฉ์๋์ ์ํด ํธ์ถ๋๋ ๊ฒฝ์ฐ ์ฌ์ ์ปดํ์ผ ํ์ผ์ ์บ์๋ ์ ์์ต๋๋ค.
- ๋ช
๋ น์ค ๋งค๊ฐ๋ณ์ ๋ณ๊ฒฝ
- @inbounds ์ ์ธ์ ๋ชจ๋ํฐ๋งํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๋์์ ์ด์ "--check-bounds=yes|no|auto"์ ์๋ ์ต์ ์ ๋๋ค.
- ์์คํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋ ๋ ์คํธ๋ง, ์์ค ์์น ์ ๋ณด ๋ฐ ๋ก์ปฌ ๋ณ์ ์ด๋ฆ์ ์ ๊ฑฐํ๋ ์๋ก์ด "--strip-metadata" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์์คํ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ์ปดํ์ผ๋ฌ๊ฐ ์ค๊ฐ ์์ค ์ฝ๋ ํํ์ ์ ๊ฑฐํ ์ ์๋๋ก ํ๋ ์๋ก์ด ์ต์ "--strip-ir". ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ "--compile=all"์ด ์ฌ์ฉ๋๊ฑฐ๋ ํ์ํ ๋ชจ๋ ์ฝ๋๊ฐ ์ฌ์ ์ปดํ์ผ๋ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.
- ํ์ผ ์ด๋ฆ ๋์ "-" ๋ฌธ์๊ฐ ์ง์ ๋๋ฉด ํ์ค ์ ๋ ฅ ์คํธ๋ฆผ์์ ์คํ ์ฝ๋๋ฅผ ์ฝ์ต๋๋ค.
- ๋ฉํฐ์ค๋ ๋ฉ ์ง์ ๋ณ๊ฒฝ ์ฌํญ
- Threads.@threads๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ก์ด ์์ฝ ์ต์ ์ธ :dynamic์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๋ฐ๋ณต์ด ๊ฐ ์ค๋ ๋์ ํ ๋น๋์ง ์๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ์์ ์ ์ค๋ ๋ ์ ์ฒด์์ ๋์ ์ผ๋ก ์์ฝ๋๋ค๋ ์ ์์ ์ด์ ๋ชจ๋์ ๋ค๋ฆ ๋๋ค. ์ด ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด @spawn ๋ฐ @threads๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ฒฉ ๋ฃจํ๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ๋ฐฐํฌํ ์ ์์ต๋๋ค.
- ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฅ
- ๊ฐ๊ฐ์ ๋ถํ (str)์ ๋ถํ (str)์ ์ฌ๋ฌ ๋ฒ ์คํํฉ๋๋ค.
- allequal(itr)์ ๋ฐ๋ณต์์ ๋ชจ๋ ์์๊ฐ ๋์ผํ์ง ํ ์คํธํฉ๋๋ค.
- hardlink(src, dst)๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ๋งํฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- setcpuaffinity(cmd, cpus)๋ ํ๋ก์ธ์ ์ฝ์ด์ ์ ํธ๋๋ฅผ ์์๋ ํ๋ก์ธ์ค๋ก ์ค์ ํฉ๋๋ค.
- diskstat(path=pwd())๋ฅผ ์ฌ์ฉํ์ฌ ๋์คํฌ ํต๊ณ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ํ๊ฐ ์ค์ธ ๋ผ์ธ๊ณผ @time ๋ณด๊ณ ์๋ฅผ ๋ชจ๋ ํ์ํ๋ ์๋ก์ด @showtime ๋งคํฌ๋ก์ ๋๋ค.
- ์ค๋ฅ ๊ฒฝ๋ก์์ ์ค๋ฅ ๋ฉ์์ง์ ์ง์ฐ ๊ตฌ์ฑ์ ์ง์ํ๊ธฐ ์ํด LazyString ๋ฐlazy"str" โโโโ๋งคํฌ๋ก๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- Dict ๋ฐ ๊ธฐํ ํ์ ๊ฐ์ฒด(์: ํค(::Dict), ๊ฐ(::Dict) ๋ฐ Set)์ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ์ด์ ์ฌ์ ์ด๋ ์ธํธ๋ฅผ ์์ ํ๋ ํธ์ถ์ด ์๋ ํ ์ฌ์ ์ด๋ ์ธํธ์์ ๋ฐ๋ณต ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
- @time ๋ฐ @timev์๋ ์ด์ ์ ํ์ ์ค๋ช ์ด ์์ด ์๋ฅผ ๋ค์ด ์๊ฐ ๋ณด๊ณ ์ ์์ค์ ์ฃผ์์ ๋ฌ ์ ์์ต๋๋ค. @time "foo ํ๊ฐ ์ค" foo().
- range๋ ์ ์ผํ ํค์๋ ์ธ์๋ก stop ๋๋ length๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Precision ๋ฐ setprecision์ ์ด์ base๋ฅผ ํค์๋๋ก ํ์ฉํฉ๋๋ค.
- ์ด์ TCP ์์ผ ๊ฐ์ฒด๋ closewrite ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ณ ๋ฐ ๊ฐ๋ฐฉ ๋ชจ๋ ์ฌ์ฉ์ ์ง์ํฉ๋๋ค.
- extrema๋ ์ด์ init ์ธ์๋ฅผ ํ์ฉํฉ๋๋ค.
- Iterators.countfrom์ ์ด์ + ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๋ชจ๋ ์ ํ์ ํ์ฉํฉ๋๋ค.
- @time์ ์ด์ ๋ณ๊ฒฝ๋ ์ ํ์ผ๋ก ๋ฉ์๋๋ฅผ ์ฌ์ปดํ์ผํ๋ ๋ฐ ์์๋ ์๊ฐ(%)์ ํ ๋นํฉ๋๋ค.
- ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณ๊ฒฝ ์ฌํญ
- ๊ฐ์ด Nothing์ธ ํค๋ ์ด์ addenv์ ํ๊ฒฝ์์ ์ ๊ฑฐ๋ฉ๋๋ค.
- Iterators.reverse(๋ฐ๋ผ์ ๋ง์ง๋ง)๋ ๊ฐ ์ค์ ์ง์ํฉ๋๋ค.
- ํน์ ์ ํ์ ๋ฒ์์ ๋ํ ๊ธธ์ด ํจ์๋ ๋ ์ด์ ์ ์ ์ค๋ฒํ๋ก๋ฅผ ํ์ธํ์ง ์์ต๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ธ check_length๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ฌ๊ธฐ์๋ ๋นํธ ์ ์ก ์ ์ด ๋ ผ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ SaferIntegers.jl์ ์ฌ์ฉํ์ฌ ๋ฒ์ ์ ํ์ ๊ตฌ์ฑํฉ๋๋ค.
- Iterators.Reverse ๋ฐ๋ณต์๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๊ฐ ์ธ๋ฑ์ค ๋ฐ์ ์ ๊ตฌํํฉ๋๋ค.
- ํจํค์ง ๊ด๋ฆฌ์
- ์ ๋ฒ์ ์ ์ฌ์ฉํ ์ ์๋ "pkg>" ์ํ์ ํจํค์ง ์์ ์๋ก์ด โ ๋ฐ โ ํ์๊ธฐ๊ฐ ์์ต๋๋ค. โ ๋ ์ ๋ฒ์ ์ ์ค์นํ ์ ์์์ ๋ํ๋ ๋๋ค.
- ์ด์ ๋ฒ์ ์ ํจํค์ง์ ๋ํ ์ ๋ณด๋ฅผ ํ์ํ๋ Pkg.status(REPL ๋ชจ๋์ --outdated ๋๋ -o)์ ๋ํ ์๋ก์ด outdated::Bool ์ธ์์ ๋๋ค.
- Project.toml์ ๋ชจ๋ [compat] ํญ๋ชฉ์ ํ์ํ๊ธฐ ์ํ Pkg.status(REPL ๋ชจ๋์ --compat ๋๋ -c)์ ๋ํ ์๋ก์ด compat::Bool ์ธ์์ ๋๋ค.
- ํ๋ก์ ํธ ํธํ์ฑ ํญ๋ชฉ ์ค์ ์ ์ํ ์๋ก์ด "pkg>compat"(๋ฐ Pkg.compat) ๋ชจ๋. ํญ ์์ฑ์ ํตํด ํ์ฌ ๋ ์ฝ๋๋ฅผ ๋ก๋ํ ์ ์๋ "pkg>compat"๋ฅผ ํตํ ๋ํํ ํธ์ง๊ธฐ ๋๋ "pkg>Foo 0.4,0.5"๋ฅผ ํตํ ์ง์ ๋ ์ฝ๋ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฆ, "pkg> compat Fo"๋ ์๋์ผ๋ก "pkg> Foo 0.4,0.5"๋ก ์ ๋ฐ์ดํธ๋์ด ๊ธฐ์กด ํญ๋ชฉ์ ํธ์งํ ์ ์์ต๋๋ค.
- ์ด์ Pkg๋ ์๋ฒ๊ฐ ํจํค์ง๊ฐ ํฌํจ๋ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๊ฒฝ์ฐ์๋ง ํจํค์ง ์๋ฒ์์ ํจํค์ง ๋ค์ด๋ก๋๋ฅผ ์๋ํฉ๋๋ค.
- Pkg.instantiate๋ ์ด์ Project.toml์ด Manifest.toml๊ณผ ๋๊ธฐํ๋์ง ์์ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ํ์ํฉ๋๋ค. ๋งค๋ํ์คํธ๋ฅผ ํ์ธํ ๋ ํ๋ก์ ํธ์ deps ๋ฐ compat ๋ ์ฝ๋(๋ค๋ฅธ ํ๋๋ ๋ฌด์๋จ)์ ํด์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด ์์ ์ ์ํํ๋ฏ๋ก Project.toml deps ๋๋ compat ๋ ์ฝ๋์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์ ํ์ธํ์ง ์๊ณ ๋ ๊ฐ์งํ ์ ์์ต๋๋ค.
- "pkg>add"๊ฐ ํด๋น ์ด๋ฆ์ ํจํค์ง๋ฅผ ์ฐพ์ ์ ์์ผ๋ฉด ์ด์ ์ถ๊ฐํ ์ ์๋ ๋น์ทํ ์ด๋ฆ์ ํจํค์ง๋ฅผ ์ ์ํฉ๋๋ค.
- ๋งค๋ํ์คํธ์ ์ ์ฅ๋ Julia ๋ฒ์ ์๋ ๋ ์ด์ ๋น๋ ๋ฒํธ๊ฐ ํฌํจ๋์ง ์์ต๋๋ค. ์ฆ, ์ด์ ๋ง์คํฐ๊ฐ 1.9.0-DEV๋ก ๊ธฐ๋ก๋ฉ๋๋ค.
- ์ด์ ํ ์คํธ ์ค๋จ "pkg>"๊ฐ ๋ ์ผ๊ด๋๊ฒ ๊ฐ์ง๋๊ณ REPL์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐํ๋ฉ๋๋ค.
- InteractiveUtils
- ํจํค์ง ๋ฐ ํด๋น ์ข ์์ฑ์ ๊ฐ์ ธ์ค๋ ๋ฐ ์์๋ ์๊ฐ์ ๋ณด๊ณ ํ๊ณ ์ปดํ์ผ ๋ฐ ์ฌ์ปดํ์ผ ์๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ๋น์จ๋ก ๊ฐ์กฐ ํ์ํ๋ ์๋ก์ด @time_imports ๋งคํฌ๋ก์ ๋๋ค.
- ์ ํ๋์ํ
- BLAS ํ์ ๋ชจ๋์ ์ด์ ๋ ๋ฒจ 2 BLAS spr! ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค.
- LinearAlgebra.jl ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์ ์์ค ์ฝ๋์ ๋จ์ ํ
์คํธ ๊ด์ ๋ชจ๋์์ SparseArrays.jl๊ณผ ์์ ํ ๋
๋ฆฝ์ ์
๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํฌ์ ๋ฐฐ์ด์ Base ๋๋ LinearAlgebra ๊ฐ์ฒด์ ์ ์ฉ๋ LinearAlgebra์ ๋ฉ์๋์ ์ํด ๋ ์ด์ (์์์ ์ผ๋ก) ๋ฐํ๋์ง ์์ต๋๋ค. ํนํ ์ด๋ก ์ธํด ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํฉ๋๋ค.
- ํน์ํ "ํฌ์" ํ๋ ฌ(์: ๋๊ฐ์ )์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํ๋ฉด ์ด์ ์กฐ๋ฐํ ํ๋ ฌ์ด ๋ฐํ๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก getproperty ํธ์ถ๋ก ์์ฑ๋ SVD ๊ฐ์ฒด์ D1 ๋ฐ D2 ํ๋๋ ์ด์ ์กฐ๋ฐํ ํ๋ ฌ์ด ๋ฉ๋๋ค.
- ์ ์ฌํ(::SpecialSparseMatrix, ::Type, ::Dims) ๋ฉ์๋๋ ์กฐ๋ฐํ ๋ ํ๋ ฌ์ ๋ฐํํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก 2, 3 ๋ฐ ๋์นญ ์ผ์ค๋๊ฐ ํ๋ ฌ์ ๊ณฑ์ ์กฐ๋ฐํ ํ๋ ฌ์ ์์ฑ์ผ๋ก ์ด์ด์ง๋๋ค. ๋ํ (๋น์ ์ ) ํ๋ ฌ์ ํน์ "ํฌ์" ํ๋ ฌ์์ ์ธ ๊ฐ์ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌํ ํ๋ ฌ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ด์ "zero(::Type{Matrix{T}})"๋ก ์ธํด ์คํจํฉ๋๋ค.
- ์ธ์
- %s ๋ฐ %c๋ ์ด์ textwidth ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋๋น ํ์์ ์ง์ ํฉ๋๋ค.
- ํ๋กํ
- CPU ๋ก๋ ํ๋กํ์ผ๋ง์ ์ด์ ์ค๋ ๋ ๋ฐ ์์ ์ ํฌํจํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. Profile.print()์๋ ์ค๋ ๋, ์์ ๋๋ ํ์ ์ค๋ ๋/์์ , ์์ /์ค๋ ๋, ์ค๋ ๋ ๋ฐ ์์ ์ธ์๋ฅผ ๊ทธ๋ฃนํํ์ฌ ํํฐ๋ง์ ์ ๊ณตํ ์ ์๋ ์๋ก์ด groupby ์ธ์๊ฐ ์์ต๋๋ค. ๋ํ ์ด์ ๊ฐ ์ํ์์ ์ค๋ ๋๊ฐ ์ ํด ์ํ์ธ์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์ฌ์ฉ๋ฅ ์ด ์ ์ฒด ๋๋ ์ค๋ ๋๋ณ๋ก ๋ณด๊ณ ๋ฉ๋๋ค. Profile.fetch()์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ฉ๋๋ค. ํ๋กํ์ผ๋ง ๋ฐ์ดํฐ์ ์ธ๋ถ ์๋น์์์ ํ์ ํธํ์ฑ์ ์ํด include_meta=false๋ฅผ ์ ๋ฌํ์ฌ ์ ์ธํ ์ ์์ต๋๋ค.
- ์๋ก์ด Profile.Allocs ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ๋กํ์ผ๋งํ ์ ์์ต๋๋ค. ๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ ํ๊ณผ ํฌ๊ธฐ์ ๋ํ ์คํ ์ถ์ ์ด ๊ธฐ๋ก๋๋ฉฐ, Sample_rate ์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌ์ฑ ๊ฐ๋ฅํ ํ ๋น ์๋ฅผ ๊ฑด๋๋ฐ์ด ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- ์ด์ ํ๋กํ์ ๋จผ์ ๋ก๋ํ์ง ์๊ณ ๋ ์์ ์ด ์คํ๋๋ ๋์ ์ฌ์ฉ์๊ฐ ๊ณ ์ ๊ธฐ๊ฐ CPU ํ๋กํ์ผ๋ง์ ์คํํ ์ ์์ผ๋ฉฐ ์คํ ์ค์ ๋ณด๊ณ ์๊ฐ ํ์๋ฉ๋๋ค. MacOS ๋ฐ FreeBSD์์๋ ctrl-t๋ฅผ ๋๋ฅด๊ฑฐ๋ SIGINFO๋ฅผ ํธ์ถํ์ธ์. ๋ค๋ฅธ ํ๋ซํผ์ ๊ฒฝ์ฐ SIGUSR1์ ํ์ฑํํฉ๋๋ค. % kill -USR1 $julia_pid. Windows์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ต์ฒด
- RadioMenu๋ ์ด์ ์ต์ ์ ์ง์ ์ ํํ ์ ์๋ ์ถ๊ฐ ํค๋ณด๋ ๋จ์ถํค๋ฅผ ์ง์ํฉ๋๋ค.
- "?(x, y" ๋ค์์ Tab ํค๋ฅผ ๋๋ฅด๋ฉด ์ธ์ x, y, ....์ ํจ๊ป ํธ์ถํ ์ ์๋ ๋ชจ๋ ๋ฉ์๋๊ฐ ํ์๋ฉ๋๋ค. (์์ ๊ณต๋ฐฑ์ด ์์ผ๋ฉด ๋์๋ง ๋ชจ๋๋ก ๋ค์ด๊ฐ ์ ์์ต๋๋ค.) "MyModule.?(x, y "๋ ๊ฒ์์ "MyModule"๋ก ์ ํํฉ๋๋ค. TAB์ ๋๋ฅด๋ ค๋ฉด ํ๋ ์ด์์ ์ธ์๊ฐ Any๋ณด๋ค ๋ ๊ตฌ์ฒด์ ์ธ ์ ํ์ด์ด์ผ ํฉ๋๋ค. ๋๋ TAB ๋์ SHIFT-TAB์ ์ฌ์ฉํ์ฌ ํธํ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ํ์ฉํฉ๋๋ค.
- ์๋ก์ด ์ ์ญ ๋ณ์ err์ ์ฌ์ฉํ๋ฉด ๋ง์ง๋ง ์๋ต์ ๋ํ ans์ ๋์๊ณผ ์ ์ฌํ๊ฒ ์ต์ ์์ธ๋ฅผ ์ป์ ์ ์์ต๋๋ค. err์ ์ ๋ ฅํ๋ฉด ์์ธ ์ ๋ณด๊ฐ ๋ค์ ์ธ์๋ฉ๋๋ค.
- ์คํ์ค๋ฐฐ์ด
- SparseArrays ์ฝ๋๋ฅผ Julia ์ ์ฅ์์์ ์ธ๋ถ SparseArrays.jl ์ ์ฅ์๋ก ์ด๋ํ์ต๋๋ค.
- ์๋ก์ด ์ฐ๊ฒฐ ํจ์ sparse_hcat, sparse_vcat ๋ฐ sparse_hvcat๋ ์ ๋ ฅ ์ธ์์ ์ ํ์ ๊ด๊ณ์์ด SparseMatrixCSC ์ ํ์ ๋ฐํํฉ๋๋ค. ์ด๋ LinearAlgebra.jl ๋ฐ SparseArrays.jl ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ํ ํ๋ ฌ ๊ฒฐํฉ ๋ฉ์ปค๋์ฆ์ ํตํฉํ๋ ๋ฐ ํ์ํ์ต๋๋ค.
- ๋ก๊น
- ํ์ค ๋ก๊น ์์ค BelowMinLevel, Debug, Info, Warn, Error ๋ฐ AboveMaxLevel์ด ์ด์ ํ์ค ๋ก๊น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ด๋ณด๋ด์ง๋๋ค.
- ์ ๋ ์ฝ๋
- ์ ๊ทํ๋ ๋ฌธ์์ด์ ๋ช ์์ ์ผ๋ก ๊ตฌ์ฑํ์ง ์๊ณ ์ ๋์ฝ๋ ๋๋ฑ์ฑ์ ํ์ธํ๋ isequal_normalized ํจ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ์ด์ Unicode.normalize ํจ์๋ ์ฌ์ฉ์ ์ ์ ๋ฌธ์ ๋งคํ์ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ Charttransform ํค์๋๋ฅผ ํ์ฉํ๋ฉฐ, Julia ํ์๊ฐ ์๋ณ์๋ฅผ ์ ๊ทํํ ๋ ์ฌ์ฉ๋๋ ๋งคํ์ ์ฌํํ๊ธฐ ์ํด Unicode.julia_chartransform ํจ์๋ ์ ๊ณต๋ฉ๋๋ค.
- Test
- ์ด์ '@test_throws "some message" Triggers_error()'๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์์ธ ์ ํ์ ๊ด๊ณ์์ด ํ์๋ ์ค๋ฅ ํ ์คํธ์ "some message" ์ค๋ฅ๊ฐ ํฌํจ๋์ด ์๋์ง ํ ์คํธํ ์ ์์ต๋๋ค. ์ ๊ท์, ๋ฌธ์์ด ๋ชฉ๋ก ๋ฐ ์ผ์น ํจ์๋ ์ง์๋ฉ๋๋ค.
- ์ด์ @testset foo()๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์ด์ง ํจ์์์ ํ ์คํธ ์ธํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํ ์คํธ ์ผ์ด์ค ์ด๋ฆ์ ํธ์ถ๋๋ ํจ์์ ์ด๋ฆ์ ๋๋ค. ํธ์ถ๋ ํจ์์๋ ๋ชจ๋ ์ค๊ฐ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ๋ ๋์ ๋ค๋ฅธ ํจ์์ ๋ํ ํธ์ถ์ ํฌํจํ์ฌ @test ๋ฐ ๊ธฐํ @testset ์ ์๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
- TestLogger ๋ฐ LogRecord๋ ์ด์ ํ์ค ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ด๋ณด๋ด์ง๋๋ค.
- ๋ถ์ฐ
- ์ด์ SSHManager๋ addprocs() ๋ฉ์๋์ shell=:csh ๋งค๊ฐ๋ณ์๋ฅผ ํตํด csh/tcsh ๋ํผ๊ฐ ์๋ ์์ ์ ์ค๋ ๋๋ฅผ ์ง์ํฉ๋๋ค.
- ๊ธฐํ ๋ณ๊ฒฝ ์ฌํญ
- GC.enable_logging(true)์ ์ฌ์ฉํ๋ฉด ์์ง๋ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฐ ์๊ฐ๊ณผ ํจ๊ป ๊ฐ ๊ฐ๋น์ง ์์ง ์์ ์ ๊ธฐ๋กํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru