프로젝트 소개
Nolang은 시스템 프로그래밍을 목표로 하는 새로운 언어이며, 핵심 설계 목표는 메모리 안전성과 가비지 컬렉션(GC) 불필요함이다.
## 언어 특징
**메모리 안전성**: Nolang은 GC에 의존하지 않고 자동 메모리 관리로 안전성을 보장한다. 변수는 함수 스코프 종료 시 자동으로 소멸되며, 빈약 참조를 피하기 위해 수동 해제를 금지한다. 배열과 슬라이스 같은 컨테이너는 값 복사 의미를 채택하여 원래 변수의 생명주기와 분리된다.
**통일된 참조 전달 모델**: 모든 함수 인자는 기본적으로 참조 전달되며, 함수 내에서의 파라미터 수정은 호출자의 원본 데이터에 직접 영향을 미치지만 파라미터 자체를 소멸시킬 수는 없다.
**스코프 변수 덮어쓰기**: 동일한 함수 스코프 내에서 같은 변수명을 재사용할 때 Nolang은 새 변수 생성이 아닌 덮어쓰기 재할당으로 간주한다. 타입이 다를 경우 구문 수준에서 허용되지 않아 변수 섀도잉을 원천 차단한다.
**언어 수준에서 절대 크래시 없음**: 암묵적 크래시 경로를 제거하고 숨겨진 모호성을 배제한다.
**사전 배치 힙 할당과 배치 해제**: 사전 배치 할당을 지원하며, 스코프 이탈 시 배치 free가 이루어져 숨겨진 할당 비용을 없앤다.
## 도구체인
다음 작업을 지원하는 완전한 명령줄 도구(`no` 명령)를 제공한다:
- `no init` / `no new`: 작업 공간 초기화 및 새 프로젝트 패키지 생성
- `no fmt`: 코드 포맷팅
- `no build` / `no run` / `no test`: 빌드, 실행 및 테스트
- `no add` / `no remove` / `no update` / `no sync` / `no list`: 종속성 관리
- `no install` / `no uninstall`: 이진 파일 설치 관리
- `no pub`: 패키지 레지스트리에 게시
- 대상 지정 교차 컴파일 및 다양한 백엔드 컴파일러(Zig 등) 지원
에ント리 규칙: `main.no`가 프로그램 에ント리, `lib.no`가 라이브러리 에ント리, `tests/` 디렉터리 내 모든 `.no` 파일이 테스트 파일이다.
## 편집기 지원
- VSCode 플러그인(LSP 서버 포함)
- `make lsp`로 소스 코드로부터 빌드 가능
## 소스 코드 빌드
`make` 명령 사용: `make no`로 CLI 빌드, `make lsp`로 언어 서버 빌드, `make package`로 VSCode 확장 패키징, `make playground`로 WebAssembly 온라인 Playground 빌드.
## 관련 프로젝트
- notools: Nolang으로 구현된 Unix 명령줄 도구 모음(cat, ls, grep, wc 등), 시스템 프로그래밍 분야에서의 언어 실제 적용을 보여준다.
프로젝트는 Apache-2.0 라이선스를 따르며, 공식 문서 주소는 https://lizongying.github.io/nolang/이다
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.