Jacquard 0.1: AI가 작성하고 인간이 검토하는 코드를 위한 프로그래밍 언어
Jacquard 0.1: AI가 작성하고 인간이 검토하는 코드를 위한 프로그래밍 언어
Jacquard 0.1은 머신러닝 모델이 대부분의 코드를 작성하고 인간이 이를 검토하는 체제에 맞춰 설계된 프로그래밍 언어입니다. 이 언어는 인간 검토자가 AI가 생성한 코드의 모든 줄을 읽을 필요 없이, "이 코드가 무엇을 건드릴 수 있는가?" 또는 "얼마나 확신할 수 있는가?"와 같은 중요한 보안 및 신뢰성 질문에 답할 수 있는 능력을 언어 자체에 제공하는 데 중점을 둡니다.
명시적 효과 추적 및 권한 부여
Jacquard는 언어 수준에서 부작용(side effects)의 투명성을 강제합니다. 모든 함수 시그니처는 수행할 수 있는 효과를 명시적으로 선언하며, 이를 통해 검토자는 코드 조각이 무엇을 할 수 있는지 한눈에 확인할 수 있습니다.
- 효과 시그니처:
(text) ->{net} text와 같은 시그니처는 해당 함수가 네트워크 작업(net)을 수행할 수 있음을 나타냅니다. - 언어 수준의 강제: Jacquard 런타임은
--allow플래그(예:--allow net또는--allow fs)를 통해 권한이 명시적으로 부여되지 않는 한, 처리되지 않은 모든 외부 효과를 거부합니다. - 암묵적 권한 없음: 전통적인 언어와 달리, 파일 시스템이나 네트워크에 접근할 수 있는 암묵적 권한이 없습니다. 권한은 반드시 런타임에 명시적으로 부여되어야 합니다.
다중 세계 실행 및 시뮬레이션
Jacquard는 외부 세계를 관리하는 핸들러를 교체함으로써 동일한 프로그램을 서로 다른 "세계"에서 실행할 수 있도록 합니다. 이는 전통적인 모킹(mocking)을 일급 객체 언어 기능으로 대체합니다.
- 세계 핸들러: 핸들러는 프로그램의 외부 세계에 대한 요청에 응답하는 구성 요소입니다. 핸들러를 교체함으로써 개발자는 동일한 코드를 실제 네트워크, 스크립트된 가짜 데이터, 과거 트래픽 기록, 또는 서버 동작의 확률 모델 위에서 실행할 수 있습니다.
- 결정론적 테스트: 이러한 아키텍처는 세계 핸들러를 변경하는 것만으로 "API가 다운되면 내 에이전트가 어떻게 행동할까?"와 같은 시나리오를 테스트하는 것을 매우 쉽게 만듭니다.
이산 확률적 프로그래밍
Jacquard는 확률적 프로그래밍을 내장된 런타임 기능이 아닌 라이브러리로 취급하며, 이는 깊은 다중 샷(multi-shot) 핸들러를 갖춘 대수적 효과(algebraic effects)에 의해 가능해집니다.
- 다중 샷 핸들러: 핸들러는 계산을 0번, 1번 또는 여러 번 재개할 수 있습니다. 이는 유한 이산 모델에 대해 도달 가능한 모든 결과와 그 확률을 정확하게 열거할 수 있게 합니다.
- 라이브러리로서의 베이지안 추론: 핸들러가 프로그램의 연속성을 제어할 수 있기 때문에,
sample및observe작업은 효과로 구현되며, 다양한 추론 알고리즘(예: likelihood weighting)은 핸들러로 구현됩니다. - 프로그램 수정: 이 언어는 실패하는 테스트를 하나의 관찰값으로 취급하고 다양한 후보 패치(patch)의 확률을 계산함으로써 프로그램 수정을 수행하는 데 사용될 수 있습니다.
구조적 동일성 및 콘텐츠 주소 지정
형식 지정이나 이름 변경으로 인한 노이즈를 피하기 위해, Jacquard는 코드의 정규화된 해결된 구조를 기반으로 한 콘텐츠 주소 지정(content-addressing)을 사용합니다.
- Canonical Hashing: Jacquard는 소스 바이트가 아닌 프로그램의 해결된 구조를 해싱합니다. 이는 주석, 형식 지정, 또는 로컬 변수 이름을 변경해도 프로그램의 동일성이 변하지 않음을 의미합니다.
- 구조적 디프(Structural Diffing): 이 언어는 텍스트의 변화가 아닌 로직의 변화를를 식별하는 구조 인식형 디퍼(differ)를 제공합니다.
- 효율적인 캐싱: 순수 테스트는 정규화된 코드나 그 의존성이 변경될 때만 다시 실행되므로, 불필요한 계산을 줄입니다.
기술적 구현 및 도구
Jacquard 0.1은 OCaml 체커와 CPS 인터프리터로 구현된 연구 프로토타입입니다. C 코드를 생성하는 네이티브 AOT (Ahead-of-Time) 백엔드를 포함하며, 생성된 코드는 clang 또는 gcc를 통해 컴파일됩니다.
- Kernel AST: 이 언어는 모든 형태가 27개의 커널 폼(kernel forms)으로 구성된
(head, meta, args)트리플(triple) 표현식에서 파정되는 균일한 표현 방식을 기반으로 구축되었습니다. - 네이티브 컴파일:
jac build명령은 커널.jqd캐리어를 독립 실행형 바이너리로 컴파일합니다. 전체 효과 언어는 컴파일되지만, 보안상의 이유로eval작업은 인터프리터 계층에 머물러 있습니다. - Warp 테스트: 이 프로젝트는 콘텐츠 주소 지정 캐시를를 포함한 발견 및 속성 기반 테스트를 위한 Warp 테스트 프레임워크를 포함합니다.
커뮤니티 인사이트 및 비판 ext de la vie
프로젝트가 효과 추적 및 콘텐츠 주소 지정 방식에 접근하는 방식에 대해 찬사를 받고 있지만, 커뮤니티 구성원 중 일부는 AI 에이전트를 위한 새로운 언어의 채택에 대해 우려를 제기하고 있습니다.
"AI 중심의 새로운 프로그래밍 언어의 명백한 문제는... 사용하려는 어떤 LLM이라도 처음부터 시작해야 한다는 것입니다. 복사할 대상이 없고 스스로 찾아낼 수 있는 문서가 매우 적기 때문입니다."
다른 비판가들은 효과 시스템이 정교한 타입 시스템과 근본적으로 다른지, 아니면 세계 모델링 기능이 단순히 의존성 주입(dependency injection)의 한 형태인지 의심하기도 합니다.
현재의 한계
연구 프로토타입으로서, Jacquard 0.1은 명시적인 비목표 및 한계가 있습니다. 현재 VM/JIT, 동시성, 연속 분포, 그래디언트, 타입드 스테이징(typed staging), 그리고 형식적 건전성 증명(formal soundness proofs)이 부족합니다. 세계 권한 부여는 거칠게(coarse-grained) 이루어지며, 언어는 아직 프로덕션 환경에서 사용할 의도로가 아닙니다.