GN⁺: Borgo - Go로 컴파일되는 정적 타입 언어
(github.com/borgo-lang)Borgo 프로그래밍 언어 소개
- Go보다는 표현력이 좋지만 Rust보다는 복잡하지 않은 애플리케이션 작성 언어를 원함
- Go는 단순하고 직관적이지만, 종종 더 많은 타입 안전성을 제공했으면 함
- Rust는 작업하기 좋지만(적어도 단일 스레드 코드의 경우) 너무 광범위하고 복잡하며, 때로는 고통스러움
- Borgo는 Go로 트랜스파일되는 새로운 언어로, 기존 Go 패키지와 완벽하게 호환됨
- Borgo 구문은 세미콜론이 선택사항인 Rust와 유사함
주요 기능
- 대수적 데이터 유형 및 패턴 매칭
- nil 대신 Option 사용
- 여러 반환 값 대신 Result 사용
- ? 연산자를 사용한 오류 처리
로컬에서 실행하기
- Borgo는 Rust로 작성되었으므로 cargo가 필요함
- 현재 폴더의 모든 .brg 파일을 컴파일하려면:
- $ cargo run -- build
- 컴파일러는 .go 파일을 생성하고, 이를 정상적으로 실행할 수 있음
GN⁺의 의견
- Rust는 강력한 언어지만 러닝커브가 가파르고 도입 장벽이 높은 편인데, Borgo는 Rust의 장점을 Go의 생태계에서 활용할 수 있게 해주는 흥미로운 시도로 보임. 다만 아직 초기 단계라 생태계가 부족할 것으로 예상됨
- Option과 Result로 nil과 에러 처리를 개선한 것, ? 연산자로 에러 핸들링을 간편하게 한 부분 등은 Go 개발자들이 종종 불편해하던 부분을 해소해줄 것 같음
- 기존 Go 라이브러리를 그대로 사용할 수 있다는 것은 큰 장점. 하지만 Rust 문법을 차용한만큼 Go 개발자들이 적응하는데 시간이 걸릴 수 있음
- Transpile 방식이다보니 디버깅이나 런타임 퍼포먼스 등에서 네이티브 Go 코드 대비 불리할 가능성이 있음. 큰 규모의 프로덕션 코드에 적용하기에는 아직 이른 감이 있음
- Kotlin이 JVM 생태계에서 점유율을 높여가는 것처럼, Borgo도 Go의 솔루션이 되기 위해서는 코드 품질, 개발 생산성, 러닝커브 등 여러면에서 지속적인 개선이 필요해보임. 계속 발전해나간다면 Go 진영의 매력적인 대안이 될 수 있을 것으로 기대됨
Hacker News 의견
요약:
- Go 언어의 부족한 점을 보완한 Borgo 언어에 대한 긍정적 반응들
- Enum, Optional 타입 등 Go에서 아쉬웠던 기능들이 추가됨
- Go 개발자들이 바라던 기능들이 대부분 포함됨
- Borgo의 일부 디자인 결정은 Go의 특징보다는 Rust를 닮은 느낌
-
impl
을 이용한 메서드 정의, 채널과 고루틴 문법,zeroValue()
내장 함수 등 - 그럼에도 불구하고 Go보다는 Borgo로 개발하는 것을 선호할 것으로 보임
-
- 비슷한 시도를 했던 다른 프로젝트들에 대한 소개
- braid, have, oden 등 Go로 트랜스파일되는 언어를 만들려는 시도들이 있었음
- Rust의 장점 중 하나인 Borrow Checker를 제외하고 타입 시스템과 에러 핸들링 등의 장점은 가져온 듯함
- 동적 타이핑과 정적 타이핑의 장단점을 모두 가진 언어가 있으면 좋겠다는 의견
- 초기 개발 시에는 Python 같은 동적 타이핑의 장점을, 이후에는 점진적으로 정적 타이핑으로 전환할 수 있으면 좋을 것
- Go의 런타임과 도구 생태계의 장점에 Rust의 Enum 같은 타입 안정성이 더해진 느낌
- Struct의 필드 가시성을 대소문자로 구분하는 Go의 방식 대신
pub
/private
키워드를 도입한 점도 긍정적 - Gleam 언어와 비슷한 타입 안정성과 복잡도 간의 절충안을 찾은 듯하지만, Erlang이나 JS가 아닌 Go로 컴파일 된다는 점이 성능상 이점
- 다만 컴파일 에러 메시지가 Rust나 Gleam만큼 친절할지는 의문