프로그래밍 언어 사양을 작성하는 방법은 무엇입니까?


16

프로그래밍 언어 디자인을 정말 좋아합니다. 때로는 언어 프로젝트와 잠재적 사용자가 포괄적 인 표준 문서의 혜택을 누릴 수 있다고 생각합니다. 매우 형식적인 (C ++)에서 다소 비공식적 인 (ECMAScript)까지 다양한 언어 표준을 살펴 봤지만 실제로 문서를 분류하고 구성하는 방법에 대한 핸들을 얻을 수는 없습니다. 기술적 인 글쓰기에 능숙하다고 생각합니다.

긴 튜토리얼처럼 작성해야합니까, 아니면 공식적인 수학 종이처럼 작성해야합니까? 참조 구현과 함께 개발하는 경우 어떻게 최신 상태를 유지합니까? 구현 및 문서를 사실상의 표준으로 포기하고 취급해야합니까? 또한 표준을 갖추면 큰 이점이 있습니까? 합니까 필요로하는 언어가 불필요하게 복잡하다는 표준 평균을?


1
Martin Fowler의 Domain Specific Languages를 아직 읽었습니까? amazon.com/…
게리 로우

@ 게리 로우 : 나는하지 않았습니다. 아마 내가 찾고있는 것이 아닐지라도 괜찮은 독서처럼 보입니다.
Jon Purdy

참조 구현에 비해 표준의 장점은 다른 구현이 구현에서 벗어난 위치를 정의 할 수 있다는 것입니다.
Bart van Ingen Schenau

답변:


3

Java 언어 사양이 형식적이고 읽기 쉽다는 것을 알았으며 합리적인 구조를 가지고 있다고 생각합니다. 일부 W3C 사양도 좋은 예가 될 수 있습니다.

공식적인 작업을 수행하면 언어 복잡성을 줄이고 코너 사례를 확인할 수 있습니다.

표제 뇌 덤프 : 소스 인코딩, 렉싱, 기본 유형, 리터럴, 연산자, 표현식, 간단한 명령문, 조건부, 루프, 함수 (정의 및 호출), 유형 선언, 모듈, 컴파일 단위, 변수 범위 지정, 다양한 이름 확인 (예 : 임포트, 메소드), 메모리 모델, 부작용, 타이핑, 동시성…


제안 목록이 매우 유용합니다. 내가 할 일은 비슷한 목록을 브레인 스토밍하고 튜토리얼과 같은 형식으로 정렬하고 EBNF 문법과 같은 공식적인 부록이있는 간단한 비공식 사양을 작성하는 것입니다. 또한 아이디어에 대해 언급 한 사양을 다시 한 번 살펴 보겠습니다.
Jon Purdy

7

많은 것을 읽고 간단하게 유지하십시오

새로운 언어를 디자인하는 것은 어렵습니다. 정말 열심히. 그러나 대중화되고 사람들이 우아한 방식으로 겪고있는 문제를 해결하면 궁극적으로 매우 만족합니다.

의견에서 언급했듯이 다음과 같은 이유로 Martin Fowler의 Domain Specific Languages 를 읽는 것이 좋습니다 .

  1. 그는 왜 언어를 디자인해야하는지에 대한 실질적인 깊이에 대해 깊이 들어갑니다.
  2. 이를 수행하는 방법 (파서, 어휘 분석기, 언어 워크 벤치 등)에 대한 세부 사항이 있습니다.
  3. 클로저, 주석, 리터럴 목록, 동적 수신 등과 같은 개념을 처리하기 위해 선택한 구문을 만드는 방법에 대한 자세한 구현 지침이 있습니다.

사양을 작성하는 방법에 대해서는 청중에 대해 생각하십시오. 언어를 디자인하기 위해 키보드에 손가락을 넣기 전에 의도 된 작업에 대해주의 깊게 생각했을 것입니다.

