피드로 돌아가기
Exceptions in CrabPascal: try/except/finally (v2.12.0) | Exceções no CrabPascal: try/except/finally (v2.12.0)
Dev.toDev.to
Backend

CrabPascal v2.12.0: Delphi 호환 Structured Exception Handling 구현

Exceptions in CrabPascal: try/except/finally (v2.12.0) | Exceções no CrabPascal: try/except/finally (v2.12.0)

CrabPascal2026년 6월 4일5intermediate

Context

기존 CrabPascal 인터프리터의 런타임 에러 발생 시 무음 크래시 현상으로 인한 디버깅 한계 발생. Delphi 언어의 세맨틱을 계승하여 예외 처리 경로를 정수 코드로 수동 관리하던 레거시 방식의 개발 생산성 저하 해결 필요.

Technical Solution

  • try/except/finally 구문을 통한 Structured Exception Handling 체계 구축
  • Heap-allocated 객체 기반의 Typed Handler 도입으로 Message 필드를 통한 상세 에러 정보 전달
  • Exception.Create를 Class Method로 처리하여 T* 생성자 의존성을 제거한 유연한 객체 생성 구조 설계
  • Handler Stack과 별개로 동작하는 Finally 추적 로직을 구현하여 리소스 누수 방지 및 Deterministic Cleanup 보장
  • 인자 없는 raise 문을 통한 Exception Propagation 기능을 구현하여 Layered Library의 로깅 및 재투척 구조 지원
  • Rust 기반의 런타임 구현과 C Codegen 분리를 통한 단계적 네이티브 바이너리 확장 전략 채택

1. 언어 런타임 설계 시 Exception Handler Stack과 Resource Cleanup(finally) 경로를 분리하여 설계했는지 검토

2. 라이브러리 계층 구조에서 에러 정보를 유지하며 상위 계층으로 전달하는 Re-raise 메커니즘 구현 여부 확인

3. 인터프리터 모드와 네이티브 컴파일 모드 간의 에러 핸들링 일관성을 위한 단계적 Roadmap 수립

원문 읽기