피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Rust 기반 Runtime과 Delphi 인터페이스를 연결하는 2-Layer Shim 아키텍처 구현
RTL Shims: System.SysUtils and Classes | RTL: shims System.SysUtils e Classes
AI 요약
Context
CrabPascal이 Rust 기반의 고성능 Runtime을 제공함에도 불구하고, 기존 Delphi 프로젝트의 .pas 파일 의존성과 IDE 툴링 요구사항으로 인한 컴파일 제약 발생. 기존 Delphi RTL(Runtime Library)의 풍부한 API 세트를 Rust로 완전히 대체하기 전까지의 과도기적 호환성 확보가 필요한 상황.
Technical Solution
- Pascal Surface와 Rust Runtime으로 분리된 2-Layer 모델 설계를 통한 인터페이스-구현체 분리
- .pas 파일 내 함수 본문을 Stub으로 처리하고 실제 실행은 Runtime에서 가로채어 Rust Native 코드로 Dispatch 하는 메커니즘 도입
unit_resolver.rs를 통한 Dotted Name(예: System.SysUtils)의 파일 시스템 경로 매핑 및 레거시 Flat Unit 호환성 유지- Generic Collections의 경우 Pascal 파일로 구문 분석(Parsing)을 통과시키고 실제 Monomorphization은 Rust Runtime에서 수행하는 구조 설계
- TStream 및 TStringList와 같은 OOP 기반 클래스를 Rust Backend와 연결하여 JSON 처리 및 HTTP 미들웨어 수준의 확장성 확보
- API 부재 시 Silent Crash를 방지하기 위한 명확한 에러 메시지 반환 기반의 Check-fail 전략 채택
실천 포인트
1. 이기종 언어 간 런타임 브릿지 설계 시, 컴파일 타임의 구문 분석(Parsing)과 런타임의 실행(Execution) 단계를 분리하여 호환성 확보
2. 대규모 라이브러리 마이그레이션 시 전체 구현보다 인터페이스 Stub을 우선 배치하는 Shim 전략으로 개발 사이클 단축
3. Generic 타입 처리 시 언어별 특성에 맞게 프론트엔드 선언과 백엔드 단일화(Monomorphization) 지점을 구분하여 설계