liminfo

Mojo Language Reference

Mojo 문법, SIMD/GPU 프로그래밍, Python 상호운용 레퍼런스

17개 결과

Mojo Language Reference 소개

이 Mojo 언어 레퍼런스는 Mojo 프로그래밍 언어의 검색 가능한 가이드로, fn과 def 함수 선언, var/let 변수 바인딩, alias 컴파일 타임 상수, struct 값 타입, trait 인터페이스 정의 등 기본 문법을 다룹니다.

Int, Float64, String, SIMD[type, size] 하드웨어 가속 벡터 타입, DType 열거형, UnsafePointer 메모리 관리 등 Mojo 고유의 타입 시스템과 함께 borrowed/inout/owned 소유권 모델을 상세히 설명합니다.

@parameter 컴파일 타임 분기, @always_inline 함수 최적화 같은 시스템 레벨 기능과 Python.import_module(), PythonObject 래퍼를 활용한 NumPy/Pandas 연동 등 완전한 Python 인터롭 API를 포함하고 있습니다.

주요 기능

  • fn vs def 비교: 엄격한 타입의 fn 함수와 동적 타입의 def 함수
  • var(가변)과 let(불변) 변수 선언 및 타입 어노테이션
  • 값 타입 프로그래밍을 위한 struct와 인터페이스 계약을 위한 trait 정의
  • SIMD[type, size] 벡터 타입 레퍼런스와 DType 열거형, reduce 연산
  • 소유권 모델: borrowed(읽기 전용), inout(가변 참조), owned(소유권 이전)
  • __init__ 생성자와 __del__ 소멸자 라이프사이클 관리 패턴
  • @parameter 컴파일 타임 분기와 @always_inline 최적화 데코레이터
  • Python 연동 API: import_module(), PythonObject 래퍼, NumPy/Pandas 통합

자주 묻는 질문

Mojo에서 fn과 def의 차이는 무엇인가요?

Mojo에서 fn은 모든 매개변수와 반환 값에 엄격한 타입 어노테이션을 요구하여 완전한 컴파일 타임 최적화가 가능합니다. def는 Python처럼 동적 타이핑을 허용하여 런타임에 타입이 추론됩니다. 성능이 중요한 코드에는 fn을, 프로토타이핑에는 def를 사용하는 것이 좋습니다.

Mojo의 소유권 모델은 어떻게 작동하나요?

Mojo는 세 가지 인자 전달 방식을 사용합니다: borrowed(읽기 전용, 기본값), inout(원본 값을 수정할 수 있는 가변 참조), owned(함수에 소유권을 이전하여 값을 소비하거나 파괴 가능). 이 모델은 가비지 컬렉션 없이 데이터 경쟁을 방지하고 메모리 안전성을 보장합니다.

Mojo의 SIMD란 무엇이며 어떻게 사용하나요?

SIMD[DType, size]는 하드웨어 SIMD 명령어에 직접 매핑되는 Mojo의 일급 벡터 타입입니다. 예를 들어 SIMD[DType.float32, 4]는 4개 float32 요소의 벡터를 생성합니다. 요소별 연산과 reduce_add() 같은 메서드로 하드웨어 가속 병렬 연산을 수행할 수 있습니다.

Mojo에서 Python 라이브러리를 어떻게 호출하나요?

Python 인터롭 API를 사용합니다. python 모듈에서 Python을 임포트한 후 Python.import_module("numpy")로 설치된 Python 패키지를 가져올 수 있습니다. 반환된 PythonObject가 Python 객체를 래핑하며, NumPy, Pandas, matplotlib 등 모든 Python 라이브러리를 직접 사용할 수 있습니다.

Mojo에서 alias 키워드는 어디에 사용하나요?

alias는 런타임이 아닌 컴파일 타임에 확정되는 상수를 정의합니다. 예를 들어 alias PI = 3.14159265 또는 alias MAX_SIZE = 1024입니다. var이나 let과 달리 alias 값은 컴파일 시점에 알려져 있어야 하며, 설정 상수나 메타프로그래밍 매개변수에 주로 사용됩니다.

Mojo의 struct와 trait는 어떻게 작동하나요?

Mojo의 struct는 데이터와 메서드를 정의하는 값 타입(C 구조체와 유사)으로, inout self를 사용하는 명시적 __init__ 생성자가 필요합니다. trait는 struct가 구현할 수 있는 인터페이스를 정의하며, Rust의 trait이나 Java의 interface와 유사합니다.

Mojo에서 @parameter는 무엇을 하나요?

@parameter 데코레이터는 컴파일 타임 분기와 평가를 가능하게 합니다. @parameter if 블록 안의 코드는 컴파일 시 평가되어 일치하는 분기만 최종 바이너리에 포함됩니다. 런타임 오버헤드 없이 GPU/CPU 같은 플랫폼별 코드를 작성할 때 유용합니다.

Mojo에서 지원하는 포인터 타입은 무엇인가요?

Mojo는 수동 메모리 관리를 위한 UnsafePointer[T]를 제공합니다. UnsafePointer[Int].alloc(n)으로 메모리를 할당하고, ptr.store(index, value)로 값을 저장하며, ptr.load(index)로 값을 읽습니다. C 포인터처럼 프로그래머가 할당과 해제를 직접 관리해야 하므로 "unsafe"라 불립니다.