피드로 돌아가기
Method-Based Properties in CrabPascal | Properties por método no CrabPascal
Dev.toDev.to
Backend

CrabPascal v2.20.0 VMT Dispatch 도입을 통한 Method-Backed Property 지원

Method-Based Properties in CrabPascal | Properties por método no CrabPascal

CrabPascal2026년 6월 4일5intermediate

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 이상의 최신 런타임 적용 여부 확인

원문 읽기