2009-10-16 3 views
1

저는 최근에 DSL과 라이브러리의 문제에 대해 생각 해왔습니다. 제 분야에서 DSL (R, SAS, Matlab)의 문제점은보다 범용적인 코드를 작성하는 PITA와 다른 언어의보다 범용적인 코드에 통합하는 PITA라는 것입니다. 불가능하거나, 성가 시거나 실망 스럽다는 말은 아닙니다.DSLs vs. Plain Old Libraries

이것은 예를 들어 일반적인 용도의 언어를 기반으로 실행되는 NumPy의 접근법과 대조되는데, 오랫동안 존재 해 왔고 많은 돈을 쏟아 부었다면 Matlab만큼 좋을 것입니다. 이렇게하면 여러 구문을 기억해야하는 등 언어 간 인터페이스를위한 극한의 풀 코드가 필요없이 숫자 만있는 프로젝트에서 작업 할 수 있습니다.

독립형 DSL의 장점은 무엇입니까? 범용 언어로 된 평범한 오래된 도서관? 보다 범용적인 코드와의 통합이 어렵다는 점과 이러한 DSL이 왜 그렇게 인기가 있는지 이해할 수 없다는 점을 알기위한 또 다른 구문과 관련하여 분명한 단점이있는 것으로 보입니다.

답변

1

독립형 DSL의 주된 이점 중 하나는 더욱 표현력이 풍부하다는 것입니다. 범용 언어로 작성된 라이브러리에서는 언어 구문에 의해 제한됩니다. 질문 할 수있는 재무 기록이 있고 지난 1 년 동안 모든 모기지 문제를 찾고 싶은 금융 소프트웨어의 예를 생각해보십시오. 범용 언어의 쿼리에 대한 의사 코드 같은 것을 보일 것이다 : DSL이 지금

List<Mortgage> mortgagesThisYear = new LinkedList<Mortgage>(); 
for (Mortgage m : mortgages) { 
    if (today.minus(m.getDate()) <= 1 year) { 
    mortgagesThisYear.add(m); 
    } 
} 

을, 당신은 같은 것을 쓸 수 있습니다 그래서 더

Find all mortgages in the last year 

을, 은행은 이러한 쿼리를 구성 할 수 "유비쿼터스 언어"를 기반으로합니다. (공통적이며 프로그래머와 은행가가 쉽게 통신 할 수있는 도메인의 언어).

DSL은 아주 구체적이고 일반적인 목적이 아닙니다. 언어는 표현력이 풍부하고 구문은 일반적으로 더 편안하고 도메인과 더 관련이 있습니다.

+0

좋습니다.하지만 상위 수준의 범용 언어를 사용했다고 가정 해 보겠습니다. 그렇다면 다음과 같을 수 있습니다 : lastYear = [오늘의 모기지에 대한 m (m) - m.date <365] – dsimcha

+0

동일한 아이디어가 여전히 적용된다고 생각합니다. DSL은 모두 당신이 일하는 도메인의 표현 언어에 관한 것입니다. 그것은 더 높은 수준의 언어보다 구체적이고 읽기 쉽고/사용하기 쉽도록되어 있습니다. –

0

코드 생성 및 생성 간격 패턴을 사용하여 구현 된 외부 DSL에는 외부 DSL의 단점이 적용되지 않습니다. 인터페이스는 사용 된 하나의 범용 언어를 통해 이루어집니다. 실제로 내부 DSL에는 좋은 판독 가능한 명시 적 구조, 나쁜 연습 코딩, 제한된 구체적인 구문 가능성, 도구 지원 없음, 도메인 특정 유효성 검사 구현 및 다른 코드와의 인터페이스 문제 구현과 같은 더 많은 단점이 있습니다. DSL 구현 너무 진부하다.