포스트스크립트

**포스트스크립트**(PostScript, **PS**)는 페이지 기술 언어이자 동적 타이핑을 지원하는 스택 기반 프로그래밍 언어이다. 주로 전자 출판 및 탁상출판 분야에서 가장 흔하게 사용되지만, 튜링 완전한 프로그래밍 언어로서 다른 여러 목적으로도 사용될 수 있다. 포스트스크립트는 1982년부터 1984년까지 어도비 시스템즈에서 존 워녹, 찰스 게슈케, 더그 브로츠, 에드 태프트, 빌 박스턴에 의해 만들어졌다. 가장 최신 버전인 포스트스크립트 3은 1997년에 출시되었다.

## 역사
포스트스크립트 언어의 개념은 1976년 컴퓨터 그래픽스 회사인 에반스 앤 서덜랜드의 존 개프니에 의해 시작되었다. 당시 개프니와 존 워녹은 뉴욕항의 대규모 3차원 그래픽 데이터베이스를 위한 인터프리터를 개발하고 있었다.

동시에 제록스 파크(PARC)의 연구원들은 최초의 레이저 프린터를 개발했고 페이지 이미지를 정의하기 위한 표준 수단의 필요성을 인식했다. 1975~76년에 밥 스프룰과 윌리엄 뉴먼은 프레스(Press) 형식을 개발했으며, 이는 결국 제록스 스타 시스템에서 레이저 프린터를 구동하는 데 사용되었다. 그러나 프레스는 언어가 아닌 데이터 형식이었기에 유연성이 부족했고, PARC는 후속작을 만들기 위해 인터프레스 프로젝트를 추진했다.

1978년, 당시 제록스 파크에 있던 존 개프니와 마틴 뉴얼은 VLSI 설계와 서체 및 그래픽 인쇄 조사를 위해 사용된 J&M 또는 JaM("John and Martin"의 약자)을 작성했다. 이 작업은 나중에 인터프레스 언어로 발전하고 확장되었다.

워녹은 찰스 게슈케와 함께 퇴사하여 1982년 12월에 어도비 시스템즈를 설립했다. 그들은 더그 브로츠, 에드 태프트, 빌 박스턴과 함께 인터프레스와 유사하지만 더 단순한 언어인 포스트스크립트를 만들었으며, 이는 1984년에 시장에 출시되었다.

한편, 1983년 봄에 스티브 잡스가 어도비를 방문했고, 포스트스크립트의 잠재력, 특히 그가 애플에서 개발 중이던 새로운 매킨토시 128K 컴퓨터에 대한 잠재력에 매료되었다. 존 스컬리의 반대에도 불구하고 잡스는 포스트스크립트 로열티에 대한 선급금 150만 달러와 어도비 주식 20%의 대가로 250만 달러를 제안하며 어도비로부터 포스트스크립트 기술 라이선스를 취득했다. 1983년의 일련의 회의 동안 잡스는 애플이 어도비를 완전히 인수하겠다고 반복해서 제안했지만 창립자들은 이를 계속 거절했다. 1983년 12월, 두 회사는 마침내 포스트스크립트 라이선스 계약을 체결했고, 어도비는 즉시 고성능 고해상도 인쇄 장치에서 소비자 지향적인 애플 레이저라이터 레이저 프린터로 초점을 옮겨야 했다.

당시 레이저라이터에 사용될 300-dpi 캐논 레이저 인쇄 엔진은 교정 인쇄(즉, 최종 원고가 전문 고해상도 장치로 보내지기 전의 조잡한 초안용)용으로만 충분하다고 여겨졌으나, 잡스는 어도비에 포스트스크립트가 이러한 저해상도 장치(대부분의 소비자에게는 유일한 인쇄 장치일 수 있는)에서 고품질 결과물을 렌더링하도록 만드는 과제를 제시했다. 이에 대응하여 워녹과 브로츠는 모든 해상도에서 보기 좋게 보이도록 글자의 획 너비를 적절하게 조절하는 이른바 "외관 문제"를 해결했다. 그들의 획기적인 발전은 매우 중요했기에, 어도비는 세부 사항을 영업 비밀로 유지하기 위해 이 기술을 특허 내지 않았다. 수년 후인 2010년 강의에서 워녹은 이 영업 비밀을 공개했으며, 2022년에 어도비는 1984년 2월의 포스트스크립트 초기 원본 소스 코드를 공개적으로 출시했다. 박스턴은 폰트 힌팅과 같은 여러 다른 관련 개선 사항을 작업했다. 이 작업은 1984년 2월 이후에 발생했으므로 박스턴의 개선 사항은 소스 코드 릴리스에 포함되지 않았으며 여전히 영업 비밀로 보호된다. 어도비는 또한 캐논의 모토로라 68000 칩에 포스트스크립트를 이식하는 책임도 맡았다.

