Interactive Utilities
InteractiveUtils
모듈은 코드 탐색 및 클립보드 접근과 같은 Julia의 대화형 사용을 위한 유틸리티를 제공합니다. 이는 대화형 작업을 위해 설계되었으며 interactive mode에서 자동으로 로드됩니다.
Base.Docs.apropos
— Functionapropos([io::IO=stdout], pattern::Union{AbstractString,Regex})
pattern
을 포함하는 항목에 대한 사용 가능한 문서 문자열을 검색합니다.
pattern
이 문자열인 경우 대소문자는 무시됩니다. 결과는 io
에 인쇄됩니다.
apropos
는 REPL의 도움말 모드에서 쿼리를 큰따옴표로 감싸 호출할 수 있습니다:
help?> "pattern"
InteractiveUtils.varinfo
— Functionvarinfo(m::Module=Main, pattern::Regex=r""; all=false, imported=false, recursive=false, sortby::Symbol=:name, minsize::Int=0)
모듈의 공용 전역 변수에 대한 정보를 제공하는 마크다운 테이블을 반환하며, 선택적으로 pattern
과 일치하는 변수로 제한할 수 있습니다.
메모리 소비 추정치는 객체의 내부 구조 크기에 대한 대략적인 하한입니다.
all
: 모듈에 정의된 비공개 객체, 사용 중단된 객체 및 컴파일러 생성 객체도 나열합니다.imported
: 다른 모듈에서 명시적으로 가져온 객체도 나열합니다.recursive
: 하위 모듈의 객체를 재귀적으로 포함하며, 각 모듈에서 동일한 설정을 준수합니다.sortby
: 결과를 정렬할 열입니다. 옵션은:name
(기본값),:size
, 및:summary
입니다.minsize
: 크기가 최소minsize
바이트인 객체만 포함합니다. 기본값은0
입니다.
varinfo
의 출력은 표시 목적으로만 사용됩니다. 모듈에 정의된 기호의 배열을 가져오려면 names
를 참조하십시오. 이는 보다 일반적인 조작에 적합합니다.
InteractiveUtils.versioninfo
— Functionversioninfo(io::IO=stdout; verbose::Bool=false)
사용 중인 Julia 버전에 대한 정보를 출력합니다. 출력은 부울 키워드 인수로 제어됩니다:
verbose
: 모든 추가 정보를 출력합니다.
!!! 경고 이 함수의 출력에는 민감한 정보가 포함될 수 있습니다. 출력을 공유하기 전에 검토하고 공개적으로 공유해서는 안 되는 데이터를 제거하십시오.
또한 참조: VERSION
.
InteractiveUtils.methodswith
— Functionmethodswith(typ[, module or function]; supertypes::Bool=false])
typ
유형의 인수를 가진 메서드의 배열을 반환합니다.
선택적 두 번째 인수는 특정 모듈이나 함수로 검색을 제한합니다(기본값은 모든 최상위 모듈).
supertypes
키워드가 true
인 경우, Any
유형을 제외하고 typ
의 부모 유형을 가진 인수도 반환합니다.
또한: methods
.
InteractiveUtils.subtypes
— Functionsubtypes(T::DataType)
DataType T
의 즉각적인 하위 유형 목록을 반환합니다. 현재 로드된 모든 하위 유형이 포함되며, 현재 모듈에서 보이지 않는 하위 유형도 포함됩니다.
또한 supertype
, supertypes
, methodswith
를 참조하십시오.
예제
julia> subtypes(Integer)
3-element Vector{Any}:
Bool
Signed
Unsigned
InteractiveUtils.supertypes
— Functionsupertypes(T::Type)
T
와 모든 상위 타입의 튜플 (T, ..., Any)
를 반환합니다. 이는 supertype
함수를 연속적으로 호출하여 결정되며, <:
순서로 나열되고 Any
로 종료됩니다.
또한 subtypes
를 참조하세요.
예시
julia> supertypes(Int)
(Int64, Signed, Integer, Real, Number, Any)
InteractiveUtils.edit
— Methodedit(path::AbstractString, line::Integer=0, column::Integer=0)
파일이나 디렉토리를 편집하며, 선택적으로 파일을 편집할 줄 번호를 제공할 수 있습니다. 편집기를 종료하면 julia
프롬프트로 돌아갑니다. 편집기는 환경 변수로 JULIA_EDITOR
, VISUAL
또는 EDITOR
를 설정하여 변경할 수 있습니다.
column
인자는 최소한 Julia 1.9가 필요합니다.
또한 InteractiveUtils.define_editor
를 참조하세요.
InteractiveUtils.edit
— Methodedit(function, [types])
edit(module)
함수의 정의를 편집하며, 선택적으로 어떤 메서드를 편집할지 나타내기 위해 타입의 튜플을 지정할 수 있습니다. 모듈의 경우, 주요 소스 파일을 엽니다. 모듈은 먼저 using
또는 import
로 로드되어야 합니다.
모듈에 대한 edit
는 최소한 Julia 1.1이 필요합니다.
주어진 줄에서 파일을 열 수 있도록 하려면, 먼저 InteractiveUtils.define_editor
를 호출해야 할 수 있습니다.
InteractiveUtils.@edit
— MacroInteractiveUtils.define_editor
— Functiondefine_editor(fn, pattern; wait=false)
pattern
에 맞는 새로운 편집기를 정의하여 fn
을 사용하여 파일(특정 행 번호에서 열 수 있음)을 열 수 있습니다.
fn
인자는 주어진 편집기로 파일을 여는 방법을 결정하는 함수입니다. 다음과 같은 네 개의 인자를 받아야 합니다:
cmd
- 편집기를 위한 기본 명령 객체path
- 열 파일의 경로line
- 편집기를 열 행 번호column
- 편집기를 열 열 번호
특정 명령으로 특정 행이나 특정 열을 열 수 없는 편집기는 line
및/또는 column
인자를 무시할 수 있습니다. fn
콜백은 파일을 열기 위한 적절한 Cmd
객체를 반환하거나 이 파일을 편집할 수 없음을 나타내기 위해 nothing
을 반환해야 합니다. 이 편집기가 현재 환경에 적합하지 않음을 나타내기 위해 nothing
을 사용하고 다른 편집기를 시도해야 합니다. 외부 명령을 생성할 필요가 없는 보다 일반적인 편집 후크를 추가하려면 콜백을 벡터 EDITOR_CALLBACKS
에 직접 푸시할 수 있습니다.
pattern
인자는 문자열, 정규 표현식 또는 문자열과 정규 표현식의 배열입니다. fn
이 호출되려면 패턴 중 하나가 EDITOR
, VISUAL
또는 JULIA_EDITOR
의 값을 일치해야 합니다. 문자열의 경우, 문자열은 편집기 명령의 첫 번째 단어의 basename
과 같아야 하며, 확장자가 있는 경우 제거해야 합니다. 예를 들어, "vi"는 "vim -g"와 일치하지 않지만 "/usr/bin/vi -m"과 일치합니다. 또한 vi.exe
와도 일치합니다. pattern
이 정규 표현식인 경우, 모든 편집기 명령을 셸 이스케이프된 문자열로 비교합니다. 배열 패턴은 그 항목 중 하나라도 일치하면 일치합니다. 여러 편집기가 일치하는 경우, 가장 최근에 추가된 것이 사용됩니다.
기본적으로 줄리아는 편집기가 닫힐 때까지 기다리지 않고 백그라운드에서 실행합니다. 그러나 편집기가 터미널 기반인 경우, wait=true
로 설정하는 것이 좋으며, 줄리아는 편집기가 닫힐 때까지 기다립니다.
편집기 환경 변수 중 하나가 설정되어 있지만 일치하는 편집기 항목이 없는 경우 기본 편집기 항목이 호출됩니다:
(cmd, path, line, column) -> `$cmd $path`
많은 편집기가 이미 정의되어 있다는 점에 유의하세요. 다음의 모든 명령은 이미 작동해야 합니다:
- emacs
- emacsclient
- vim
- nvim
- nano
- micro
- kak
- helix
- textmate
- mate
- kate
- subl
- atom
- notepad++
- Visual Studio Code
- open
- pycharm
- bbedit
예제
다음은 터미널 기반 emacs
의 사용을 정의합니다:
define_editor(
r"\bemacs\b.*\s(-nw|--no-window-system)\b", wait=true) do cmd, path, line
`$cmd +$line $path`
end
define_editor
는 Julia 1.4에서 도입되었습니다.
InteractiveUtils.less
— Methodless(file::AbstractString, [line::Integer])
기본 페이저를 사용하여 파일을 표시하며, 선택적으로 시작 행 번호를 제공할 수 있습니다. 페이저를 종료하면 julia
프롬프트로 돌아갑니다.
InteractiveUtils.less
— Methodless(function, [types])
기본 페이저를 사용하여 함수의 정의를 보여주며, 선택적으로 어떤 메서드를 볼지 나타내기 위해 타입의 튜플을 지정할 수 있습니다.
InteractiveUtils.@less
— Macro@less
함수 또는 매크로 호출에 대한 인수를 평가하고, 그 유형을 결정한 다음, 결과 표현식에 대해 less
함수를 호출합니다.
또한 참조: @edit
, @which
, @code_lowered
.
InteractiveUtils.@which
— Macro@which
함수나 매크로 호출에 적용되면, 지정된 호출에 대한 인수를 평가하고 해당 인수에 대해 호출될 메서드의 Method
객체를 반환합니다. 변수에 적용되면, 해당 변수가 바인딩된 모듈을 반환합니다. which
함수에 호출됩니다.
InteractiveUtils.@functionloc
— Macro@functionloc
함수 또는 매크로 호출에 적용되면, 지정된 호출에 대한 인수를 평가하고, 해당 인수에 대해 호출될 메서드의 위치를 제공하는 튜플 (filename,line)
을 반환합니다. 이는 functionloc
함수를 호출합니다.
InteractiveUtils.@code_lowered
— Macro@code_lowered
함수 또는 매크로 호출에 대한 인수를 평가하고, 그 유형을 결정한 다음, 결과 표현식에 대해 code_lowered
를 호출합니다.
또한 참조: code_lowered
, @code_warntype
, @code_typed
, @code_llvm
, @code_native
.
InteractiveUtils.@code_typed
— Macro@code_typed
함수 또는 매크로 호출에 대한 인수를 평가하고, 그들의 유형을 결정한 다음, 결과 표현식에 대해 code_typed
를 호출합니다. 선택적 인수 optimize
를 사용하여
@code_typed optimize=true foo(x)
인라인과 같은 추가 최적화가 적용되는지 여부를 제어할 수 있습니다.
또한 참조: code_typed
, @code_warntype
, @code_lowered
, @code_llvm
, @code_native
.
InteractiveUtils.code_warntype
— Functioncode_warntype([io::IO], f, types; debuginfo=:default)
주어진 일반 함수 및 io
에 대한 타입 서명과 일치하는 메서드에 대한 낮춰진 및 타입 추론된 AST를 출력합니다. AST는 성능에 문제가 될 수 있는 "비단말" 타입을 강조하는 방식으로 주석이 달려 있으며(색상이 가능할 경우 빨간색으로 표시됨), 이는 잠재적인 타입 불안정성에 대한 경고 역할을 합니다.
모든 비단말 타입이 성능에 특히 문제가 되는 것은 아니며, 특정 타입의 성능 특성은 컴파일러의 구현 세부사항입니다. code_warntype
는 성능 문제의 우려가 있는 경우 타입을 빨간색으로 강조하는 쪽으로 편향될 것이므로, 성능에 영향을 미치지 않더라도 일부 타입이 빨간색으로 표시될 수 있습니다. 구체적인 타입의 작은 유니온은 일반적으로 문제가 되지 않으므로, 이러한 타입은 노란색으로 강조됩니다.
키워드 인수 debuginfo
는 코드 주석의 상세 수준을 지정하기 위해 :source
또는 :none
(기본값) 중 하나일 수 있습니다.
자세한 내용은 매뉴얼의 성능 팁 페이지에 있는 @code_warntype
섹션을 참조하십시오.
또한 다음을 참조하십시오: @code_warntype
, code_typed
, code_lowered
, code_llvm
, code_native
.
InteractiveUtils.@code_warntype
— Macro@code_warntype
함수 또는 매크로 호출에 대한 인수를 평가하고, 그들의 유형을 결정한 다음, 결과 표현식에 대해 code_warntype
를 호출합니다.
또한 참조: code_warntype
, @code_typed
, @code_lowered
, @code_llvm
, @code_native
.
InteractiveUtils.code_llvm
— Functioncode_llvm([io=stdout,], f, types; raw=false, dump_module=false, optimize=true, debuginfo=:default)
주어진 제네릭 함수와 타입 시그니처에 맞는 메서드를 실행하기 위해 생성된 LLVM 비트코드를 io
에 출력합니다.
optimize
키워드가 설정되지 않은 경우, 코드는 LLVM 최적화 이전에 표시됩니다. 모든 메타데이터와 dbg.* 호출은 출력된 비트코드에서 제거됩니다. 전체 IR을 보려면 raw
키워드를 true로 설정하십시오. 함수(선언 포함)를 캡슐화하는 전체 모듈을 덤프하려면 dump_module
키워드를 true로 설정하십시오. 키워드 인수 debuginfo
는 코드 주석의 상세 수준을 지정하기 위해 source(기본값) 또는 none 중 하나일 수 있습니다.
참고: @code_llvm
, code_warntype
, code_typed
, code_lowered
, code_native
.
InteractiveUtils.@code_llvm
— Macro@code_llvm
함수 또는 매크로 호출에 대한 인수를 평가하고, 그들의 유형을 결정한 다음, 결과 표현식에 대해 code_llvm
를 호출합니다. 선택적 키워드 인수 raw
, dump_module
, debuginfo
, optimize
를 함수 호출 전에 다음과 같이 넣어 설정할 수 있습니다:
@code_llvm raw=true dump_module=true debuginfo=:default f(x)
@code_llvm optimize=false f(x)
optimize
는 인라인과 같은 추가 최적화가 적용되는지를 제어합니다. raw
는 모든 메타데이터와 dbg.* 호출을 표시합니다. debuginfo
는 코드 주석의 상세 수준을 지정하기 위해 :source
(기본값) 또는 :none
중 하나일 수 있습니다. dump_module
은 함수를 캡슐화하는 전체 모듈을 출력합니다.
참고: code_llvm
, @code_warntype
, @code_typed
, @code_lowered
, @code_native
.
InteractiveUtils.code_native
— Functioncode_native([io=stdout,], f, types; syntax=:intel, debuginfo=:default, binary=false, dump_module=true)
주어진 제네릭 함수 및 타입 서명에 맞는 메서드를 실행하기 위해 생성된 네이티브 어셈블리 명령어를 io
에 출력합니다.
syntax
를:intel
(기본값)으로 설정하여 인텔 구문을 사용하거나:att
로 설정하여 AT&T 구문을 사용하여 어셈블리 구문을 설정합니다.debuginfo
를:source
(기본값) 또는:none
으로 설정하여 코드 주석의 상세도를 지정합니다.binary
가true
인 경우, 각 명령어 앞에 약어 주소가 붙은 이진 기계 코드를 출력합니다.dump_module
이false
인 경우, rodata 또는 지시문과 같은 메타데이터를 출력하지 않습니다.raw
가false
인 경우, 흥미롭지 않은 명령어(예: safepoint 함수 프로롤로그)는 생략됩니다.
참고: @code_native
, code_warntype
, code_typed
, code_lowered
, code_llvm
.
InteractiveUtils.@code_native
— Macro@code_native
함수 또는 매크로 호출에 대한 인수를 평가하고, 그들의 유형을 결정한 다음, 결과 표현식에 대해 code_native
를 호출합니다.
선택적 키워드 인수 syntax
, debuginfo
, binary
또는 dump_module
중 하나를 함수 호출 전에 다음과 같이 설정할 수 있습니다:
@code_native syntax=:intel debuginfo=:default binary=true dump_module=false f(x)
- 어셈블리 구문을 설정하려면
syntax
를 Intel 구문에 대해:intel
(기본값)으로 또는 AT&T 구문에 대해:att
로 설정합니다. - 코드 주석의 자세한 정도를 지정하려면
debuginfo
를:source
(기본값) 또는:none
으로 설정합니다. binary
가true
인 경우, 각 명령어에 대해 약어 주소가 앞에 붙은 이진 기계 코드를 인쇄합니다.dump_module
가false
인 경우, rodata 또는 지시문과 같은 메타데이터를 인쇄하지 않습니다.
또한 참조: code_native
, @code_warntype
, @code_typed
, @code_lowered
, @code_llvm
.
Base.@time_imports
— Macro@time_imports
패키지와 그 의존성을 가져오는 데 소요된 시간을 보고하는 표현식을 실행하는 매크로입니다. 모든 컴파일 시간은 백분율로 보고되며, 재컴파일된 시간도 표시됩니다.
패키지 또는 패키지 확장마다 한 줄이 인쇄됩니다. 표시된 기간은 해당 패키지를 가져오는 데 걸린 시간이며, 그 의존성을 로드하는 데 걸린 시간은 포함되지 않습니다.
Julia 1.9+ 패키지 확장은 Parent → Extension으로 표시됩니다.
로드 과정에서 패키지는 직접적인 의존성뿐만 아니라 모든 의존성을 순차적으로 가져옵니다.
julia> @time_imports using CSV
50.7 ms Parsers 17.52% compilation time
0.2 ms DataValueInterfaces
1.6 ms DataAPI
0.1 ms IteratorInterfaceExtensions
0.1 ms TableTraits
17.5 ms Tables
26.8 ms PooledArrays
193.7 ms SentinelArrays 75.12% compilation time
8.6 ms InlineStrings
20.3 ms WeakRefStrings
2.0 ms TranscodingStreams
1.4 ms Zlib_jll
1.8 ms CodecZlib
0.8 ms Compat
13.1 ms FilePathsBase 28.39% compilation time
1681.2 ms CSV 92.40% compilation time
이 매크로는 최소한 Julia 1.8이 필요합니다.
InteractiveUtils.clipboard
— Functionclipboard(x)
x
의 인쇄된 형태를 운영 체제 클립보드("복사")로 보냅니다.
clipboard() -> String
운영 체제 클립보드의 내용을 포함하는 문자열을 반환합니다 ("붙여넣기").