줄리아 (프로그래밍 언어)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

줄리아는 2009년에 개발을 시작하여 2012년에 공개된 고수준의 프로그래밍 언어이다. 다중 디스패치를 지원하며 동적 타입 시스템과 C와 유사한 성능을 갖는 것이 특징이다. 패키지 관리자를 내장하고 있으며, Lisp와 유사한 매크로 및 메타프로그래밍 기능, 병렬 및 분산 컴퓨팅을 위한 설계를 제공한다. 줄리아는 수치 계산, 과학 기술 계산, 데이터 분석 등 다양한 분야에서 활용되며, MIT, 스탠퍼드 대학교 등 여러 대학과 아마존, IBM, NASA 등에서 사용된다.

줄리아 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서
기본 정보

이미지 준비중입니다.

줄리아 로고
설계자제프 베잔슨, 앨런 에델만, 스테판 카르핀스키, 비랄 B. 샤
발표일2012년
최신 릴리스 버전1.11.2
최신 릴리스 날짜2024년 12월 1일
미리보기 버전1.10.8 개발 중, 1.12.0-DEV (매일 업데이트)
파일 확장자.jl
공식 웹사이트JuliaLang.org
특징
패러다임다중 패러다임 프로그래밍: 다중 디스패치 (주요 패러다임)
함수형 프로그래밍
배열 프로그래밍
절차적 프로그래밍 (명령형 프로그래밍)
구조적 프로그래밍
반사 프로그래밍
메타프로그래밍
다단계 프로그래밍
타이핑동적 프로그래밍 언어, 타입 추론, 선택적 타이핑, 명목적 타입 시스템, 매개변수 다형성, 강타입/약타입
구현체
영향 받은 언어딜런
리스프
루아
매스매티카
MATLAB

파이썬
R
루비
포트리스
영향을 주는 언어C, C++, LLVM, Scheme
시스템
플랫폼티어 1: x86-64, IA-32, 애플 실리콘 (ARM64) 맥; CUDA (리눅스)의 엔비디아 GPU
티어 2: FreeBSD, 64비트 Arm (리눅스), 애플 GPU; OneAPI 6.2+ 및 엔비디아 GPU (윈도우)
티어 3: 32비트 Arm; 64비트 RISC-V 및 PowerPC; AMD GPU/ROCm 5.3+
운영 체제리눅스, macOS, 윈도우, FreeBSD
📚 더 읽어볼만한 페이지
  • 2012년 개발된 프로그래밍 언어 - 러스트 (프로그래밍 언어)
    러스트는 모질라 재단 후원으로 개발된 시스템 프로그래밍 언어로서, 높은 안정성과 병렬성을 제공하며 메모리 안전성을 보장하고 효율적인 리소스 관리를 가능하게 하여 웹 브라우저 엔진, 운영체제, 웹 서비스 등 다양한 분야에서 활용되며 개발자들에게 인기가 높다.
  • 2012년 개발된 프로그래밍 언어 - 타입스크립트
    타입스크립트는 마이크로소프트에서 개발한 자바스크립트의 상위 집합으로, 정적 타입 지정, 타입 추론 등의 기능을 제공하여 코드의 안정성과 가독성을 높이는 언어이다.
  • 통계 프로그래밍 언어 - Stata
    Stata는 통계 분석, 데이터 관리, 그래프 작성 기능을 제공하는 통계 소프트웨어 패키지로, 다양한 운영체제 지원, 명령줄 및 그래픽 사용자 인터페이스 제공, 사회과학 및 자연과학 분야에서의 폭넓은 활용, 사용자 커뮤니티를 통한 확장 기능 지원 및 파이썬 연동을 특징으로 한다.
  • 통계 프로그래밍 언어 - SPSS
    SPSS는 1968년 개발된 사회 과학용 통계 패키지로, PC 버전으로 확장되고 기능이 강화되어 IBM에 인수된 후 데이터 마이닝 기능 등이 추가되었으나 높은 가격으로 비판받기도 한다.
  • 2012년 소프트웨어 - 윈도우 8
    윈도우 8은 2012년 마이크로소프트가 출시한 운영 체제로, 터치스크린 기기 사용성을 개선하기 위해 메트로 디자인을 도입했으며, 윈도우 8.1로 개선되었고, 32/64비트 등 다양한 에디션으로 출시되었으나 2016년 지원이 종료되었다.
  • 2012년 소프트웨어 - 마이크로소프트 프레시 페인트
    마이크로소프트 프레시 페인트는 유화 질감과 붓질 표현을 디지털 환경에서 구현하는 디지털 페인팅 프로그램으로, 뉴욕 현대 미술관과의 협력을 통해 사용자 테스트를 거쳤으며, 초기 개발 단계에서는 '프로젝트 구스타브'라는 코드명으로 진행되었다.