애플과 어도비는 1985년 1월 23일 애플의 연례 주주 총회에서 레이저라이터를 발표했다. 이는 포스트스크립트가 탑재되어 출하된 최초의 프린터였으며, 1980년대 중반 탁상출판(DTP) 혁명을 불러일으켰다. 원래 포스트스크립트 로열티는 판매된 각 레이저 프린터 표시 가격의 5%였으며, 이는 원래 6,995달러였던 레이저라이터 가격 중 350달러에 해당했고, 이러한 로열티는 어도비 초기 수입의 거의 전부를 제공했다. (애플은 나중에 출하된 프린터 수량을 기준으로 라이선스 비용을 지불하도록 계약을 재협상했다.) 기술적 장점과 광범위한 가용성의 결합으로 포스트스크립트는 인쇄 응용 프로그램을 위한 그래픽 출력 언어로 선택받게 되었다. 포스트스크립트 언어를 위한 인터프리터(때로는 RIP라고 함)는 1980년대와 1990년대에 레이저 프린터의 일반적인 구성 요소였다.

그러나 구현 비용이 높았다. 컴퓨터는 프린터에 의해 프린터 본래 해상도의 래스터 이미지로 해석될 원시 PS 코드를 출력했다. 이를 위해서는 고성능 마이크로프로세서와 충분한 주기억장치가 필요했다. 레이저라이터는 12 MHz 모토로라 68000을 사용했는데, 이는 연결된 어떤 매킨토시 컴퓨터보다 빨랐다. 레이저 프린터 엔진 자체의 가격이 1,000달러가 넘었을 때는 PS 추가 비용이 미미했다. 그러나 프린터 메커니즘 가격이 하락하면서 PS 구현 비용이 전체 프린터 가격에서 너무 큰 비중을 차지하게 되었다. 또한 1990년대에 데스크톱 컴퓨터가 연결된 프린터보다 더 강력해지면서 래스터화 작업을 자원이 제한된 프린터로 넘기는 것이 더 이상 합리적이지 않게 되었다. 2001년까지 저가형 프린터 모델 중 포스트스크립트를 내장하여 지원하는 경우는 거의 없었는데, 이는 주로 훨씬 저렴한 비포스트스크립트 잉크젯 프린터와의 경쟁 심화와 컴퓨터에서 포스트스크립트 이미지를 렌더링하여 모든 프린터에 적합하게 만드는 새로운 소프트웨어 기반 방식 때문이었다. 포스트스크립트의 후손인 PDF는 그러한 방법 중 하나를 제공하며 전자 문서 배포의 데 팍토 표준으로서 포스트스크립트를 대체했다.

고급 프린터에서는 포스트스크립트 프로세서가 여전히 흔하며, 이를 사용하면 문서 인쇄와 관련된 CPU 작업을 크게 줄여 포스트스크립트 이미지 렌더링 작업을 컴퓨터에서 프린터로 옮길 수 있다.

### 포스트스크립트 레벨 1
포스트스크립트 언어의 첫 번째 버전은 1984년에 시장에 출시되었다. "레벨 1"이라는 수식어는 레벨 2가 도입되었을 때 추가되었다.

### 포스트스크립트 레벨 2
포스트스크립트 레벨 2는 1991년에 도입되었으며 속도와 신뢰성 향상, 래스터 이미지 프로세싱(RIP) 내 분판 지원, 이미지 압축 해제(예: JPEG 이미지를 포스트스크립트 프로그램에서 렌더링 가능), 복합 글꼴 지원, 재사용 가능한 콘텐츠를 캐싱하기 위한 폼(form) 메커니즘 등 여러 개선 사항이 포함되었다.

### 포스트스크립트 3
포스트스크립트 3(어도비는 단순한 버전 관리를 선호하여 "레벨" 용어를 폐기함)은 1997년 말에 출시되었으며, 이전 연산자의 많은 새로운 딕셔너리 기반 버전과 함께 더 나은 색상 처리 및 새로운 필터(프로그램 내 압축/압축 해제, 프로그램 청킹 및 고급 오류 처리 지원)를 도입했다.

