환경 변수

환경 변수 (Environment Variables)

Julia는 여러 환경 변수로 설정할 수 있어요. 각 운영체제의 평범한 방식으로 설정하거나, Julia 안에서 이식 가능한 방식으로 설정할 수 있죠. 환경 변수 JULIA_EDITORvim으로 설정하고 싶다고 가정해 보겠습니다. ENV["JULIA_EDITOR"] = "vim"라고 입력하면(예: REPL에서) 그 경우에 한해 변경할 수 있고, 사용자 홈 디렉터리의 사용자 설정 파일 ~/.julia/config/startup.jl에 같은 내용을 추가하면 영구적으로 적용돼요. 같은 환경 변수의 현재 값은 ENV["JULIA_EDITOR"]을 평가하면 알 수 있습니다.

Julia가 사용하는 환경 변수는 대부분 JULIA로 시작해요. InteractiveUtils.versioninfo를 키워드 verbose=true로 호출하면, 이름에 JULIA를 포함한 것들을 비롯해 Julia와 관련된 정의된 환경 변수들을 출력으로 나열해 줍니다.

런타임 중에, 예를 들어 ~/.julia/config/startup.jl 안에서 환경 변수를 바꾸는 건 피하는 게 권장돼요. 한 가지 이유는 JULIA_NUM_THREADSJULIA_PROJECT 같은 일부 julia 언어 변수는 Julia가 시작하기 전에 설정되어야 하기 때문이에요. 마찬가지로 sysimage(PackageCompiler를 통해)에 있는 사용자 모듈의 __init__() 함수는 startup.jl보다 먼저 실행되므로, startup.jl에서 환경 변수를 설정하면 사용자 코드에는 너무 늦을 수 있어요. 게다가 런타임 중에 환경 변수를 바꾸면 그렇지 않으면 무해한 코드에 데이터 경쟁이 생길 수 있습니다.

Bash에서는 환경 변수를 Julia를 시작하기 전에 export JULIA_NUM_THREADS=4처럼 실행해서 수동으로 설정하거나, Bash가 시작될 때마다 변수를 설정하도록 같은 명령을 ~/.bashrc~/.bash_profile에 추가할 수 있어요.

출처: Julia 공식 문서: 환경 변수

파일 위치 (File locations)

JULIA_BINDIR

Julia 실행 파일이 들어 있는 디렉터리의 절대 경로로, 전역 변수 Sys.BINDIR을 설정해요. $JULIA_BINDIR이 설정되어 있지 않으면 Julia는 런타임에 Sys.BINDIR 값을 결정합니다.

실행 파일 자체는 기본적으로 다음 중 하나예요.

$JULIA_BINDIR/julia
$JULIA_BINDIR/julia-debug

전역 변수 Base.DATAROOTDIRSys.BINDIR에서 Julia와 연관된 데이터 디렉터리까지의 상대 경로를 결정합니다. 그러면 경로

$JULIA_BINDIR/$DATAROOTDIR/julia/base

는 Julia가 처음에 소스 파일을 찾는 디렉터리(Base.find_source_file()을 통해)를 결정해요.

마찬가지로 전역 변수 Base.SYSCONFDIR은 설정 파일 디렉터리까지의 상대 경로를 결정합니다. 그러면 Julia는 기본적으로 다음 위치에서 startup.jl 파일을 찾습니다(Base.load_julia_startup()을 통해).

$JULIA_BINDIR/$SYSCONFDIR/julia/startup.jl
$JULIA_BINDIR/../etc/julia/startup.jl

예를 들어 Linux 설치에서 Julia 실행 파일이 /bin/julia에 있고, DATAROOTDIR../share, SYSCONFDIR../etc라면, JULIA_BINDIR/bin으로, 소스 파일 검색 경로는

/share/julia/base

전역 설정 검색 경로는

/etc/julia/startup.jl

로 설정됩니다.

JULIA_PROJECT

초기 활성 프로젝트가 무엇인지 나타내는 디렉터리 경로예요. 이 환경 변수를 설정하는 건 --project 시작 옵션을 지정하는 것과 같은 효과가 있지만, --project가 더 높은 우선순위를 가집니다. 변수가 @.(뒤의 점에 주의하세요)로 설정되면 Julia는 현재 디렉터리와 그 부모들에서 Project.toml이나 JuliaProject.toml 파일을 담은 프로젝트 디렉터리를 찾으려고 합니다. 코드 로딩 장도 참고하세요.

