피드로 돌아가기
Dev.toBackend
원문 읽기
CrabPascal v2.20.0 VMT Dispatch 도입을 통한 Method-Backed Property 지원
Method-Based Properties in CrabPascal | Properties por método no CrabPascal
AI 요약
Context
Delphi 언어의 Property는 단순 필드 매핑을 넘어 computed value 산출 및 유효성 검증을 위한 accessor method 호출 구조를 가짐. 기존 CrabPascal 런타임은 Property를 단순 필드 조회로 처리하여 method-backed property를 사용하는 VCL 컴포넌트 및 REST DTO 등의 레거시 코드 포팅 시 런타임 오류가 발생하는 한계점이 존재함.
Technical Solution
- Property 접근 시 필드 직접 조회가 아닌 VMT(Virtual Method Table) Dispatch 기반의 런타임 분석 구조로 전환
- 런타임이 Property 명칭을 기반으로 GetValue/SetValue 메서드를 VMT에서 동적으로 해석하여 호출하는 로직 구현
- 메서드 구현 내부에서 private backing field(F* 패턴)에 접근할 때 발생하는 시맨틱 오류를 제거하는 접근 제어 완화 적용
- Delphi의 특수한 Calling Convention을 반영하여 Setter 메서드 내 var 파라미터를 통한 In-place 정규화 처리 지원
- 80/20 원칙에 따라 CRUD 서비스 및 Horse 프레임워크에서 빈번히 사용되는 단일 값 Property 기반의 핵심 유스케이스 우선 구현
실천 포인트
- Delphi 레거시 포팅 시 Property의 read/write가 필드인지 메서드인지 구분하여 런타임 호환성 확인 - VMT Dispatch 도입으로 인한 오버헤드와 동적 바인딩의 유연성 간의 Trade-off 검토 - 런타임 에러 발생 시 `crab-pascal check`를 통한 정적 분석 후 v
2.
2
0.0 이상의 최신 런타임 적용 여부 확인