# Pretty.c - Scripting on Top of C

> Clean Markdown view of GeekNews topic #17411. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17411](https://news.hada.io/topic?id=17411)
- GeekNews Markdown: [https://news.hada.io/topic/17411.md](https://news.hada.io/topic/17411.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-10-25T09:54:05+09:00
- Updated: 2024-10-25T09:54:05+09:00
- Original source: [github.com/aartaka](https://github.com/aartaka/pretty.c)
- Points: 3
- Comments: 1

## Topic Body

- 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 등이 있음.

## Comments



### Comment 30385

- Author: neo
- Created: 2024-10-25T09:54:05+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41931507) 
- 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에서 사고 과정을 설명한 방식이 마음에 듦