JULIA_PROJECT는 julia를 시작하기 전에 정의되어야 해요. startup.jl에서 정의하면 시작 과정에서 너무 늦습니다.

JULIA_LOAD_PATH

JULIA_LOAD_PATH 환경 변수는 전역 Julia LOAD_PATH 변수를 채우는 데 쓰이고, 이 변수는 importusing으로 어떤 패키지를 로드할 수 있는지 결정합니다(코드 로딩 참고).

PATH 변수와 달리, JULIA_LOAD_PATH의 빈 항목은 LOAD_PATH를 채울 때 기본값 ["@", "@v#.#", "@stdlib"]로 확장됩니다. 이 덕분에 JULIA_LOAD_PATH이 이미 설정되어 있든 아니든, 셸 스크립트에서 로드 경로 값의 뒤에 붙이기, 앞에 붙이기 등을 쉽게 할 수 있어요. 예를 들어 /foo/bar 디렉터리를 LOAD_PATH 앞에 붙이려면 그냥

export JULIA_LOAD_PATH="/foo/bar:$JULIA_LOAD_PATH"

JULIA_LOAD_PATH 환경 변수가 이미 설정되어 있다면, 그 옛 값 앞에 /foo/bar가 붙어요. 반면 JULIA_LOAD_PATH이 설정되어 있지 않다면, /foo/bar:로 설정되어 ["/foo/bar", "@", "@v#.#", "@stdlib"]라는 LOAD_PATH 값으로 확장됩니다. JULIA_LOAD_PATH이 빈 문자열로 설정되면 빈 LOAD_PATH 배열로 확장돼요. 다시 말해, 빈 문자열은 빈 문자열의 1-요소 배열이 아니라 0-요소 배열로 해석됩니다. 이 동작은 환경 변수를 통해 빈 로드 경로를 설정할 수 있도록 하기 위해 선택된 거예요. 기본 로드 경로를 원한다면 환경 변수를 설정 해제하거나, 값이 꼭 있어야 한다면 문자열 :로 설정하세요.

Windows에서는 대부분의 Windows 경로 목록과 마찬가지로 경로 요소가 ; 문자로 구분됩니다. 위 문단의 :;로 바꾸면 돼요.

JULIA_DEPOT_PATH

JULIA_DEPOT_PATH 환경 변수는 전역 Julia DEPOT_PATH 변수를 채우는 데 쓰이고, 이 변수는 패키지 관리자와 Julia의 코드 로딩 메커니즘이 패키지 레지스트리, 설치된 패키지, 이름 있는 환경, 저장소 클론, 캐시된 컴파일 패키지 이미지, 설정 파일, REPL 히스토리 파일의 기본 위치를 찾는 곳을 제어해요.

PATH 변수와 달리 그러나 JULIA_LOAD_PATH과 비슷하게, JULIA_DEPOT_PATH의 빈 항목에는 특별한 동작이 있습니다.

  • 끝에 있으면 사용자 depot을 제외한 DEPOT_PATH의 기본값으로 확장돼요.
  • 시작에 있으면 사용자 depot을 포함한 DEPOT_PATH의 기본값으로 확장돼요.

이 덕분에 Julia에 번들된 자원(캐시 파일, 아티팩트 등)에 대한 접근은 유지하면서 사용자 depot을 쉽게 오버라이드할 수 있어요. 예를 들어 사용자 depot을 /foo/bar로 바꾸려면 끝에 :를 붙이세요.

export JULIA_DEPOT_PATH="/foo/bar:"

레지스트리 클론이나 패키지 설치 같은 모든 패키지 연산은 이제 /foo/bar에 씁니다. 하지만 빈 항목이 기본 시스템 depot으로 확장되므로, 번들된 자원은 여전히 사용 가능해요. 정말 /foo/bar의 depot만 사용하고 번들 자원은 로드하고 싶지 않다면, 환경 변수를 끝의 콜론 없이 /foo/bar로 설정하기만 하면 됩니다.

기본 사용자 depot을 포함한 전체 기본 목록 끝에 depot을 추가하려면 시작에 :를 쓰세요.

