ksharp: K 버전 3의 벡터 파워를 .NET 생태계에 가져오기
Arthur Whitney이 만든 K 프로그래밍 언어는 극도의 간결함과 강력한 벡터 연산으로 고성능 컴퓨팅 및 금융 분야에서 전설적인 존재입니다. APL 계열에 뿌리를 두고 있는 K는 데이터를 벡터와 행렬로 취급하여, 개발자가 복잡한 데이터 변환을 몇 개의 문자만으로 표현할 수 있게 합니다. 이는 명령형 언어에서 수십 줄에 달할 작업을 한 줄로 줄여줍니다.
ksharp는 C#으로 작성된 K 버전 3의 현대적이고 포괄적인 구현입니다. 이 배열 지향 패러다임을 .NET 생태계에 도입함으로써, ksharp은 단순히 K 코드를 실행하는 방법을 제공하는 것을 넘어, 고밀도 벡터 프로그래밍 세계와 Microsoft .NET의 풍부한 라이브러리 생태계 사이의 다리를 놓습니다.
포괄적인 K3 구현
ksharp는 핵심적으로 K 버전 3 레퍼런스 매뉴얼을 충실히 해석합니다. 네이티브 동사, 부사, 그리고 핵심 함수 시스템 전체를 구현합니다. K에 익숙한 사람들에게 이 프로젝트는 배열 언어의 필수 빌딩 블록을 제공합니다:
- Core Data Types: 정수, 부동소수점, 문자, 심볼, 중첩 리스트를 지원하며 64비트 긴 정수도 포함합니다.
- The Adverb System: Over (
/), Scan (\), Each (')와 같은 반복을 완전 구현하고, 복잡한 중첩 반복도 지원합니다. - Iterative Indexing: "동사화된 명사"와 함께 사용되는 부사를 지원하여 산점 선택, 전이 폐쇄, 상태 전이를 가능하게 합니다.
- The Function System: 익명 함수, 프로젝션, 다중 문장 함수를 지원합니다.
ksharp의 가장 눈에 띄는 기술적 성과 중 하나는 Long Right Scope (LRS) 파싱 시스템입니다. K는 연산자별 우선순위가 아니라 위치 기반 우선순위(PEMDAS와 같은)로 알려져 있습니다. ksharp는 동사의 오른쪽에 있는 모든 것을 오른쪽 인수로 처리함으로써, 언어 고유의 오른쪽‑에서‑왼쪽 우선순위를 유지합니다.
K와 .NET을 연결하는 외부 함수 인터페이스 (FFI)
K3에 대한 충실함이 우선이지만, ksharp의 주요 가치 제안은 .NET과의 통합에 있습니다. 고립된 인터프리터가 아니라, ksharp는 K 코드가 .NET 객체와 직접 상호작용할 수 있게 하는 강력한 외부 함수 인터페이스(FFI)를 포함합니다.
어셈블리 로딩 및 메서드 호출
사용자는 특정 구문(assembly_name 2: type_name)을 사용해 K 코드에서 .NET 어셈블리를 직접 로드할 수 있습니다. 로드된 후 시스템은 .NET 타입을 K 사전으로 매핑하고, 점 표기법을 이용해 정적 및 인스턴스 메서드를 호출할 수 있게 합니다. 예를 들어 사용자는 .NET Complex 숫자 객체를 인스턴스화하고 K REPL에서 직접 메서드를 호출할 수 있습니다.
힌트 시스템
K의 동적 타입과 .NET의 정적 타입 사이 전환을 관리하기 위해 ksharp는 Hint System(_gethint 및 _sethint)을 사용합니다. 이를 통해 개발자는 인터프리터에 명시적인 마샬링 지시를 제공하여, K 정수가 .NET 메서드에 전달될 때 System.Boolean이나 System.Int32로 취급되도록 할 수 있습니다.
객체 수명 주기 관리
C#과 같은 관리 언어를 벡터 언어와 통합하려면 메모리 처리를 신중히 해야 합니다. ksharp는 스레드‑안전한 전역 객체 레지스트리를 구현하여 .NET 객체 핸들을 추적하고, _dispose 동사를 통해 IDisposable 패턴을 통합해 자원을 적절히 정리합니다.
아키텍처 및 현재 상태
프로젝트 개발은 놀라울 정도로 빠르게 진행되어 6개월 이내에 베타 상태에 도달했습니다. 아키텍처는 고전적인 인터프리터 파이프라인을 따릅니다: Lexer → Parser → AST → Evaluator.
현재 기능
- Test Success: 1,549개의 단위 테스트 모두 100% 통과했습니다.
- IPC System: Michal Wallace의 기여 덕분에 ksharp는 전체 인터프로세스 통신(IPC) 시스템을 포함하며,
3:및4:동사를 통해 TCP 기반 메시징과 원격 실행을 지원합니다. - Cross-Platform: .NET 8.0 SDK를 사용해 Windows, macOS, Linux에서 빌드 및 실행할 수 있습니다.
알려진 제한 사항 및 기술 부채
저자는 AI‑지원 개발 과정에서 축적된 "기술 부채"에 대해 투명하게 밝히고 있습니다. 향후 개선이 필요한 주요 영역은 다음과 같습니다:
- Parsing Robustness: 현재 파서는 매우 길거나 복잡한 한 줄 코드를 처리할 때 가끔 혼란스러워질 수 있습니다.
- Performance: .NET이 가비지 컬렉션과 안전성을 제공하지만, 네이티브 K 구현의 순수 속도와는 경쟁하기 어렵습니다. 향후 최적화에는 전역 심볼 테이블 해시셋 및 Linq‑to‑objects 상태 머신 최적화가 포함될 수 있습니다.
- UI: 원래 K UI(
show및hide)는 .NET의 WinForms나 Unity와 같은 네이티브 UI 프레임워크를 활용하기 위해 의도적으로 제외되었습니다.
커뮤니티 관점
ksharp의 출시로 현대 시대에서 K의 유용성에 대한 흥미로운 논의가 촉발되었습니다. 일부 관찰자는 1990년대 언어의 관련성을 의문시하지만, 다른 이들은 데이터 자체를 일급 벡터로 다루는 K의 패러다임이 현대 데이터 과학 및 금융 공학에 여전히 높은 relevance를 가진다고 인정합니다.
한 사용자는 벡터와 유사한 언어에 F#가 더 자연스러운 선택일 수 있다고 언급했으며, 또 다른 이들은 K의 "금욕적 미학"이 의도적으로 최소주의임을 강조했습니다. 구현 언어와 관계없이, ksharp는 가장 영향력 있는(비록 틈새) 언어 중 하나를 현대 관리 환경에서 실험할 수 있게 하는 다리 역할을 합니다.
SUMMARY: K 벡터 프로그래밍 언어의 포괄적인 C# 구현인 ksharp를 탐구하며, 외부 함수 인터페이스를 통해 .NET과 깊이 통합된 모습을 소개합니다.
TITLE: ksharp: K 버전 3의 벡터 파워를 .NET 생태계에 가져오기