JavaScript를 대체하는 새로운 통역 언어 인 경우 제한적인 관심 범위와 즉각적인 결과를 원하거나 가능한 경우 더 빨리 웹 개발자에게 도달하기 위해 매우 공정한 접근 방식을 원할 것입니다.

Titan의 다음 임무에서 사용될 예정이라면 각 구성 요소의 동작에 대한 정확한 공식적인 증거를 보여주는 매우 상세한 사양이 최소한의 엔트리 레벨이 될 것입니다.

따라서 이것은 간단하지 않습니다. 사양에 접근하려면 언어를 작성하는 데 많은 경험을 쌓고 실제로 매일 언어를 사용하는 사람들과 협력하는 것이 좋습니다. 언어를 배우는데 시간이 걸릴 수있는 기꺼이 희생자, 개발자, 개발자가 있다면 언어를 사용하는 데 필요한 것에 대한 피드백을 줄 수 있습니다.

요컨대 간단하게 유지하면 더 많은 사람들이 사용할 수 있습니다.


고마워 나는 언어를 개발하고 심지어는 철저하게 문서화하는 데 많은 경험을 가지고 있지만 일관되게 나를 얻는 표준의 아이디어입니다. 나는 권장 독서를 집어 들고 조금 실험해야 할 수도 있습니다.
Jon Purdy

@Jon Purdy 질문에 포함시킬 수있는 온라인 언어의 예가 있습니까?
게리 로우

현재 프로젝트의 예가 없습니다. 내가 만든 언어 (실제로 사용하는!)의 유일한 완전한 공개 예는 vision-language.sourceforge.net/cgi-bin/Home입니다.
Jon Purdy

@Jon Purdy Vision은 흥미로워 보입니다-일종의 속도입니다. 따로, 설치 방법을 보여주는 YouTube 스크린 캐스트를 고려하고 소규모 웹 사이트 (예 : 로컬 배관공)를 작성하는 것이 좋습니다. 이를 통해 사람들은 실제로 학습 곡선을보고 즉시 혜택을받을 수 있기 때문에 학습 곡선을 훨씬 쉽게 만들 수 있습니다. JSP, Velocity, ASP.Net, Freemarker 등과 비교하여 이점에 대해 이야기 할 수 있습니다.
Gary Rowe

좋은 생각이야; 최근 YouTube 동영상을 일주일에 3 번 정도 많이 만들었으므로 꼭 맞을 수있을 것 같습니다.
Jon Purdy

3

Wirth는 많은 프로그래밍 언어를 설계하고 구현했습니다.이 중 OberonOberon2 언어 의 사양은 완전성, 간결성 및 가독성으로 유명합니다.


2

공통 Lisp 및 Haskell에는 언어 표준이 있습니다. 루비와 파이썬에는 구현과 문서가 있습니다. 따라서 언어 표준이 필요하지는 않지만 디자인하려는 언어가 두 개 이상 구현 될 경우 도움이 될 수 있습니다. 반면에 언어 정의에 큰 변화가있을 것으로 예상되는 경우 표준이 미숙합니다.


실제로 Ruby에는 "사양"으로 간주 될 수있는 가지가 있습니다. 현재 최종 초안 상태이며 언어 사양에 대한 경험이있는 일부 사람들이 작성하는 ISO Ruby 사양이 있습니다 (ANSI Common Lisp 및 ISO C ++에서 작업 한 경우). 그리고 사람이 읽을 수있는 사양과 해당 사양에 대한 머신 실행 가능 적합성 테스트 스위트를 모두 형성하는 RSpec 스타일 실행 예제 세트 인 RubySpec 프로젝트가 있습니다.
Jörg W Mittag

1

모든 사양은 간결하고 시간의 시험을 견딜 수 있어야합니다

그렇기 때문에 BNF 와 같은 추상화 가 많은 언어 표준에 사용되는 이유를 볼 수 있습니다.

물론 문법보다 더 많은 것이 있습니다. 다른 사람들이 수행 한 작업을 살펴보십시오. perl6, 구성표, C ... 구현자가 관심을 갖는 문제를 해결합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.