주어진 모호한 프로그래밍 모델을 단순화하기 위해 도메인 특정 언어를 디자인하는 것에 대해 토론하고 있습니다. 토론의 일부는 기존 언어 / 런타임 (예 : Java) 위에 빌드 (스크립트로)하거나 독립형 (자체 컴파일러 & c)으로 만드는 것입니다.
DSL 설계 경험이있는 사용자라면 적절한 접근 방식에 대한 찬반 양론 또는 확실한 답변이 있습니까?
주어진 모호한 프로그래밍 모델을 단순화하기 위해 도메인 특정 언어를 디자인하는 것에 대해 토론하고 있습니다. 토론의 일부는 기존 언어 / 런타임 (예 : Java) 위에 빌드 (스크립트로)하거나 독립형 (자체 컴파일러 & c)으로 만드는 것입니다.
DSL 설계 경험이있는 사용자라면 적절한 접근 방식에 대한 찬반 양론 또는 확실한 답변이 있습니까?
답변:
기존 언어 (내부 DSL) 위에 DSL을 만드는 것이 좋습니다. DSL 소비자가 시스템의 구성 파일로 사용되는 python 파일을 작성하는 시스템을 만들면서 Python 으로이 작업을 몇 번 수행했습니다. 구성 파일은 내가 정의한 구문 (클래스, 함수)을 사용합니다. 이러한 구성은 DSL을 형성합니다.
호스트 시스템이 .NET 또는 Java 인 경우 Python (IronPython 또는 Jython) 또는 Ruby (IronRuby, JRuby)와 같은 언어 인 IMO는 Java 또는 C #보다 DSL을 기반으로하는 것이 좋습니다.
필자의 경우 호스트 시스템도 (C) Python이므로 DSL에 Python을 선택하는 것이 당연한 일입니다.
일부 전문가 :
Martin Folwer는 자신의 저서 "도메인 특정 언어"에서 내부 및 외부 DSL에 대해 설명 합니다.
Internal DSL
=는 기존 프로그래밍 언어의 하위 세트입니다 (예 : Ruby / Java 등).
External DSL
= 구문과 어휘를 정의합니다.
외부 DSL은 훨씬 표현력이 높지만 외부 파싱 및 코드 생성이 필요할 수 있습니다.
내부 DSL에는 추가 처리가 필요하지 않지만 비 프로그래밍 도메인 전문가 (예 : 비즈니스 분석가, 테스터)에게는 이해하기 어려운 경우가 있습니다.
DSL 유형을 선택할 때 사용자가 누구인지 분석하는 것이 중요합니다. 이들이 대부분 기술이 아닌 사람들이라면 외부 DSL이 더 나은 선택이 될 수 있습니다. 숙련 된 프로그래머로 구성된 소규모 팀의 경우, 사용하는 프로그래밍 언어가 충분히 표현적인 경우 내부 DSL을 선택할 수 있습니다.