Julia ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 1.10 릴리슀

κ³ μ„±λŠ₯, 동적 타이핑 지원 및 병렬 ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ λ‚΄μž₯ 도ꡬ와 같은 ν’ˆμ§ˆμ„ κ²°ν•©ν•œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 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

DDoS 보호, VPS VDS μ„œλ²„κ°€ μžˆλŠ” μ‚¬μ΄νŠΈλ₯Ό μœ„ν•œ μ•ˆμ •μ μΈ ν˜ΈμŠ€νŒ… κ΅¬μž… πŸ”₯ DDoS 곡격 λ°©μ§€ κΈ°λŠ₯이 νƒ‘μž¬λœ μ•ˆμ •μ μΈ μ›Ήμ‚¬μ΄νŠΈ ν˜ΈμŠ€νŒ…, VPS 및 VDS μ„œλ²„λ₯Ό κ΅¬λ§€ν•˜μ„Έμš” | ProHoster