Lisette — Rust 문법 기반으로 Go 런타임에 컴파일되는 소형 언어
4 days ago
5
-
Rust 스타일 문법을 사용하면서 Go 런타임 위에서 동작하는 소형 언어로, 두 언어의 장점을 결합한 형태
-
대수적 데이터 타입, 패턴 매칭, Hindley-Milner 타입 시스템, 기본 불변성 등으로 안전성과 표현력을 강화한 구조
-
Go 패키지 직접 import, 파이프라인 연산자, try 블록, task 기반 동시성을 통해 Go 생태계와의 상호운용성 확보
-
컴파일 타임 오류 탐지, 명확한 진단 메시지, LSP 지원으로 개발자 경험과 코드 안정성 향상
-
Lisette 코드가 읽기 쉬운 Go 코드로 변환되어, 기존 Go 프로젝트와 자연스럽게 통합 가능한 점이 핵심
Lisette 개요
-
Lisette는 Rust 문법을 기반으로 하며 Go 런타임으로 컴파일되는 소형 언어
-
대수적 데이터 타입, 패턴 매칭, nil 없음, Hindley-Milner 타입 시스템, 기본 불변성, Go 생태계와의 상호운용성을 특징으로 함
-
cargo install lisette 명령으로 설치 가능하며, Go의 fmt, io, os 등 패키지를 직접 import하여 사용 가능
익숙한 문법
-
Rust와 유사한 문법 구조를 가짐
-
enum과 match를 통한 패턴 매칭 지원
-
struct와 impl 블록으로 메서드 정의 가능
-
표현식 지향 언어로, if, let, 블록 등이 모두 값을 반환함
-
체이닝과 람다를 지원해 환경 변수 처리나 문자열 조작을 간결하게 표현 가능
-
인터페이스와 제네릭을 지원하며, interface 정의와 T: Trait 제약을 통한 제네릭 함수 작성 가능
-
if let 및 let else 구문으로 Option 타입을 간결하게 처리 가능
안전성
-
Go 런타임에서 발생 가능한 오류를 컴파일 타임에 탐지
-
match 문에서 모든 패턴이 처리되지 않으면 오류 발생
-
nil 사용 불가, Option<T> 로 결측값 표현
-
Result 반환값을 무시하면 경고 발생
-
비공개 타입을 공개 API에서 노출 시 경고
-
불변 변수를 가변 인자로 전달 시 오류
-
구조체 필드 누락 시 컴파일 오류
- 진단 메시지는 구체적 코드 위치와 수정 제안을 함께 제공
-
LSP(Language Server Protocol) 지원으로 VSCode, Neovim, Zed 등 주요 에디터에서 사용 가능
사용성
-
Go와의 상호운용성을 중점으로 설계
-
파이프라인 연산자(|>) 로 함수 체이닝을 간결하게 표현
-
try 블록을 통해 오류 전파를 단순화
-
동시성은 task와 Channel을 이용해 Go의 goroutine과 유사하게 구현
-
직렬화 속성(attribute) 으로 JSON 필드명, 생략, 문자열 변환, 검증 태그 등을 지정 가능
-
panic 복구를 위한 recover 블록 제공, Result 타입으로 안전한 오류 처리 가능
-
defer 구문을 지원해 리소스 정리나 트랜잭션 롤백 보장
투명한 컴파일 결과
- Lisette 코드는 명확하고 읽기 쉬운 Go 코드로 변환됨
-
Option과 Result 타입은 각각 lisette.Option과 lisette.Result 구조체로 변환
-
match 구문은 Go의 조건문으로 변환되어 각 분기 처리
-
? 연산자는 내부적으로 Result 검사 코드로 치환
- 예시로, classify 함수는 Option<int>를 받아 Go의 명시적 조건문으로 변환되며, combine 함수는 Result를 검사하는 Go 코드로 변환됨
추가 정보
-
Homepage
-
개발자
- Lisette — Rust 문법 기반으로 Go 런타임에 컴파일되는 소형 언어