가상의 프로그래밍 언어를 하나 설계해 봤습니다.

제가 전공자는 아니라서 이게 실용적으로 보일지는 모르겠네요.

5 Likes

재밌게 잘 봤습니다.

읽다 보니, C# 의 record 에서 느꼈던 아쉬움이 생각이 나더군요.

아쉬운 점은, record 가 제공하는 풍부한 기능은 주 생성자의 매개 변수에 기반에 하는데, 접근 제한자가 public으로 고정되어, 생성된 인스턴스의 상태를 보장하기가 까다롭다는 점입니다.

예를 들어, Record 형식을 정의할 때,

record Record(int N, string S);

이 인스턴스의 상태에 아래의 조건을 강제하는 게 불가능합니다.

  • N 은 100 보다 크거나 같아야 함.
  • S 는 100 글자 이하여야 함.

생각해 본 해결책은 주 생성자의 접근제한자를 설정할 수 있게 만드는 것입니다.

record Record protected (int N, string S)
{
   public static Record Default => new(100, "");
   public static Record New(int n, string s) => 
     // 검증
      n < 100 ? Default
      : s.Length > 100 ? new(n, s[..100])
      : new(n, s);
}
1 Like

DSL의 마지막은 언어를 만드는거 같은데
AI 덕분에 현업에서도 가능할 수도 있겠다는 생각이 드는군요.

2 Likes

며칠동안 문서를 열심히 수정해봤는데 좀 현타가 오네요. 여러가지 현실적인 문제로 실제로 만들지도 않을 물건을 시간 낭비하면서 작성할 이유가 딱히 없었는데…