2. 역사

줄리아는 제프 비잔슨, 스테판 카핀스키, 바이럴 B. 샤, 앨런 에델만이 2009년부터 개발을 시작하여 2012년 2월에 공식 웹사이트를 통해 공개한 프로그래밍 언어이다. 이들은 고수준이면서도 빠른 무료 언어를 만드는 것을 목표로 하였다. 2012년 4월 InfoWorld와의 인터뷰에서 카핀스키는 "줄리아"라는 이름에 대해 "정말 좋은 이유는 없습니다. 그냥 예쁜 이름인 것 같았습니다."라고 말했다.

줄리아의 구문은 2018년 버전 1.0 이후 안정적인 것으로 간주되며, 1.x 버전에 대한 하위 호환성을 보장한다. 0.7 이전 초기 개발 단계에서는 구문 및 의미가 새 버전에서 변경되었다.

2012년 1.0 버전 출시 이후 10년 동안 줄리아 커뮤니티는 크게 성장하여 1,180만 줄 이상의 코드(문서 및 테스트 포함)를 가진 패키지 생태계를 이루었다. 줄리아 사용자 및 개발자를 위한 연례 학술 회의인 JuliaCon은 2014년부터 매년 개최되고 있다. JuliaCon2020은 28,900명 이상의 고유 시청자를 기록했고, JuliaCon2021은 43,000명의 고유 시청자와 300개 이상의 프레젠테이션을 기록하며 이전 기록을 경신했다.

줄리아 공동 창립자 세 명은 "계산 과학 문제의 분석 및 해결을 가능하게 하는 고성능 도구 생성을 위한 혁신적인 환경인 줄리아를 만든 공로"로 2019년 제임스 H. 윌킨슨 수치 소프트웨어상을 수상했다. MIT 응용 수학 교수인 앨런 에델만은 "고성능 컴퓨팅, 선형 대수 및 계산 과학 분야의 뛰어난 혁신과 줄리아 프로그래밍 언어에 기여한 공로"로 2019년 IEEE 컴퓨터 소사이어티 시드니 페른바흐 상을 수상했다.

줄리아 0.7과 버전 1.0은 2018년 8월 8일에 출시되었다. 줄리아 1.6은 1.0 이후 가장 큰 릴리스였으며, 가장 오랫동안 장기 지원 (LTS) 버전이었다. 1.7 이후 줄리아 개발은 시간 기반 릴리스로 돌아갔다. 줄리아 1.7은 2021년 11월에 출시되었고, 줄리아 1.8은 2022년에, 1.9는 2023년 5월 7일에 출시되었다. 줄리아 1.10은 2023년 12월 25일에 출시되었으며, 1.11은 2024년 10월 7일에 출시되었다.

줄리아 언어는 2014년에 NumFOCUS의 재정 지원을 받는 프로젝트가 되었다. MIT 링컨 연구소, 고든 앤 베티 무어 재단, 알프레드 P. 슬론 재단, 인텔 등 여러 기관 및 재단에서 자금 지원을 받았다. 모질라는 2019년 상반기 연구 보조금으로 "줄리아를 브라우저에 적용"하는 프로젝트를 후원했다.

JuliaHub, Inc.(줄리아허브)는 2015년 비랄 B. 샤, 앨런 에델만 등에 의해 Julia Computing, Inc.(줄리아 컴퓨팅)으로 설립되었다. Julia Computing은 2017년, 2019년, 2021년, 그리고 2023년에 여러 차례 투자를 유치했다.

3. 언어 특징

줄리아는 다중 디스패치를 지원하는 범용 프로그래밍 언어로, 인수 유형의 조합에 따라 함수 동작을 정의할 수 있다. 동적 타입 시스템을 갖추고 있어 문서화, 최적화, 디스패치에 유용하며, C 언어와 같은 정적으로 타입이 지정된 언어에 근접한 성능을 보인다. 내장 패키지 관리자를 통해 편리하게 패키지를 관리할 수 있다.