export JULIA_DEPOT_PATH=":/foo/bar"

위 규칙에는 예외가 두 가지 있어요. 첫째, JULIA_DEPOT_PATH이 빈 문자열로 설정되면 빈 DEPOT_PATH 배열로 확장됩니다. 다시 말해, 빈 문자열은 빈 문자열의 1-요소 배열이 아니라 0-요소 배열로 해석돼요. 이 동작은 환경 변수를 통해 빈 depot 경로를 설정할 수 있도록 선택된 것입니다.

둘째, JULIA_DEPOT_PATH에 사용자 depot이 지정되지 않으면 빈 항목이 사용자 depot을 포함한 기본 depot으로 확장됩니다. 이 덕분에 환경 변수를 :로 설정하면 환경 변수가 설정 해제된 것처럼 기본 depot을 사용할 수 있어요.

Windows에서는 대부분의 Windows 경로 목록과 마찬가지로 경로 요소가 ; 문자로 구분됩니다. 위 문단의 :;로 바꾸면 돼요.

JULIA_DEPOT_PATH는 julia를 시작하기 전에 정의되어야 해요. startup.jl에서 정의하면 시작 과정에서 너무 늦고, 그 시점에는 환경 변수에서 채워진 DEPOT_PATH 배열을 직접 수정하는 게 대안입니다.

JULIA_HISTORY

REPL 히스토리 파일의 절대 경로 REPL.find_hist_file()이에요. $JULIA_HISTORY가 설정되어 있지 않으면 REPL.find_hist_file()은 기본적으로

$(DEPOT_PATH[1])/logs/repl_history.jl

로 정해집니다.

JULIA_MAX_NUM_PRECOMPILE_FILES

프리컴파일 캐시에 저장할 단일 패키지의 서로 다른 인스턴스의 최대 개수를 설정합니다(기본 = 10).

JULIA_VERBOSE_LINKING

true로 설정하면 프리컴파일 중에 링커 명령이 표시됩니다.

Pkg.jl

JULIA_CI

true로 설정하면 어떤 패키지 연산이든 패키지 사용 통계 수집 목적의 지속적 통합(CI) 시스템의 일부임을 패키지 서버에 나타냅니다.

JULIA_NUM_PRECOMPILE_TASKS

패키지를 프리컴파일할 때 사용할 병렬 작업의 수예요. Pkg.precompile을 참고하세요.

JULIA_PKG_DEVDIR

Pkg.develop이 패키지를 내려받는 데 사용하는 기본 디렉터리입니다.

JULIA_PKG_IGNORE_HASHES

1로 설정하면 아티팩트의 잘못된 해시를 무시합니다. 이는 다운로드 검증을 비활성화하므로 주의해서 써야 하지만, 다른 종류의 파일 시스템 사이에서 파일을 옮길 때 문제를 해결할 수 있어요. 자세한 내용은 Pkg.jl issue #2317을 참고하세요.

이 기능은 Julia 1.6 이상에서만 지원됩니다.

JULIA_PKG_OFFLINE

true로 설정하면 오프라인 모드가 활성화됩니다. Pkg.offline을 참고하세요.

Pkg의 오프라인 모드는 Julia 1.5 이상이 필요합니다.

JULIA_PKG_PRECOMPILE_AUTO

0으로 설정하면 매니페스트를 바꾸는 패키지 연산에 의한 자동 프리컴파일이 비활성화됩니다. Pkg.precompile을 참고하세요.

JULIA_PKG_SERVER

사용할 패키지 레지스트리의 URL을 지정합니다. 기본적으로 Pkghttps://pkg.julialang.org를 사용해 Julia 패키지를 가져와요. 추가로, export JULIA_PKG_SERVER=""로 설정하면 PkgServer 프로토콜 사용을 비활성화하고 호스트(GitHub, GitLab 등)에서 패키지에 직접 접근할 수 있습니다.

JULIA_PKG_SERVER_REGISTRY_PREFERENCE

선호하는 레지스트리 종류(flavor)를 지정해요. 현재 지원되는 값은 conservative(기본값)와 eager인데, conservative는 저장 서버가 처리한(따라서 PkgServers에서 사용 가능할 확률이 더 높은) 자원만 게시하고, eager는 저장 서버가 반드시 처리하지 않은 레지스트리도 게시합니다. 임의의 서버에서 내려받는 것을 허용하지 않는 제한적인 방화벽 뒤에 있는 사용자는 eager 종류를 쓰지 말아야 해요.