포스트스크립트 3는 당시 잡지 제작에 널리 사용되던 기존의 독점적인 컬러 전자 프리프레스 시스템을 대체하는 데 중요한 역할을 했다. 이는 최대 4096단계의 회색조(포스트스크립트 레벨 2에서 사용 가능한 256단계 대신)를 지원하는 부드러운 쉐이딩 작업과 복합 색상 페이지에 추가 잉크 색상(별색)을 추가할 수 있는 색 공간인 DeviceN의 도입을 통해 이루어졌다.

## 인쇄에서의 사용

### 포스트스크립트 이전
인터프레스와 포스트스크립트가 도입되기 전, 프린터는 입력된 텍스트(일반적으로 ASCII)를 기반으로 문자 출력을 인쇄하도록 설계되었다. 이 작업을 위한 여러 기술이 있었으나, 대부분은 자체(glyph)가 타자기 키, 금속 밴드 또는 광학 플레이트에 새겨져 있어 물리적으로 변경하기 어렵다는 공통점이 있었다.

이것은 도트 매트릭스 프린터의 인기가 높아지면서 어느 정도 변화했다. 이러한 시스템의 문자는 프린터 내부의 폰트 테이블에 정의된 일련의 점으로 그려졌다. 정교해짐에 따라 도트 매트릭스 프린터는 사용자가 선택할 수 있는 여러 내장 폰트를 포함하기 시작했고 일부 모델은 사용자가 자신의 사용자 정의 자체를 프린터에 업로드할 수 있도록 허용했다.

도트 매트릭스 프린터는 또한 래스터 그래픽스를 인쇄하는 기능을 도입했다. 그래픽은 컴퓨터에 의해 해석되었으며 일련의 이스케이프 시퀀스를 사용하여 프린터에 일련의 점으로 전송되었다. 이러한 프린터 명령 언어는 프린터마다 달랐으므로 프로그램 작성자는 수많은 장치 드라이버를 만들어야 했다.

벡터 그래픽스 인쇄는 플로터라고 불리는 특수 목적 장치에 맡겨졌다. 거의 모든 플로터는 공통 명령 언어인 HPGL을 공유했지만 그래픽 인쇄 이외의 용도로는 제한적이었다. 또한 비싸고 느린 경향이 있어 드물게 사용되었다.

### 포스트스크립트 인쇄
레이저 프린터는 프린터와 플로터의 장점을 결합했다. 플로터처럼 레이저 프린터는 고품질의 선화를 제공하며 도트 매트릭스 프린터처럼 텍스트 페이지와 래스터 그래픽을 생성할 수 있다. 프린터나 플로터와 달리 레이저 프린터는 동일한 페이지에 고품질 그래픽과 텍스트를 배치할 수 있게 해준다. 포스트스크립트는 모든 브랜드의 프린터에서 사용할 수 있는 단일 제어 언어를 제공함으로써 이러한 특성을 완전히 활용할 수 있게 했다.

포스트스크립트는 전형적인 프린터 제어 언어를 넘어 그 자체로 완전한 프로그래밍 언어였다. 많은 응용 프로그램이 문서를 포스트스크립트 프로그램으로 변환할 수 있으며, 이 프로그램의 실행 결과가 원래 문서가 된다. 이 프로그램은 프린터의 인터프리터로 보내져 문서로 인쇄되거나, 문서를 화면에 표시할 다른 응용 프로그램 내부의 인터프리터로 보내질 수 있다. 문서 프로그램은 목적지에 관계없이 동일하기 때문에 장치 독립적이라고 불린다.

포스트스크립트는 모든 것, 심지어 텍스트까지 직선과 3차 베지에 곡선(이전에는 CAD 응용 프로그램에서만 발견됨)의 관점에서 지정되는 실시간 래스터화를 구현하여 임의의 크기 조절, 회전 및 기타 변환을 허용한다는 점에서 주목할 만하다. 포스트스크립트 프로그램이 해석될 때, 인터프리터는 이러한 지침을 출력 형성에 필요한 점으로 변환한다. 이러한 이유로 포스트스크립트 인터프리터는 때때로 포스트스크립트 래스터 이미지 프로세서, 즉 RIP라고 불린다.

### 글꼴 처리

