무엇을 도메인 특정 언어?누구나 사용할까요?어떤 방법이 있을까?

StackOverflow https://stackoverflow.com/questions/809574

  •  03-07-2019
  •  | 
  •  

문제

나는 내가 찾는 몇 가지 종류의 소개 및 보면 누군가 사용하고 있습니다.어떤 특정의 장점 사용할까요?

Wikipedia:

도메인 특정 언어(DSL) 프로그래밍 언어 또는 명세어 특별한 문제가 도메인,특별한 문제 표현 기술,그리고/또는 특정 솔루션 기법이다.

할 수 있는 사람이 어떤 특정의 예는 어떻게 구현되거나는 방법이 유용할 수 있습에 주어진 시나리오?

도움이 되었습니까?

해결책

도메인 별 언어는 특정 도메인 또는 일련의 문제를 처리하기 위해 작성된 언어입니다. Make, Ant 및 Rake와 같은 소프트웨어 빌드 또는 LEXX 및 YACC와 같은 많은 것들이 언어 구성을위한 많은 것들이 있습니다. 최근 몇 년 동안, 그들은 어떤 것들이 결합하여 더 쉽게 구축 할 수 있도록 인기를 얻었습니다. 그 중 큰 것은 루비의 인기가 높아지고 있는데, 이는 새로운 DSL을 쉽게 구축 할 수있는 몇 가지 기능이 있습니다.

Martin Fowler는 아이디어의 큰 지지자입니다. 여기.

다른 팁

DSL을보다 일반적인 프로그래밍 언어로 작성된 기능에 대한 지나치게 복잡한 인수로 생각할 수 있습니다. 실제 프로그래밍 언어는 DSL 코드를 구문 분석하고 일반적으로 DSL 코드는 무엇 당신은하고 싶고 더 큰 시스템이 어떻게.

DSL의 예로는 모든 쿼리 언어 (SQL, XPath, ...), 모든 템플릿 언어 (Django, Smarty, ...), 쉘 스크립트, 특히 Twill과 같은 것, 명령 중심 웹 브라우저 (주로 자동 테스트에 사용되는 것)가 포함됩니다. ), 데이터 저장 및 교환 언어 (XML, Yaml, ...) 및 Latex, HTML 또는 CSS와 같은 언어를 문서화합니다.

TCL 및 LISP와 같은 매우 유연한 구문을 가진 일부 언어는 가능하면 DSL을 언어로 직접 구축합니다. 대부분의 언어는 일반적으로 외부 파일에서로드되는 문자열을 사용합니다.

그것들을 사용하면 특별한 장점이 있습니까? 그들의 의도 된 목적으로 그것들을 사용하는 것은 당신이 DSL로 생각하지 않고 SQL 또는 HTML을 사용하고있는 것처럼 알지 못하고 알지 못하고 그들에게 돌릴 수있는 시점에 매우 유리합니다.

나는 당신이 필요로 할 수있는 어떤 종류의 응용 프로그램에 대해 충분한 DSL이 있다고 말할 것입니다. 당신은 거의 자신의 글을 쓰는 법을 배울 필요가 없습니다.

(질문의 요점 해결)

내가 처음 본 것 같아요 DSL 어딘가 및 "도메인 특정 언어"로서의 정의 나는 또한 그것이 구체적이고 구체적인 언어라고 생각했다 방금 들어 본 적이 없지만 특정 응용 프로그램 영역에 맞는 언어에 대한 일반적인 용어입니다.

아이러니하게도, 방금 들어 본 적이 있다면 TCL "도구 명령 언어"로서 DSL과 같이 다양한 도구에 대한 TCL이 많을 것이라고 생각할 수도 있지만, 특정 스크립팅 언어의 특정 이름입니다.

특정 도메인의 문제를 해결하는 데 적합한 언어라고 생각합니다. 규칙 처리 언어 또는 서비스 설명 언어 일 수 있습니다.

도메인 특정 언어 (DSL)와 반대되는 것은 범용 언어.

DSL은 비 프로그래머가 사용할 언어를 개발하는 좋은 방법입니다. 예를 들어, 회사의 재무 담당자에 대한 DSL이있는 경우 사양에 프로그래밍하지 않고 원하는 프로그램을 작성할 수 있습니다. 그런 다음 너무 느리면 그들이 원하는대로 작동하는 것을 취하고 편집 된 언어로 작성하여 속도를 높일 수 있습니다.

모든 것은 DSL...