이것은 Julia 1.7 이상에만 영향을 줍니다.

JULIA_PKG_UNPACK_REGISTRY

true로 설정하면 레지스트리를 압축 tarball로 저장하는 대신 풀어서 저장합니다.

이것은 Julia 1.7 이상에만 영향을 줍니다. 이전 버전은 항상 레지스트리를 풀었어요.

JULIA_PKG_USE_CLI_GIT

true로 설정하면 git 프로토콜을 사용하는 Pkg 연산이 기본 libgit2 라이브러리 대신 외부 git 실행 파일을 사용합니다.

git 실행 파일 사용은 Julia 1.7 이상에서만 지원됩니다.

JULIA_PKGRESOLVE_ACCURACY

패키지 해석기의 정확도예요. 양의 정수여야 하고 기본값은 1입니다.

JULIA_PKG_PRESERVE_TIERED_INSTALLED

기본 패키지 설치 전략을 Pkg.PRESERVE_TIERED_INSTALLED로 바꿔서, 패키지 관리자가 이미 설치된 패키지의 가능한 한 많은 버전을 유지하면서 패키지 버전을 설치하려고 시도하게 합니다.

이것은 Julia 1.9 이상에만 영향을 줍니다.

JULIA_PKG_GC_AUTO

false로 설정하면 패키지와 아티팩트의 자동 가비지 컬렉션이 비활성화됩니다. 자세한 내용은 Pkg.gc를 참고하세요.

이 환경 변수는 Julia 1.12 이상에서만 지원됩니다.

네트워크 전송 (Network transport)

JULIA_NO_VERIFY_HOSTS

JULIA_SSL_NO_VERIFY_HOSTS

JULIA_SSH_NO_VERIFY_HOSTS

JULIA_ALWAYS_VERIFY_HOSTS

특정 전송 계층에서 신원을 검증해야 하거나 검증하지 말아야 할 호스트를 지정합니다. NetworkOptions.verify_host를 참고하세요.

JULIA_SSL_CA_ROOTS_PATH

인증 기관 루트를 담은 파일이나 디렉터리를 지정합니다. NetworkOptions.ca_roots를 참고하세요.

외부 애플리케이션 (External applications)

JULIA_SHELL

Julia가 외부 명령을 실행해야 할 때(Base.repl_cmd()를 통해) 쓸 셸의 절대 경로예요. 기본값은 환경 변수 $SHELL이고, $SHELL이 설정되어 있지 않으면 /bin/sh로 폴백합니다.

Windows에서는 이 환경 변수가 무시되고 외부 명령이 직접 실행됩니다.

JULIA_EDITOR

InteractiveUtils.editor()가 반환하고, 예를 들어 InteractiveUtils.edit에서 쓰이는 편집기예요. 선호하는 편집기의 명령, 예를 들어 vim을 가리킵니다.

$JULIA_EDITOR$VISUAL보다 우선하고, $VISUAL은 다시 $EDITOR보다 우선합니다. 이 환경 변수 중 어느 것도 설정되어 있지 않으면, 편집기는 Windows와 OS X에서는 open으로, /etc/alternatives/editor가 존재하면 그 값으로, 그 외에는 emacs로 간주됩니다.

Windows에서 Visual Studio Code를 사용하려면 $JULIA_EDITORcode.cmd로 설정하세요.

병렬화 (Parallelization)

JULIA_CPU_THREADS

사용 가능한 논리 CPU 코어 수인 전역 변수 Base.Sys.CPU_THREADS를 오버라이드합니다.

JULIA_WORKER_TIMEOUT

Distributed.worker_timeout()의 값을 설정하는 Float64예요(기본값: 60.0). 이 함수는 워커 프로세스가 죽기 전에 마스터 프로세스가 연결을 설정하기를 기다리는 시간을 초 단위로 줍니다.

JULIA_NUM_THREADS

Julia에 사용 가능한 최대 스레드 수를 설정하는 부호 없는 64비트 정수(uint64_t) 또는 문자열이에요. $JULIA_NUM_THREADS이 설정되어 있지 않거나 양수가 아닌 정수이거나, 시스템 호출로 CPU 스레드 수를 알 수 없으면 스레드 수는 1로 설정됩니다.