포스트스크립트 자체만큼이나 복잡한 것은 글꼴 처리이다. 글꼴 시스템은 PS 그래픽 기본 요소를 사용하여 자체를 곡선으로 그리며, 이는 모든 해상도에서 렌더링될 수 있다. 이 접근 방식에서는 여러 타이포그래피 문제를 고려해야 했다.

한 가지 문제는 글꼴이 작은 크기에서 선형적으로 크기가 조정되지 않으며 자체의 특징이 비례적으로 너무 커지거나 작아져 보기 싫게 변할 수 있다는 것이다. 포스트스크립트는 폰트 힌팅을 포함하여 이 문제를 피했다. 힌팅은 래스터라이저가 유지해야 할 각 글자의 중요한 특징을 식별하는 데 도움이 되도록 수평 또는 수직 밴드에 추가 정보를 제공한다. 그 결과 저해상도에서도 훨씬 더 보기 좋은 글꼴이 만들어졌다. 이전에는 이 작업을 위해 수작업으로 조정된 비트맵 글꼴이 필요하다고 믿어졌다.

당시 글꼴에 이러한 힌트를 포함하는 기술은 엄격하게 보호되었으며, 힌트가 포함된 글꼴은 어도비가 타입 1 폰트(포스트스크립트 타입 1 폰트, PS1, T1 또는 어도비 타입 1)라고 부르는 형식으로 압축 및 암호화되었다. Type 1은 완전한 언어인 것과 반대로 아웃라인 정보만 저장하도록 PS 시스템을 사실상 단순화한 것이었다(PDF도 이와 유사하다). 어도비는 자신의 글꼴에 힌트를 추가하려는 사람들에게 Type 1 기술 라이선스를 판매했다. 기술 라이선스를 받지 못한 사람들은 타입 3 폰트(포스트스크립트 타입 3 폰트, PS3 또는 T3로도 알려짐)를 사용해야 했다. 타입 3 글꼴은 포스트스크립트 언어의 모든 정교함을 허용했지만 표준화된 힌팅 접근 방식은 없었다.

타입 2 폰트 형식은 컴팩트 폰트 포맷(CFF) 캐릭터스트링과 함께 사용되도록 설계되었으며 전체 글꼴 파일 크기를 줄이기 위해 구현되었다. CFF/타입2 형식은 나중에 오픈타입 글꼴에서 포스트스크립트 아웃라인을 처리하는 기초가 되었다.

복잡한 아시아 언어(CJK) 인코딩 및 매우 큰 문자 집합 문제를 해결하기 위해 OCF/Type 0 폰트의 문제를 해결하도록 설계된 CID 키 폰트 형식도 개발되었다. CID 키 글꼴 형식은 표준 CID 키 글꼴의 경우 Type 1 글꼴 형식과 함께 사용하거나 CID 키 오픈타입 글꼴의 경우 Type 2와 함께 사용할 수 있다.

어도비의 시스템에 대항하기 위해 애플은 1991년경 자체 시스템인 트루타입을 설계했다. 트루타입 발표 직후 어도비는 타입 1 글꼴 형식의 사양을 공개했다. Altsys 폰트그래퍼(1995년 1월 매크로미디어가 인수, 2005년 5월부터 폰트랩 소유)와 같은 소매용 도구는 Type 1 글꼴을 생성하는 기능을 추가했다. 그 이후로 많은 무료 타입 1 글꼴이 출시되었으며, 예를 들어 TeX 조판 시스템에 사용되는 글꼴들이 이 형식으로 제공된다.

1990년대 초에는 비트스트림과 메타폰트 등에서 개발한 아웃라인 기반 글꼴 저장 시스템이 몇 가지 더 있었으나 일반적인 인쇄 솔루션을 포함하지 않아 널리 사용되지 못했다.

1990년대 후반에 어도비는 마이크로소프트와 협력하여 기본적으로 타입 1과 트루타입 형식의 기능적 상위 집합인 오픈타입을 개발했다. 포스트스크립트 출력 장치로 인쇄할 때 오픈타입 글꼴의 불필요한 부분은 생략되며, 드라이버가 장치로 보내는 내용은 오픈타입 글꼴에 어떤 종류의 아웃라인이 있는지에 따라 트루타입 또는 Type 1 글꼴과 동일하다.

어도비는 2023년 1월 오픈타입 글꼴을 선호하여 지원을 완전히 제거할 때까지 자사 제품에서 Type 1 글꼴을 지원했다.

