MPS의 작동 원리

주제별 파생 언어와 언어는 각 주제에 대해 정확하고 효과적으로 의사소통하는 데 도움이 됩니다. MPS는 이러한 언어의 유연성을 프로그래밍 언어에 동일하게 제공합니다. 구문과 의미가 엄격한 전통적인 프로그래밍 언어와 달리, MPS는 사용자가 언어를 처음부터 작성, 변경 또는 확장할 수 있도록 지원합니다.

언어 확장의 핵심 문제는 데이터 구조를 빌드하기 위해 문자열을 분석하는 파서에 있습니다. 파서는 코드의 고정적 표현을 단일 표기로 엄격하게 제한하여 다른 파서와 쉽게 결합되지 않으므로 언어가 모듈화되지 않습니다.

이 문제를 해결하기 위해 가장 일반적으로 제안되는 대안은 프로그램 코드의 비 텍스트 표현을 구현하는 것입니다. 이 접근 방식의 주요 이점은 파싱이 필요 없다는 것입니다. 그러나 MPS에서 저희는 다른 대안을 제안합니다. JetBrains의 솔루션은 프로그램 코드를 완벽하게 설명하는 속성 모음(프로퍼티, 하위 요소, 참조)이 포함된 노드로 구성된 데이터 구조인 추상 구문 트리(AST)에서 항상 유지관리하는 것입니다.

이에 따라 MPS 에디터의 과제는 사용자에게 친숙한 방식으로 AST를 시각화하고 효과적인 편집을 위한 수단을 제공하는 것이 됩니다. 예를 들어, 사용자가 표준 텍스트 언어를 시뮬레이션하는 언어를 만드는 경우 MPS 에디터는 일반 텍스트 에디터를 사용하는 것과 동일한 경험을 제공해야 합니다. 마찬가지로 사용자가 그래픽 표기가 있는 언어를 만드는 경우 MPS 에디터는 다이어그램 에디터를 사용할 때와 동일한 경험을 제공해야 합니다.

MPS에서 언어를 만들 때 코드 편집 규칙을 정의하고 코드가 사용자에게 렌더링되는 방식을 지정합니다. 언어의 유형 시스템 및 제약 조건을 해당 언어에 적용되는 규칙 모음으로 지정할 수도 있습니다. 이러한 특성이 결합되면 MPS에서 즉시 프로그램 코드를 확인하므로 새 언어로 간편하게 프로그래밍하고 오류를 줄일 수 있습니다.

MPS는 생성적 접근 방식을 사용합니다. 즉, 최종 사용자 입력을 더 양식화하고 일반적인 용도의 언어로 변환하기 위해 해당 언어에 대한 생성기를 정의할 수 있습니다. 현재 MPS를 사용하면 특히 Java 코드를 비롯해 C, C#, XML, FHTML, PDF, LaTeX, JavaScript 등 다양한 언어의 코드를 생성할 수 있습니다.

도메인 특화 언어(DSL)란?

"도메인 특화 언어는 특정 대상 분야의 개념과 규칙을 직접 사용하도록 지정하여 프로그래밍보다 추상화 수준을 높인 프로그래밍 언어입니다."

Kelly 및 Tolvanen(2008년)

MPS를 사용하면 사용자 지정 에디터를 새로운 언어용으로 정의하여 DSL을 더 간편하게 이용할 수 있습니다. 도메인 특화 언어는 분야별 전문 용어로 설계되어 전통적인 프로그래밍에 익숙하지 않은 분야별 전문가도 MPS에서 쉽게 작업할 수 있습니다.

투영 에디터

투영 에디터를 사용하면 코드의 추상 구문 트리(AST) 표현을 효율적으로 편집할 수 있습니다. 이 에디터는 텍스트 표기용 텍스트 에디터, 언어 시각화용 다이어그램 에디터, 테이블 편집용 테이블 에디터 등의 동작을 그대로 모방할 수 있습니다. 사용자는 동일한 코드가 다양하게 표시된 전환 가능한 시각적 화면에서 직관적으로 코드와 상호작용하게 됩니다.

IDE 지원

JetBrains는 고성능 IDE 및 개발 도구로 유명하며 MPS도 그러한 도구 중 하나입니다.

MPS는 DSL을 최대한 활용하기 위해 필요한 모든 기능을 갖춘 강력한 IDE입니다. 포함된 기능 중 일부로는 코드 완성, 탐색, 리팩터링, 오류 검사, 빠른 수정, DSL 디버그, 자동 마이그레이션을 통한 언어 버전 관리, 주요 버전 관리 시스템과의 통합 등이 있습니다.

코드 생성

비즈니스 도메인과 구현 도메인 간의 의미 차이를 메우는 작업은 MPS 생성기에서 처리됩니다.

생성기는 일련의 단계를 거치면서 원래의 도메인 특화 모델을 Java, C, JavaScript, XML 등 낮은 추상화 수준의 범용 언어로 표현된 모델로 점진적으로 변환합니다. 이렇게 생성된 모델은 실행 가능한 바이너리를 생성하기 위해 전통적인 컴파일러에 공급되는 텍스트 소스 파일로 다시 변환할 수 있습니다.

도메인 특화 언어는 해당 분야 전문가의 비즈니스 지식을 형식화하는 반면, 생성기는 제공된 기술로 해당 지식의 구현을 캡슐화합니다. 생성기는 가장 숙련된 소프트웨어 개발자의 전문 지식을 재사용 가능한 형태로 보존하여 다른 사용자가 혜택을 얻을 수 있도록 돕습니다.

언어에 포함된 실제 지식과 생성기에 보관된 구현 지식이 명확하게 분리되므로 동일한 언어에 여러 생성기를 사용하여 다양한 플랫폼을 동시에 대상으로 삼을 수 있습니다. 또한 대상 구현 기술을 전환할 경우, 생성기만 변경하면 되기 때문에 수행해야 하는 작업이 줄어듭니다. 기존 도메인 특화 모델에 포함된 실제 지식은 그대로 유지됩니다.

DSL을 생성할 수 있는 MPS 및 언어 확장 기능

원래 MPS에는 Java의 복제판인 BaseLanguage라는 즉시 사용 가능한 범용 언어 1개가 포함되어 있었으나 이후 시간이 지나면서 XML, C 및 JavaScript와 같은 언어가 추가되었습니다. 이러한 언어를 그대로 사용해 프로그램을 만들 수도 있습니다. 그러나 MPS의 진정한 강점은 BaseLanguage 또는 기타 범용 언어를 확장하여 해당 언어를 기반으로 새로운 언어를 생성하는 데 사용할 수 있다는 것입니다. MPS에는 문자열, 컬렉션, 날짜, 정규 표현식 등을 작업할 때 필요한 BaseLanguage의 유용한 확장 기능이 몇 가지 있습니다. 이 확장 기능은 새 언어를 만들기 위한 참조로 사용할 수도 있습니다. MPS가 도메인 특화 언어(DSL)를 만드는 탁월한 도구인 이유는 바로 이러한 강력한 도구들에 있습니다.