Pretty.c - Scripting on Top of C
(github.com/aartaka)- Pretty C는 C와 호환되는 새로운 스크립트 언어로, 동적 타이핑, 제네릭 반복, 리소스 추적 등의 기능을 제공
- C 및 모든 라이브러리와의 하위 호환성을 유지함
- Lua, Python, JavaScript, Lisp에서 영감을 받았음.
목표
- C 개발자에게 많은 문법적 달콤함(Sugar)을 제공하여 C를 더욱 쉽게 사용하게 함.
- Lua, Python, JavaScript, Ruby 등 여러 언어를 대체할 수 있는 궁극의 스크립트 언어로 자리매김함.
- 단 하나의 헤더 파일을 포함하여 모든 코드베이스를 초보자 친화적으로 변환함.
시작하기
- GitHub 저장소를 클론하거나
pretty.h파일을 복사하여 사용할 수 있음.
제공되는 편의 기능
포함된 표준 헤더
stdbool.h로true,false,bool제공stdint.h로 고정 너비 정수 타입 제공iso646.h로 가독성 높은 연산자 대안 제공
간단한 매크로
max,min,len,default,limit,between,divisible등의 매크로 제공
새로운 타입
string,byte,bytes,any등의 타입 별칭 제공uchar,ushort,uint,ulong등의 정수 단축형 제공
새로운 별칭
eq,is,bitnot,bitxor등의 연산자 별칭 제공below,above,upto,downto등의 비교 연산자 제공even,odd,positive,negative,zero,empty등의 숫자/데이터 프레디케이트 제공nil,until,elif,ifnt,repeat,done~/~finish,pass등의 별칭 제공
타입 추론 (GCC, Clang, 또는 C23+)
var,let,local키워드를 사용하여 타입 추론 가능
제네릭 출력 (C11+)
print,println으로 다양한 타입의 데이터를 출력 가능
제네릭 동등성 (C11+)
equal로 다양한 타입의 데이터 비교 가능
예쁜 삼항 연산자
when,then,other,otherwise,only,otherwhen등의 키워드로 가독성 높은 삼항 연산자 사용 가능
for 매크로
foreach,forthese,fortimes,forrange,forrangeby등의 매크로로 다양한 반복 패턴 제공
할당 매크로
new,vector,delete등의 매크로로 간단한 메모리 할당 및 해제 가능
블록 유틸리티
lambda,with,defer,try,catch등의 블록 유틸리티 제공
GN⁺의 정리
Pretty C는 C 언어에 다양한 문법적 설탕을 추가하여 개발자들이 더 쉽게 코드를 작성할 수 있도록 돕는 프로젝트임. 특히, C의 하위 호환성을 유지하면서도 Lua, Python, JavaScript 등의 언어에서 영감을 받아 다양한 기능을 제공함. 이러한 기능들은 C 개발자들이 더 간결하고 가독성 높은 코드를 작성하는 데 도움을 줄 수 있음. 비슷한 기능을 제공하는 프로젝트로는 Zig, Nim 등이 있음.
Hacker News 의견
- C 내에서 DSL을 만드는 전통이 오래됨. Stephen Bourne는 C의 전처리기를 사용하여 ALGOL과 유사하게 쉘을 작성하고자 했음
- 이 내용이 농담인지 아니면 저자가 혼란스러운 것인지 명확하지 않음. 스크립팅이 아니며 강한 타입을 도입한다고 주장하지만 실제로는 타입에 대해 아무것도 하지 않음. Lua와 Lisp를 모델로 한 연산자 별칭을 도입하지만 두 언어 모두에 존재하지 않음
- 스크립팅 언어라고 주장하지만 프로그램을 컴파일해야 함. CINT를 추가하면 즉각적인 실행과 REPL을 사용할 수 있음
- C 개발자에게 당뇨병 유발 심장마비를 일으킬 만큼 많은 문법 설탕을 제공함. 재미있음
- Python 2와 같은 실수를 함. 문자열과 바이트는 동일한 타입이 아니며 그렇게 취급해서는 안 됨
- 이 내용이 흥미롭다면 libcello.h도 좋아할 것임
- Java로 작성된 것처럼 보이는 C++ 코드베이스를 검사했던 기억이 남. 모든 것이 카멜케이스로 명명되고, 모든 클래스 변수에 대한 getter와 setter가 있으며, 인터페이스가 곳곳에 있음
- CNoEvil과 ogw에 추가해야 할 몇 가지가 있음. 이 프로젝트가 몇 달마다 다시 나타날 때마다 항상 더 많은 것이 있는 것 같음
- "ifnt"보다 "unless"가 더 읽기 쉬움
- Readme를 pretty.h로 엮을 수 있는지 궁금함. orgfile의 코드블록이 포괄적인지 여부. Readme에서 사고 과정을 설명한 방식이 마음에 듦