Interactive Utilities

InteractiveUtils 모듈은 코드 탐색 및 클립보드 접근과 같은 Julia의 대화형 사용을 위한 유틸리티를 제공합니다. 이는 대화형 작업을 위해 설계되었으며 interactive mode에서 자동으로 로드됩니다.

Base.Docs.aproposFunction
apropos([io::IO=stdout], pattern::Union{AbstractString,Regex})

pattern을 포함하는 항목에 대한 사용 가능한 문서 문자열을 검색합니다.

pattern이 문자열인 경우 대소문자는 무시됩니다. 결과는 io에 인쇄됩니다.

apropos는 REPL의 도움말 모드에서 쿼리를 큰따옴표로 감싸 호출할 수 있습니다:

help?> "pattern"
source
InteractiveUtils.varinfoFunction
varinfo(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를 참조하십시오. 이는 보다 일반적인 조작에 적합합니다.

source
InteractiveUtils.versioninfoFunction
versioninfo(io::IO=stdout; verbose::Bool=false)

사용 중인 Julia 버전에 대한 정보를 출력합니다. 출력은 부울 키워드 인수로 제어됩니다:

  • verbose: 모든 추가 정보를 출력합니다.

!!! 경고 이 함수의 출력에는 민감한 정보가 포함될 수 있습니다. 출력을 공유하기 전에 검토하고 공개적으로 공유해서는 안 되는 데이터를 제거하십시오.

또한 참조: VERSION.

source
InteractiveUtils.methodswithFunction
methodswith(typ[, module or function]; supertypes::Bool=false])

typ 유형의 인수를 가진 메서드의 배열을 반환합니다.

선택적 두 번째 인수는 특정 모듈이나 함수로 검색을 제한합니다(기본값은 모든 최상위 모듈).

supertypes 키워드가 true인 경우, Any 유형을 제외하고 typ의 부모 유형을 가진 인수도 반환합니다.

또한: methods.

source
InteractiveUtils.subtypesFunction
subtypes(T::DataType)

DataType T의 즉각적인 하위 유형 목록을 반환합니다. 현재 로드된 모든 하위 유형이 포함되며, 현재 모듈에서 보이지 않는 하위 유형도 포함됩니다.

또한 supertype, supertypes, methodswith를 참조하십시오.

예제

julia> subtypes(Integer)
3-element Vector{Any}:
 Bool
 Signed
 Unsigned
source
InteractiveUtils.supertypesFunction
supertypes(T::Type)

T와 모든 상위 타입의 튜플 (T, ..., Any)를 반환합니다. 이는 supertype 함수를 연속적으로 호출하여 결정되며, <: 순서로 나열되고 Any로 종료됩니다.

또한 subtypes를 참조하세요.

예시

julia> supertypes(Int)
(Int64, Signed, Integer, Real, Number, Any)
source
InteractiveUtils.editMethod
edit(path::AbstractString, line::Integer=0, column::Integer=0)

파일이나 디렉토리를 편집하며, 선택적으로 파일을 편집할 줄 번호를 제공할 수 있습니다. 편집기를 종료하면 julia 프롬프트로 돌아갑니다. 편집기는 환경 변수로 JULIA_EDITOR, VISUAL 또는 EDITOR를 설정하여 변경할 수 있습니다.

Julia 1.9

column 인자는 최소한 Julia 1.9가 필요합니다.

또한 InteractiveUtils.define_editor를 참조하세요.

source
InteractiveUtils.editMethod
edit(function, [types])
edit(module)

함수의 정의를 편집하며, 선택적으로 어떤 메서드를 편집할지 나타내기 위해 타입의 튜플을 지정할 수 있습니다. 모듈의 경우, 주요 소스 파일을 엽니다. 모듈은 먼저 using 또는 import로 로드되어야 합니다.

Julia 1.1

모듈에 대한 edit는 최소한 Julia 1.1이 필요합니다.

주어진 줄에서 파일을 열 수 있도록 하려면, 먼저 InteractiveUtils.define_editor를 호출해야 할 수 있습니다.

source
InteractiveUtils.@editMacro
@edit

함수 또는 매크로 호출에 대한 인수를 평가하고, 그 유형을 결정한 다음, 결과 표현식에 대해 edit 함수를 호출합니다.

또한 참조: @less, @which.

