더 나은 Compiler Diagnostics 설계 — Klar 구축에서 얻은 교훈

발행: (2026년 1월 20일 오전 01:51 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

저는 Klar(이전 명칭 Klang)라는 작은 실험용 언어를 만들고 있습니다. 이는 명시적 의미론, 엄격한 진단, 그리고 다중 언어 도구 체인을 탐구하기 위한 것입니다. 이 언어는 실제 서비스용이 아니라 디자인 연습이지만, 진행하면서 한 가지 구체적인 문제에 집착하게 되었습니다: 컴파일러 오류를 실제로 유용하게 만드는 요소는 무엇인가?

예시 진단 (사용자가 보는 내용)

[K:E217] UnresolvedSymbol
ERROR (SEMANTIC)
at undefinedVariableExceptionTest.kl:10:12

 8 |     }
 9 |
10 |     println(total);
   |             ^

Cause:
  The variable 'total' does not exist

Fix:
  Remove it or create it

이를 생성한 소스 (.kl)

@Use("java")
public void main(){
    integer count = 10;
    integer iterator = 0;

    while (iterator < count){
        iterator = iterator + 1;
    }

    println(total);

    return null;
}

설계 노트 (간략)

  • 진단은 데이터 중심으로 구조화됩니다(오류 코드 + 메타데이터) 그리고 읽기 쉬운 텍스트로 렌더링됩니다.
  • 레이아웃: 짧은 요약 → 정확한 위치(file:line:col + 캐럿) → 인간 친화적 설명실행 가능한 수정.
  • 장난스럽거나 친근한 표현을 피하고, 명확성과 예측 가능성을 우선시합니다.
  • 제안은 보수적으로 제공해야 합니다—예를 들어, “X를 의미하셨나요?”는 신뢰도가 충분히 높을 때만 제시합니다.

커뮤니티에 묻는 질문

  • 진단을 평가할 때 가장 중요한 요소는 무엇인가요: 정밀도, 간결함, 혹은 실행 가능한 수정?
  • 한 줄 요약을 먼저 보여주는 방식(그 뒤에 상세)과 읽기 쉬운 하나의 문단 중 어느 쪽을 선호하시나요?
  • 일관되게 사용자를 혼란스럽게 만드는 진단 패턴을 보신 적이 있나요?

저는 특히 진단이 노이즈도움 사이에서 어떻게 균형을 맞추는지에 관심이 있습니다. 더 많은 예시(타입 불일치, 반환 누락, 매직 넘버 경고 등)를 보고 싶으시면, 댓글에 붙여넣겠습니다.

— ~K’ (Klar를 개발 중)

Back to Blog

관련 글

더 보기 »

함수

markdown !Lahari Tennetihttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

⚙️ 소프트웨어 컴파일이란?

일반적인 컴퓨팅에서 Compilation은 C++, Rust, Java와 같이 인간이 읽을 수 있는 high‑level 프로그래밍 언어를 low‑level으로 변환하는 과정이다.