### 기타 구현체
컴퓨터 프린터와 Linotronic과 같은 고급 사진 식자기 모두 포스트스크립트를 구현했다. 1980년대에 어도비는 래스터 이미지 프로세서 또는 RIP로 알려진 구현체에 대한 라이선스 비용에서 대부분의 수익을 창출했다. 1980년대 중반에 다수의 새로운 RISC 기반 플랫폼이 사용 가능해지자 일부에서는 어도비의 새로운 기계 지원이 부족하다고 느꼈다.

이 문제와 비용 문제로 인해 특히 저가형 프린터(라이선스 비용이 문제였던 경우)나 고급 조판 장비(속도를 위해 어도비가 제공할 수 있는 것보다 더 빨리 새로운 플랫폼을 지원해야 했던 경우)에서 포스트스크립트의 제3자 구현체가 흔해졌다. 한때 마이크로소프트는 애플에 자신이 인수한 트루이미지라는 포스트스크립트 호환 인터프리터의 라이선스를 제공했고, 애플은 마이크로소프트에 새로운 글꼴 형식인 트루타입의 라이선스를 제공했다. 애플은 결국 어도비와 합의에 도달하여 프린터에 정품 포스트스크립트 라이선스를 사용하게 되었지만, 트루타입은 윈도우와 매킨토시 모두에서 표준 아웃라인 글꼴 기술이 되었다.

오늘날 제3자 포스트스크립트 호환 인터프리터는 프린터와 복합기(MFP)에서 널리 사용된다. 예를 들어, 이전에 PhoenixPage로 알려졌던 CSR plc의 IPS PS3 인터프리터는 휴렛 팩커드가 개발하고 레이저젯 및 컬러 레이저젯 라인으로 판매되는 많은 프린터와 복합기에서 표준이다. 인쇄 및 복합기 제조업체가 사용하는 다른 제3자 포스트스크립트 솔루션으로는 글로벌 그래픽스의 Jaws와 Harlequin RIP가 있다. 여러 다른 응용 프로그램과 함께 사용되는 자유 소프트웨어 버전은 고스트스크립트이다. 여러 호환 인터프리터가 Undocumented Printing Wiki에 나열되어 있다.

일부 기본적이고 저렴한 레이저 프린터는 포스트스크립트를 지원하지 않으며 대신 플랫폼의 기본 그래픽 형식을 포스트스크립트로 변환하지 않고 단순히 래스터화하는 드라이버와 함께 제공된다. 이러한 프린터에서 포스트스크립트 지원이 필요한 경우 고스트스크립트를 사용할 수 있다. 또한 텔레타입의 T-Script나 브라더의 BR-Script3와 같은 여러 상용 포스트스크립트 인터프리터도 있다.

## 디스플레이 시스템으로서의 사용

포스트스크립트는 그래픽 사용자 인터페이스(GUI)의 도입으로 인해 상업적으로 성공을 거두었으며 디자이너들이 레이저 프린터에서 최종 출력될 페이지를 직접 레이아웃할 수 있게 했다. 그러나 GUI 자체의 그래픽 시스템은 일반적으로 포스트스크립트보다 훨씬 덜 정교했다. 예를 들어 애플의 QuickDraw는 기본적인 선과 호만 지원했으며 포스트스크립트의 복잡한 B-스플라인과 고급 영역 채우기 옵션은 지원하지 않았다. 포스트스크립트 인쇄를 최대한 활용하기 위해 컴퓨터의 응용 프로그램은 호스트 플랫폼의 자체 그래픽 시스템을 사용하여 이러한 기능을 다시 구현해야 했다. 이로 인해 이러한 기능의 구현 차이로 인해 화면 레이아웃이 인쇄된 결과물과 정확히 일치하지 않는 수많은 문제가 발생했다.

컴퓨터 성능이 향상됨에 따라 프린터가 아닌 컴퓨터에 PS 시스템을 탑재하는 것이 가능해졌다. 이는 PS가 인쇄 시스템에서 호스트 자체의 그래픽 언어로도 사용될 수 있는 자연스러운 진화로 이어졌다. 이 접근 방식에는 여러 가지 장점이 있었다. 화면과 프린터에서 서로 다른 출력이 나올 가능성을 제거하는 데 도움이 되었을 뿐만 아니라 컴퓨터에 강력한 그래픽 시스템을 제공했고 레이저 엔진의 가격이 하락하던 시기에 프린터를 "덤(dumb)" 상태로 유지할 수 있게 했다. 제작 환경에서 포스트스크립트를 디스플레이 시스템으로 사용한다는 것은 호스트 컴퓨터가 화면에는 저해상도로, 프린터에는 고해상도로 렌더링하거나 단순히 PS 코드를 스마트 프린터로 보내 외부 인쇄를 할 수 있음을 의미했다.