Lisp와 같은 매크로 및 기타 메타프로그래밍 기능을 제공하며, 병렬 컴퓨팅분산 컴퓨팅을 위해 설계되었다. 또한, 경량 그린 스레딩인 코루틴을 지원한다.

줄리아는 C, Fortran, Python, R, Java 등 다양한 언어의 코드를 호출하거나 해당 언어에서 줄리아 코드를 호출할 수 있을정도로 다른 언어와의 상호 운용성이 뛰어나다.

줄리아, 딜런, 포트리스의 언어 기능을 비교하면 다음과 같다.

👆
좌우로 밀어서 보기
언어타입 시스템제네릭 함수매개변수 타입
줄리아동적기본
Common Lisp동적선택 사항예 (그러나 디스패치 없음)
Dylan동적기본부분적 (디스패치 없음)
Fortress정적기본

3.1. 다른 언어와의 상호 운용성

줄리아는 `@ccall` 매크로를 사용하여 C 또는 포트란 언어 라이브러리를 호출하는 기능을 내장하고 있다. 파이썬, C++, 러스트, R, 자바 등 다른 언어에서 호출하거나 다른 언어를 호출할 수 있으며, SQL과 함께 사용할 수 있도록 추가 라이브러리를 활용할 수 있다.

줄리아는 실제로 사용되는 상위 20개 언어 대부분과 호환되는 등 다른 언어와의 상호 운용이 뛰어나다. C 또는 Fortran으로 작성된 공유 라이브러리 함수를 직접 호출할 수 있으며, Python (PythonCall.jl 사용), R, MATLAB, C# (DotNET.jlJdotNET 사용), JavaScript, Java (JavaCall.jl을 사용한 Scala 등 다른 JVM 언어)와 같이 C로 내보낸 함수를 직접 제공하지 않는 다른 언어를 호출하는 패키지도 제공된다. 또한 Python, R (Julia 1.10.x부터 가능), Rust, Ruby, C# 등 다른 언어에서 줄리아를 호출할 수 있는 패키지도 있다. Python에서 호출하기 위한 juliacall (PythonCall.jl의 일부)과 R에서 Julia 1.10.x까지 호출하기 위한 JuliaCall 패키지가 있다.

C 언어의 printf 함수를 호출하는 예는 다음과 같다.

@ccall printf("Hello, World!\n"::Cstring)::Cvoid


파이썬은 동적 타입 지정 프로그래밍 언어로서 유사점이 많아 상호 운용이 쉽다. 그러나 NumPy는 C 언어처럼 행 중심(row-major) 방식이고 배열 인덱스가 0부터 시작하지만, 줄리아는 포트란과 같이 열 중심(column-major) 방식이고 배열 인덱스가 1부터 시작한다는 차이점이 있다. 다음은 줄리아에서 PythonCall을 사용한 예이다.

using PythonCall
np = pyimport("numpy")
print(np.array([1, 2, 3], dtype=np.float32))


마찬가지로 JuliaCall을 통해 파이썬에서 줄리아를 호출할 수도 있다. 줄리아는 계산 속도가 빠르므로 계산량이 많은 부분만 줄리아에서 계산하도록 할 수 있다. 다음은 파이썬에서 JuliaCall을 사용한 예시로, 줄리아의 다차원 배열과 NumPy를 조합하여 사용하고 있다.

from juliacall import Main as jl
import numpy as np
np.array(jl.rand(range(10), 3, 5))


줄리아는 HTML (및 HTTP용), XML, JSON, BSON 등 마크업 언어와 데이터베이스 (PostgreSQL, Mongo, Oracle, TimesTen 포함, MySQL, SQLite, Microsoft SQL Server, Amazon Redshift, Vertica, ODBC) 및 웹 사용을 지원하는 패키지를 가지고 있다.

4. 패키지 시스템

줄리아는 내장된 패키지 관리자를 가지고 있으며 기본 레지스트리 시스템을 포함한다. 패키지는 GitHub에 호스팅된 소스 코드로 배포되는 경우가 가장 많지만, 다른 대안도 마찬가지로 사용할 수 있다. 패키지는 또한 아티팩트를 사용하여 바이너리 형태로 설치할 수 있다. 줄리아의 패키지 관리자는 패키지를 쿼리하고 컴파일하는 데 사용되며, 환경을 관리하는 데에도 사용된다. 페더레이션된 패키지 레지스트리가 지원되므로, 공식 레지스트리 외에 다른 레지스트리를 로컬로 추가할 수 있다.

