MPS의 작동 원리

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

언어 확장의 주요 문제는 주로 파서에서 발생합니다. 파서는 시각적 표기로 코드 표현을 엄격하게 묶고 다른 파서와 쉽게 결합되지 않으므로 언어가 모듈화되지 않습니다.

이러한 문제를 해결하기 위해 프로그램 코드를 비 텍스트적으로 표현하자는 아이디어가 자연스레 대두되었습니다. 이 접근 방식의 주요 이점은 파싱이 필요 없다는 것입니다. JetBrains의 해결책은 추상 구문 트리(AST)에서 코드를 항상 유지관리하는 것입니다. 추상 구문 트리는 속성, 하위 요소 및 참조가 있는 노드로 구성되며 프로그램 코드를 완벽하게 설명합니다.

이에 따라 MPS 에디터의 과제는 사용자에게 친숙한 방식으로 AST를 시각화하고 효과적인 편집을 위한 수단을 제공하는 것이 됩니다. 전통적인 텍스트 언어의 경우, 시각적 표기 면에서 흔히 텍스트가 편집되는 것처럼 보여주는 한편, 잘 작동하는 다이어그램 에디터의 일반적 특징도 갖추어야 합니다.

언어를 만드는 경우, 코드 편집 및 렌더링 규칙을 정의해야 합니다. 언어 유형(시스템 및 제약 조건)을 지정할 수도 있습니다. 이렇게 하면 MPS에서 즉시 프로그램 코드를 확인하므로 새 언어로 간편하게 프로그래밍하고 오류를 줄일 수 있습니다.

MPS는 생성적 접근 방식을 사용합니다. 사용자는 코드를 더 일반적이고 일반 범용 언어로 작성된 컴파일 가능한 코드로 변환하기 위해 언어 생성기를 정의할 수 있습니다. 현재 MPS는 다양한 코드를 지원하지만 Java 코드 생성에 특히 적합합니다. 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)를 만드는 탁월한 도구인 이유는 바로 이러한 강력한 도구들에 있습니다.