보스크(Bosque): 코드 품질 높이는 마이크로소프트의 새로운 루프 없는 언어
- 보스크 언어는 소프트웨어 품질 향상과 프로그래머 생산성 증대를 목표로 합니다.
- 가변 상태, 참조 동등성, 루프 같은 복잡성 근원을 제거합니다.
- 타입스크립트(TypeScript)와 자바스크립트(JavaScript) 프로그래밍 언어에서 영감을 받았습니다.
구조적 프로그래밍과 추상 자료형이 1970년대에 대중화된 이래, 거의 모든 프로그래밍 언어에서 이를 사용해 왔습니다. 이 방법론들은 프로그래머가 하드웨어 아키텍처를 걱정하지 않고 코드의 의도와 핵심 동작에 집중할 수 있게 했습니다. 이는 곧 컴파일러와 통합 개발 환경(IDE)의 황금기로 이어졌습니다.
생산성을 더욱 높이고, 소프트웨어 품질을 개선하며, 여러 새로운 컴파일러와 개발자 툴링 경험을 가능하게 하기 위해 마이크로소프트 엔지니어들이 최근 '보스크(Bosque)'라는 새로운 프로그래밍 언어를 내놓았습니다.
보스크는 기계와 인간 모두에게 단순하고 추론하기 쉬운 코드를 작성하도록 설계되었습니다. 코딩과 개발 과정에서 '우발적 복잡성(accidental complexity)'을 피할 수 있는 여러 방법을 제공합니다.
규칙화된 프로그래밍(Regularized Programming)
구조적 프로그래밍 모델에서 흐름 제어는 조건문, 서브루틴, 루프로 관리됩니다. 반면 새로운 프로그래밍 언어는 가변 상태, 참조 동등성, 루프 같은 복잡성 근원을 제거합니다. 그래서 개발자들은 이 패러다임을 '규칙화된 프로그래밍'이라고 부릅니다.
보스크는 타입스크립트에서 영감을 받은 구문과 타입 시스템, ML, 그리고 자바스크립트/Node에서 영감을 받은 의미론을 결합해 파생되었습니다. 비강요적(non-opinionated) 타입 시스템을 지원해 프로그래머가 다양한 공칭(nominal), 구조적(structural), 조합(combination) 타입을 사용해 문제 영역의 관련 특징을 유연하게 인코딩할 수 있게 합니다.
참고: Microsoft | Moving Beyond Structured Programming
이 언어는 'while', 'do while', 'for' 루프를 사용하지 않으며, 조건을 적용하는 데 완전히 다른 접근 방식을 취합니다. 마이크로소프트의 컴퓨터 과학자 마크 마론(Mark Marron)이 구조적 루프를 대체하면서 소프트웨어 품질을 높이는 '펑터(Functors)' 개념을 도입했습니다.
심볼릭 트랜스포머가 있는 펑터
보스크는 특화된 대량 대수적 데이터 연산과 none(또는 선택적 데이터) 처리에 대한 통합 지원을 제공합니다. 컬렉션 처리를 위한 파이프라인과 if, match를 표현식으로 지원합니다. 보스크에는 풍부한 표현식 기본 요소 덕분에 많은 문장 결합자가 필요하지 않습니다. 언어는 assert(디버그 빌드에서만 활성화)와 check(모든 빌드에서 활성화)을 일급 기능으로 제공하며, 사전/사후 조건과 클래스 불변식도 지원합니다. 또한 보스크에는 어떤 루프 구성체도 없습니다.
보스크는 마이크로서비스, 서버리스 함수, RESTful API에 의존하는 클라우드 기반 개발 프로젝트에서 극도로 유용할 수 있습니다. 빠른 시작을 위한 제로 비용 로딩, 초저비용 추적, 최소한의 성능 변동성을 가진 런타임을 가능하게 할 수 있습니다.
앞으로의 전망
이 새로운 언어는 아직 개발 단계에 있으며, 테스트해보고 싶다면 GitHub에서 코드를 확인할 수 있습니다.
초기 실험 결과, API 자동 마샬링, 향상된 퍼징, 심볼릭 테스팅, 안정적인 GC 지원을 갖춘 실시간 컴파일 등 여러 차세대 경험을 강화할 수 있음을 시사합니다.
참고: NASA의 안전 중요 프로그램 작성을 위한 10가지 코딩 규칙
보스크는 수정 대상이며, 여러 버그와 누락된 기능이 있고 성능도 아직 많이 개선될 수 있습니다. 마론과 그의 팀은 메모리 사용량의 시간 경과에 따른 경계 자동 설정, 추가 노력 없이 런타임 오류가 없는 앱 검증 등 더 진보된 개발자 툴링 경험에 집중할 예정입니다.