파스칼 (프로그래밍 언어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
파스칼은 1970년대 니클라우스 비르트가 설계한 구조적 프로그래밍 언어로, ALGOL 60의 영향을 받아 구조적 프로그래밍을 가르치고 시스템 소프트웨어를 개발하는 것을 목표로 했다. 초기에는 ALGOL의 문제점을 개선하고 구조적 프로그래밍을 위한 기능을 제공하는 데 중점을 두었으며, UCSD 파스칼과 같은 이식성 있는 버전의 등장으로 널리 사용되었다. 파스칼은 절차적 프로그래밍 언어로서 다양한 자료형과 제어 구조를 지원하며, 오브젝트 파스칼과 같은 객체 지향 확장을 통해 더욱 발전했다. 다양한 컴파일러와 개발 도구가 존재하며, 델파이, Free Pascal, GNU Pascal 등이 대표적이다. 파스칼은 알고리즘 교육 및 기술에 널리 사용되었으며, Modula-2, Modula-3, Oberon 등 후속 언어에 영향을 미쳤다.
파스칼은 1960년대 ALGOL 60의 영향을 받아 탄생했다. 니클라우스 비르트는 ALGOL W를 거쳐 구조적 프로그래밍 교육과 시스템 소프트웨어 개발을 목표로 파스칼을 개발했다.[5] 초기에는 대학교 프로그래밍 입문 언어로 널리 사용되었다.
2. 역사
UCSD 파스칼은 다양한 플랫폼으로 이식 가능한 사용자 지정 운영 체제에서 실행되는 버전으로, 애플 II에서 애플 파스칼로 널리 사용되어 애플 리사와 매킨토시 개발에 중요한 역할을 했다.[6] 도널드 커누스의 TeX, 어도비 포토샵[7], 스카이프[8] 등 상업용 응용 프로그램 개발에도 사용되었다.
파스칼은 컴파일 시 오류를 발견하는 강력한 타입의 언어였지만, 초기 사양에는 분할 컴파일이나 외부 라이브러리 이용이 고려되지 않아 대규모 프로그램 개발에는 불편함이 있었다.
최초의 파스칼 컴파일러는 1970년 컨트롤 데이터 코퍼레이션 6000 시리즈용으로 작성되었고, 파스칼 자체로 작성되었다. 1972년부터 1974년까지 취리히 연방 공과대학교에서 Pascal-P가 개발되었는데, 이는 P 코드 컴파일러와 인터프리터로 구성된 중간 언어 컴파일러였다.
1975년에는 니클라우스 비르트가 Pascal-S를, 캘리포니아 공과대학교에서 Concurrent Pascal이 개발되었다. 1978년에는 캘리포니아 대학교 샌디에이고(UCSD)에서 UCSD 파스칼이 개발되어 애플에 라이선스되었다. 일본에서는 1979년 샤프의 MZ 시리즈용으로 "Tiny PASCAL PALL"이 발매되었다.[70]
래리 테슬러는 니클라우스 비르트와의 협력을 통해 파스칼에 객체 지향 확장을 추가하여 Clascal, Object Pascal을 개발했다. Object Pascal은 터보 파스칼, 델파이 등에 적용되었고, Free Pascal과 같은 오픈 소스 구현체도 등장했다.
2. 1. 초기 노력 (1960년대)
1960년대 프로그래밍 언어 설계는 대부분 ALGOL 60의 영향을 받았다. ALGOL은 알고리즘을 명확하게 설명하기 위해 개발되었으며, 구조적 프로그래밍을 위한 여러 기능을 포함했다.
1962년, 니클라우스 비르트는 헬무트 베버와 함께 오일러 프로그래밍 언어를 개발했다. 오일러는 ALGOL의 문법과 개념을 기반으로 했지만, 동적 리스트와 타입을 추가하여 Lisp와 유사한 역할을 할 수 있도록 했다.
이 무렵, ALGOL의 문제점 중 하나는 표준화된 문자열 시스템이 없다는 것이었다. 비르트와 토니 호어는 문자열을 추가하고 문법을 정리하는 수정안을 ALGOL X 프로세스에 제출했지만, 이는 너무 사소하다고 여겨져 비르트는 ALGOL W라는 언어의 컴파일러를 작성했다.
ALGOL X는 더 복잡한 언어인 ALGOL 68을 선택했지만, 이 언어의 복잡성으로 인해 널리 사용되지 못했다. 이는 새로운 언어에 대한 기회를 열었다.
2. 2. 파스칼의 탄생 (1970년대)
파스칼은 구조적 프로그래밍 방식으로 프로그래밍을 가르치고 시스템 소프트웨어를 개발하려는 명확한 목표를 가지고 ALGOL W의 영향을 받아 탄생했다.[5] 초기에는 학부 과정에서 프로그래밍 입문 언어로 널리 사용되었다.
파스칼의 초기 성공 사례 중 하나는 UCSD 파스칼의 도입이었다. UCSD 파스칼은 서로 다른 플랫폼으로 이식 가능한 사용자 지정 운영 체제에서 실행되는 버전이었다. 특히 애플 II에서 애플 파스칼로 널리 사용되었으며, 이는 파스칼이 애플 리사와 이후 매킨토시 개발에 사용되는 주요 고급 프로그래밍 언어가 되는 계기가 되었다.[6] 클래식 맥 OS의 일부는 파스칼 소스 코드에서 모토로라 68000 어셈블리 언어로 직접 번역되기도 했다.[6]
도널드 커누스의 조판 시스템 TeX는 DEC(Digital Equipment Corporation) PDP-10 파스칼을 기반으로 한 최초의 문해 프로그래밍 시스템인 WEB으로 작성되었다. 어도비 포토샵[7], 토탈 커맨더, 스카이프[8], 매크로미디어 캡티베이트 등 상업용 응용 프로그램 개발에도 파스칼이 사용되었다. 아폴로 컴퓨터는 1980년부터 운영 체제의 시스템 프로그래밍 언어로 파스칼을 사용했다.
파스칼은 교육을 주된 목적으로 하면서도, 컴파일러를 기술할 수 있을 정도로 강력한 언어를 목표로 했다. 초기에는 비르트 본인이 파스칼 컴파일러를 파스칼 자체로 작성하여 그 능력을 보여주었다.
파스칼의 단순함은 구문이 LL(1)인 점 등에서 잘 나타난다. 모든 이름표, 상수, 타입명, 변수, 서브루틴은 사용 전에 정의되어 있어야 한다. 포인터를 사용한 리스트와 같은 타입 정의나, 서로 서브루틴이 호출하는 경우 예외적인 구문을 사용해야 한다.
파스칼은 컴파일 시에 가능한 많은 부주의로 인한 오류를 발견할 수 있는, 강력하게 타입이 지정된(strongly typed) 언어이며, 하드웨어를 숨기는 사상이 철저하다. 또한, 최초의 사양에서는 분할 컴파일이나 외부 라이브러리의 이용이 고려되지 않았다. 이는 대규모 프로그램이나 하드웨어를 직접 조작하는 프로그램을 기술하는 데에는 불편한 사양이었다.
최초의 파스칼 컴파일러는 컨트롤 데이터 코퍼레이션(Control Data Corporation, CDC) 6000 시리즈용으로 1970년에 작성되었으며, 자체적으로 파스칼로 작성되었다. 1972년부터 1974년까지 취리히 연방 공과대학교에서 Pascal-P가 작성되었는데, 이는 파스칼에서 P 코드로의 컴파일러와 P 코드 인터프리터로 구성된 중간 언어 컴파일러였으며, 역시 파스칼 자체로 작성되었다.
1975년에 니클라우스 비르트가 인터프리터인 Pascal-S를 작성했다. 같은 해 1975년에 캘리포니아 공과대학교에서 파스칼을 병렬 동작용으로 확장한 Concurrent Pascal이 개발되었다.
1978년에 캘리포니아 대학교 샌디에이고 (UCSD)에서 Pascal-P2를 기반으로 한 UCSD 파스칼이 개발되었다. 애플(Apple)도 라이선스를 취득하여, 애플 II나 애플 III로 이식되었다.
일본에서는 1979년에 샤프(Sharp)제 MZ 시리즈용으로 "Tiny PASCAL PALL"로 발매되었다.[70]
2. 3. 방언 (Dialects)
래리 테슬러는 리사(Lisa) 개발 과정에서 파스칼 언어에 객체 지향 확장을 추가하여 다중 패러다임 프로그래밍 언어로 만들겠다는 아이디어에 대해 비르트와 서신을 주고받기 시작했다. 이것은 1983년에 소개된 Clascal로 이어졌다. 리사 프로그램이 쇠퇴하고 매킨토시로 대체되면서, 더 발전된 버전이 Object Pascal이라고 명명되었다. 이는 1985년 매킨토시에 MacApp 응용 프로그램 프레임워크의 일부로 도입되었으며, 1990년대 초까지 애플의 주요 개발 언어가 되었다.
Object Pascal 확장은 1989년 버전 5.5 릴리스와 함께 터보 파스칼에 추가되었다.[10] 수년에 걸쳐 Object Pascal은 마이크로소프트 윈도우용 델파이 시스템의 기반이 되었으며, 이는 여전히 윈도우 응용 프로그램을 개발하는 데 사용되며, 다른 시스템으로 코드를 크로스 컴파일할 수 있다. Free Pascal은 자체 그래픽 IDE인 Lazarus를 갖춘 오픈 소스, 크로스 플랫폼 대안이다.
1970년대 말의 개인용 컴퓨터 시스템에서는 애플 II나 Z80 시스템에서 동작하는 UCSD 파스칼이 사용되었다.[72] UCSD 파스칼은 P코드를 사용한 중간 코드 컴파일러로, 문자열 타입, case문의 확장, 유닛을 사용한 Modula-2풍의 분할 컴파일 등을 지원했으며, 언어 외에도 메뉴를 사용한 사용자 인터페이스도 뛰어났다.
그 외에, 디지털 리서치의 Pascal/MT+나 JRT 시스템즈 사의 JRT 파스칼 (일본에서는 라이프보트가 αPascal로서 판매) 등이 판매되었다.
2. 4. 오브젝트 파스칼 (Object Pascal)
리사 개발 과정에서 래리 테슬러는 비르트와 협력하여 파스칼 언어에 객체 지향 확장을 추가, 다중 패러다임 프로그래밍 언어로 발전시켰다. 이 초기 버전은 1983년에 소개된 Clascal이었다. 이후 리사 프로그램이 쇠퇴하고 매킨토시로 대체되면서, 더 발전된 Object Pascal이 탄생했다. Object Pascal은 1985년 MacApp 응용 프로그램 프레임워크의 일부로 매킨토시에 도입되어 1990년대 초까지 애플의 주요 개발 언어로 사용되었다.
1989년, Object Pascal 확장은 터보 파스칼 5.5 버전에 추가되었다.[10] Object Pascal은 마이크로소프트 윈도우용 델파이 시스템의 기반이 되었으며, 현재도 윈도우 응용 프로그램 개발에 사용되고 다른 시스템으로 크로스 컴파일도 가능하다. Free Pascal은 자체 그래픽 IDE인 Lazarus를 갖춘 오픈 소스, 크로스 플랫폼 대안이다.
2. 5. 구현 (Implementations)
최초의 파스칼 컴파일러는 취리히에서 CDC 6000 시리즈 메인프레임 컴퓨터 제품군을 위해 설계되었다. 니클라우스 비르트는 1969년에 FORTRAN 66으로 구현하려 한 첫 번째 시도가 FORTRAN 66의 복잡한 데이터 구조를 표현하는 능력 부족으로 실패했다고 보고했다.[11] 두 번째 시도는 C와 유사한 언어(Max Engeli의 Scallop)로 구현된 다음, 부트스트랩을 위해 수동으로(R. Schild에 의해) 파스칼 자체로 번역되었다.[11] 1970년 중반까지 운영되었다.
그 이후 많은 파스칼 컴파일러는 셀프 호스팅되었는데, 즉 컴파일러가 파스칼 자체로 작성되었고, 언어에 새로운 기능이 추가되거나 컴파일러를 새로운 환경으로 이식하려는 경우 컴파일러가 일반적으로 자체를 다시 컴파일할 수 있었다. GNU 파스칼 컴파일러는 C로 작성되었다는 점에서 주목할 만한 예외이다.
CDC 파스칼 컴파일러를 다른 메인프레임으로 성공적으로 이식한 최초의 사례는 1972년 벨파스트 퀸스 대학교(QUB)의 Welsh와 Quinn에 의해 완료되었다. 대상은 인터내셔널 컴퓨터 리미티드(ICL) 1900 시리즈였다. 이 컴파일러는 다시 정보 컴퓨터 시스템(ICS) Multum 미니컴퓨터용 파스칼 컴파일러의 상위 컴파일러였다. Multum 이식은 파스칼을 시스템 프로그래밍 언어로 사용하기 위해, 글래스고 대학교의 컴퓨팅 과학과에서 Findlay, Cupples, Cavouras, Davis에 의해 개발되었다. 1973년 여름에 완성된 Multum 파스칼이 최초의 16비트 구현이었을 것으로 생각된다.
QUB의 Welsh 등은 1977년에 완전히 새로운 컴파일러를 완성했다. 이 컴파일러는 글래스고 대학교의 Findlay와 Watt에 의해 구현된 소스 언어 진단 기능(프로파일링, 추적 및 유형 인식 형식의 사후 덤프 포함)을 제공했다. 이 구현은 1980년 사우스햄턴 대학교와 글래스고 대학교를 기반으로 한 팀에 의해 ICL 2900 시리즈로 이식되었다. 표준 파스칼 모델 구현 역시 이 컴파일러를 기반으로 했으며, 1984년 맨체스터 대학교의 Welsh와 Hay에 의해 BSI 6192/ISO 7185 표준과의 일치성을 엄격하게 확인하고 이식 가능한 추상 머신용 코드를 생성하도록 조정되었다.
북미에서 작성된 최초의 파스칼 컴파일러는 도널드 B. 길리스 하에 일리노이 대학교 어바나-샴페인에서 PDP-11용으로 제작되었으며 네이티브 머신 코드를 생성했다.
1972년부터 1974년까지 취리히 연방 공과대학교에서 작성된 Pascal-P[68]는 파스칼에서 P 코드로의 컴파일러와 P 코드 인터프리터로 구성된 중간 언어 컴파일러였으며, 역시 파스칼 자체로 작성되었다. 이로 인해, 이후 Java가 서로 다른 아키텍처의 컴퓨터로 이식된 것과 마찬가지로, 많은 컴퓨터로의 이식이 진행되었다. Pascal-P에는 Pascal-P1, Pascal-P2, Pascal-P3, Pascal-P4의 4가지 버전이 있지만, 모두 파스칼의 서브셋 구현이었다.
1975년에 니클라우스 비르트가 인터프리터인 Pascal-S[69]를 작성했다.
같은 해 1975년에 캘리포니아 공과대학교에서 파스칼을 병렬 동작용으로 확장한 Concurrent Pascal이 개발되었다.
1978년에 캘리포니아 대학교 샌디에이고(UCSD)에서 Pascal-P2를 기반으로 한 UCSD 파스칼이 개발되었다. 애플(Apple)도 라이선스를 취득하여, 애플 II나 애플 III로 이식되었다.
일본에서는 1979년에 샤프(Sharp)제 MZ 시리즈용으로 "Tiny PASCAL PALL"로 발매되었다[70]。
1970년대 말의 개인용 컴퓨터 시스템에서는 애플 II나 Z80 시스템에서 동작하는 UCSD 파스칼이 사용되었다.[72]
그 외에, 디지털 리서치의 Pascal/MT+나 JRT 시스템즈 사의 JRT 파스칼 등이 판매되었다.
2019년 현재 사용 가능한 주요 파스칼 구현은 다음과 같다.
파스칼은 절차적 프로그래밍 언어이며, `if`, `then`, `else`, `while`, `for`, `case`와 같은 예약어를 포함하는 전통적인 ALGOL과 유사한 제어 구조를 가지고 있다. 이러한 제어 구조는 단일 문장 또는 `begin`-`end` 문장 블록에 걸쳐 사용된다.[24] 파스칼은 원본 ALGOL 60의 타입 시스템에 포함되지 않았던 레코드, 변형, 포인터, 열거형, 집합, 프로시저 포인터와 같은 자료 구조 관련 구문도 가지고 있다. 이러한 구문은 부분적으로 Simula 67, ALGOL 68, 니클라우스 비르트의 ALGOL W 및 C. A. R. 호어의 제안에서 상속되거나 영감을 받았다.
3. 언어 구성
파스칼 프로그램은 외부 파일 설명자 목록을 매개변수로 하는 `program` 키워드로 시작한다.(터보 파스칼 등에서는 필요하지 않음) 그 다음에는 `begin` 및 `end` 키워드로 묶인 주요 블록이 이어진다. 세미콜론은 문장을 구분하고, 마침표는 전체 프로그램(또는 ''유닛'')을 끝낸다. 파스칼 소스 코드에서는 대소문자를 구분하지 않는다.
다음은 매우 간단한 "Hello, World!" 프로그램의 소스 코드 예시이다.
:
program HelloWorld(output);
begin
WriteLn('Hello, World!')
{블록의 마지막 문 뒤에는 ";"가 필요하지 않음 -
하나를 추가하면 컴파일러가 무시하는 "null 문"이 프로그램에 추가됨}
end.
모든 이름, 상수, 타입, 변수, 서브루틴은 사용 전에 정의되어야 한다. 포인터를 사용한 리스트와 같은 타입 정의나, 서로 서브루틴을 호출하는 경우에는 예외적인 구문을 사용해야 한다. 포인터에 한해서는 참조되는 타입의 정의 전에 그 타입을 참조하는 정의가 가능했다. 또한 서브루틴의 정의 부분만 먼저 기술하는 방법으로 해결했다.
ALGOL에서 유래된 제어 구조, 서브루틴 안에 그 서브루틴 내에서만 보이는 로컬 변수, 그 서브루틴 내에서만 호출할 수 있는 서브루틴 등을 정의할 수 있다는 스코프 개념과 재귀적 구문 구조(블록 구조라고 부름), 정적 스코프에 의한 참조의 국소화 기능을 가진다. 게다가 풍부한 데이터 타입과 COBOL에서 볼 수 있는 구조체를 포함하는 새로운 데이터 타입을 정의할 수 있다는 특징도 가지고 있다. 레코드 타입과 포인터를 이용하여 리스트, 트리와 같은 데이터 구조를 자유롭게 구축할 수 있다.
파스칼에서 주목할 만한 점은 변수 선언을 "변수명, 타입명" 순서로 한 표기법이다. 파스칼에서는 "var x : int
"와 같이 "변수명 타입명" 순서로 기술한다.
3. 1. 기본 개념
파스칼은 절차적 프로그래밍 언어이며, if
, then
, else
, while
, for
, case
와 같은 예약어를 포함하는 전통적인 ALGOL과 유사한 제어 구조를 가지고 있다. 단일 문장 또는 begin
-end
문장 블록에 걸쳐 사용된다.[24] 파스칼은 원본 ALGOL 60의 타입 시스템에 포함되지 않은 레코드, 변형, 포인터, 열거형, 집합, 프로시저 포인터와 같은 자료 구조 구문도 가지고 있다. 이러한 구문은 부분적으로 Simula 67, ALGOL 68, 니클라우스 비르트의 ALGOL W 및 C. A. R. 호어의 제안에서 상속되거나 영감을 받았다.
파스칼 프로그램은 외부 파일 설명자 목록을 매개변수로 하는 program
키워드로 시작한다.[24] (터보 파스칼 등에서는 필요하지 않음). 그 다음에는 begin
및 end
키워드로 묶인 주요 블록이 이어진다. 세미콜론은 문장을 구분하고, 마침표는 전체 프로그램(또는 ''유닛'')을 끝낸다. 파스칼 소스 코드에서는 대소문자를 구분하지 않는다.
다음은 매우 간단한 "Hello, World!" 프로그램의 소스 코드 예시이다.
:
program HelloWorld(output);
begin
WriteLn('Hello, World!')
{블록의 마지막 문 뒤에는 ";"가 필요하지 않음 -
하나를 추가하면 컴파일러가 무시하는 "null 문"이 프로그램에 추가됨}
end.
모든 이름, 상수, 타입, 변수, 서브루틴은 사용 전에 정의되어야 한다. 포인터를 사용한 리스트와 같은 타입 정의나, 서로 서브루틴을 호출하는 경우에는 예외적인 구문을 사용해야 한다. 포인터에 한해서는 참조되는 타입의 정의 전에 그 타입을 참조하는 정의가 가능했다. 또한 서브루틴의 정의 부분만 먼저 기술하는 방법으로 해결했다.
ALGOL에서 유래된 제어 구조, 서브루틴 안에 그 서브루틴 내에서만 보이는 로컬 변수, 그 서브루틴 내에서만 호출할 수 있는 서브루틴 등을 정의할 수 있다는 스코프 개념과 재귀적 구문 구조(블록 구조라고 부름), 정적 스코프에 의한 참조의 국소화 기능을 가진다. 게다가 풍부한 데이터 타입과 COBOL에서 볼 수 있는 구조체를 포함하는 새로운 데이터 타입을 정의할 수 있다는 특징도 가지고 있다. 레코드 타입과 포인터를 이용하여 리스트, 트리와 같은 데이터 구조를 자유롭게 구축할 수 있다.
파스칼에서 주목할 만한 점은 변수 선언을 "변수명, 타입명" 순서로 한 표기법이다. 파스칼에서는 "var x : int
"와 같이 "변수명 타입명" 순서로 기술한다.
3. 2. 자료 구조
파스칼은 정수, 실수, 부울, 문자, 집합, 배열, 레코드, 포인터 등 다양한 자료형을 지원한다. 형(type)은 다음과 같이 선언을 통해 다른 형으로부터 정의될 수 있다.
```pascal
type
x = Integer;
y = x;
```
또한, 다음과 같이 복잡한 형은 단순한 형으로 구성할 수 있다.
```pascal
type
a = Array [1..10] of Integer;
b = record
x: Integer;
y: Char
end;
c = File of a;
3. 2. 1. 기본 자료형
파스칼에서 자료형 선언은 해당 자료형의 변수가 저장할 수 있는 값의 범위를 정의하는 데 사용된다. 또한 해당 자료형의 변수에 대해 수행할 수 있는 일련의 연산을 정의한다. 미리 정의된 자료형은 다음과 같다.
자료형 | 변수가 저장할 수 있는 값의 유형 |
---|---|
정수 | 정수 |
실수 | 부동 소수점 숫자 |
부울 | 참 또는 거짓 값 |
문자 | 정렬된 문자 집합의 단일 문자 |
집합 | 부울 값의 배열과 동일 |
배열 | 앞의 모든 자료형 또는 레코드의 셀 수 있는 그룹 |
레코드 | 앞의 모든 자료형의 모음 |
문자열 | 문자의 시퀀스. 문자열은 시작 인덱스가 1인 "char의 팩 배열"로 선언되며, 문자열 상수를 할당할 수 있고, 개별 문자는 배열의 요소로 접근할 수 있다. |
기본 자료형(부울 제외)에 허용되는 값의 범위는 구현에 따라 정의된다. 자료 변환을 위한 함수가 제공된다. real영어을 integer영어로 변환하기 위해 round영어 (은행가 반올림을 사용하여 정수로 반올림) 및 trunc영어 (0으로 반올림) 함수를 사용할 수 있다.
프로그래머는 파스칼의 자료형 선언 기능을 사용하여 미리 정의된 자료형을 기준으로 다른 자료형(예: 바이트, 문자열 등)을 정의할 수 있다. 예를 들면 다음과 같다.
:
type
byte = 0..255;
signed_byte = -128..127;
string = packed array[1..255] of char;
바이트 및 문자열과 같이 자주 사용되는 자료형은 많은 구현에서 이미 정의되어 있다.
일반적으로 시스템은 데이터를 저장하기 위해 워드를 사용한다. 예를 들어, 자료형은 8비트 값이 아닌 기계 정수(예: 32비트)에 저장될 수 있다. 파스칼에는 기본 저장 자료형을 더 세분화하여 정의할 수 있는 언어 요소가 포함되어 있지 않다. 이 기능은 여러 파스칼 확장 및 후속 언어에 포함되었으며, 모듈라-2와 같은 다른 언어는 16비트 정수와 같은 대부분의 기계 자료형을 다루도록 내장 세트를 확장했다.
키워드는 컴파일러에게 구조화된 자료형(집합, 배열 및 레코드)에 대해 각 요소에 하나의 워드를 사용하는 대신 가장 효율적인 저장 방법을 사용하도록 지시한다. 패킹은 워드의 일부에 쉽게 접근할 수 없는 시스템에서는 접근 속도를 늦출 수 있다.
3. 2. 2. 부분 범위
pascalvar
x : 1..10;
y : 'a'..'z';
```
순서형 자료형(실수를 제외한 모든 단순형)의 부분 범위를 위와 같이 정의할 수 있다.[16]
3. 2. 3. 집합
파스칼은 다른 프로그래밍 언어와 달리 집합 형식을 지원한다.[25]```pascal
var
Set1 : set of 1..10;
Set2 : set of 'a'..'z';
```
집합은 현대 수학의 기본적인 개념이며, 많은 알고리즘에서 사용될 수 있다. 이러한 기능은 유용하며 집합을 지원하지 않는 언어의 동등한 구조보다 더 빠를 수 있다. 예를 들어, 많은 파스칼 컴파일러에서 다음 코드는:
```pascal
if i in [5..10] then ...
```
다음 코드보다 더 빠르게 실행된다:
```pascal
if (i > 4) and (i < 11) then ...
```
연속되지 않은 값들의 집합은 성능과 가독성 측면에서 특히 유용할 수 있다:
```pascal
if i in [0..3, 7, 9, 12..15] then ...
```
작은 도메인에 대한 집합과 관련된 이러한 예시들의 경우, 향상된 성능은 일반적으로 컴파일러가 집합 변수를 비트 벡터로 표현함으로써 달성된다. 그런 다음 집합 연산자는 비트 단위의 기계어 연산으로 효율적으로 구현될 수 있다.
3. 2. 4. 배열
파스칼은 정적 배열만을 지원한다. 즉, 컴파일할 때 배열의 크기가 결정되며 실행 중에는 크기를 변경할 수 없다.[12] 이는 실제 프로그램에서 실행 시점에 크기가 결정되는 경우가 많다는 점을 고려하면 단점으로 작용한다. 델파이와 같은 일부 파스칼 확장에서는 가변 크기 배열을 지원하기도 하지만, 후발 프로그래밍 언어들은 대부분 실행 중에 크기를 변경할 수 있는 동적 배열을 지원한다.3. 2. 5. 레코드
파스칼에서는 여러 자료형을 묶어 새로운 자료형을 만들 수 있는데, 이를 레코드라고 한다.- 예시:
```pascal
type
car = record
length: integer;
width: integer
end;
```
위의 예시는 `car`라는 레코드를 정의한 것으로, `length`와 `width`라는 두 개의 정수형 필드를 가지고 있다.
레코드 내의 필드들은 서로 다른 공간을 차지한다. 그러나, 공간 절약을 위해 여러 필드가 공간을 공유하는 변형 레코드를 만들 수도 있다.
- 예시:
```pascal
type
Shape = (Circle, Square, Triangle);
Dimensions = record
case Figure: Shape of
Circle: (Diameter: real);
Square: (Width: real);
Triangle: (Side: real; Angle1, Angle2: 0..360)
end;
```
위의 예시에서 `Dimensions` 레코드는 `Figure` 필드의 값에 따라 다른 필드를 가진다. 예를 들어, `Figure`가 `Circle`이면 `Diameter` 필드만, `Square`이면 `Width` 필드만, `Triangle`이면 `Side`, `Angle1`, `Angle2` 필드를 가진다.
3. 2. 6. 포인터
파스칼은 포인터 사용을 지원한다.type
pNode = ^Node;
Node = record
a : integer;
b : char;
c : pNode;
end;
var
NodePtr : pNode;
IntPtr : ^integer;
여기서 변수 `NodePtr`은 레코드인 데이터 타입 `Node`에 대한 포인터이다. 포인터는 선언되기 전에 사용될 수 있는데, 이는 사용 전에 반드시 선언되어야 한다는 규칙에 대한 예외인 전방 선언이다.
새로운 레코드를 생성하고 레코드의 필드 `a`와 `b`에 값 `10`과 문자 `A`를 할당하고, 포인터 `c`를 널 포인터(NIL)로 초기화하려면 다음 문장을 사용한다.
new(NodePtr);
NodePtr^.a := 10;
NodePtr^.b := 'A';
NodePtr^.c := nil;
다음과 같이 `with` 문을 사용하여 이 작업을 수행할 수도 있다.
new(NodePtr);
with NodePtr^ do
begin
a := 10;
b := 'A';
c := nil;
end;
`with` 문의 범위 내에서 `a`와 `b`는 레코드 포인터 `NodePtr`의 하위 필드를 참조하며 레코드 `Node` 또는 포인터 타입 `pNode`를 참조하지 않는다.
연결 리스트, 스택, 큐는 레코드에 포인터 타입 필드(c)를 포함하여 생성할 수 있다.
포인터를 특징으로 하는 많은 언어와 달리, 파스칼은 익명으로 동적으로 생성된 변수만 포인터가 참조하도록 허용하며, 표준 정적 또는 지역 변수를 참조하도록 허용하지 않는다. 또한 포인터는 연관된 타입을 가져야 하며, 한 타입에 대한 포인터는 다른 타입에 대한 포인터와 호환되지 않는다(예: `char`에 대한 포인터는 `integer`에 대한 포인터와 호환되지 않음). 이는 특히 PL/I 또는 C에 사용되는 다른 포인터 구현에 내재된 타입 보안 문제를 제거하는 데 도움이 된다. 또한 댕글링 포인터로 인한 일부 위험을 제거하지만, `dispose` 함수를 사용하여 참조된 공간을 동적으로 할당 해제하는 기능(이는 C에서 찾을 수 있는 `free` 라이브러리 함수와 동일한 효과가 있음)은 자동 가비지 컬렉션을 제공하는 Java 및 C#과 같은 언어에서와 같이 댕글링 포인터의 위험이 제거되지 않았음을 의미한다[26]. 하지만, 메모리 누수와 관련된 문제는 제거하지 않는다.
이러한 제한 중 일부는 최신 방언에서 해제될 수 있다.
3. 2. 7. 파일
파스칼에서 파일은 구성 요소의 시퀀스로 처리된다.:
type
a = file of integer;
b = record
x : integer;
y : char
end;
c = file of b;
위의 예제에서 보듯이 파스칼 파일은 구성 요소의 시퀀스이다. 모든 파일에는 ''f^''로 표시되는 버퍼 변수가 있다. ''get''(읽기) 및 ''put''(쓰기) 프로시저는 버퍼 변수를 다음 요소로 이동시킨다. ''read(f, x)''는 ''x := f^; get(f);''와 동일하고, ''write(f, x)''는 ''f^ := x; put(f);''와 동일하다. type 는 char 파일로 사전 정의되어 있다. 버퍼 변수는 사용될 다음 문자를 검사하는 데 사용될 수 있지만(정수를 읽기 전에 숫자를 확인), 이는 초기 구현에서 대화형 프로그램에 심각한 문제를 야기했지만, 나중에 "lazy I/O" 개념으로 해결되었다. 이 개념은 파일 연산을 수행하기 전에 파일 버퍼 변수에 실제로 접근할 때까지 기다린다.
3. 3. 제어 구조
pascalwhile a <> b do WriteLn('대기 중');
if a > b then WriteLn('조건 충족') {else 앞에 세미콜론은 허용되지 않음}
else WriteLn('조건 미충족');
for i := 1 to 10 do {다음 문을 분리하므로 여기에 세미콜론은 없음}
WriteLn('반복: ', i);
repeat
a := a + 1
until a = 10;
case i of
0 : Write('영');
1 : Write('일');
2 : Write('이');
3,4,5,6,7,8,9,10: Write('?')
end;
```
주어진 결과물은 파스칼 코드 예제로, 위키텍스트 문법과는 직접적인 관련이 없습니다. 따라서 위키텍스트 문법 관련 수정 사항은 없습니다. 다만, 다음 사항을 고려할 수 있습니다.
- 코드 하이라이팅: `
` 태그를 사용하여 코드를 감싸면 가독성을 높일 수 있습니다. (이미 원본 소스에 적용되어 있음) - 주석: 코드 내 주석은 파스칼 문법을 따르므로 그대로 유지합니다.
- 내용 설명: 필요하다면 코드 예제 앞뒤에 설명을 추가할 수 있습니다. (현재는 코드만으로 구성되어 있음)
결론적으로, 주어진 결과물은 이미 파스칼 코드로서의 형식은 잘 갖추고 있으며, 위키텍스트 문법 오류는 없습니다. 코드 하이라이팅은 이미 적용되어 있으므로, 추가적인 수정 없이 그대로 출력해도 무방합니다.
3. 4. 절차 및 함수
파스칼은 프로그램을 프로시저(procedure)와 함수(function)로 구조화한다. 프로시저는 부수 효과를 위해 사용하고, 함수는 값을 반환하기 위해 사용한다.[13] 프로시저와 함수는 임의의 깊이로 중첩될 수 있으며, 'program' 구조는 논리적인 최외곽 블록이다.기본적으로 매개변수는 값으로 전달된다. 매개변수 이름 앞에 'var'가 오면 참조로 전달된다.
각 프로시저 또는 함수는 자체적인 goto 레이블, 상수, 유형, 변수, 기타 프로시저 및 함수의 선언을 가질 수 있으며, 이러한 선언은 모두 해당 순서대로 이루어져야 한다. 이러한 순서 지정은 원래 효율적인 단일 패스 컴파일을 허용하기 위한 것이었다. 그러나 델파이와 같은 일부 방언에서는 선언 섹션의 엄격한 순서 지정 요구 사항이 완화되었다.[27]
다음은 파스칼 프로그램의 예시이다.
program mine(output);
var i : integer;
procedure print(var j: integer);
function next(k: integer): integer;
begin
next := k + 1
end;
begin
writeln('The total is: ', j);
j := next(j)
end;
begin
i := 1;
while i <= 10 do print(i)
end.
4. 개발 도구
델파이, Free Pascal IDE, 라자루스 등에서 델파이 언어로 불리는 변종 오브젝트 파스칼을 개발할 수 있다. 볼랜드 파스칼이라 불리는 델파이 이전의 오브젝트 파스칼은 터보 파스칼, 프리 파스칼 IDE에서 개발할 수 있다.[28]
일반 사용자가 사용 가능한 파스칼 컴파일러 및 인터프리터는 다음과 같다.
이름 | 설명 |
---|---|
델파이 | 엠바카데로(구 볼랜드/코드기어)의 주력 빠른 애플리케이션 개발 (RAD) 제품이다. 파스칼에서 파생된 Object Pascal 언어를 사용하며, 윈도우, macOS, iOS, 안드로이드용 애플리케이션을 만든다. |
Free Pascal | 크로스 플랫폼 컴파일러로 Object Pascal로 작성되었다. 터보 파스칼, 델파이, Mac Pascal과의 호환 모드를 지원하며, 자체 절차적 및 객체 지향 구문 모드도 가지고 있다. |
Turbo51 | Intel 8051 마이크로컨트롤러 제품군을 위한 무료 파스칼 컴파일러로, 터보 파스칼 7 구문을 사용한다. |
Oxygene | .NET 및 모노 플랫폼용 Object Pascal 컴파일러이다. |
Kylix | 델파이의 후손으로, 리눅스 운영 체제와 향상된 객체 라이브러리를 지원했으나, 현재는 지원되지 않는다. |
GNU 파스칼 컴파일러(GPC) | GNU 컴파일러 모음 (GCC)의 파스칼 컴파일러이다. ANSI/ISO 표준 언어를 지원하며, 부분적인 터보 파스칼 방언을 지원한다. |
Virtual Pascal | Borland Pascal 구문과 호환되는 네이티브 OS/2 컴파일러로 만들어졌으며, Win32, OS/2, 리눅스용으로 컴파일할 수 있다. Borland Pascal 및 델파이와 대부분 호환되지만, 2005년에 개발이 중단되었다. |
Pascal-P4 | 많은 후속 파스칼 구현 파스칼 컴파일러의 기반이 된 컴파일러이다. |
Pascal-P5 | Pascal-P4를 ISO 7185(전체 파스칼)에 적용한 것이다. |
Smart Mobile Studio | 파스칼을 HTML5/자바스크립트 컴파일러로 변환한다. |
터보 파스칼 | 1980년대와 1990년대 초반에 PC용 주류 파스칼 컴파일러였으며, 매우 짧은 컴파일 시간으로 인기를 끌었다. 현재 구 버전은 볼랜드 사이트에서 무료로 다운로드할 수 있다. |
IP Pascal | 파스칼 계산기에서 이름을 따온 "Pascaline" 언어를 구현하며, ISO 7185에 따른 원래 파스칼과 호환되는 고도로 확장된 파스칼이다. |
Pascal-XT | 지멘스에서 자사의 메인프레임 운영 체제 BS2000 및 SINIX를 위해 제작했다. |
PocketStudio | Palm OS 및 MC68xxx 프로세서용 파스칼 서브셋 컴파일러 및 RAD 도구이다. |
MIDletPascal | 모바일을 위한 소프트웨어를 생성하도록 특별히 설계된 작고 빠른 Java 바이트코드를 생성하는 파스칼 컴파일러 및 IDE이다. |
Vector Pascal | MMX 및 AMD 3d Now와 같은 SIMD 명령 집합용 언어이다. |
Morfik Pascal | Object Pascal로 완전히 작성된 웹 애플리케이션 개발을 허용한다. |
WDSibyl | Win32 및 OS/2용 비주얼 개발 환경 및 파스칼 컴파일러이다. |
PP Compiler | 휴대용 컴퓨터에서 직접 실행되는 Palm OS용 컴파일러. |
OpenVMS용 VSI 파스칼 | OpenVMS 시스템에서 실행되는 파스칼 컴파일러이다.[32] |
Stony Brook Pascal+ | DOS 및 OS/2용 16비트(나중에 32비트) 최적화 컴파일러이다. |
4. 1. 컴파일러
엠바카데로 사의 델파이와 카일릭스는 파스칼의 직계 후손이라 할 수 있는 오브젝트 파스칼을 사용한다.[11] 델파이 7 버전부터는 델파이라는 말을 사용하기도 한다. 오픈 소스로 제작된 프리 파스칼이나 GNU 파스칼도 있다. 델파이 언어로 불리는 변종 오브젝트 파스칼은 델파이, 프리 파스칼 IDE, 라자루스 등에서 개발할 수 있다. 볼랜드 파스칼이라 불리는 델파이 이전의 오브젝트 파스칼은 터보 파스칼, 프리 파스칼 IDE에서 개발할 수 있다.다수의 파스칼 컴파일러와 인터프리터가 일반 사용자를 위해 사용 가능하다.
- 델파이는 엠바카데로(구 볼랜드/코드기어)의 주력 빠른 애플리케이션 개발 (RAD) 제품이다. 파스칼에서 파생된 Object Pascal 언어(볼랜드에서 '델파이'라고 명명)를 사용하여 윈도우, macOS, iOS, 안드로이드용 애플리케이션을 만든다.
- Free Pascal은 크로스 플랫폼 컴파일러로 Object Pascal로 작성되었으며 (자체 호스팅이다). 터보 파스칼, 델파이, Mac Pascal과의 호환 모드를 가지고 있다.
- Turbo51은 Intel 8051 마이크로컨트롤러 제품군을 위한 무료 파스칼 컴파일러로, 터보 파스칼 7 구문을 사용한다.
- GNU 파스칼 컴파일러(GPC)는 GNU 컴파일러 모음 (GCC)의 파스칼 컴파일러이다. GNU 일반 공중 사용 허가서에 따라 배포되며, 많은 플랫폼과 운영 체제에서 실행된다.
- Virtual Pascal은 Borland Pascal 구문과 호환되는 네이티브 OS/2 컴파일러로 만들었다. Win32, OS/2, 리눅스용으로 컴파일할 수 있으며, Borland Pascal 및 델파이와 대부분 호환된다.
- Pascal-P4 컴파일러는 많은 후속 파스칼 구현 파스칼 컴파일러의 기반이 되었다.
- Smart Mobile Studio는 파스칼을 HTML5/자바스크립트 컴파일러로 변환한다.
- 터보 파스칼은 1980년대와 1990년대 초반에 PC용 주류 파스칼 컴파일러였으며, 강력한 확장 기능과 매우 짧은 컴파일 시간으로 인기를 끌었다.
- IP Pascal은 파스칼 계산기에서 이름을 따온 "Pascaline" 언어를 구현하며, ISO 7185에 따른 원래 파스칼과 호환되는 고도로 확장된 파스칼이다.
- Pascal-XT는 지멘스에서 자사의 메인프레임 운영 체제 BS2000 및 SINIX를 위해 제작했다.
- MIDletPascal – 모바일을 위한 소프트웨어를 생성하도록 특별히 설계된 작고 빠른 Java 바이트코드를 생성하는 파스칼 컴파일러 및 IDE이다.
- Vector Pascal은 MMX 및 AMD 3d Now와 같은 SIMD 명령 집합용 언어로, 모든 인텔 및 AMD 프로세서, 소니의 플레이스테이션 2 Emotion Engine을 지원한다.
- Oxygene (이전 이름: ''Chrome'')은 .NET 및 모노 플랫폼용 Object Pascal 컴파일러이다.
- Kylix는 델파이의 후손으로, 리눅스 운영 체제와 향상된 객체 라이브러리를 지원했다.
2019년 현재 많은 플랫폼에 다양한 파스칼 구현이 존재한다.
- AVRco[48] - 마이크로프로세서용 파스칼.
- Delphi - 현재 가장 주류인 파스칼.
- DWScript[49] - Delphi용 스크립트 엔진.
- Free Pascal - 오픈 소스 파스칼.
- GNU Pascal - 오픈 소스 파스칼.
- IP Pascal [50] - 표준 파스칼을 기반으로 확장된 파스칼.
- mikropascal[51] - 마이크로프로세서용 파스칼.
- Modern Pascal[52] - Free Pascal로 작성된 멀티 플랫폼 인터프리터 및 P-Code 컴파일러.
- NewPascal[53] - Lazarus / Free Pascal의 포크.
- Open Sibyl[54] - Speedsoft Sibyl의 오픈 소스 구현.
- Oxygene - .NET 용 Object Pascal.
- PascalABC.NET[55] - .NET 용 Object Pascal.
- Pascal Script[56] - Delphi 또는 Free Pascal 프로젝트 내에서 사용할 수 있는 스크립트 엔진.
- Pascal-P5[57] - 표준 파스칼을 준수하는 풀세트 Pascal-P.
- PICco[58] - 마이크로프로세서용 파스칼.
- THINK Pascal[59] - Classic MacOS 용 4.5d4가 무상 공개.
- Turbo Rascal[60] - Commodore 64/128, VIC-20, Nintendo 패밀리 컴퓨터용 크로스 컴파일러.
- Turbo51[61] - 8051 마이크로프로세서용 파스칼.
- Ultibo[62] - Raspberry Pi 베어 메탈 프로그래밍 환경 (Lazarus / Free Pascal의 사용자 지정).
- Vector Pascal[63] - MMX 및 AMD 3d Now 등의 SIMD 명령어 세트용 파스칼.
- Virtual Pascal[64] - DOS, Windows, OS/2용.
- WDSibyl[65] - Speedsoft Sibyl의 오픈 소스 구현.
4. 2. 통합 개발 환경 (IDE)
델파이, Free Pascal IDE, 라자루스 등에서 델파이 언어로 불리는 변종 오브젝트 파스칼을 개발할 수 있다. 볼랜드 파스칼이라 불리는 델파이 이전의 오브젝트 파스칼은 터보 파스칼, 프리 파스칼 IDE에서 개발할 수 있다.[28]다음은 일반 사용자가 사용 가능한 파스칼 컴파일러 및 인터프리터의 목록이다.
이름 | 설명 |
---|---|
델파이 | 엠바카데로(구 볼랜드/코드기어)의 주력 빠른 애플리케이션 개발 (RAD) 제품이다. 파스칼에서 파생된 Object Pascal 언어를 사용하며, 윈도우, macOS, iOS, 안드로이드용 애플리케이션을 만든다. |
Free Pascal | 크로스 플랫폼 컴파일러로 Object Pascal로 작성되었다. 터보 파스칼, 델파이, Mac Pascal과의 호환 모드를 지원하며, 자체 절차적 및 객체 지향 구문 모드도 가지고 있다. |
Turbo51 | Intel 8051 마이크로컨트롤러 제품군을 위한 무료 파스칼 컴파일러로, 터보 파스칼 7 구문을 사용한다. |
Oxygene | .NET 및 모노 플랫폼용 Object Pascal 컴파일러이다. |
Kylix | 델파이의 후손으로, 리눅스 운영 체제와 향상된 객체 라이브러리를 지원했으나, 현재는 지원되지 않는다. |
GNU 파스칼 컴파일러(GPC) | GNU 컴파일러 모음 (GCC)의 파스칼 컴파일러이다. ANSI/ISO 표준 언어를 지원하며, 부분적인 터보 파스칼 방언을 지원한다. |
Virtual Pascal | Borland Pascal 구문과 호환되는 네이티브 OS/2 컴파일러로 만들어졌으며, Win32, OS/2, 리눅스용으로 컴파일할 수 있다. Borland Pascal 및 델파이와 대부분 호환되지만, 2005년에 개발이 중단되었다. |
Pascal-P4 | 많은 후속 파스칼 구현 파스칼 컴파일러의 기반이 된 컴파일러이다. |
Pascal-P5 | Pascal-P4를 ISO 7185(전체 파스칼)에 적용한 것이다. |
Smart Mobile Studio | 파스칼을 HTML5/자바스크립트 컴파일러로 변환한다. |
터보 파스칼 | 1980년대와 1990년대 초반에 PC용 주류 파스칼 컴파일러였으며, 매우 짧은 컴파일 시간으로 인기를 끌었다. 현재 구 버전은 볼랜드 사이트에서 무료로 다운로드할 수 있다. |
IP Pascal | 파스칼 계산기에서 이름을 따온 "Pascaline" 언어를 구현하며, ISO 7185에 따른 원래 파스칼과 호환되는 고도로 확장된 파스칼이다. |
Pascal-XT | 지멘스에서 자사의 메인프레임 운영 체제 BS2000 및 SINIX를 위해 제작했다. |
PocketStudio | Palm OS 및 MC68xxx 프로세서용 파스칼 서브셋 컴파일러 및 RAD 도구이다. |
MIDletPascal | 모바일을 위한 소프트웨어를 생성하도록 특별히 설계된 작고 빠른 Java 바이트코드를 생성하는 파스칼 컴파일러 및 IDE이다. |
Vector Pascal | MMX 및 AMD 3d Now와 같은 SIMD 명령 집합용 언어이다. |
Morfik Pascal | Object Pascal로 완전히 작성된 웹 애플리케이션 개발을 허용한다. |
WDSibyl | Win32 및 OS/2용 비주얼 개발 환경 및 파스칼 컴파일러이다. |
PP Compiler | 휴대용 컴퓨터에서 직접 실행되는 Palm OS용 컴파일러. |
OpenVMS용 VSI 파스칼 | OpenVMS 시스템에서 실행되는 파스칼 컴파일러이다.[32] |
Stony Brook Pascal+ | DOS 및 OS/2용 16비트(나중에 32비트) 최적화 컴파일러이다. |
5. 표준
1983년 파스칼은 '''ISO 7185'''로 표준화되었으며, 1990년에 개정되었다. 이에 대응하는 일본 규격은 JIS X 3008-1990이며, 1994년에 개정되었다.[71] 표준 파스칼에는 레벨 0과 레벨 1이 있으며, 레벨 1은 길이가 다른 배열을 인수로 사용할 수 있는 일관 배열을 지원한다.[71] 1991년에는 확장 규격 '''ISO/IEC 10206'''이 제정되었고, 1993년의 객체 지향 확장 규격은 초안으로 끝났다.
5. 1. ISO/IEC 7185:1990 Pascal
1983년 파스칼은 '''ISO 7185'''로 표준화되었으며, 1990년에 개정되었다. 이에 대응하는 일본 규격은 JIS X 3008-1990이며, 1994년에 개정되었다.[71] 표준 파스칼에는 레벨 0과 레벨 1이 있으며, 레벨 1은 길이가 다른 배열을 인수로 사용할 수 있는 일관 배열을 지원한다.[71] 1991년에는 확장 규격 '''ISO/IEC 10206'''이 제정되었고, 1993년의 객체 지향 확장 규격은 초안으로 끝났다.5. 2. ISO/IEC 10206:1990 Extended Pascal
1990년에 확장 파스칼 표준 '''ISO/IEC 10206'''이 제정되었다.[71]5. 3. 기타 변형
엠바카데로 사의 델파이와 카일릭스는 파스칼의 직계 후손이라 할 수 있는 오브젝트 파스칼을 사용한다. 델파이 7 버전부터는 델파이라는 말을 사용하기도 한다.[71] 프리 파스칼이나 GNU 파스칼도 오픈 소스로 제작되었다.1983년에 보렐랜드가 출시한 Turbo Pascal(초기에는 Z80 머신의 CP/M에서 동작)은 매우 빠른 1패스 컴파일러 겸 개발 환경이었다. 이어서 8086 머신용(CP/M-86, MS-DOS)이 출시되었으며, 1980년대 후반 ~ 1990년대 초반에 일반 개인이 소유하는 개인용 컴퓨터 환경으로 가장 많은 수를 차지했던 MS-DOS에서 큰 인기를 얻었다. 빌드 속도가 빨라 "컴파일러는 컴파일 시간이 걸려서 불편하다"는 인식을 충분히 빠른 환경이라면 그다지 신경 쓰이지 않는다는 사실을 보여주며 바꾸었다.
"Turbo Pascal"은 버전을 거듭하면서 모듈 기능과 객체 지향 확장을 더하여 "Pascal 처리계의 구현으로서의 이름"이라기보다는 "Pascal을 확장한 언어의 이름"이 되었다. 객체 지향 확장은 이윽고 Object Pascal이라는 언어로 인식되게 되었다. 보렐랜드는 Object Pascal 개발 환경을 더욱 충실하게 만든 Windows용 제품으로 Delphi를 출시했다.
Turbo Pascal과 Delphi의 성공으로 호환을 표방하는 구현들이 개발되었다. 상용 제품으로는 Speed Pascal, Virtual Pascal, 마이크로소프트의 QuickPascal가 있으며, 프리웨어로는 Free Pascal(구 FPK Pascal)이 광범위한 플랫폼에서 동작한다. ISO 표준 Pascal을 의식한 것으로는 GNU Pascal이 있다. 또한, 보렐랜드 자체가 Delphi를 기반으로 만든 GNU/Linux용 개발 환경인 Kylix도 있다.
초기 Macintosh에는 자체 개발 환경이 없었고, 시스템 개발 및 애플리케이션의 크로스 개발용 플랫폼으로 주로 리사에서 IDE인 Lisa Workshop을 사용했다. 리사의 공식 개발 언어는 파스칼이었기 때문에 Macintosh Toolbox라고 불리는 API에서도 그 호출 방식이 파스칼에 준거한 것이다.
이후 등장한 Macintosh용 자체 개발 환경 Macintosh Programmer's Workshop|Macintosh Programmer's Workshop영어(MPW)에는 비르트와 애플의 래리 테슬러가 이끄는 팀이 개발한 오브젝트 파스칼이 포함되어 있었다.
6. 비판
파스칼 언어는 1983년에 국제 표준 IEC/ISO 7185[34] 및 미국 ANSI/IEEE770X3.97-1983, ISO 7185:1983 등 여러 국가별 표준으로 표준화되었다. 두 표준은 ISO 표준에 실행 시간까지 배열의 경계를 알 수 없는 배열인 적합 배열에 대한 "레벨 1" 확장이 포함되었고, ANSI는 이 확장을 원래 (Wirth 버전) 언어에 허용하지 않았다는 점에서만 달랐다. 1989년, ISO 7185는 원래 문서에서 발견된 다양한 오류와 모호성을 수정하기 위해 개정되었다(ISO 7185:1990).
ISO 7185는 사용자 설명서 및 보고서에 상세히 설명된 Wirth의 1974년 언어에 대한 설명으로 명시되었지만, "적합 배열 매개변수"를 레벨 1로 추가한 것으로도 주목할 만하다. 레벨 0은 적합 배열이 없는 파스칼이었다. 이 추가는 C. A. R. 호어의 요청과 니클라우스 비르트의 승인으로 이루어졌다. 호어는 원래 FORTRAN으로 작성된 NAG 수치 라이브러리의 파스칼 버전을 만들고 싶었지만, 다양한 크기의 배열 매개변수를 허용하는 확장이 없이는 그렇게 할 수 없다는 것을 알았다. ISO 7185에 절차적 및 기능적 매개변수의 매개변수 유형을 지정하는 기능을 포함한 것도 이와 유사한 고려 사항 때문이었다.
니클라우스 비르트는 1974년 언어를 CDC 6000 컴파일러의 기계별 기능과 구별하기 위해 "표준"이라고 언급했다. 파스칼이 처음 등장한 대형 기계(메인프레임 및 미니 컴퓨터)에서는 일반적으로 표준을 따랐지만, IBM 개인용 컴퓨터(IBM PC)에서는 그렇지 않았다. IBM PC에서는 Borland 표준인 터보 파스칼과 델파이가 가장 많은 사용자를 보유하고 있었다. 따라서 특정 구현이 원래 파스칼 언어에 해당하는지, 아니면 Borland 방언에 해당하는지 이해하는 것이 중요했다.
IBM PC 버전의 언어는 인터프리터 방식 구현인 UCSD 파스칼의 출현과 함께 여러 가지 누락 및 변경 사항이 발생하면서 차이를 보이기 시작했다. 많은 UCSD 언어 기능은 Borland 방언을 포함하여 오늘날에도 살아남았다. 케네스 보울스 교수가 주도한 UCSD 파스칼은 파스칼-P2 키트를 기반으로 했기 때문에 파스칼-P 언어의 여러 제한 사항을 공유했다. UCSD 파스칼은 나중에 애플 파스칼로 채택되었고 여러 버전을 거쳐 발전했다. UCSD 파스칼은 파스칼-P 키트의 파스칼 하위 집합을 확장하여 표준 파스칼 구성을 다시 추가했지만, 여전히 완전한 파스칼 표준은 아니었다.
6. 1. 초기 비판
브라이언 커니핸은 그의 기사 "왜 파스칼은 내가 가장 좋아하는 프로그래밍 언어가 아닌가"[74]에서 파스칼의 문제점을 지적했다. 커니핸의 주요 비판 내용은 다음과 같다:- 배열 크기와 문자열 길이가 타입의 일부로 취급되어 융통성이 부족하다.
- 부울 표현식 평가 순서가 예측 불가능하다.
- 라이브러리 지원이 빈약하다.
하지만 이러한 초기 비판에도 불구하고 파스칼은 계속 발전했으며, 커니핸이 지적한 문제점 대부분은 상용 버전의 파스칼에서는 해결되었다.[75][76]
6. 2. 반론
커니핸의 ''Why Pascal is Not My Favorite Programming Language''[74]는 파스칼에 대한 본격적인 비판 글로 알려져 있다.하지만 초기 비판에도 불구하고 파스칼은 계속 발전했으며, 커니핸이 지적한 문제점 대부분은 개선된 언어 버전에서는 해당되지 않는다. 예를 들어, ''The Pascal Programming Language''[75]의 Myth 6절에서는 확장 파스칼의 언어 사양을, ''The Macintosh Programmer's Workshop''[76]에서는 Object Pascal (MPW Pascal)의 언어 사양을 기반으로 초기 비판의 상당 부분이 해결되었다고 언급한다.
확장 파스칼은 가변 길이 문자열, 변수 초기화, 분리 컴파일, 단락(short-circuit) 부울 연산자 등 다양한 기능을 지원하여 초기 비판 사항들을 극복하였다.
7. 한국에서의 파스칼
한국에서 파스칼은 교육 및 소프트웨어 개발 분야에 큰 영향을 미쳤다.
1980년대부터 대학교에서 프로그래밍 교육용으로 파스칼을 널리 사용했으며, 구조적 프로그래밍 개념을 가르치는 데 효과적인 언어로 평가받았다. 그러나 1990년대 이후 C, C++, 자바 등 다른 프로그래밍 언어의 인기가 높아지면서 파스칼의 사용은 점차 줄어들었다.
초기 대한민국 소프트웨어 산업에서 파스칼 기반의 개발 도구들이 사용되기도 했다.
7. 1. 교육 분야
주어진 요약에 따르면, 1980년대부터 대학교 프로그래밍 교육에 파스칼이 널리 사용되었으며, 구조적 프로그래밍 개념을 가르치는 데 효과적인 언어로 평가받았다. 그러나 주어진 원본 소스는 ISO 표준 문서로, 교육 분야에서의 파스칼 사용에 대한 직접적인 정보를 포함하고 있지 않다. 따라서 주어진 원본 소스만을 이용해서는 해당 섹션 내용을 작성할 수 없다.7. 2. 소프트웨어 개발
파스칼은 컴퓨팅 업계에서 비판과 칭찬을 모두 받으며 다양한 반응을 이끌어냈다.8. 영향 및 후계 언어
파스칼은 초기에 니코 하버만과 브라이언 커니핸 등으로부터 많은 비판을 받았다.[43] 하버만은 파스칼의 자료형, 범위, 구조체, goto 등에 대해 제대로 정의되지 않았다고 지적했다.[43] 커니핸은 배열 크기와 문자열 길이가 타입의 일부여서 가변 길이 배열이나 문자열을 매개변수로 받는 함수를 작성할 수 없다는 점을 가장 심각한 문제로 꼽았으며, 이는 정렬 라이브러리 작성을 불가능하게 만들었다고 비판했다.[44] 그는 또한 부울 표현식 평가 순서의 예측 불가능성, 빈약한 라이브러리 지원, 정적 변수 부재 등을 문제점으로 지적했다.[44]
이러한 비판에도 불구하고 파스칼은 계속 발전했으며, 상업용 제품 개발에 적합하도록 개선된 버전에서는 커니핸이 지적한 문제점 대부분이 해결되었다. 그러나 이러한 확장 기능은 컴파일러마다 호환되지 않는 문제가 있었다. 1990년대 초 이후 대부분의 변형은 ISO 및 볼랜드 계열의 두 가지 범주로 축약되었다. 확장 파스칼은 가변 길이 문자열, 변수 초기화, 분리 컴파일, 단락 부울 연산자, case 문에 대한 기본 절 등을 지원하여 초기 비판을 상당 부분 해소했다.[46]
8. 1. 후계 언어
니클라우스 비르트는 파스칼 및 다른 언어의 경험을 바탕으로 파스칼의 후계 언어들을 설계했다. 이 언어들은 파스칼과의 호환성을 유지하는 확장 형태가 아니었기 때문에, 이름에 파스칼을 포함하지 않았다.- Modula-2 - 모듈화 등의 기능을 추가하였다. 비르트는 Modula-2만으로 운영체제를 포함한 시스템을 만들었다.
- Modula-3 - 객체 지향 기능 등을 추가하였다.
- 오베론, 오베론-2 - 언어를 확장하여 강력하게 만드는 것이 아니라, 확장 가능하게 하고 핵심 부분을 작게 하는 방향으로 설계되었다.
파스칼의 영향을 받은 다른 언어 및 구현은 다음과 같다.
- Object Pascal - 객체 지향적 확장
- 델파이 - Object Pascal을 더욱 확장했다. 통합 개발 환경(IDE)을 통한 GUI 앱 개발 지원도 제공되었다.
- Ada - 미국 국방부의 의향으로 제정된 다기능 언어. 파스칼 또는 알골의 영향을 많이 받았지만, 파스칼의 "간결함"과는 정반대로 거대화되는 방향성을 가졌다.[73]
- Eiffel - 구문이 파스칼과 유사하다고도 하는 객체 지향 언어
8. 2. 알고리즘 기술 및 교육
파스칼은 알고리즘 기술 및 교육에 널리 사용되었다. 이전에는 ALGOL이 사용되던 논문이나 학회지 등에서 알고리즘 기술에 ALGOL 대신 파스칼이 사용되게 되었다. 비르트 자신이 쓴 《알고리즘 + 데이터 구조 = 프로그램》을 비롯하여, 에이호, 홉크로프트, 울만의 《데이터 구조와 알고리즘》 등 많은 알고리즘 교과서에서 파스칼이 사용되었다.[43][44][45][46]참조
[1]
웹사이트
About Microsoft's "Delegates"
http://java.sun.com/[...]
[2]
웹사이트
History of Java
http://www.fscript.o[...]
2009-10-16
[3]
웹사이트
A Conversation with James Gosling – ACM Queue
http://queue.acm.org[...]
2015-08-11
[4]
간행물
Obeisance to Pascal, inventor
https://www.worldrad[...]
Dan McMillan
2024-08-13
[5]
서적
Modular Programming Languages
[6]
웹사이트
Hungarian folklore.org
http://www.folklore.[...]
2015-11-18
[7]
웹사이트
Adobe Photoshop Source Code
https://www.computer[...]
2014-05-07
[8]
웹사이트
RAD Studio Application Showcase
https://www.embarcad[...]
2021-10-29
[9]
웹사이트
tiobe.com
http://www.tiobe.com[...]
2012-03-15
[10]
웹사이트
Antique Software: Turbo Pascal v5.5
http://edn.embarcade[...]
2018-05-17
[11]
웹사이트
Computers and Computing. A Personal Perspective.
https://www.inf.ethz[...]
2017-05-10
[12]
웹사이트
cbi.umn.edu
http://www.cbi.umn.e[...]
[13]
보고서
Australian Atomic Energy Commission Research Establishment, Lucas Heights, Nuclear Science and Technology Branch Report, Divisional Research
http://www.iaea.org/[...]
1977
[14]
문서
Crash of the Object-Oriented Pascals
BYTE
1989-07
[15]
문서
The End of Pascal?
BYTE
1990-03
[16]
학술지
An introduction to the scientific computing language Pascal-SC
1987
[17]
학술지
Cadmus jetzt mit Kulisch-Arithmetik - Uni Karlsruhe gibt Pascal-Compiler nach München
http://www.computerw[...]
IDG Business Media GmbH
2016-05-30
[18]
웹사이트
Pascal-XSC: Pascal for Extended Scientific Computing
http://www.rz.uni-ka[...]
[19]
웹사이트
XSC Software
http://www.xsc.de/
2015-08-11
[20]
웹사이트
Universitaet Wuppertal: Wissenschaftliches Rechnen / Softwaretechnologie
http://www2.math.uni[...]
2015-08-11
[21]
서적
Improving Floating-Point Programming
John Wiley & Sons Ltd.
1990
[22]
문서
The SOL Operating System
Usenix Summer '83 Conference
1983-07
[23]
웹사이트
Overview of the CHORUS Distributed Operating Systems
http://www.cs.berkel[...]
[24]
웹사이트
Pascal ISO 7185:1990
http://www.moorecad.[...]
2012-06-17
[25]
서적
Pascal Programming Today
https://archive.org/[...]
West Publishing Company
[26]
문서
Ambiguities and Insecurities in Pascal
Software: Practice and Experience
1977
[27]
웹사이트
Dangling Else
Pascal
2017-03-18
[28]
문서
Pascal-S: A Subset and Its Implementation
Wiley
1979
[29]
웹사이트
VAX-11 Pascal V1.0 User's Guide
http://www.bitsavers[...]
[30]
웹사이트
Interview with a Pascal Architect - Compaq Pascal
http://www.pascal-ce[...]
2022-05-28
[31]
웹사이트
Compaq Pascal Version 5.8 for Tru64 UNIX Software Product Description
http://h30266.www3.h[...]
2022-05-28
[32]
웹사이트
VSI Pascal for OpenVMS Software Product Description
https://vmssoftware.[...]
VSI
2022-02-07
[33]
웹사이트
VSI's John Reagan Interview on GEM vs. LLVM for X86/64
http://blog.ecubesys[...]
2022-02-07
[34]
서적
ISO/IEC 7185:1990 Pascal
http://www.pascal-ce[...]
2014-09-16
[35]
서적
The Programming Language Pascal (Revised Report)
ETH Zürich
1973-07
[36]
서적
Extended Pascal: ISO/IEC 10206:1990
http://www.dcs.gla.a[...]
2014-09-16
[37]
웹사이트
Language standards: Pascal, Extended Pascal, Fortan
http://www.prosperos[...]
2014-09-16
[38]
서적
IEEE/ANSI Standard for the Programming Language Extended Pascal
1990
[39]
웹사이트
Extended Pascal - Free Pascal wiki
https://wiki.freepas[...]
[40]
웹사이트
Virtual Pascal for OS/2
http://www.pascal-ce[...]
2016-04-03
[41]
웹사이트
WDSibyl: Visual Development Environment
http://www.wdsibyl.o[...]
2020-10-15
[42]
웹사이트
netlabs.org – Project: Open Sibyl
http://sibyl.netlabs[...]
2016-04-03
[43]
간행물
Critical comments on the programming language Pascal
http://dx.doi.org/10[...]
1973
[44]
웹인용
"Why Pascal is Not My Favorite Programming Language"
http://www.lysator.l[...]
1981
[45]
문서
More Comments on the Programming Language Pascal
1975
[46]
웹사이트
Extended Pascal
http://pascal-centra[...]
2015-10-17
[47]
웹사이트
A Conversation with James Gosling - ACM Queue
http://queue.acm.org[...]
2015-08-11
[48]
URL
https://www.e-lab.de[...]
[49]
URL
https://www.delphito[...]
[50]
URL
http://www.moorecad.[...]
[51]
URL
https://www.mikroe.c[...]
[52]
URL
http://www.modernpas[...]
[53]
URL
http://newpascal.org[...]
[54]
URL
http://sibyl.netlabs[...]
[55]
URL
http://pascalabc.net[...]
[56]
URL
https://www.remobjec[...]
[57]
URL
http://www.standardp[...]
[58]
URL
https://www.e-lab.de[...]
[59]
URL
http://www.think-pas[...]
[60]
URL
http://www.lemonspaw[...]
[61]
URL
http://turbo51.com/
[62]
URL
https://ultibo.org/
[63]
URL
https://sourceforge.[...]
[64]
URL
http://vpascal.ning.[...]
[65]
URL
https://www.wdsibyl.[...]
[66]
서적
『Pascal』第二版
1981
[67]
서적
『Pascal』第二版
1981
[68]
웹사이트
The PASCAL "P" compiler - implementation notes
https://www.research[...]
2019-03-19
[69]
웹사이트
PASCAL-S - a subset and its implementation
https://www.research[...]
2019-03-19
[70]
뉴스
工学舎 月刊I/O 1979年12月号 PASCAL時代がやってきた! mz-80k用Tiny PASCAL「PALL」全リスト公開
工学舎
1979-12
[71]
간행물
[72]
웹사이트
THE UCSD P-SYSTEM MUSEUM
http://www.threedee.[...]
THE JEFFERSON COMPUTER MUSEUM
2015-08-28
[73]
문서
ホーアの ''The Emperor's Old Clothes''
[74]
URL
https://www.lysator.[...]
[75]
URL
http://pascal-centra[...]
[76]
URL
http://collaboration[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com