그러나 포스트스크립트는 인쇄를 염두에 두고 작성되었으며 대화형 디스플레이 시스템에서 직접 사용하기에 부적합한 수많은 기능이 있었다. 특히 PS는 `showpage` 명령이 나타날 때까지 PS 명령을 수집하고 그 시점에 읽어 들인 모든 명령을 해석하고 출력한다는 아이디어에 기반했다. 대화형 시스템에서 이것은 분명히 적절하지 않았으며 PS에는 어떤 종류의 상호 작용성도 내장되어 있지 않았다. 예를 들어 마우스 상호 작용을 위한 히트 감지 지원은 당연히 프린터에서 PS를 사용할 때 적용되지 않았다.

스티브 잡스가 애플을 떠나 NeXT를 시작했을 때 그는 어도비에 자신의 새로운 워크스테이션 컴퓨터를 위한 디스플레이 시스템으로 PS를 사용하는 아이디어를 제안했다. 그 결과가 디스플레이 포스트스크립트(DPS)였다. DPS는 많은 문자열 조회를 32비트 정수로 변경하고 모든 명령과 함께 직접 출력을 지원하며 GUI가 다이어그램을 검사할 수 있는 기능을 추가하여 성능을 향상시키는 기본 기능을 추가했다. 또한 PS 코드를 C 프로그래밍 언어에서 직접 호출할 수 있도록 일련의 "바인딩"이 제공되었다. NeXT는 NeXTStep 시스템에서 이러한 바인딩을 사용하여 객체 지향 그래픽 시스템을 제공했다. DPS는 NeXT와 공동으로 작성되었지만 어도비는 이를 상업적으로 판매했으며 1990년대 대부분의 유닉스 워크스테이션의 공통 기능이었다.

썬 마이크로시스템즈는 다른 접근 방식을 취하여 NeWS를 만들었다. PS가 C 프로그램과 상호 작용할 수 있도록 하는 DPS의 개념 대신 NeWS는 PS를 컴퓨터의 전체 GUI를 실행하는 데 적합한 언어로 확장했다. 썬은 타이머, 마우스 제어, 인터럽트 및 상호 작용에 필요한 기타 시스템을 위한 여러 새로운 명령을 추가했으며 내부적으로 완전히 객체 지향적이 될 수 있도록 자료 구조와 언어 요소를 추가했다. 사실상 세 개의 완전한 GUI가 NeWS로 작성되었으며 한동안 그들의 워크스테이션에서 제공되었다. 그러나 X11 시스템을 표준화하려는 지속적인 노력으로 인해 썬 시스템에 도입되고 널리 사용되게 되었으며 NeWS는 결코 널리 사용되지 못했다.

## PDF
PDF(Portable Document Format)와 포스트스크립트는 동일한 이미징 모델을 공유하며 두 형식은 대부분 상호 변환이 가능하다. 그러나 이전 형식인 포스트스크립트에는 투명도가 부족하다. 즉, 기본 객체 모델이 완전히 불투명하게 칠해진다. 이것을 제외하면 두 형식 모두 인쇄 시 동일한 결과를 생성한다. 그러나 PDF에는 포스트스크립트 언어의 범용 프로그래밍 언어 프레임워크가 부족하다. PDF 문서는 효율적인 접근을 위해 만들어진 정적 자료 구조이며 대화형 보기에 적합한 탐색 정보를 포함한다.

## 언어
포스트스크립트는 튜링 완전 프로그래밍 언어로 연쇄적 프로그래밍 언어 그룹에 속한다. 이는 포스와 유사한 인터프리트 스택 기반 언어이며, 동적 타이핑, 리스프에서 영감을 받은 자료 구조, 범위 메모리 및 언어 레벨 2부터는 쓰레기 수집 기능을 갖추고 있다. 언어 구문은 역폴란드 표기법을 사용하므로 연산 순서가 명확하지만 스택의 배치를 염두에 두어야 하므로 프로그램을 읽는 데 약간의 연습이 필요하다. 대부분의 연산자(다른 언어에서 함수라고 부르는 것)는 스택에서 인수를 가져와 결과를 스택에 놓는다. 리터럴(예: 숫자)은 자신의 복사본을 스택에 놓는 효과가 있다. 배열 및 딕셔너리 유형을 기반으로 정교한 자료 구조를 구축할 수 있지만 시스템에서 이를 단지 배열과 딕셔너리로만 인식하므로 사용자 정의 "유형"에 적용될 추가적인 타이핑 규율은 이를 구현하는 코드에 맡겨진다.

