3P by neo 21일전 | favorite | 댓글 1개
  • Pretty C는 C와 호환되는 새로운 스크립트 언어로, 동적 타이핑, 제네릭 반복, 리소스 추적 등의 기능을 제공
  • C 및 모든 라이브러리와의 하위 호환성을 유지함
  • Lua, Python, JavaScript, Lisp에서 영감을 받았음.

목표

  • C 개발자에게 많은 문법적 달콤함(Sugar)을 제공하여 C를 더욱 쉽게 사용하게 함.
  • Lua, Python, JavaScript, Ruby 등 여러 언어를 대체할 수 있는 궁극의 스크립트 언어로 자리매김함.
  • 단 하나의 헤더 파일을 포함하여 모든 코드베이스를 초보자 친화적으로 변환함.

시작하기

  • GitHub 저장소를 클론하거나 pretty.h 파일을 복사하여 사용할 수 있음.

제공되는 편의 기능

포함된 표준 헤더

  • stdbool.htrue, 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에서 사고 과정을 설명한 방식이 마음에 듦