- 20년간 Ruby on Rails 프리랜서로 일한 경험은 Common Lisp 프로젝트로 이어졌지만, 성능·이식성·실행 환경 한계가 누적되며 다시 C를 선택하게 됨
- cl-facts는 빠른 트리플 저장소와 중첩 가능한 원자적 트랜잭션을 갖췄지만, 개발 시간이 길어지며 클라이언트를 잃는 결과도 낳음
- 가상머신, Linux cgroups 기반 컨테이너, 가비지 컬렉터에 대한 불만은 C가 여전히 시스템 소프트웨어의 현실적 기반이라는 판단으로 이어짐
- libc3에서 출발한 작업은 C3 언어, 인터프리터 ic3, 컴파일러 c3c 구상으로 확장됐고, 이름 충돌 때문에 이후 KC3로 바뀜
- 현재 KC3는 C89로 포팅한 그래프 데이터베이스, REPL ikc3, MVC 웹서버 kc3_httpd, Markdown-to-HTML C 구현 기반 문서 사이트까지 포함함
Common Lisp 작업이 C 재작성으로 이어진 과정
- 5년간 프랑스 컴퓨터 학교에서 공부하고 20년간 Ruby on Rails 프리랜서 개발자로 일한 뒤, 짧은 학습으로 생각했던 Common Lisp가 점점 더 큰 프로젝트가 됨
- Common Lisp로 C 코드를 생성해 ASN.1 파서와 쿼리 시스템을 만들었고, 이 작업은 커스텀 Common Lisp-to-C SNMP 서버로 확장됨
- 이후 여러 Common Lisp 패키지를 작성함
- cl-unix-cybernetics는 GitHub 저장소 중 가장 많은 별을 받은 프로젝트가 됨
- cl-streams, cffi-posix도 작성함
- cl-facts는 Common Lisp 그래프 데이터베이스로 쓸 수 있는 트리플 저장소임
- cl-facts는 빠른 성능, 원자적 트랜잭션, 중첩 가능한 트랜잭션,
unwind-protect호환성, 3개 매크로만 배우면 되는 사용성을 갖춘 결과물임 - cl-facts는 벨기에의 European Lisp Symposium에서 라이트닝 토크로 발표됐고, 발표 슬라이드는 facts.pdf에 있음
- Common Lisp 패키지 개발에 시간이 오래 걸리며 클라이언트를 잃었지만, Common Lisp는 미래 세대를 위한 도구라고 판단함
C, KC3, 그리고 현재 구성
- 가상머신은 CPU와 대역폭을 에뮬레이션에 낭비하고, Linux cgroups 기반 컨테이너에서는 RCE와 권한 상승 문제가 계속 발견된다는 경험이 OpenBSD 중심 선택으로 이어짐
- Terraform, Ansible 같은 DevOps 도구를 피했고, VM과 컨테이너뿐 아니라 프로그래밍 언어 자체에 불만을 가진 사람들도 봄
- Clojure로 수천 유닛이 각자 세계 인식을 갖는 전략 게임을 만들려던 사례는 가비지 컬렉터 때문에 실패함
- Common Lisp 프로젝트들도 가비지 컬렉터 때문에 적용 범위가 제한됐고, JVM의 가비지 컬렉터는 잘 만들기 위해 큰 비용이 드는 상용적 강점으로 평가됨
- 성능과 이식성을 고려하면 별도 도구가 없는 한 합리적 선택은 C라고 판단함
- Linux는 C로 작성됨
- OpenBSD는 C로 작성됨
- GTK+는 객체지향 순수 C로 작성됨
- GNOME은 C로 작성됨
- Linux 데스크톱 앱 다수도 오래된 C로 작성됨
- libc3 유틸리티 라이브러리에서 출발해 C3 언어, 인터프리터 ic3, 컴파일러 c3c 구상으로 발전함
- UTF-8 버퍼와 자료구조가 빠르게 오가도록 만들었고, 메모리 비용을 감수해 bounds-check를 적용함
- 방어적 프로그래밍을 전면에 두고 버그를 처음부터 0으로 줄이는 방향을 잡았으며, KC3 코드는 보안 함의 없이 실행된다고 밝힘
- 초기 인터프리터는 언어의 모든 자료형을 담는 enum-tagged union인 tags를 REPL에서 처리하는 형태로 만들어짐
- 3년 뒤 5계층 리팩터링을 끝냈고, 테스트가 다시 모두 통과했으며 웹서버도 다시 깨지지 않는 상태가 됨
- 언어 이름은 C3가 이미 사용 중이어서 KC3로 바뀜
- 기존 Common Lisp 그래프 데이터베이스 cl-facts는 C89로 포팅됨
- 대부분은 2020년 Covid-19 봉쇄 기간에 작성됨
- 트리플 추가·삭제, 재귀 쿼리 시스템, 트랜잭션, 로깅, 영속성을 포함함
- Common Lisp 원 설계를 C89로 거의 그대로 구현함
- KC3에는 여러 알고리듬 자료형의 형식적 의미를 다루기 위한 파서와 생성기도 포함됨
- Structs, Linked lists, Maps, Hash tables, Time, Complex, Rationals, Tuples, Code blocks, Quotes, Unquotes, Copy on write, Skip lists, Sets 등이 포함됨
- 매크로가 있으며, 후속 글에서 예제를 다룰 예정임
- José Valim과 Elixir 작업에서 큰 영감을 받음
- ikc3 REPL은 키보드나 파일 입력을 파싱하고 KC3 평가 결과를 표준 출력으로 내보내며, KC3 단위 테스트 2단계 대부분에 사용됨
- kc3_httpd는 MVC 프레임워크를 갖춘 웹서버이며, 현재 웹페이지를 생성함
- Common Lisp 글 조회 수가 700회를 기록했고, 문서 웹사이트는 kc3_httpd와 확장된 Markdown-to-HTML C 구현으로 작성됨