5. 구현

줄리아의 핵심은 줄리아, C 언어, LLVM 종속성을 위한 C++로 구현되었다. 코드 파싱, 코드 로어링 및 부트스트래핑은 1.10 버전까지 Scheme 방언인 FemtoLisp로 구현되었다. 1.10 버전부터는 파싱에 새로운 순수 줄리아 표준 라이브러리(stdlib) 패키지 JuliaSyntax.jl을 사용하여 속도를 개선하고 "다양한 경우의 파서 오류 메시지를 크게 개선"했다. LLVM 컴파일러 인프라 프로젝트는 일반적으로 사용되는 모든 플랫폼에 대한 최적화된 기계어 코드를 생성하기 위한 백엔드로 사용된다. 일부 예외를 제외하고 표준 라이브러리는 줄리아로 구현된다.

줄리아는 네 가지 지원 계층을 가지고 있다.

👆
좌우로 밀어서 보기
계층지원 수준설명
1IA-32 프로세서 (전체 i686 하위 아키텍처 구현), 64비트 x86-64 (amd64), Armv8 (AArch64) (macOS 한정)완전히 지원되며, 약 10년 미만의 모든 프로세서가 해당된다. 애플 실리콘 맥은 기본적으로 지원되며 1단계 macOS 지원을 제공한다(이전에는 로제타 2 에뮬레이션에서 실행하여 지원). 인텔 기반 맥도 완벽하게 지원한다.
2Armv8 (AArch64) (Linux)리눅스에서는 2단계로 지원된다.
3Armv7 (AArch32), PowerPC (64비트)3단계 지원은 "빌드될 수도 있고 안 될 수도 있음"을 의미하며, PowerPC (64비트)는 1.12에서 4단계로 낮아져 더 이상 작동하지 않는다.
4PowerPC (64비트) (줄리아 1.12부터)더 이상 작동하지 않는다.


수백 개의 패키지가 GPU 가속된다.

* Nvidia GPU는 CUDA.jl로 지원된다(64비트 Linux에서는 1단계, 64비트 Windows에서는 2단계, PTX를 구현하는 패키지로, 컴퓨트 기능 3.5(Kepler) 이상이 필요하며, 둘 다 CUDA 11+가 필요하다. 이전 패키지 버전은 CUDA 9까지 작동한다).
* Google의 TPU와 같은 다른 가속기를 지원하는 패키지도 있다.
* oneAPI.jl을 통해 일부 인텔(통합) GPU를 지원한다.
* AMD의 GPU는 예를 들어 OpenCL로 지원되며, AMD ROCm 스택에 대한 실험적 지원도 제공된다.

일부 플랫폼에서는 줄리아를 특정 빌드 옵션을 사용하여 소스 코드에서 컴파일해야 할 수 있으며(예: 원래 라즈베리 파이), 이에 대한 작업이 완료되었으며 비공식적으로 미리 빌드된 바이너리(및 빌드 지침)를 사용할 수 있다. 줄리아는 작은 라즈베리 파이부터 세계에서 가장 빠른(한때, 최근까지) 슈퍼컴퓨터인 후가쿠의 ARM 기반 A64FX에 이르기까지 여러 ARM 플랫폼에서 빌드되었다. 줄리아는 현재 라스베리안에서 지원되며, Armv7 이상을 사용하는 새로운 파이에서 더 나은 지원을 제공한다. 줄리아 지원은 라즈베리 파이 재단에서 홍보한다. 줄리아는 또한 64비트 RISC-V용으로 빌드되었으며, 핵심 줄리아에 일부 지원 코드가 있다.

줄리아는 기본적으로 운영 체제가 필요하며, 아두이노와 같은 임베디드 시스템 플랫폼에서 실행하기 위한 공식적인 지원이 없지만, 일부 제한 사항이 있는 줄리아 코드는 여전히 실행되고 있다. 즉, 2 KB RAM (플러스 32 KB 플래시 메모리)을 갖춘 베어메탈 16 MHz 8비트 (ATmega328P) AVR 마이크로컨트롤러 아두이노에서 실행된다.

6. 활용 분야