Assembler:MOV R1R2
컴파일러:할당 문--A=+1,조건문에--면(TRUE)...,분기--반환
HTML:...설명 중첩된 구조물
TCP/IP:설명에서/주소
PDF:설명 텍스트/이미지 배치에서 종이
글꼴:설명 캐릭터

어떤 언어는 우리가 사용하는 설명하는 특정 프로세스는 DSL.불행하게도가 부족한 도메인의 특정 언어로 설명하도 우리의 가장 기본적인 프로세스,그래서 우리가 사용하는 몇 가지 언어 우리는 설명을 실현하는 것이 중요합니다."모든 지 html 파일에 나 웹 사이트"이 필요합 300 3 개 또는 4 개의 다른 언어를 완료합니다.

을 구축하는 DSL 결정한 최소한의 문을 설명하는 데 필요한 프로세스할 수 있는 기억하고 필요하지 않은 문서입니다.는 것을 기억 속도와 편리한 사용은 기본 디자인 기준입니다.구문 분석은 그렇게 빠른 어떤 구문을 사용할입니다 벌금,나는 자연의 언어로 구문에 대부분의 경우,"지불하는 직원들에게 첫 번째 달의"하지만,특정 도메인은 도메인,특정을 결정하는 구문에 가장 잘 맞는 문제입니다.

나는 멀리에서 사용하는 다른 솔루션을 수 있는 편리하지만에 맞지 않는 문제 같은 HTML 을 사용되었을 정의하는 데이터(XML).CSV 은 매우 유용하고,그에 맞는 대부분의 문제입니다.JSON 맞지 않게 사용의 부분을,그것이 과잉는 추가는 불필요한 합병증이 있었다 CSV 대부분의 문제입니다.우리가 사용하는 엑셀을 위해 많은 DSL,그것은 좋은 작품을 설명하기 위한 작은 문제들,아래 65K1M 행와 같은 트리 구조 또는 메뉴를 열 수준입니다,다른 열 아이콘,색상,상표 및 등(EXCEL 편집 가능한 CSV).

내가 찾는 HTML 지 않았의 문제를 해결하는 페이지 레이아웃,그래서 나가 그것을 제거하고는 정의된 DSL 는 것은 맞습니다.저는 정의 6 개 지역에서 페이지의 헤더,체,바닥,왼쪽/오른쪽 여백과 오른쪽/왼쪽 전진되고 있습니다.이때는 말 페이지로 발전기를 추가하는 제목 바,상태 표시줄,메뉴,테이블,형태,...,특정 세포입니다.이러한 각각의 세포할 수 있습으로 분할한 행과 열의 모든 깊이에 있습니다.페이지 레이아웃을 초 정도 걸립을 위한 어떤 스타일입니다.

몸이 포함되어 테이블의 직원
헤더를 포함 제목 바 캡션'Hello World'으로 로그인 콜린스 소프트웨어

메뉴 DSL 적합하지 않는 페이지 레이아웃 DSL,그래서 내가 내장된 독특한 DSL 한 메뉴가 있습니다.

자원 내 주 메뉴
*정의:메뉴 m,레벨,상표,아이콘,작업;
m,0,파일
m,1,열,open.gif 대화 열고 파일

각각의 고유한 문제 컴퓨터가 사용할 수 있습니다 어떤 형식,그것은 인간의는 Dsl 위해 설계되었다,그래서 그것을 이해할 수 있는 인간에 의해,그들이 뭔가를 입력할 수 있고,언어의 실제 말그것을 위해 실제 사람들,장소들,그리고 우리는을 설명하고 있습니다.

잘! 위에 설명 된 많은 것들이 있습니다. 나는 나와 같은 사람이 이해할 때 이것을 훨씬 더 간단하게 설명하려고 노력할 것입니다.

범용 언어는 방대한 목적으로 사용되므로 DSL은 특정 도메인에 대해서만 만들어집니다. HTML 또는 CSS처럼.

어떤 사람이나 가장 친한 친구 만 이해할 수 있고 다른 사람이 할 수없는 종이에 지시를 썼다면 말할 수 있습니다. 그러면 DSL 일 수 있습니다. 그러나 많은 사람들이 이해하고 따를 수있는 그러한 용어로 지시를 썼다면 이것은 DSL이 아닙니다.

I Onces는 컴퓨터의 직렬 포트를 통해 작동 할 수있는 사용자 용 스위치 보드를 만들었으며 사용자는 해당 보드에 실행될 수있는 보드에 대한 프로그램을 원하며 릴레이 스위치가 켜지고 꺼집니다. 그래서 나는 몇 가지 지침을 작성하고 사용자 에게이 지침에 따라 해당 보드를 프로그래밍하도록 지시했습니다. 이것은 DSL의 예입니다. 나는 새로운 언어를 발명하지 못했습니다. 그냥 마이크로 컨트롤러가 EEPROM에서 읽을 수 있고 그에 따라 구문 분석하고 특정 작업을 수행 할 수있는 많은 문자열을 만들었습니다.

