어설픈 프로그래밍이라는 개념에 익숙하지는 않지만 (따라서 배를 완전히 잃어 버릴 가능성이 큽니다) DSL 개념과 매우 일치하는 것처럼 보입니다 .
DSL의 기본 개념은 문제의 영역을 문제를 해결하기위한 알고리즘을 구축하는 데 사용할 수있는 간단한 자연 언어 지향 문법으로 정리하는 것입니다.
나에게 그 같은 아이디어 또는 적어도 그것의 핵심 기초는 문맹 프로그래밍과 동일하거나 적어도 밀접한 관련이 있습니다.
예를 들어, 그루비 세계에서는 DSL을보다 정기적으로 사용하고 일반적인 문제를 해결하기 위해 새로운 DSL을 만들라는 강력한 압박이 있습니다. 이 푸시는 언어 내 도구 (간편한 빌더)와 DSL 기반 API를 지원하는 핵심 라이브러리에서 비롯됩니다.
추세가 세계의 구석에 적어도 것을 감안할 으로 글을 읽고 프로그래밍, 나는 그것을 위해 노력하는 좋은 방법이라고 말할 것입니다.
불행히도, 좋은 dsl 을 만드는 데 필요한 사고 수준 은 종종 내가 본 것에서 대부분의 프로그래머를 넘어서고 있습니다. 나는 때때로 때때로 필요한 몇 가지 개념으로 개인적으로 어려움을 겪고 있음을 알고 있습니다. 이러한 기술이 더 널리 채택되는 것을 방해하는 것은 이러한 어려움 일 수 있습니다.
도구를 사용하는 것이 하나의 고전적인 경우이지만 도구를 만드는 것은 완전히 다른 수준입니다.
내 관점에서 약간 확장하기 위해 DSL이 문맹 프로그래밍과 같은 것이 아니라 문맹 프로그래밍을 훨씬 더 가능하게 만듭니다. 특히 그들이 자연어 DSL 일 때 .
그루비 버전 1.8에서는 보다 강력한 명령 체인을 추가 하여 자연어 DSL 기능이 크게 향상되었습니다 .
예를 들어 의사 문장뿐만 아니라 다음 코드 줄도 프로그래밍입니다 .
drink tea with sugar and milk
move left by 30.centimeters
sendFrom "Guillaume" to "Jochen"
send from: "Jochen" to "Lidia"
Email.from "Lidia" to "Guillaume" withBody "how are you?"
contact.name "Guillaume" age 33
move left by 30.centimeters
sell 100.shares of MSFT
take 2.pills of chloroquinine in 6.hours
blend red, green of acrylic
artist.paint "wall" with "Red", "Green", and: "Blue" at 3.pm
wait 2.seconds and execute { assert true }
concat arr[0] with arr[1] and arr[2]
developped with: "Groovy" version "1.8-beta-2"
참고 : 코드 샘플은 Guillaume Laforge의 블로그에서 제공합니다.
문맹 프로그래밍의 기본 개념은 자연어가 인간에게 더 잘 이해 될 수 있다는 것입니다. Groovy의 자연어 DSL 기능은 제 생각에 훨씬 더 가까운 현실을 만듭니다. 특히 이러한 DSL을 사용하여 응용 프로그램의 비즈니스 규칙을 만들 때.
자연 언어를 사용하여 시스템의 핵심 구성 요소를 "인코딩"할 수 있다는 것이 문맹 프로그래밍의 핵심입니다. 자연어를 코드 덩어리와 산재시켜야하는 것은 문맹 화 된 프로그래밍의 문체 화 된 형태입니다. 유용하지만 코드 자체로 자연어를 사용할 수있는 자연어 DSL 은 큰 도약이라고 생각합니다.
일반적으로 프로그래밍 기능을 확장하는 것이 프로세스의 다음 단계이지만,이를위한 도구는 이미 제자리에 있습니다. 예. "일반"DSL은 아직 없지만 소규모 도메인의 경우 기능이 있습니다.
이에 대한 더 많은 예를 들어 (특별한 순서로) :