$JULIA_NUM_THREADSauto로 설정되면 스레드 수는 CPU 스레드 수로 설정돼요. :default:interactive 스레드풀의 크기를 각각 지정하기 위해 콤마로 구분된 문자열로 설정할 수도 있습니다.

# 5 threads in the :default pool and 2 in the :interactive pool
export JULIA_NUM_THREADS=5,2

# `auto` threads in the :default pool and 1 in the :interactive pool
export JULIA_NUM_THREADS=auto,1

JULIA_NUM_THREADS는 Julia를 시작하기 전에 정의되어야 해요. startup.jl에서 정의하면 시작 과정에서 너무 늦습니다.

Julia 1.5 이상에서는 스레드 수를 시작할 때 -t/--threads 명령줄 인자로도 지정할 수 있어요.

$JULIA_NUM_THREADSauto 값은 Julia 1.7 이상이 필요합니다.

스레드풀의 x,y 형식은 Julia 1.9 이상이 필요합니다.

JULIA_THREAD_SLEEP_THRESHOLD

대소문자 구분 없는 부분 문자열 "infinite"로 시작하는 문자열로 설정하면 스피닝 스레드가 절대 잠들지 않습니다. 그 외에는 $JULIA_THREAD_SLEEP_THRESHOLD이 부호 없는 64비트 정수(uint64_t)로 해석되어, 스피닝 스레드가 잠들어야 하는 시간을 나노초 단위로 줍니다.

JULIA_NUM_GC_THREADS

가비지 컬렉션이 사용하는 스레드 수를 설정합니다. 지정하지 않으면 워커 스레드 수로 설정돼요.

이 환경 변수는 1.10에서 추가되었습니다.

JULIA_IMAGE_THREADS

이 Julia 프로세스에서 이미지 컴파일이 사용하는 스레드 수를 설정하는 부호 없는 32비트 정수예요. 모듈이 작은 모듈이면 이 변수의 값이 무시될 수 있습니다. 지정하지 않으면 그 자리에 JULIA_CPU_THREADS 값 또는 논리 CPU 코어 수의 절반 중 더 작은 값이 사용됩니다.

JULIA_IMAGE_TIMINGS

이미지 컴파일 중에 상세한 타이밍 정보를 출력할지 결정하는 boolean 값이에요. 기본값은 0입니다.

JULIA_EXCLUSIVE

0이 아닌 다른 값으로 설정하면 Julia의 스레드 정책은 전용 머신에서 실행하는 것과 일치합니다. 기본 스레드풀의 각 스레드가 affinitized되는 거죠. 인터랙티브 스레드는 운영체제 스케줄러의 통제 아래 남습니다.

그 외에는 Julia가 스레드 정책을 운영체제가 처리하도록 합니다.

가비지 컬렉션 (Garbage Collection)

JULIA_HEAP_SIZE_HINT

--heap-size-hint=<size>[<unit>] 명령줄 옵션과 동등한 환경 변수예요.

메모리 사용량이 주어진 값보다 높으면 가비지 컬렉션을 강제합니다. 값은 바이트 수로 지정할 수 있고, 선택적으로 다음 단위를 쓸 수 있어요.

- B (bytes)
- K (kibibytes)
- M (mebibytes)
- G (gibibytes)
- T (tebibytes)
- % (percentage of physical memory)

예를 들어 JULIA_HEAP_SIZE_HINT=1G는 가비지 컬렉터에 1 GB 힙 크기 힌트를 제공합니다.

REPL 포매팅 (REPL formatting)

터미널에서 REPL 출력이 어떻게 포매팅되어야 하는지를 결정하는 환경 변수들이에요. JULIA_*_COLOR 변수는 ANSI 터미널 이스케이프 시퀀스로 설정해야 합니다. Julia는 같은 기능이 대부분 포함된 고수준 인터페이스를 제공하는데, Julia REPL 절을 참고하세요.

JULIA_ERROR_COLOR

오류가 터미널에서 가져야 하는 포매팅 Base.error_color()이에요(기본값: 연한 빨강, "\033[91m").

JULIA_WARN_COLOR

