키노의 대답은 확실하지만 어쩌면 내가하고있는 일에 대해 좀 더 자세히 설명 할 수 있습니다.
- 몇 가지 간단한 최상위 문에 대한 아주 사소한 통역있다 :
현재 만 LLVM의 JIT 모드가있다.
- 다른 모든 코드는 실행 전에 기계 코드로 jitted됩니다. 코드는 동적 유형 유추를 사용하여 프로그램을 통해 전파되는 코드가 적용되는 값의 런타임 유형을 사용하여 적극적으로 특수화됩니다.
이 줄리아 코드 유형 주석없이 작성에도 좋은 성능을 얻을하는 방법이다 : 당신은 당신이 코드가 Int64
에 대한 전문 얻을 f(1)
호출하는 경우 - 64 비트 시스템에 1
의 유형을; f(1.0)
으로 전화하면 Float64
(모든 시스템에서 1.0
유형)에 특화된 새로 jitted 버전이 제공됩니다. 함수의 각 컴파일 된 버전은 어떤 유형을 얻는 지 알기 때문에 C와 비슷한 속도로 실행될 수 있습니다. 형식이 아닌 런타임 데이터에 의존하는 "형식이 불안정한"함수를 작성하고 사용하여이 작업을 방해 할 수 있지만 핵심 언어 및 표준 라이브러리를 디자인 할 때주의하지 않았습니다.
대부분의 줄리아는 그 자체로 쓰여지고, 구문 분석되고, 유추되고, 추측되므로 전체 시스템을 처음부터 부트 스트래핑하는 데 약 15-20 초가 걸립니다. 더 빨리 수행하기 위해 유형이 유추 된 AST의 serialize 된 버전을 파싱하고 유형을 추론하여 파일 sys.ji
에 캐시하는 단계적 시스템이 있습니다. julia
을 실행하면이 파일이로드되어 시스템을 실행하는 데 사용됩니다. 그러나 어떤 LLVM 코드 또는 기계 코드도 sys.ji
에 캐시되지 않으므로 julia
이 시작될 때마다 모든 LLVM 지팅을 수행해야하므로 약 2 초가 소요됩니다.
이 2 초의 시작 지연은 매우 성가 시며이를 수정하기위한 계획이 있습니다. Julia 프로그램 전체를 바이너리로 컴파일 할 수 있습니다. 실행 가능한 실행 파일 또는 .so
/.dylib
공유 라이브러리는 단순히 공유 C 라이브러리 인 것처럼 다른 프로그램에서 호출 할 수 있습니다. 바이너리의 시작 시간은 다른 C 프로그램과 비슷하므로 2 초의 시작 지연 시간이 사라집니다.
부록 1 : Julia의 개발 버전은 표준 라이브러리를 바이너리 코드로 사전 컴파일하기 때문에 더 이상 2 초의 시작 지연이 없습니다. 시작 시간은 여전히 Python과 Ruby보다 10 배 느려 개선의 여지가 있지만 꽤 빠릅니다. 다음 단계는 패키지와 스크립트의 사전 컴파일을 허용하여 줄리아 자체만큼 빨리 시작할 수 있도록하는 것입니다.
부록 2 : Julia의 개발 버전은 많은 패키지를 자동으로 사전 컴파일하여 신속하게로드 할 수 있도록합니다. 다음 단계는 전체 Julia 프로그램을 정적으로 컴파일하는 것입니다.
이것은 Julia 유치원에서 구현되었으며 0.3 릴리스에 포함될 예정입니다. 시동 시간이 크게 개선되었습니다. –