달력

032010  이전 다음

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  

서문

소프트웨어 개발 분야에서 새로운 사고는 실제로는 기존의 생각에서 변형된 것이다. 이 논문도 그 중 하나에 해당하한다. 내가 Language Workbenches라고 부르는 일종의 도구들의 유형에 대해 기술한다. 이러한 도구의 예는 Intentional Software, JetBrains의 Meta Programming System 그리고 MS의 Software Factories등 이다. 이들 도구는 내가 언어 지향적 프로그래밍(language oriented programming)이라고 말하던 기존의 개발 방식을 취하지만, IDE 도구를 통해 보다 원활한 언어 지향적 프로그래밍이 가능하게 한다. 비록 그들이 성공할지 예측하긴 힘들지만, 이들은 소프트웨어 개발 분야에서 수면 위로 부상하는 가장 흥미로운 것의 하나라고 생각한다. 어떻게 동작하는지 그리고 향후 유용성 증대를 위한 이슈를 대략적으로 나마 설명하는 것은 충분히 흥미롭기에 이 글을 작성한다.


개요

소프트웨어 시스템을 domain specific language를 활용하여 기술하려는 소프트웨어 개발 방식은 오래도록 있어 왔다. 유닉스 진영에서는 전통적으로 lex와 yacc로 코드를 생성하는 작은 언어들(little languages)가 존재했왔다. Lisp 커뮤니티에서도 Lisp 내에서 매크로(macro)를 활용하여 언어를 개발하는 것을 볼 수 있다. 이러한 접근은 강력한 지지자들이 있지만, 그다지 널리 보급되지는 못했다.

최근 몇 년 사이에 새로운 유형의 소프트웨어를 통해서 이러한 개발 방식을 지원하려는 시도가 있었다. 가장 먼저 그리고 가장 널리 알려진 것이 Intentional Programming이다. 이것은 원래 Charles Simonyi가 Microsoft에 있을 때 처음으로 개발했다. 그러나, 비슷한 시도를 하는 다른 사람들이 있고, 이러한 접근에 대한 사람들의 흥미를 급속도로 유발시키고 있다.

나는 이쯤에서 이 글에서 사용할 몇몇 단어를 정의하겠다. 이 분야에 대해서는 보편적으로 쓰이는 표준 어휘가 없기 때문에 내가 사용하는 단어들이 어떤 곳에서든 통용될 것이라고 기대할 수는 없다. 여기서는 간략하게 정의를 하겠지만 글이 계속되면서 더 자세히 설명할 것이기 때문에 당장에 이해가 가지 않아도 걱정할 필요는 없다.

이 글을 위해서 만들어낸 두 개의 용어는 '언어 지향적 프로그래밍(Language Oriented Programming)’과 ‘Language Workbench’이다. 언어 지향적 프로그래밍이라는 용어는 domain specific language의 집합으로 소프트웨어를 개발하려는 생각을 실현하는 개발 방식을 통칭하여 말할 때 사용한다. Language Workbench는 앞서 언급한 새로운 종류의 툴을 가리킬 때 사용한다. 따라서, Language Workbench는 언어 지향적 프로그래밍을 위한 하나의 수단이다. Domain Specific Language(DSL)이라는 용어에도 익숙하지 않은 사람들이 있을 것이다. DSL은  특정한 유형의 문제를 위해 고안된 제한된 형식의 컴퓨터 언어를 말한다. 몇몇 커뮤니티에서는 오로지 특정 문제 영역을 다루는 언어로만 DSL을 사용하지만, 나는 범위만 한정한다면 어떠한 영역에서도 DSL을 사용할 수 있다고 생각한다.

나는 먼저 한가지 예제를 통해 언어 지향적 프로그래밍의 현재 모습을 간략히 기술하고, 다양한 변이를 이루는 접근 방법들을 개략적으로 살펴보겠다. 그리고, 다양한 접근 각각에 대한 긍정적인 면과 부정적인 면에 대한 다양한 논의들을 살펴볼 것이다. 만일 언어 지향적 프로그래밍에 친숙한 독자라면, 이 내용들을 읽지 않기를 바랄 수 있다. 하지만 실제로 대부분의 개발자들이 이러한 개념에 익숙하지 않다는 것을 알고 있다. 대략의 설명을 바탕으로 이후에는 어떤 language workbench가 있고, 상충되는 것들을 어떻게 해결할지 알아볼 것이다.

내가 이 글을 쓸 때, 하나의 글로 쓰기에는 너무 크다는 것을 알았다. 그래서, 논문의 일부를 들을 다른 글로 나누었다. 글의 특정 내용이 다른 글을 참조할 필요가 있을 때는 바로 아래에 링크를 달아 두었다. 특히, 주로 쓰이는 language workbench를 이용하여 DSL을 만들어낸 실제적인 사례를 느끼기 위해서는 MPS를 이용한 예제를 참조하기 바란다. 이후에 이어지는 글을 충분히 이해하기 위해서 이곳의 language workbench에 대한 일반적인 설명을 끝까지 읽어볼 필요가 있다.


목차

* Elements of a Language Workbench 이하는 번역하지 않습니다.

원문 최근 갱신: 2005년 6월 12일
번역: 영회, 백기선
원문: Language Workbenches: The Killer-App for Domain Specific Languages?

역자 추가 제공 정보:

No Fluff, Just Stuff Anthology (Pragmatic Programmers)의 2장에 소개된 Neal Ford의 글 'DSLs and Language-Oriented Programming'은 이 논문과 동일한 내용을 다루고 있습니다. 자바 중심으로 예제를 다루고 있어, 자바 개발자 입장에서는 이해하기에 좋습니다.

Introduction to Domain Specific Languages에서 JAOO conference의 Martin Fowler 발표를 보실 수 있습니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회