source
InteractiveUtils.define_editorFunction
define_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
Julia 1.4

define_editor는 Julia 1.4에서 도입되었습니다.

source
InteractiveUtils.lessMethod
less(file::AbstractString, [line::Integer])

기본 페이저를 사용하여 파일을 표시하며, 선택적으로 시작 행 번호를 제공할 수 있습니다. 페이저를 종료하면 julia 프롬프트로 돌아갑니다.

source
InteractiveUtils.lessMethod
less(function, [types])

기본 페이저를 사용하여 함수의 정의를 보여주며, 선택적으로 어떤 메서드를 볼지 나타내기 위해 타입의 튜플을 지정할 수 있습니다.

source
InteractiveUtils.@whichMacro
@which

함수나 매크로 호출에 적용되면, 지정된 호출에 대한 인수를 평가하고 해당 인수에 대해 호출될 메서드의 Method 객체를 반환합니다. 변수에 적용되면, 해당 변수가 바인딩된 모듈을 반환합니다. which 함수에 호출됩니다.

참고: @less, @edit.

source
InteractiveUtils.@functionlocMacro
@functionloc

함수 또는 매크로 호출에 적용되면, 지정된 호출에 대한 인수를 평가하고, 해당 인수에 대해 호출될 메서드의 위치를 제공하는 튜플 (filename,line)을 반환합니다. 이는 functionloc 함수를 호출합니다.

source
InteractiveUtils.code_warntypeFunction
code_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.

source
InteractiveUtils.code_llvmFunction
code_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.

source
InteractiveUtils.@code_llvmMacro
@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.

source
InteractiveUtils.code_nativeFunction
code_native([io=stdout,], f, types; syntax=:intel, debuginfo=:default, binary=false, dump_module=true)

주어진 제네릭 함수 및 타입 서명에 맞는 메서드를 실행하기 위해 생성된 네이티브 어셈블리 명령어를 io에 출력합니다.

  • syntax:intel (기본값)으로 설정하여 인텔 구문을 사용하거나 :att로 설정하여 AT&T 구문을 사용하여 어셈블리 구문을 설정합니다.
  • debuginfo:source (기본값) 또는 :none으로 설정하여 코드 주석의 상세도를 지정합니다.
  • binarytrue인 경우, 각 명령어 앞에 약어 주소가 붙은 이진 기계 코드를 출력합니다.
  • dump_modulefalse인 경우, rodata 또는 지시문과 같은 메타데이터를 출력하지 않습니다.
  • rawfalse인 경우, 흥미롭지 않은 명령어(예: safepoint 함수 프로롤로그)는 생략됩니다.

참고: @code_native, code_warntype, code_typed, code_lowered, code_llvm.

source
InteractiveUtils.@code_nativeMacro
@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으로 설정합니다.
  • binarytrue인 경우, 각 명령어에 대해 약어 주소가 앞에 붙은 이진 기계 코드를 인쇄합니다.
  • dump_modulefalse인 경우, rodata 또는 지시문과 같은 메타데이터를 인쇄하지 않습니다.

또한 참조: code_native, @code_warntype, @code_typed, @code_lowered, @code_llvm.

source
Base.@time_importsMacro
@time_imports

패키지와 그 의존성을 가져오는 데 소요된 시간을 보고하는 표현식을 실행하는 매크로입니다. 모든 컴파일 시간은 백분율로 보고되며, 재컴파일된 시간도 표시됩니다.

패키지 또는 패키지 확장마다 한 줄이 인쇄됩니다. 표시된 기간은 해당 패키지를 가져오는 데 걸린 시간이며, 그 의존성을 로드하는 데 걸린 시간은 포함되지 않습니다.

Julia 1.9+ 패키지 확장은 Parent → Extension으로 표시됩니다.

Note

로드 과정에서 패키지는 직접적인 의존성뿐만 아니라 모든 의존성을 순차적으로 가져옵니다.

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

이 매크로는 최소한 Julia 1.8이 필요합니다.

source
InteractiveUtils.clipboardFunction
clipboard(x)

x의 인쇄된 형태를 운영 체제 클립보드("복사")로 보냅니다.

source
clipboard() -> String

운영 체제 클립보드의 내용을 포함하는 문자열을 반환합니다 ("붙여넣기").

source