경고가 터미널에서 가져야 하는 포매팅 Base.warn_color()이에요(기본값: 노랑, "\033[93m").

JULIA_INFO_COLOR

정보가 터미널에서 가져야 하는 포매팅 Base.info_color()이에요(기본값: 청록, "\033[36m").

JULIA_INPUT_COLOR

입력이 터미널에서 가져야 하는 포매팅 Base.input_color()이에요(기본값: 보통, "\033[0m").

JULIA_ANSWER_COLOR

출력이 터미널에서 가져야 하는 포매팅 Base.answer_color()이에요(기본값: 보통, "\033[0m").

NO_COLOR

이 변수가 존재하고 빈 문자열이 아니면(값과 무관하게) REPL에서 컬러 텍스트가 비활성화됩니다. --color=yes 플래그나 FORCE_COLOR 환경 변수로 오버라이드할 수 있어요. 이 환경 변수는 명령줄 애플리케이션에서 널리 인식됩니다.

FORCE_COLOR

이 변수가 존재하고 빈 문자열이 아니면(값과 무관하게) REPL에서 컬러 텍스트가 활성화됩니다. --color=no 플래그로 오버라이드할 수 있어요. 이 환경 변수는 명령줄 애플리케이션에서 널리 인식됩니다.

시스템과 패키지 이미지 빌드 (System and Package Image Building)

JULIA_CPU_TARGET

시스템패키지 이미지의 (프리)컴파일을 위한 대상 머신 아키텍처를 수정해요. JULIA_CPU_TARGET은 디스크 캐시로 출력되는 머신 코드 이미지 생성에만 영향을 줍니다. --cpu-target 또는 -C 명령줄 옵션과 달리, 머신 코드가 메모리에만 저장되는 Julia 세션 안의 JIT 코드 생성에는 영향을 주지 않아요.

JULIA_CPU_TARGET의 유효한 값은 julia -C help를 실행하면 얻을 수 있습니다.

현재 시스템 이미지를 빌드하는 데 사용된 CPU 대상 문자열을 얻으려면 Sys.sysimage_target()을 사용하세요. 이는 같은 시스템 이미지를 재현하거나 컴파일 중에 어떤 CPU 기능이 활성화되었는지 이해하는 데 유용할 수 있어요.

JULIA_CPU_TARGET을 설정하는 것은 서로 다른 종류나 기능의 프로세서가 있을 수 있는 이기종 컴퓨팅 시스템에서 중요해요. 구성 요소 노드가 서로 다른 프로세서를 사용할 수 있기 때문에 고성능 컴퓨팅(HPC) 클러스터에서 자주 마주치죠. 이 경우 sysimage와 같은 구성을 유지하기 위해 sysimage CPU 대상을 사용하고 싶을 수 있어요. 자세한 내용은 아래를 참고하세요.

CPU 대상 문자열은 ;로 구분된 문자열 목록입니다. 각 문자열은 CPU 또는 아키텍처 이름으로 시작하고, 선택적으로 ,로 구분된 기능 목록이 이어져요. generic 또는 빈 CPU 이름은 C/C++ 런타임이 컴파일된 아키텍처를 최소한으로 하는 대상 ISA의 기본 필수 기능 집합을 의미합니다. 각 문자열은 LLVM이 해석해요.

패키지 이미지는 기본 시스템 이미지와 같거나 더 구체적인 CPU 기능만 대상으로 할 수 있습니다.

몇 가지 특수 기능이 지원됩니다.

  • sysimage

CPU 대상 이름으로 쓸 수 있는 특수 키워드로, 현재 시스템 이미지를 빌드하는 데 사용된 CPU 대상 문자열로 대체돼요. 이를 통해 현재 sysimage의 대상을 기반으로 하거나 확장하는 CPU 대상을 지정할 수 있고, 특히 sysimage만큼 유연한 패키지 이미지를 만드는 데 도움이 됩니다.

  • clone_all

대상이 sysimg의 모든 함수를 클론하게 강제합니다. 부정 형태(즉 -clone_all)로 사용하면 어떤 대상에 대해 기본으로 활성화된 전체 클론을 비활성화해요.

  • base([0-9]*)