Julia는 다른 프로그래밍 언어와의 상호 운용이 뛰어나 C, Fortran, Python, R, MATLAB, C#, JavaScript, Java 등 다양한 언어와 함께 사용될 수 있다. 또한 VHDL로 컴파일되거나 FPGA와 같은 고수준 합성 도구에도 사용되는 등 하드웨어 분야에서도 활용된다.

Julia는 HTML, XML, JSON 등 마크업 언어와 데이터베이스 (PostgreSQL, Mongo, Oracle, MySQL, SQLite, Microsoft SQL Server, Amazon Redshift, Vertica, ODBC)를 지원하는 패키지를 통해 웹 프로그래밍 및 데이터 처리에도 사용된다.

6.1. 국내외 주요 활용 사례

Julia는 MIT, 스탠퍼드, UC 버클리 등 여러 대학교에서 채택되었다. 아마존, IBM, JP모건 AI 연구, ASML을 포함한 다양한 분야의 대형 사기업들이 이 언어를 채택했다. 또한 NASA와 FAA를 비롯한 정부 기관과 모든 미국 국립 에너지 연구소에서도 사용되고 있다.

* 아마존(Amazon)은 양자 컴퓨팅 및 머신 러닝을 위해 아마존 세이지메이커(Amazon SageMaker)를 사용한다.
* ASML(ASML Holding)은 자사의 장비를 이용한 하드 실시간 프로그래밍에 사용한다.
* 기후 변화 모델링을 위해 The Climate Modeling Alliance를 사용한다.
* CERN은 대형 강입자 충돌기(Large Hadron Collider, LHCb 실험)에서 발생하는 데이터를 분석하는 데 사용한다.
* NASA과 제트 추진 연구소(Jet Propulsion Laboratory)는 줄리아를 사용하여 우주선 분리 역학을 모델링하고, TRAPPIST 외계 행성 데이터 세트를 분석하고, 빅뱅에서 발생한 우주 마이크로파 배경 데이터를 분석한다.
* 브라질 국립 우주 연구소(INPE)는 우주 임무 및 위성 시뮬레이션에 사용한다.
* 자율적인 미국 공군 연구소 VTOL 무인 항공기 시스템 드론의 비행을 계획하고 실행하기 위한 임베디드 시스템 하드웨어에 사용한다.
* 모더나(Moderna), 화이자(Pfizer), 아스트라제네카(AstraZeneca) 등 제약 산업에서 약물 개발에 널리 사용된다.
* 2015년부터 줄리아를 사용하여 거시 경제 모델링을 하는 뉴욕 연방 준비 은행은 2021년 코로나19 충격 추정치를 포함한다.
* 거시 경제 모델링을 위한 캐나다 중앙 은행, 중앙 은행
* 세계 최대 자산 운용사인 블랙록은 금융 시계열 분석에 사용한다.
* 영국 최대의 일반 보험사인 아비바는 보험 수리 계산에 사용한다.
* 미트르 코퍼레이션은 발표된 선거 결과의 검증에 사용한다.
* 노벨상 수상자 토마스 J. 서전트는 거시 계량 경제학 모델링에 사용한다.

7. 코드 예제

줄리아 공식 배포판은 줄리아의 REPL 통신 세션 셸을 포함하고 있으며, 테스트 코드를 빠르게 실험하기 위해 사용할 수 있다. 다음은 샘플 세션 예제의 하나로서, 문자열들은 `printLn`에 의해 자동으로 이어붙여진다.

```julia
julia> p(x) = 2x^2 + 1; f(x, y) = 1 + 2p(x)y
julia> println("Hello world!", " I'm on cloud ", f(0, 4), " as Julia supports recognizable syntax!")
Hello world! I'm on cloud 9 as Julia supports recognizable syntax!
```

Julia에서는 Hello world를 다음과 같이 작성한다.

```julia
println("Hello, World!")
```

다음 코드는 줄리아(Julia)로 작성된 행렬 A, B의 행렬곱이다.

```julia
A = randn(10, 10)
B = randn(10, 10)
C = A * B
```

이처럼 MATLAB이나 Python 라이브러리인 NumPy 등과 마찬가지로 간결하게 수학적 연산을 표현할 수 있으며, 행렬곱의 경우 단순히 BLAS 라이브러리(기본값은 OpenBLAS)를 호출할 뿐이지만, 행렬곱을 포함한 많은 기능이 C 언어나 Fortran과 비슷한 속도로 동작한다.