DSL을 사용하는 이유를 논의하는 간단한 블로그 게시물을 작성했습니다.

도메인 별 언어 (DSL)를 더 사용했으면 좋겠어요

그것에서 DSL을 다음과 같이 정의합니다.

특정 문제 영역에 대한 솔루션을 전달하도록 특별히 설계된 소규모 프로그래밍 언어.

사용 측면에서 ANT, 구조화 된 쿼리 언어 (SQL) 또는 계단식 스타일 시트 (CSS)를 사용한 경우 DSL을 사용했습니다.

나는 DSL을 사용하는 것을 좋아합니다. 왜냐하면 그들은 특정 문제 공간에 대한 솔루션의 의사 소통을 촉진하는 데 중점을두기 때문에 도메인 전문가의 포함을 촉진하는 방식으로 그렇게합니다.

도메인 특정 언어 (DSL)의 간단한 예 중 하나는 웹 기반 응용 프로그램이라는 특정 도메인에 사용되는 HTML입니다.

방금 최근에 DSL을 들었지만 실제로 유용한 예를 찾습니다 : Luna (이전 LunaScript).

Asana 팀이 자체 플랫폼으로 만든 맞춤형 프로그래밍 언어/프레임 워크입니다.

더욱 발견 한 바와 같이, 많은 회사가 적절한 경쟁 우위를 창출하기 위해 자체 프레임 워크와 언어를 만듭니다. 몇 가지 예는 다음과 같습니다.

  • ABAP가있는 수액
  • PeopleCode가있는 PeopleSoft
  • 목표 c가있는 사과
  • Facebook에는 FBML 및 FQL과 같은 것들이 있습니다

이 플랫폼에서 거의 독점적으로 사용하기 때문에 도메인별로 다릅니다.

이 답변이 개념을 명확히하는 데 도움이되기를 바랍니다.

기계 학습에 사용되는 DSL의 예는 Python의 Patsy입니다.https://patsy.readthedocs.io/en/latest/formulas.html#

R의 공식 DSL을 기반으로합니다.https://stat.ethz.ch/r-manual/r-devel/library/stats/html/formula.html

https://cran.r-project.org/web/packages/formula/vignettes/formula.pdf

그리고 Hadley는 DSL을 구축하는 방법을 설명하는 Advanced R Book의 멋진 섹션을 가지고 있습니다.http://adv-r.had.co.nz/dsl.html

딥 러닝 필드가 다소 (또는 지금도) 안정화되면 Apache MXNet 프로젝트에서 비슷한 일이 발생하는 것을보고 싶습니다. 그러나 나는 그 제안에 대한 제안을 보지 못했습니다. 제안 페이지 아직 그렇지만.

도메인 별 언어는 도메인 프로세스와 지식을 특정 필드의 개념과 논리를 직접 사용하는 언어로 표현합니다.

커뮤니티는 확실히 성장하고 있지만 여전히 다른 "주류"기술의 수준에 있지 않습니다.

대부분의 경우 DSL은 회사 내에서 생산성을 향상시키기 위해 만들어 졌으므로 비공개를 유지하고 결과/통찰력을 공유하지 않습니다.

다음은 화자가 DSL을 사용하는 몇 가지 예를 제공하는 회의입니다. JetBrains Mps, 프로젝션 편집 기술과 함께 : https://vimeo.com/197381453

DSL -Domainspecificlanguage

DSL은 모든 종류의 소프트웨어 문제를 목표로하는 범용 언어보다는 특정 종류의 문제를 대상으로하는 컴퓨터 언어입니다.

여기서 : 구성 (travisci .yaml), 빌드 스크립트 (gradle), 대상의 종속성 (현물 상환 지불), UI 프로그래밍 (안코) 등.

DSL은 선언적 프로그래밍입니다. 대신해야합니다 어떻게 할 것

외부 DSL 자신의 사용자 정의 구문을 보유하고 전체 구문 분석기를 작성하여이를 처리합니다 (예 : XML, RegexP, SQL, HTML, CSS, UML).

내부 DSL 호스트 언어를 사용하여 호스트 언어에 특정 언어의 느낌을주는 특별한 방법입니다 (예 : LISP, Ruby, Java Annotations, Macros).

더 읽으십시오 여기, 여기

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top