(0-기반) 기본 대상 인덱스를 지정합니다. 기본 대상은 현재 대상이 기반으로 하는 대상, 즉 클론되지 않는 함수가 그 기본 대상의 버전을 사용할 대상이에요. 이 옵션은 기본 대상이 기본 대상(0)이 아니라면 그 기본 대상을 (마치 clone_all이 지정된 것처럼) 완전히 클론하게 합니다. 인덱스는 현재 인덱스보다 작을 수만 있어요.

  • opt_size

최소한의 성능 영향으로 크기에 최적화합니다. Clang/GCC의 -Os.

  • min_size

크기에만 최적화합니다. Clang의 -Oz.

디버깅과 프로파일링 (Debugging and profiling)

JULIA_DEBUG

파일이나 모듈에 대한 디버그 로깅을 활성화합니다. 자세한 내용은 Logging을 참고하세요.

CI 디버그 환경 변수

Julia는 특정 지속적 통합(CI) 디버그 환경 변수가 설정되면 자동으로 상세한 디버깅 옵션을 활성화합니다. 이는 디버그 로깅을 활성화한 상태로 CI 작업이 다시 실행될 때, 자동으로 다음을 수행함으로써 디버깅 경험을 개선해요.

  • 평가되는 표현식을 보여 주는 --trace-eval(로케이션 모드) 활성화
  • 상세한 테스트 출력을 가능하게 하는 JULIA_TEST_VERBOSE=true 설정

이를 통해 개발자는 스크립트나 워크플로 파일을 수정하지 않고도 CI 실행에서 상세한 디버깅 정보를 얻을 수 있습니다.

JULIA_PROFILE_PEEK_HEAP_SNAPSHOT

실행 중에 프로파일링 peek 메커니즘을 통한 힙 스냅샷 수집을 활성화합니다. 실행 중 트리거됨을 참고하세요.

JULIA_TIMING_SUBSYSTEMS

특정 Julia 실행을 위해 영역(zone)을 활성화하거나 비활성화할 수 있게 해 줍니다. 예를 들어 변수를 +GC,-INFERENCE로 설정하면 GC 영역을 활성화하고 INFERENCE 영역을 비활성화해요. 영역 동적 활성화·비활성화를 참고하세요.

JULIA_GC_WAIT_FOR_DEBUGGER

0이 아닌 다른 값으로 설정하면 Julia 가비지 컬렉터는 치명적 오류가 있을 때 중단하는 대신 디버거가 붙기를 기다립니다.

이 환경 변수는 Julia가 가비지 컬렉션 디버깅으로 컴파일된 경우에만 효과가 있습니다. 즉 빌드 설정에서 WITH_GC_DEBUG_ENV1로 설정된 경우죠.

ENABLE_JITPROFILING

0이 아닌 다른 값으로 설정하면 컴파일러가 JIT(just-in-time) 프로파일링을 위한 이벤트 리스너를 만들고 등록합니다.

이 환경 변수는 Julia가 JIT 프로파일링 지원으로 컴파일된 경우에만 효과가 있는데, 다음 중 하나를 사용해요.

  • Intel의 VTune™ Amplifier(빌드 설정에서 USE_INTEL_JITEVENTS1로 설정)
  • OProfile(빌드 설정에서 USE_OPROFILE_JITEVENTS1로 설정)
  • Perf(빌드 설정에서 USE_PERF_JITEVENTS1로 설정). 이 통합은 기본으로 활성화되어 있습니다.

ENABLE_GDBLISTENER

0이 아닌 다른 값으로 설정하면 릴리스 빌드에서 Julia 코드의 GDB 등록을 활성화합니다. Julia의 디버그 빌드에서는 항상 활성화되어 있어요. -g 2와 함께 쓰는 게 권장됩니다.

JULIA_LLVM_ARGS

LLVM 백엔드에 전달할 인자입니다.

JULIA_FALLBACK_REPL

REPL.jl 대신 폴백 repl을 강제합니다.

JULIA_LOAD_CODEGEN_LIB

거짓 값(0, f, false, n, no. 대소문자 구분 없음)으로 설정하면 로더가 libjulia-codegen을 로드하지 않고, 설치에서 라이브러리가 없는 것과 정확히 똑같이 libjulia-internal의 폴백(인터프리터 전용) 구현을 대신 사용해요. no-codegen 구성을 테스트하고 디버깅하기 위한 용도입니다.

더 알아보기 (Learn more)