모든 것을 멈추고 다시 시작한 C 작성 작업

1 day ago 1

  • 프랑스의 컴퓨터 학교에서 5년간 공부하고 20년간 프리랜서 개발자로 활동함
  • 주로 Ruby on Rails로 클라이언트 프로젝트 작업 수행
  • Common Lisp을 배우기 시작하면서 ASN.1 파서를 생성하는 서버 관리 프로토콜 작성
    • Common Lisp에서 C 코드를 생성하여 SNMP 서버 개발
  • 그 이후 Common Lisp 기반으로 여러 프로젝트 작성:
    • cl-unix-cybernetics – GitHub에서 가장 많은 별을 받은 프로젝트
    • cl-streamscffi-posix 개발
    • cl-facts – 트리플 스토어로, Common Lisp 그래프 데이터베이스 역할 수행
      • 빠르고, 원자적 트랜잭션, 중첩 가능한 트랜잭션 지원
      • unwind-protect과 호환됨
      • 단 3개의 매크로만 배우면 사용 가능
      • European Lisp Symposium (ELS)에서 발표
  • Common Lisp 개발에 집중하면서 클라이언트를 잃었지만, Lisp의 가능성에 큰 확신을 가짐

가상 머신(VM)과 컨테이너의 한계

  • 전문가들이 VM 및 컨테이너의 문제점 지적:
    • VM은 불필요한 CPU와 대역폭 낭비
    • Linux의 cgroups 기반 컨테이너는 원격 명령 실행(RCE) 및 권한 상승 취약점 존재
    • 매년 새로운 보안 취약점 발견
  • OpenBSD를 선호하면서 Terraform, Ansible 같은 DevOps 도구의 문제 피함

Common Lisp의 한계와 성능 문제

  • Clojure 등에서 GC(가비지 컬렉터)로 인해 성능 문제 발생:
    • 수천 개의 유닛을 처리하는 전략 게임 개발 시 실패 사례 발생
    • JVM의 GC는 성능 및 비용 문제를 수반함

C로의 전환 결정

  • Common Lisp의 성능 및 이식성 한계 인식:
    • Linux, OpenBSD, GTK+, GNOME 모두 C로 작성됨
    • 결국 성능과 이식성 문제를 해결하기 위해 C로 전환

새로운 언어 KC3 개발

  • libc3 유틸리티 라이브러리 개발 → C3 언어 → KC3로 명칭 변경
  • KC3의 특징:
    • 인터프리터 (ic3) 및 컴파일러 (c3c) 존재
    • UTF-8 버퍼에서 데이터 구조 생성 및 역변환
    • 방어적 프로그래밍 → 초기부터 버그 최소화
    • 보안 문제 없음
    • enum 태그된 union 기반의 데이터 타입 시스템

KC3 기반 성과

  • cl-facts를 C89로 포팅:
    • Covid-19 기간 동안 개발 완료
    • 트리플 추가, 삭제, 재귀 쿼리 시스템, 트랜잭션, 로깅, 지속성 등 구현
  • 알고리즘 타입을 위한 파서 및 생성기 작성:
    • 구조체, 연결 리스트, 맵, 해시 테이블, 복소수, 튜플, 코드 블록 등 포함
    • José Valim (Elixir 창시자)에게 큰 영감 받음
  • ikc3 – KC3 평가 결과 출력하는 REPL
  • kc3_httpd – MVC 프레임워크 기반 웹 서버 개발
    • 현재 블로그 페이지도 kc3_httpd로 제공
  • 문서화 웹사이트 작성 → KC3의 Markdown to HTML 변환기 사용

결론

  • Common Lisp에서 얻은 경험을 기반으로 C로 전환
  • KC3는 성능, 보안, 이식성에서 뛰어난 성과를 거둠
  • 앞으로 KC3와 관련된 추가 매크로 및 예제 제공 예정

Read Entire Article