소스 기반 편집과 대비해, 시스템의 핵심 정의를 추상(모델) 표현에 두고 다양한 투영을 통해 편집하는 프로젝션 편집의 개념과 동작 방식, 실용상의 장단점, 그리고 MDSD 및 현대 IDE와의 관계를 설명한다.
소스 편집의 대안은 시스템의 핵심 정의를 모델에 보관하고, 투영을 통해 편집한다는 아이디어다.
이런 스타일의 환경을 이야기할 때, 시스템의 여러 표현을 구분해 생각하면 편리하다.
소스 코드는 편집 표현과 저장 표현을 결합한다. 실행을 위해 소스를 실행 표현으로 변환하는데, 이는 하나의 관찰 가능한 단계(인터프리테이션)일 수도 있고 컴파일러를 통한 여러 단계일 수도 있다. 이 과정에서 일반적으로 소스를 중간 단계로서 추상 표현으로 변환하지만, 이 추상 표현은 일시적이며 컴파일 중에만 존재한다. 소스는 시스템의 핵심 정의로 여겨진다.

프로젝션 편집에서는 추상 표현이 시스템의 핵심 정의다. 도구는 이 추상 표현을 조작하고, 프로그래머가 시스템 정의를 변경할 수 있도록 여러 편집 표현을 투영한다. 도구는 추상 표현을 별도의 저장 표현으로 영속화하지만, 이는 투영되는 어떤 편집 표현과도 완전히 분리되어 있다. 실행 표현과의 관계도 대체로 비슷하다. 실행 파일은 추상 표현으로부터 일련의 변환을 거쳐 생성된다.

소스 기반 환경과 프로젝션 편집 환경의 중요한 차이점은 영속 저장과 편집의 분리다. 프로젝션 편집 시스템은 원하는 어떤 영속화 메커니즘이든 선택할 수 있지만, 소스 기반 시스템은 보편적 저장 메커니즘이 필요하다. 그래서 거의 항상 텍스트 파일을 사용한다.
추상 표현은 여러 투영을 통해 편집될 수 있다. 각 투영은 전체 정보 중 일부만을 보여줄 수 있으며, 이는 추상 표현의 실제 구조에 구속되지 않는다. 따라서 프로젝션 편집은 보통 텍스트 형태만이 아니라 그래픽이나 표 형태 등 더 폭넓은 편집 환경을 제공한다.
고급 소스 기반 IDE도 여러 투영을 보여준다. 예를 들어 클래스의 메서드 목록을 표시하는 사이드 패널에 접근 제한자를 나타내는 그래픽 주석을 붙인다. 하지만 이런 투영은 대개 소스 에디터에 매우 종속적이며, 종종 투영 자체를 직접 편집할 수 없다. 소스를 변경하면 그 투영이 갱신되는 식이다.
이런 PostIntelliJ 계열의 IDE는 소스 파일을 로드할 때 추상 표현을 생성함으로써 이를 수행한다(그래서 시작하는 데 시간이 걸릴 수 있다). 또한 이 추상 표현을 활용해 문맥 기반 자동 완성, 리팩터링 같은 다양한 코드 지원 기능을 수행한다.
프로젝션 편집의 현실적인 큰 문제는 저장 표현의 형식에 대해 일반적으로 합의된 표준이 없다는 점이다. 프로그래머가 읽을 수 있는 텍스트가 소스 파일의 보편적 선택지라는 사실 덕분에, 이를 처리하는 수많은 도구(에디터, 소스 코드 관리, 차이 시각화 도구 등)를 구축할 수 있었다. 프로젝션 시스템은 이런 것들을 스스로 제공해야 하며, 그래서 종종 이러한 기능이 미흡하다. 특히 많은 프로젝션 환경은 제대로 된 형상 관리 시스템이 없어 큰 어려움을 겪는데, 이는 여러 사람이 동일한 시스템 정의에 협업하기를 훨씬 어렵게 만든다. 반면 소스 기반 환경에는 이 작업을 위한 다양한 소스 코드 관리 시스템이 많다.
프로젝션 기반 시스템은 모델 주도 소프트웨어 개발(MDSD)과 밀접히 관련되어 있지만, 둘이 완전히 동의어라고 생각하지는 않는다. MDSD 맥락에서 추상 표현은 보통 모델이라고 부른다. 확실히 거의 모든 MDSD 도구는 리포지토리 기반이지만, Microsoft Access와 같은 많은 리포지토리 기반 도구는 자신을 MDSD라고 여기지 않을 것이다.
(나는 처음에 이 관점을 언어 작업대(Language Workbenches) 에세이에서 탐구했다. 여기서 다시 설명하는 이유는 프로젝션 환경이라는 개념이 언어 작업대에만 국한되지 않고 더 넓다고 생각하기 때문이다.)