κ³ μ±λ₯, λμ νμ΄ν μ§μ λ° λ³λ ¬ νλ‘κ·Έλλ°μ μν λ΄μ₯ λꡬμ κ°μ νμ§μ κ²°ν©ν νλ‘κ·Έλλ° μΈμ΄ Julia 1.10κ° μΆμλμμ΅λλ€. Juliaμ ꡬ문μ MATLABκ³Ό μ μ¬νλ©° μΌλΆ μμλ Ruby λ° Lispμμ μ°¨μ©λμμ΅λλ€. λ¬Έμμ΄ μ‘°μ λ°©λ²μ Perlμ μ°μμν΅λλ€. νλ‘μ νΈ μ½λλ MIT λΌμ΄μ μ€μ λ°λΌ λ°°ν¬λ©λλ€.
μΈμ΄μ μ£Όμ νΉμ§:
- κ³ μ±λ₯: νλ‘μ νΈμ μ£Όμ λͺ©ν μ€ νλλ C νλ‘κ·Έλ¨μ κ°κΉμ΄ μ±λ₯μ λ¬μ±νλ κ²μ λλ€. Julia μ»΄νμΌλ¬λ LLVM νλ‘μ νΈλ₯Ό κΈ°λ°μΌλ‘ νλ©° λ§μ λμ νλ«νΌμ λν΄ ν¨μ¨μ μΈ κΈ°λ³Έ κΈ°κ³μ΄ μ½λλ₯Ό μμ±ν©λλ€.
- κ°μ²΄ μ§ν₯ λ° ν¨μν νλ‘κ·Έλλ° μμλ₯Ό ν¬ν¨ν λ€μν νλ‘κ·Έλλ° ν¨λ¬λ€μμ μ§μν©λλ€. νμ€ λΌμ΄λΈλ¬λ¦¬λ 무μ보λ€λ λΉλκΈ° I/O, νλ‘μΈμ€ κ΄λ¦¬, λ‘κΉ , νλ‘νμΌλ§ λ° ν¨ν€μ§ κ΄λ¦¬λ₯Ό μν κΈ°λ₯μ μ 곡ν©λλ€.
- λμ νμ΄ν: μ€ν¬λ¦½ν νλ‘κ·Έλλ° μΈμ΄μ λ§μ°¬κ°μ§λ‘ μ΄ μΈμ΄μμλ λ³μ μ νμ λν λͺ μμ μΈ μ μκ° νμνμ§ μμ΅λλ€. λνν λͺ¨λλ₯Ό μ§μν©λλ€.
- μ νμ λͺ μμ μΌλ‘ μ§μ νλ μ νμ κΈ°λ₯.
- μμΉ κ³μ°, κ³Όν κ³μ°, κΈ°κ³ νμ΅ μμ€ν λ° λ°μ΄ν° μκ°νμ νμν ꡬ문μ λλ€. κ³μ° λ³λ ¬νλ₯Ό μν λ€μν μ«μ λ°μ΄ν° μ ν λ° λꡬλ₯Ό μ§μν©λλ€.
- μΆκ° λ μ΄μ΄ μμ΄ C λΌμ΄λΈλ¬λ¦¬μμ ν¨μλ₯Ό μ§μ νΈμΆνλ κΈ°λ₯.
Julia 1.10μ μ£Όμ λ³κ²½ μ¬ν:
- μλ‘μ΄ μΈμ΄ κΈ°λ₯
- κΈ°λ³Έμ μΌλ‘ μλ‘κ³ ν₯μλ JuliaSyntax.jl νμκ° νμ±νλ©λλ€. μ΄μ λ²μ μΌλ‘ λλλ¦¬λ €λ©΄ JULIA_USE_FLISP_PARSER νκ²½ λ³μλ₯Ό 1λ‘ μ€μ ν΄μΌ ν©λλ€.
- μ΄μ κΈ°νΈ β₯Ί (U+297A, \leftarrowsubset) λ° β₯· (U+2977, \leftarrowless)λ₯Ό νμ΄ν μ°μ μμμ μ΄μ§ μ°μ°μλ‘ μ¬μ©ν μ μμ΅λλ€.
- μΈμ΄ λ³κ²½
- νμ μμ μ μμ±ν λ μμ μμ μ λ‘컬 RNG(λμ μμ±κΈ°)λ λ μ΄μ μν₯μ λ°μ§ μμ΅λλ€. μλ‘μ΄ λμ μμ±κΈ° μ΄κΈ°ν 체κ³λ SplitMix λ° DotMix ꡬνκ³Ό μ μ¬ν©λλ€.
- "Union{}" μ νμ μΈμλ₯Ό μ²λ¦¬νκΈ° μν΄ λͺ μμ μΌλ‘ μ μλ λ©μλλ₯Ό μ νΈνμ¬ "Union{}" μ νμ λͺ ννκ² νλ μλ‘μ΄ λ©μλ μ ν κ·μΉμ΄ μ μλμμ΅λλ€.
- λ¬Έμ "h bar" β (\hslash U+210F)λ μ΄μ Δ§ (\hbar U+0127)μ λμΌνκ² μ·¨κΈλ©λλ€.
- μ΄μ "@simd" λ§€ν¬λ‘μλ νΉμ μλ―Έκ° μμ΅λλ€. λͺ¨λ "@fastmath" μ΅μ νλ₯Ό νμ±ννλ λμ λΆλ μμμ μ¬μ λ ¬ λ° ββμ λ¦¬λ§ νμ©ν©λλ€. μ΄ λ³κ²½μΌλ‘ μΈν΄ μ€ν μ€μΈ νλ‘κ·Έλ¨μ μ±λ₯ μ νκ° λ°μνλ κ²½μ° "@fastmath @simd"λ₯Ό μ¬μ©νμ¬ μ΄μ λμμ 볡μν μ μμ΅λλ€.
- ν€μλκ° μλ λ©μλμ μ€ν μΆμ μ νμλ λ ν€μλμ ν μ€νΈ ννμ μ΄μ μλ‘μ΄ λ§€ν¬λ‘ ꡬ문 "@Kwargs{key1::Type1, ...}"μ μ¬μ©νμ¬ λ¨μνλμμ΅λλ€.
- μ»΄νμΌλ¬/λ°νμ κ°μ
- μ΄μ κ°λΉμ§ μμ§κΈ°λ νκΈ°ν κ°μ²΄μ λ€μ€ μ€λ λ μ νμ μνν©λλ€.
- JITLinkλ κΈ°λ³Έμ μΌλ‘ νμ±νλμ΄ μμ΅λλ€. Linux-LLVM 15 μ΄μ λ²μ μ μ¬μ©νμ¬ Juliaλ₯Ό λΉλν λ aarch64 μν€ν μ² κΈ°λ° μμ€ν .
- μ¬μ μ»΄νμΌ νλ‘μΈμ€μλ pid νμΌ μ κΈμ΄ ν¬ν¨λ©λλ€. ν λ²μ νλμ Julia νλ‘μΈμ€λ§ μ¬μ μ»΄νμΌμ μνν©λλ€. μ΄μ μλ λͺ¨λ νλ‘μΈμ€κ° λ³λ ¬λ‘ μ€νλμμΌλ©° κ²½μ 쑰건μΌλ‘ μΈν΄ μ»΄νμΌ μΊμ νμΌμ΄ μμλ μνμ΄ μμμ΅λλ€.
- λͺ
λ Ήμ€ λ§€κ°λ³μ λ³κ²½
- κ°λΉμ§ μμ§κΈ°κ° μ¬μ©ν λ³λ ¬ μ€λ λ μλ₯Ό μ§μ ν μ μλ "--gcthreads" μ΅μ μ΄ μΆκ°λμμ΅λλ€. κΈ°λ³Έκ°μ "N/2"μ λλ€. μ¬κΈ°μ Nμ Juliaκ° μ¬μ©νλ μμ μ μ€λ λ("-threads") μμ λλ€.
- λΉλ μμ€ν
λ³κ²½
- "SparseArrays" λ° "SuiteSparse" λ Έλλ κΈ°λ³Έμ μΌλ‘ μμ€ν μ΄λ―Έμ§μμ μ μΈλ©λλ€. Julia κΈ°λ³Έ ν¨ν€μ§μλ λ μ΄μ GPL λΌμ΄μΌμ€ λΌμ΄λΈλ¬λ¦¬κ° ν¬ν¨λμ΄ μμ§ μμ΅λλ€. κ·Έλ¬λ μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬λ μ¬μ ν νμ€ λ°μ΄λ리 λ°°ν¬νμ μΈμ΄μ ν¬ν¨λμ΄ μμ΅λλ€.
- μλ‘μ΄ λΌμ΄λΈλ¬λ¦¬ κΈ°λ₯
- "tanpi"λ "tan(pi*x)"λ³΄λ€ "tan(Ο*x)"λ₯Ό λ μ ννκ² κ³μ°ν©λλ€.
- "fourroot(x)"λ Base.Mathμ μ μλμ΄ μμΌλ©° "x"μ λ€ λ²μ§Έ κ·Όμ κ³μ°νλ λ° μ¬μ©ν μ μμ΅λλ€. μ΄ λ°©λ²μ μ§§μ μ΄λ¦μ μ λμ½λ λ¬Έμ βμ΄λ©° \fourthroot λͺ λ Ήμ μ¬μ©νμ¬ μ λ ₯ν μ μμ΅λλ€.
- ν΄λΉ C νΈμΆμ κΈ°λ₯μ ν΄λΉνλ κΈ°λ₯μΈ "Libc.memmove", "Libc.memset" λ° "Libc.memcpy" ν¨μλ₯Ό μΆκ°νμ΅λλ€.
- ν¨ν€μ§κ° μ΄λ―Έ μ¬μ μ»΄νμΌλ κ²½μ° "true"λ₯Ό λ°ννλ "Base.isprecompiled(pkg::PkgId)" λ©μλλ₯Ό μΆκ°νμ΅λλ€.
- λΌμ΄λΈλ¬λ¦¬ κΈ°λ₯ μ΅μ
- "binomial(x, k)"λ μ΄μ μ μκ° μλ "x"λ₯Ό μ§μν©λλ€.
- "CartesianIndex"λ μ΄μ λ°©μ‘μμ "μ€μΉΌλΌ"λ‘ μ²λ¦¬λ©λλ€.
- "printstyled" λ°©λ²μ μ΄μ κΈ°μΈμκΌ΄ μΆλ ₯μ μ§μν©λλ€.
- μ΄μ "parent" λ° "parentindices" λ©μλλ "SubStrings" μ νμ μ§μν©λλ€.
- "replace(string,pattern...)" λ©μλλ μ΄μ λ¬Έμμ΄μ λ°ννλ λμ μ€νΈλ¦ΌμΌλ‘ μΆλ ₯νκΈ° μν μ νμ "IO" μΈμλ₯Ό μ§μν©λλ€.
- "startswith" λ©μλλ μ΄μ I/O μ€λ λλ₯Ό μ§μν©λλ€.
- κΈ°λ³Έ λΌμ΄λΈλ¬λ¦¬ λ³κ²½
- "sortperm!" λ©μλμμ κ·Έλ¦¬κ³ "partialsortperm!" μμ νμ§ μμ λμμ μ λ°ν μ μλ "initialized=true" ν€μλλ₯Ό μ κ±°νμ΅λλ€.
- "Rational" μ ν μ μλ₯Ό μΈμν λ μ΄μ "Rational" μ ν μ€νΈλ¦Ό(μ: λ°°μ΄)μ 컨ν μ€νΈμμ ν΄λΉ λΆλͺ¨λ₯Ό 건λλλλ€.
- ν¨ν€μ§ κ΄λ¦¬μ
- "Pkg.precompile" λ©μλλ μ΄μ "timing"μ ν΅μ¬ μΈμλ‘ μ¬μ©νμ¬ κ° ν¨ν€μ§μ λν μ¬μ μ»΄νμΌ νμ΄λ° μ 보λ₯Ό νμν©λλ€("Pkg.precompile(timing=true)").
- μ νλμν
- "AbstractQ" μ νμ λ μ΄μ "AbstractMatrix"μ νμ μ νμ΄ μλλλ€. λν "adjoint(Q::AbstractQ)" λ©μλλ λ μ΄μ "Adjoint" μ νμ "Q"λ₯Ό λννμ§ μκ³ "AbstractQ"μ νμ μ νμΈ "AdjointQ"λ‘ λ체ν©λλ€. μ΄λ¬ν λ³κ²½μ μΌλ°μ μΌλ‘ "AbstractQ" μΈμ€ν΄μ€κ° ν¨μ λ° νλ ¬μ κΈ°λ°μΌλ‘ νλ μ ν μ°μ°μμ²λΌ λμνκ³ μΈλ±μ€λ‘ μ‘μΈμ€ν μ μλ€λ μ¬μ€μ κΈ°μΈν©λλ€. λν λ§μ "AbstractQ" μ νμ λ€μν ν¬κΈ°μ 벑ν°/νλ ¬μμ μλνμ¬ μν©μ λ°λ₯Έ ν¬κΈ°λ₯Ό κ°λ νλ ¬μ²λΌ μλν μ μμ΅λλ€. μ΄λ² λ³κ²½μΌλ‘ μ΄μ "AbstractQ" μ νμ μ μ μλ μΈν°νμ΄μ€λ₯Ό κ°μ§κ² λμμΌλ©° μ΄μ λν λ΄μ©μ Julia λ¬Έμμ μμΈν μ€λͺ λμ΄ μμ΅λλ€.
- μΈμλΆν΄ κ²°κ³Όλ λ μ΄μ "Adjoint" λ° "Transpose" λνΌ μ νμΌλ‘ λνλμ§ μμ΅λλ€. λμ "AdjointFactorization" λ° "TranposeFactorization" μ νμ΄ μΆκ°λμμΌλ©°, μ΄ μ ν μ체λ "Factorization"μ νμ μ νμ λλ€.
- μλ‘μ΄ κΈ°λ₯ "hermitianpart" λ° "hermitianpart!" νλ ¬μ μλ₯΄λ―ΈνΈ(μ§μ ν λμΉ) λΆλΆμ μ°ΎμΌλ €λ©΄
- "AbstractMatrix" μ νμ μ μΉλ μμ νλ ¬μ "norm" λ©μλλ μ΄μ κΈ°λ³Έμ μΌλ‘ "AbstractVectors"μ νμ¬ λμκ³Ό μΌμΉνλ λΆλͺ¨ νλ ¬μ νμ€μ λ°νν©λλ€.
- A λλ B μ€ νλκ° λμΉ λλ μλ₯΄λ―ΈνΈμΈ κ²½μ° κ³ μ λ²‘ν° "eigen(A, B)" λ° "eigvals(A, B)"λ₯Ό κ³μ°νλ λ°©λ²μ΄ μΆκ°λμμ΅λλ€.
- "eigvals/eigen(A, cholesky(B))" λ°©λ²μ μ΄μ μμ μ λΆνΈ Bμ λν Cholesky νμ₯μ ν΅ν΄ Aμ Bμ μΌλ° κ³ μ κ°(κ³ μ : λ° κ³ μ 벑ν°)μ κ³μ°ν©λλ€.
- μΈμ
- νμ μ§μ μλ μ΄μ "%*s" λ° "%*.*g"μ κ°μ λμ λλΉ λ° μ λ°λλ₯Ό μ§μν©λλ€.
- κ΅μ²΄
- μ€ν μΆμ μ μΈμν λ ν¨μ μκ·Έλμ²μμ μΈμλλ μ νμ κΉμ΄λ μ§λμΉκ² μμΈν μΆλ ₯μ νΌνκΈ° μν΄ μ νλ©λλ€.
- Test
- μ΄μ ν μ€νΈ ννμμ΄ false/trueλ₯Ό λ°ννμ§ μμΌλ©΄ "@test_broken" λ§€ν¬λ‘(λλ "broken=true"μΈ "@test")μμ μ€λ₯κ° λ°μν©λλ€.
- "@test"λ₯Ό νΈμΆν λ μ€λ₯κ° λ°μνκ±°λ ν¨μ λ΄μμ μ€λ₯κ° λ°μνλ κ²½μ° μ΄μ "@testset"μμ ν μ€νΈ μμΉλ₯Ό μ΄ν΄νλ λ° λμμ΄ λλλ‘ μμΈν μ€ν μΆμ μ΄ μ 곡λ©λλ€.
- InteractiveUtils
- "code_native" λ° "@code_native"λ μ΄μ AT&T λμ Intel ꡬ문μ μ¬μ©ν©λλ€.
- "@time_imports"λ μ΄μ κ°μ Έμ¨ λͺ¨λμ λν "__init__()"μ μ€ν μκ°μ νμν©λλ€.
- μ€λλμμΌλ©° μ κ±° κ΅¬μ‘°κ° μ μ©λ¨
- "@pure" λ§€ν¬λ‘λ λ μ΄μ μ¬μ©λμ§ μμ΅λλ€. λμ "Base.@assume_ effects :foldable"μ μ¬μ©ν΄μΌ ν©λλ€.
μΆμ² : opennet.ru