문자 "%"는 포스트스크립트 프로그램에서 주석을 시작하는 데 사용된다. 관례적으로 모든 포스트스크립트 프로그램은 모든 장치가 포스트스크립트로 적절하게 해석할 수 있도록 인터프리터 지시어로서 "%!PS" 문자로 시작해야 한다.

포스트스크립트 프로그램은 일반적으로 프롤로그(prolog)와 스크립트(script)라고 불리는 두 부분으로 나뉜다. 프롤로그는 프로시저를 포함하며 프로그래머가 작성한다. 스크립트는 해당 프로시저에 데이터를 전달한다. 스크립트는 종종 포스트스크립트 이외의 프로그래밍 언어를 사용하여 자동으로 생성된다.

### "Hello world"
주어진 언어에서 완전한 프로그램의 작은 예시를 보여주는 관습적인 방법인 Hello World 프로그램은 포스트스크립트(레벨 2)에서 다음과 같이 작성될 수 있다.


```postscript
%!PS
 /Courier             % 원하는 글꼴 이름 지정
 20 selectfont        % 포인트 단위로 크기 선택 및
                      % 해당 글꼴을 현재 글꼴로 설정
 72 500 moveto        % 현재 점을 좌표 72, 500으로 이동
                      % (원점은 페이지의 왼쪽 하단 모서리)
 (Hello world!) show  % 괄호 안의 텍스트 그리기
 showpage             % 페이지의 모든 내용 인쇄
```


또는 출력 장치에 콘솔이 있는 경우:


```postscript
%!PS
 (Hello world!) =
```


### 길이 단위
포스트스크립트는 길이 단위로 포인트를 사용한다. 그러나 포인트의 다른 버전들과 달리 포스트스크립트는 1인치당 정확히 72포인트를 사용한다. 따라서 다음과 같다.

: 

예를 들어 4 cm 길이의 수직선을 그리려면 다음을 입력하는 것으로 충분하다.


```postscript
0 0 moveto
0 113.385827 rlineto stroke
```


더 읽기 쉽고 관용적으로는 간단한 프로시저 정의와 수학 연산자 `mul` 및 `div`의 사용을 보여주는 다음과 같은 동등한 코드를 사용할 수 있다.

```postscript
/cm {72 mul 2.54 div} def               % 1 인치 = 정확히 2.54 cm
 0 0 moveto
 0 4 cm rlineto stroke
```


(기술적으로 대부분의 프린터는 용지의 물리적 경계 주위에 구조적으로 암시된 인쇄 불가능 마진이 있으며 0 0 좌표는 그 모서리에 맞춰 보정되므로 실제로 무언가를 보려면 다른 시작점을 사용해야 할 수도 있다.)

포스트스크립트의 대부분 구현체는 단정밀도 실수(24비트 가수)를 사용하므로 실수를 지정하는 데 소수점 9자리 이상을 사용하는 것은 의미가 없으며 계산 수행 시 용납할 수 없는 반올림 오차가 발생할 수 있다.

## 소프트웨어
포스트스크립트 문서를 렌더링하는 데 사용할 수 있는 소프트웨어는 다음과 같다.

* 고스트스크립트
* pstoedit

## 같이 보기
* 포스트스크립트 글꼴
* 어도비 시스템즈
* 글꼴
* 벡터 그래픽스
* PDF
* EPS
* 고스트스크립트

## 각주

## 외부 링크
* 포스트스크립트 언어 레퍼런스 3판 붉은 표지에서 이름을 따 "The Red Book"이라고도 부르는 레퍼런스 매뉴얼.


분류:1982년 도입
분류:어도비 시스템즈
분류:디지털 타이포그래피
분류:페이지 기술 언어
분류:기술 소통
분류:벡터 그래픽스
분류:오픈 파일 포맷
분류:스택 지향 프로그래밍 언어
분류:동적 타입 프로그래밍 언어