Show GN: Lowent – 함수의 서명만 읽어도 무엇을 하는지 아는 시스템 프로그래밍 언어

11 hours ago 6

Lowent(로우엔트)는 제가 만들고 있는 시스템 프로그래밍 언어와 그 컴파일러입니다. 목표는 하나입니다. 함수의 머리(서명)만 읽어도 그 함수가 무엇을 받고, 무엇을 돌려주고, 바깥 세상에 무엇을 할 수 있는지 알 수 있게 하는 것입니다. 짐작할 자리가 적은 코드는 사람도 AI 도 덜 틀리게 읽고 고칠 수 있다고 생각했습니다. GitHub: https://github.com/rubidus-api/lowent_lang 매뉴얼(한국어·영어, 웹·PDF): https://rubidus-api.github.io/lowent_lang/ 어떤 문제를 풀려고 했나 C 의 int parse(const char *s) 는 파일을 열 수도, 네트워크에 닿을 수도, 전역 힙을 쓸 수도 있습니다. 서명은 아무 말도 하지 않습니다. 정수는 몰래 넓어지고 좁아지며, 넘치면 미정의 동작이 됩니다. 메모리는 GC 의 멈춤과 런타임을 감수하거나, 손 관리의 해제 누락·두 번 해제·해제 뒤 사용을 감수해야 합니다. 주석에 적은 «0 보다 커야 한다» 는 아무도 검사하지 않습니다. Lowent 는 이렇게 풉니다 순수와 비순수를 가릅니다. fn 은 순수하고, proc 은 하는 일(입출력·할당·상태 변경)을 effects 로 적어야 합니다. 순수하다고 적은 fn 이 몰래 출력하면 컴파일되지 않습니다. 권한을 인자로 받습니다. 전역 출력도 전역 힙도 없습니다. 파일·출력·할당에 닿으려면 그 권한(capability)을 값으로 건네받아야 해서, 서명만 보고도 «이 함수는 네트워크에 닿지 않는다» 를 압니다. 계약을 검사합니다. requires·ensures·errors 를 서명에 적으면 컴파일 때 또는 경계에서 검사하고, 증명된 계약은 본문의 검사를 지웁니다. GC 없이 메모리를 지킵니다. 영역(region)·소유·빌리기로 수명을 정하고, 닫다가 실패할 수 있는 자원(파일 등)을 열고 닫지 않으면 컴파일되지 않습니다. 정수는 적은 대로만 움직입니다. 값을 잃을 수 있는 변환은 적어야 하고, 넘침은 멈출지·돌지·끝에서 멈출지 고릅니다. 한 뜻에 한 표기. 전위 표기와 점으로 끝나는 문장, 닫힌 키워드 43 개. 특수문자가 거의 없어 스마트폰 자판으로도 편하게 치고, 문법 전체를 정규식만으로 칠할 수 있습니다. fn mean input xs slice u8 . output u64 . requires gt (len xs) 0 . do var total u...

Read Entire Article