파스칼(프로그래밍 언어)

Pascal (programming language)
파스칼
패러다임
가족워스 파스칼
설계자 :니클라우스 워스
첫 등장1970;53년전(1970)
타이핑규율
범위어휘
주요 구현
방언
영향을 받음
영향받은

파스칼(Pascal)은 구조화된 프로그래밍데이터 구조사용하는 좋은 프로그래밍 방식을 장려하기 위한 작고 효율적인 언어로 Niklaus Wirth에 의해 설계된 명령적이고 절차적인 프로그래밍 언어입니다.이 이름은 프랑스의 수학자, 철학자, 물리학자인 블레즈 파스칼의 이름을 따서 지어졌습니다.

파스칼은 알골 60 언어의 패턴을 기반으로 개발되었습니다.Wirth는 ALGOL X 노력의 일환으로 언어 개선 과정에 참여하여 ALGOL W라는 이름의 버전을 제안하였습니다. 이는 받아들여지지 않았고, ALGOL X 프로세스는 교착 상태에 빠졌습니다.1968년에 Wirth는 ALGOL X 프로세스를 포기하고 ALGOLW를 더 개선하기로 결정하고 1970년에 Pascal로 출시했습니다.

ALGOL의 스칼라어레이 외에도 Pascal은 복잡한 데이터 유형을 정의하고 목록, 트리 그래프와 같은 동적 및 재귀적 데이터 구조를 구축할 수 있습니다.파스칼은 모든 개체에 강력한 타이핑 기능을 가지고 있는데, 이는 명시적인 변환 없이는 한 종류의 데이터를 다른 데이터로 변환하거나 해석할 수 없다는 것을 의미합니다.C( C 계열의 대부분의 언어)와 달리 파스칼은 프로시저 정의를 어떤 수준의 깊이에서도 허용하며 서브루틴(프로시저 및 함수) 내부에서도 대부분의 종류의 정의와 선언을 허용합니다.따라서 프로그램은 단일 프로시저나 함수와 구문적으로 유사합니다.이것은 ALGOL 60의 블록 구조와 유사하지만 임의의 블록 문에서 절차와 기능만으로 제한됩니다.

파스칼은 1970년대에 특히 급성장하는 미니 컴퓨터 시장에서 큰 성공을 거두었습니다.1970년대 후반에 이 분야가 등장하면서 많은 마이크로컴퓨터들에도 컴파일러들이 이용 가능해졌습니다.1980년대에 대학 수준의 프로그래밍 과정에서 교수 언어로 널리 사용되었으며, 같은 시기에 상용 소프트웨어를 작성하기 위한 제작 환경에서도 사용되었습니다.1980년대 후반과 1990년대 초반에 유닉스 기반 시스템이 인기를 끌면서 C 프로그래밍 언어로 대체되었습니다.

객체 지향 프로그래밍을 위해 설계된 객체 파스칼이라는 이름의 파생형은 1985년에 개발되었습니다.이것은 1980년대 후반에 애플 컴퓨터(리사와 매킨토시 컴퓨터용)와 볼랜드에 의해 사용되었으며 나중에 마이크로소프트 윈도우 플랫폼에서 델파이로 개발되었습니다.파스칼 개념의 확장은 위스가 개발한 모듈라-2오베론 언어로 이어졌습니다.

역사

이전의 노력

1960년대 컴퓨터 언어 디자인의 역사의 대부분은 ALGOL 60 언어로 거슬러 올라갈 수 있습니다.ALGOL은 알고리즘을 명확하게 설명할 수 있는 것을 목표로 1950년대에 개발되었습니다.그것은 오늘날까지도 언어에 공통적으로 남아있는 구조화된 프로그래밍을 위한 많은 기능들을 포함하고 있습니다.

1962년에 오일러 프로그래밍 언어에 관한 논문을 헬무트 베버와 함께 작업하기 시작했습니다.오일러는 ALGOL의 구문과 많은 개념을 기반으로 했지만 파생형은 아니었습니다.주요 목표는 동적 목록과 유형을 추가하여 리스프와 유사한 역할에 사용할 수 있도록 하는 것이었습니다.이 언어는 1965년에 출판되었습니다.

이때까지, ALGOL의 많은 문제들이 발견되었는데, 특히 표준화된 문자열 시스템의 부족이 그러했습니다.언어를 유지하는 임무를 맡은 그룹은 개선 사항을 확인하기 위해 알골엑스 프로세스를 시작했고, 제출을 요구했습니다.Wirth와 Tony Ho는 문자열을 추가하고 구문의 일부를 정리하기 위해 보수적인 수정사항 세트를 제출했습니다.이것들은 새로운 표준 ALGOL로서 사용할 가치가 없다고 여겨져서, Wirth는 ALGOL W라는 이름의 언어를 위한 컴파일러를 작성했습니다.

ALGOLX의 노력은 훨씬 더 복잡한 언어인 ALGOL 68을 선택하게 될 것입니다.이 언어의 복잡성으로 인해 고성능 컴파일러를 제작하는 데 상당한 어려움을 겪었고, 업계에서 널리 사용되지는 않았습니다.이것은 더 새로운 언어들에 대한 기회를 남겼습니다.

파스칼

파스칼은 체계적인 방식으로 프로그래밍을 가르치는 것과 [4]시스템 소프트웨어 개발을 위한 명백한 목표와 함께 알골더블유 노력에 영향을 받았습니다.한 세대의 학생들이 학부 과정에서 파스칼을 입문 언어로 사용했습니다.

이 언어의 초기 성공 사례 중 하나는 UCSD 파스칼의 도입으로, 이는 서로 다른 플랫폼으로 포팅할 수 있는 맞춤형 운영 체제에서 실행되는 버전입니다.핵심 플랫폼은 애플 II로, 애플 파스칼이라는 이름으로 널리 사용되었습니다.이로 인해 파스칼은 애플 리사에서 개발에 사용되는 주요 고급 언어가 되었고, 이후 매킨토시에서도 사용되었습니다.원래 매킨토시 운영 체제의 일부는 파스칼 소스 [5]코드에서 모토로라 68000 어셈블리 언어로 손으로 번역되었습니다.

Donald KnuthTeX는 DEC PDP-10 Pascal을 기반으로 원래의 리터러시 프로그래밍 시스템인 WEB로 작성되었습니다.Adobe[6] Photoshop과 같은 성공적인 상업용 애플리케이션은 Macintosh Programmer's Workshop Pascal로 작성되었고, Total Commander[7], Skype 및 Macromedia Captivate와 같은 애플리케이션은 델파이(오브젝트 파스칼)로 작성되었습니다.아폴로 컴퓨터는 파스칼을 1980년부터 운영 체제의 시스템 프로그래밍 언어로 사용했습니다.

파스칼의 변형은 연구 프로젝트에서부터 PC 게임, 임베디드 시스템에 이르기까지 모든 분야에 사용되었습니다.널리 [8]사용되는 최신 파스칼 컴파일러가 존재합니다.

방언

언어를 전파하기 위한 위스의 예제 컴파일러인 파스칼-P 시스템은 스스로 컴파일할 수 있는 언어의 최소 부분집합이 되도록 설계된 언어의 부분집합을 사용했습니다.이 아이디어는 이것이 컴파일러의 랩핑을 증가시킬 수 있고, 그 후 전체 파스칼 언어 상태로 확장될 수 있다는 것이었습니다.이것은 여러 컴파일러로 이루어졌지만 한 가지 주목할 만한 예외는 파스칼-P2를 기반으로 한 UCSD 파스칼이었습니다.메모리가 제한된 새로운(당시) 마이크로프로세서에서 더 잘 실행될 것이라는 생각을 바탕으로 언어의 하위 집합 상태를 유지했습니다.또한 UCSD는 파스칼-P2 인터프리터를 "바이트 머신"으로 변환했는데, 이는 바이트 지향 마이크로프로세서에 더 적합하기 때문이었습니다.

UCSD 파스칼은 애플 파스칼을 포함한 많은 시스템의 기초를 형성했습니다.Borland Pascal은 UCSD 코드베이스를 기반으로 하지 않았지만, UCSD의 인기 있는 시기에 출시되었으며 많은 기능과 일치했습니다.이것은 델파이 파스칼과 프리웨어 버전인 FPC로 끝난 라인을 시작했습니다.

파스칼의 ISO 표준인 ISO 7185는 1983년에 발표되었으며 메인프레임, 미니 컴퓨터 및 IBM-PC에 널리 구현되어 사용되었으며 16비트에서 32비트까지 호환됩니다.20세기 말부터 현재까지 가장 많이 사용되는 파스칼의 두 방언은 ISO 7185 표준 버전과 델파이/터보 파스칼 버전입니다.

파스칼에 대한 초기 역사의 대부분은 파스칼 사용자 그룹 뉴스레터에서 찾을 수 있습니다.

https://www.standardpascal.org/pug.html .

오브제 파스칼

리사를 연구하는 동안 래리 테슬러는 파스칼을 다중 패러다임 프로그래밍 언어로 만들기 위해 언어에 객체 지향 확장을 추가하는 아이디어에 대해 위스와 의견을 교환하기 시작했습니다.이것은 처음에 1983년에 도입된 Classcal로 이어졌습니다.리사 프로그램이 퇴색하고 매킨토시로 대체되면서 새로운 버전이 생성되어 오브젝트 파스칼이라는 이름이 붙여졌습니다.이는 1985년 맥앱 애플리케이션 프레임워크의 일부로 맥에 도입되었으며, 1990년대 초까지 애플의 주요 개발 언어가 되었습니다.

오브젝트 파스칼 확장은 1989년 [9]5.5 버전이 출시되면서 터보 파스칼에 추가되었습니다.수년간 오브젝트 파스칼은 마이크로소프트 윈도우용 델파이 시스템의 기초가 되었으며, 이 시스템은 여전히 윈도우 응용 프로그램을 개발하는 데 사용되며 다른 시스템과 코드를 교차 컴파일할 수 있습니다.프리 파스칼은 라자루스(Lazarus)라는 자체 그래픽 IDE를 가진 오픈 소스 크로스 플랫폼 대안입니다.

구현

초기 파스칼 컴파일러

최초의 파스칼 컴파일러는 취리히에서 CDC 6000 시리즈 메인프레임 컴퓨터 제품군을 위해 설계되었습니다.Niklaus Wirth는 1969년 FORTRAN 66에서 이를 구현하려는 첫 번째 시도는 복잡한 데이터 구조를 표현하지 못했기 때문에 실패했다고 보고했습니다.두 번째 시도는 C와 같은 언어로 구현되었으며(막스 엥겔리의 스콜롭) 손으로 번역되었습니다(R에 의해).Schild)는 [10]부트스트래핑을 위해 파스칼 자신에게 바칩니다.1970년 중반까지 운영되었습니다.그 이후로 많은 파스칼 컴파일러들이 유사하게 자체 호스팅을 하고 있는데, 즉 컴파일러 자체가 파스칼로 작성되어 있으며, 컴파일러는 언어에 새로운 기능이 추가되거나 새로운 환경으로 이식될 때 보통 스스로를 다시 컴파일할 수 있습니다.GNU 파스칼 컴파일러는 C로 작성되는 주목할 만한 예외 중 하나입니다.

CDC 파스칼 컴파일러가 다른 메인프레임에 성공적으로 연결된 첫 번째 포트는 1972년 벨파스트 퀸즈 대학교(QUB)의 웰시와 퀸에 의해 완성되었습니다.그 대상은 ICL(International Computers Limited) 1900 시리즈였습니다.결국 이 컴파일러는 ICS(Information Computer Systems) 멀티 컴퓨터용 파스칼 컴파일러의 모체가 되었습니다.멀티포트는 시스템 프로그래밍 언어로 파스칼을 사용하기 위한 목적으로 글래스고 대학교 컴퓨터 공학부에서 근무하는 핀들레이, 커플스, 카보라스, 데이비스에 의해 개발되었습니다.1973년 여름에 완성된 멀텀 파스칼이 최초의 16비트 구현체였을 것으로 생각됩니다.

완전히 새로운 컴파일러가 1977년 Welsh 등에 의해 QUB에서 완성되었습니다.Glasgow 대학의 Findlay와 Watt가 구현한 소스 언어 진단 기능(프로파일링, 추적 및 유형 인식 포맷된 사후 덤프 포함)을 제공했습니다.이 구현은 1980년 Southampton University와 Glasgow University에 기반을 둔 팀에 의해 ICL 2900 시리즈로 이식되었습니다.표준 파스칼 모델 구현은 1984년 맨체스터 대학의 Welsh와 Hay가 BSI 6192/ISO 7185 표준에 대한 적합성을 엄격하게 검사하고 휴대용 추상 기계를 위한 코드를 생성하기 위해 채택한 이 컴파일러를 기반으로 합니다.

북미에서 쓰여진 최초의 파스칼 컴파일러는 도널드 B에 의해 일리노이 대학에서 만들어졌습니다. PDP-11 및 생성된 네이티브 머신 코드용 길리스.

파스칼-P 시스템

언어를 빠르게 전파하기 위해 취리히에서 컴파일러 포팅 키트가 만들어졌는데, 여기에는 가상 스택 머신을 위한 소위 p-code를 생성하는 컴파일러, 즉 합리적으로 효율적인 해석을 제공하는 코드가 포함되어 있었습니다.P-시스템 컴파일러는 파스칼-P1, 파스칼-P2, 파스칼-P3, 파스칼-P4로 명명되었습니다.파스칼-P1은 최초의 버전이었고, 파스칼-P4는 취리히에서 나온 마지막 버전이었습니다.파스칼-P1이라는 이름의 버전은 존재했던 파스칼-P를 위한 다양한 소스들 때문에 사실을 따라 만들어졌습니다.이 컴파일러는 휴대성을 향상시키기 위해 재설계되었으며 파스칼-P2로 발행되었습니다.이 코드는 나중에 파스칼-P3로 향상되었으며, 파스칼-P2와 하위 호환되지 않는 파스칼-P4와 함께 중간 코드가 하위 호환됩니다.

파스칼-P4 컴파일러-인터프리터는 오리지널 파스칼과 호환되는 시스템에서 실행 및 컴파일이 가능합니다.그러나 파스칼 언어의 부분 집합만 허용합니다.

취리히 그룹 외부에서 만들어진 파스칼-P5는 완전한 파스칼 언어를 받아들이며 ISO 7185 호환성을 포함합니다.

파스칼-P6는 다른 기능들과 함께 AMD64를 포함한 특정 CPU들을 위한 컴파일러를 목표로 하는 파스칼-P5의 후속작입니다.

UCSD Pascal은 Pascal-P2에서 분기하여 Kenneth Bowles해석적인 UCSD p-시스템을 만드는 데 사용했습니다.원래 IBM Personal [11]Computer를 출시할 때 사용할 수 있는 3개의 운영 체제 중 하나였습니다.UCSD 파스칼은 바이트 값을 기반으로 한 중간 코드를 사용했으며 따라서 초기 바이트 코드 컴파일러 중 하나였습니다.애플 파스칼은 1979년 애플 II와 애플 III 컴퓨터 시스템용으로 출시되었습니다.이는 UCSD Pascal의 구현이거나 대부분을 기반으로 합니다.파스칼-P1부터 파스칼-P4까지의 길이는 아니었으나 CDC 6600 60비트 워드 길이에 기반을 두었습니다.

네이티브 바이너리 오브젝트 파일을 만든 파스칼-P4 컴파일러를 기반으로 한 컴파일러가 호주 원자력 위원회에 의해 IBM 시스템/370 메인프레임 컴퓨터용으로 출시되었습니다; 그것은 [12]위원회 이름의 약칭을 따서 AAEC 파스칼 8000 컴파일러라고 이름 붙여졌습니다.

오브젝트 파스칼과 터보 파스칼

애플 컴퓨터는 1982년 리사 워크샵을 위해 독자적인 리사 파스칼을 만들었고 1985년 애플 매킨토시와 MPW로 컴파일러를 이식했습니다.1985년 래리 테슬러(Larry Tesler)는 Niklaus Wirth와 협의하여 오브젝트 파스칼을 정의하였고, 이 확장자들은 리사 파스칼과 맥 파스칼 컴파일러에 모두 포함되었습니다.

1980년대에 앤더스 헤일스버그나스콤-2를 위한 블루라벨 파스칼 컴파일러를 썼습니다.IBM PC용 이 컴파일러의 재구현은 Borland인수되어 Turbo Pascal로 이름이 바뀌기 전에 Compas Pascal과 PolyPascal이라는 이름으로 시판되었습니다.

Turbo Pascal은 공격적인 가격 전략 덕분에 큰 인기를 끌었습니다. 최초의 전체 화면 IDE 중 하나와 매우 빠른 턴어라운드 시간(컴파일링, 링크 및 실행에 단 몇 초)을 가지고 있습니다.전체적으로 어셈블리 언어로 작성되고 고도로 최적화되어 다른 경쟁 제품보다 더 작고 빠릅니다.

1986년, 앤더스는 터보 파스칼을 매킨토시에 이식하고 애플의 오브제 파스칼 확장 기능을 터보 파스칼에 통합했습니다.이 확장 기능들은 버전 5.5용 터보 파스칼의 PC 버전에 다시 추가되었습니다.동시에 마이크로소프트는 오브젝트 파스칼 [13][14]컴파일러도 구현했습니다.터보 파스칼 5.5는 1980년대 후반 IBM PC에 주로 집중하기 시작한 파스칼 커뮤니티에 큰 영향을 미쳤습니다.베이직의 구조적인 대체품을 찾는 많은 PC 동호인들이 이 제품을 사용했습니다.전문 개발자들에게도 채택되기 시작했습니다.비슷한 시기에 파스칼 프로그래머들이 마이크로소프트 윈도우의 C 기반 응용 프로그램 인터페이스(API)를 직접 사용할 수 있도록 C에서 많은 개념을 가져왔습니다.이러한 확장자에는 널 종단 문자열, 포인터 산술, 함수 포인터, 연산자의 주소 및 안전하지 않은 유형의 캐스트가 포함되었습니다.

터보 파스칼과 단위 또는 모듈 구조를 가진 기타 파생형은 모듈식 프로그래밍 언어입니다.그러나 중첩된 모듈 개념이나 특정 기호의 정규화된 가져오기 및 내보내기는 제공하지 않습니다.

기타 변형

슈퍼 파스칼은 숫자가 아닌 레이블, 반환문, 표현을 유형 이름으로 추가한 변형입니다.

TMT 파스칼은 32비트 도스 보호 모드, OS/2, Win32 운영 체제를 위한 볼랜드 호환 컴파일러입니다.TMT 파스칼 언어는 함수와 연산자 과부하를 허용하는 최초의 언어였습니다.

위스콘신-매디슨, 취리히, 칼스루에, 부퍼탈 대학은 수치 계산을 프로그래밍하는 것을 목표로 하는 파스칼-SC[15][16] 파스칼-XSC[17][18][19](과학 계산위한 확장) 컴파일러를 개발했습니다.파스칼-SC용 개발은 1978년 ISO 7185 파스칼 레벨 0을 지원하기 시작했지만, 이후 [20]단계에서 레벨 2 지원이 추가되었습니다.파스칼-SC는 원래 Z80 프로세서를 대상으로 했지만 나중에 도스(x86)와 68000용으로 다시 작성되었습니다.파스칼-XSC는 유닉스(리눅스, SunOS, HP-UX, AIX) 및 마이크로소프트/IBM(DOS with EMX, OS/2, Windows) 운영 체제로 여러 번 포팅되었습니다.중간 C 소스 코드를 생성하여 네이티브 실행 파일로 컴파일하여 동작합니다.파스칼-SC 언어 확장 중 일부는 GNU 파스칼에 의해 채택되었습니다.

파스칼 솔은 1983년경 프랑스 팀이 솔이라는 이름의 유닉스 계열 시스템을 구현하기 위해 고안한 것입니다.표준 파스칼 레벨-1(파라미터화된 배열 경계 포함)이었지만, 이 정의는 대체 키워드와 프랑스어 및 언어의 사전 정의된 식별자를 허용하여 시스템 프로그래밍을 쉽게 하기 위한 몇 가지 확장을 포함했습니다([21]예: lseek과 동등함).이후 Sol 팀은 분산 운영 [22]체제를 설계하기 위해 Chorus OS 프로젝트로 이동했습니다.

IP 파스칼은 마이크로폴리스 도스를 사용하여 파스칼 프로그래밍 언어를 구현하였으나 Z80에서 실행되는 CP/M-80으로 빠르게 이동되었습니다.1994년에 80386 머신 타입으로 옮겨졌으며, 현재는 Windows/XP 및 Linux 구현으로 존재합니다.2008년에 시스템은 새로운 수준으로 올라왔고 파스칼의 계산기에서 따온 "파스칼린"이라는 이름의 언어가 되었습니다.개체, 네임스페이스 컨트롤, 동적 어레이 및 기타 많은 확장 기능을 포함하며 일반적으로 C#과 동일한 기능 및 유형 보호 기능을 제공합니다.이는 ISO 7185로 표준화된 원래 파스칼 구현과 호환되는 유일한 구현입니다.

언어구인

원래 형태의 파스칼은 순수하게 절차적인 언어이며 ALGOL과 같은 제어 구조의 전통적인 배열을 포함합니다.if,then,else,while,for,그리고.case, 하나의 진술 또는 a에 범위를 두고 있습니다.begin-end 문장 블럭.파스칼은 또한 레코드, 변형, 포인터, 열거, 세트 및 프로시저 포인터와 같은 원래의 ALGOL 60 타입에 포함되지 않은 데이터 구조체를 가지고 있습니다.그러한 구성은 부분적으로 Simula 67, ALGOL 68, Niklaus Wirth 자신의 ALGOL W 및 C의 제안으로부터 물려받거나 영감을 받았습니다. A.R.호어.

파스칼 프로그램은 다음과 같이 시작합니다.program 외부 파일 설명자 목록을 매개 변수로[23] 하는 키워드(Turbo Pascal 등에는 필요 없음); 다음으로 메인 블록을 따라갑니다.begin그리고.end키워드.세미콜론을 분리하고, 전체 중지(즉, 마침표)는 전체 프로그램(또는 단위)을 종료합니다.Pascal 소스에서는 문자 대소문자가 무시됩니다.

다음은 매우 간단한 "Hello, World!" 프로그램에 사용되는 소스 코드의 예입니다.

프로그램. 안녕 세계(산출량); 시작한다.     쓰기Ln('안녕, 세상이여!')     블록의 마지막 문 뒤에는 {아니오 ";"가 필요하지 않습니다. 하나를 추가하면 프로그램에 "compiler statement"가 추가되는데, 컴파일러는 이를 무시합니다. 끝.. 

자료종류

파스칼의 유형 선언은 해당 유형의 변수가 저장할 수 있는 값의 범위를 정의하는 데 사용됩니다.또한 해당 유형의 변수에 대해 수행할 수 있는 작업 집합을 정의합니다.미리 정의된 유형은 다음과 같습니다.

자료종류 변수가 저장할 수 있는 값 유형
정수의 정수(정수) 숫자
진짜 부동 소수점 수
부울 참 또는 거짓 값
차를 주문한 문자 집합에서 하나의 문자.
세트 부울 값 배열과 동일한 값
배열하다 앞의 데이터 유형이나 기록 중 셀 수 있는 그룹
기록. 앞의 데이터 유형 중 하나의 집합입니다.
끈을 문자의 시퀀스 또는 " 문자열"은 시작 인덱스가 1인 "char의 packed array"로 선언됩니다.문자열 상수를 할당할 수 있으며 배열의 요소로 개별 문자에 액세스할 수 있습니다.

기본 유형(부울 제외)에 허용되는 값의 범위가 구현으로 정의됩니다.일부 데이터 변환을 위해 기능이 제공됩니다.전환용real로.integer, 다음 기능을 사용할 수 있습니다.round(은행가의 반올림을 사용하여 정수로 반올림) 및trunc(0쪽으로 이동).

프로그래머는 파스칼의 타입 선언 기능을 사용하여 미리 정의된 타입들의 관점에서 일반적으로 사용되는 다른 데이터 타입들(예를 들어 바이트, 문자열 등)을 자유롭게 정의할 수 있습니다.

유형     바이트로        = 0..255;     signed_byte = -128..127;     끈을      = 포장된 배열하다[1..255]  차를; 

바이트나 문자열과 같이 자주 사용되는 유형은 이미 많은 구현에서 정의되어 있습니다.

일반적으로 시스템은 데이터를 저장할 때 단어를 사용합니다.예를 들면.byte타입은 8비트 값이 아닌 기계 정수 - 32비트 - 에 저장될 수 있습니다.파스칼은 기본 저장 유형을 보다 세밀하게 정의할 수 있는 언어 요소를 포함하지 않습니다.이 기능은 여러 파스칼 확장자와 후속 언어에 포함되었으며, Modula-2와 같은 다른 기능들은 16비트 정수와 같은 대부분의 기계 데이터 유형을 포함하도록 내장 집합을 확장했습니다.

packed키워드는 컴파일러에게 각 요소에 대해 하나의 단어를 사용하는 대신 구조화된 데이터 유형(세트, 배열 및 레코드)에 대해 가장 효율적인 저장 방법을 사용하도록 지시합니다.포장은 단어의 일부에 쉽게 접근할 수 없는 기계의 접근 속도를 늦출 수 있습니다.

서브레인지 타입

모든 일반 데이터 유형(실제를 제외한 모든 단순 유형)의 하위 범위도 만들 수 있습니다.

변태의     x : 1..10;     y : 'a'..'z'; 

종류설정

당시의 다른 프로그래밍 언어들과 달리 파스칼은 집합 유형을 [24]지원합니다.

변태의     세트1 : 세트  1..10;     세트2 : 세트  'a'..'z'; 

집합은 현대 수학의 기본 개념이며, 많은 알고리즘에서 사용될 수 있습니다.이러한 기능은 유용하며 집합을 지원하지 않는 언어의 동등한 구문보다 빠를 수 있습니다.예를 들어, 많은 파스칼 컴파일러의 경우:

한다면 i 인에 [5..10] 그리고나서 ... 

실행 속도는 다음보다 빠릅니다.

한다면 (i > 4) 그리고. (i < 11) 그리고나서 ... 

연속되지 않은 값 집합은 성능과 가독성 측면에서 특히 유용할 수 있습니다.

한다면 i 인에 [0..3, 7, 9, 12..15] 그리고나서 ... 

소규모 도메인에 걸친 집합을 포함하는 이러한 예의 경우, 향상된 성능은 일반적으로 컴파일러가 집합 변수를 비트 벡터로 표현함으로써 달성됩니다.그런 다음 세트 연산자를 비트 와이즈 머신 코드 연산으로 효율적으로 구현할 수 있습니다.

레코드종류

파스칼 레코드 타입의 예:

유형       = 기록.          길이: 정수의;          폭을: 정수의      끝.; 

변형 레코드 유형의 예:

유형      모양. = (원형, 광장, 삼각형);      치수 = 기록.         사례. 피규어: 모양.              원형: (지름: 진짜);            광장: (: 진짜);            삼각형: (: 진짜; 각도1, 각도2: 0..360)         끝.; 

변형 레코드를 사용하면 레코드의 여러 필드가 서로 겹쳐 공간을 절약할 수 있습니다.

형선언문

유형 선언을 사용하여 다른 유형에서 유형을 정의할 수 있습니다.

유형     x = 정수의;     y = x; ... 

또한 복잡한 유형은 단순한 유형에서 구성할 수 있습니다.

유형     a = 배열하다[1..10]  정수의;     b = 기록.         x : 정수의;         y : 차를  {임시 세미콜론이 엄격하게 필요하지 않음}     끝.;     c = 파일  a; 

파일형식

유형     a = 파일  정수의;     b = 기록.         x : 정수의;         y : 차를     끝.;     c = 파일  b; 

위의 예에서 볼 수 있듯이 파스칼 파일은 구성 요소의 시퀀스입니다.모든 파일에는 f^로 표시되는 버퍼 변수가 있습니다.절차는 버퍼 변수를 다음 요소로 이동(읽기용)하고 (쓰기용)합니다.읽기(f, x)가 x := f^; get(f);와 같도록 읽기가 도입됩니다.쓰기(f, x)가 f^ := x; put(f)같도록 쓰기가 도입됩니다.타입을textchar 파일로 미리 정의되어 있습니다.버퍼 변수는 사용할 다음 문자를 검사하는 데 사용될 수 있지만(정수를 읽기 전에 숫자를 확인하십시오), 초기 구현에서 대화형 프로그램의 심각한 문제로 이어지지만 나중에 "게으른 입출력" 개념으로 해결되었습니다.파일 작업을 수행하기 전에 파일 버퍼 변수가 실제로 액세스될 때까지 기다립니다.

포인터 종류

파스칼은 포인터의 사용을 지원합니다.

유형     pNode = ^마디;     마디  = 기록.         a : 정수의;         b : 차를;         c : pNode       끝.; 변태의     노드Ptr : pNode;     IntPtr  : ^정수의; 

여기서 변수 NodePtr은 데이터 유형 Node에 대한 포인터로, 레코드입니다.포인터는 선언되기 전에 사용할 수 있습니다.이것은 전향적 선언으로, 물건을 사용하기 전에 반드시 신고해야 한다는 규칙에 대한 예외입니다.

새 레코드를 만들고 레코드필드 a와 필드 b에 값 10과 문자 A를 할당하고 포인터 c를 null 포인터("NIL" in Pascal")로 초기화하려면 다음 문장을 사용합니다.

신규(노드Ptr); ... 노드Ptr^.a := 10; 노드Ptr^.b := 'A'; 노드Ptr^.c := 0의; ... 

이 작업은 다음을 사용하여 수행할 수도 있습니다.with다음과 같이 진술합니다.

신규(노드Ptr); ... 와 함께 노드Ptr^ 하다 시작한다.     a := 10;     b := 'A';     c := 0의 끝.; ... 

위드문의 범위 안에서 a와 b는 레코드 포인터 NodePtr의 하위 필드를 참조하며 레코드 노드 또는 포인터 유형 pNode를 참조하지 않습니다.

연결된 목록, 스택 대기열은 포인터 유형 필드(c)를 레코드에 포함시켜 생성할 수 있습니다.

포인터를 특징으로 하는 많은 언어와 달리 파스칼은 포인터가 익명인 동적으로 생성된 변수만 참조하도록 허용하고 표준 정적 또는 로컬 변수를 참조하도록 허용하지 않습니다.또한 포인터는 연관된 유형을 가져야 하며, 한 유형의 포인터는 다른 유형의 포인터와 호환되지 않습니다(예: 문자의 포인터는 정수의 포인터와 호환되지 않음).이를 통해 특히 PL/I 또는 C에 사용되는 다른 포인터 구현에 내재된 유형 보안 문제를 제거할 수 있습니다.엉킴 포인터로 인해 발생하는 일부 위험도 제거해 주지만, (C에서 볼 수 있는 자유 라이브러리 함수와 동일한 효과가 있는) Dispose 함수를 사용하여 참조된 공간을 동적으로 할당 해제할 수 있다는 것은 자바, C# 등의 언어에서 그랬던 것처럼 엉킴 포인터의 위험이 제거되지[25] 않았다는 것을 의미하며,자동 가비지 수집 기능을 제공합니다(그러나 메모리 유출과 관련된 문제를 제거하지는 않습니다).

이러한 제한들 중 일부는 더 새로운 방언들에서 해제될 수 있습니다.

제어구조

파스칼은 구조화된 프로그래밍 언어로 제어 흐름이 보통 '고투' 명령 없이 표준 문으로 구성된다는 뜻입니다.

하는 동안에 a <> b 하다  쓰기Ln('기다림');  한다면 a > b 그리고나서 쓰기Ln('조건 충족')   {다른 경우보다 먼저 세미콜론을 사용할 수 없음}     또 다른 쓰기Ln('조건이 충족되지 않음');  위해서 i := 1 로. 10 하다  {다음 문을 분리하므로 여기에 세미콜론 없음}     쓰기Ln('반복:', i);  따라하다     a := a + 1 까지 a = 10;  사례. i      0 : 쓰기('0');     1 : 쓰기('하나');     2 : 쓰기('둘');     3,4,5,6,7,8,9,10: 쓰기('?') 끝.; 

절차 및 기능

파스칼은 프로그램을 절차와 기능으로 구조화합니다.일반적으로 절차는 부작용을 위해 사용되는 반면 함수는 반환 값을 위해 사용됩니다.

프로그램. 인쇄(산출량);  변태의 i : 정수의;  절차. 정수 인쇄(j : 정수의); 시작한다.     ... 끝.;  기능. 세 배의(머리를 짜다 x: 정수의): 정수의; 시작한다.  세 배의 := x * 3 끝.;  시작한다. { 메인 프로그램 }     ...     정수 인쇄(i);     정수 인쇄(세 배의(i)) 끝.. 

프로시저와 함수는 어느 깊이에도 중첩될 수 있으며, '프로그램' 구성은 논리 최외곽 블록입니다.

기본적으로 매개 변수는 값으로 전달됩니다.매개 변수 이름 앞에 'var'가 있으면 참조로 전달됩니다.

각 프로시저 또는 함수에는 고유한 go to 레이블, 상수, 유형, 변수 및 기타 프로시저 및 함수의 고유한 선언이 있을 수 있으며, 이는 모두 해당 순서여야 합니다.이 주문 요구 사항은 원래 효율적인 단일 패스 컴파일을 허용하기 위한 것이었습니다.그러나 일부 방언(델파이 )에서는 선언 섹션의 엄격한 순서 요건이 완화되었습니다.

세미콜론을 문 구분자로 사용

파스칼은 세미콜론을 문 구분자로 사용하는 것을 포함하여 ALGOL 언어에서 많은 언어 구문 기능을 채택했습니다.이것은 세미콜론을 문 종결자로 사용하는 PL/I C와 같은 다른 언어와는 대조적입니다.세미콜론은 필요하지 않습니다.end레코드 유형 선언의 키워드, 블록 또는 대소문자 문장; 이전에until반복 문장의 키워드; 및 앞에elseif 문의 키워드입니다.

이전 버전의 파스칼에서는 추가 세미콜론의 존재가 허용되지 않았습니다.그러나 1973년 개정 보고서에 ALGOL과 같은 빈 문을 추가하고 나중에 ISO 7185:1983의 언어 변경을 통해 대부분의 경우 선택적 세미콜론을 허용합니다.세미콜론은 여전히 다음 작업 직전에 허용되지 않습니다.elseif 문에 키워드를 입력합니다.else문장 시퀀스가 아닌 하나의 문장을 따릅니다.중첩 if의 경우, 세미콜론을 사용하여 중첩 if를 추정적으로 종료함으로써 dangling else 문제(내부 if에는 다른 문제가 없지만 외부 if에는 다른 문제가 있음)를 피하기 위해 세미콜론을 사용할 수 없습니다. 대신 두 if 절을 모두 종료합니다.대신에, 명시적인begin...end블록을 [26]사용해야 합니다.

자원.

컴파일러 및 인터프리터

파스칼 컴파일러와 인터프리터는 다음과 같이 일반적으로 사용할 수 있습니다.

  • 델파이는 엠바카데로(구 볼랜드/코드기어)의 주력 RAD(Rapid Application Development) 제품입니다.그것은 윈도우, macOS, iOS, 안드로이드용 애플리케이션을 만들기 위해 파스칼의 후손인 오브제 파스칼 언어(볼랜드가 '델피'라고 칭함)를 사용합니다.D8부터 D2005, D2006 및 D2007까지 존재했던 .NET 지원이 종료되었으며 이전 버전과 완전히 호환되지 않는 새로운 언어(Prism, Oxygene으로 브랜드 변경됨, 아래 참조)로 대체되었습니다.최근 몇 동안 유니코드 지원 및 제네릭이 추가되었습니다(D2009, D2010, Delphi XE).
  • 프리 파스칼(Free Pascal)은 객체 파스칼로 작성된 크로스 플랫폼 컴파일러입니다.기존 애플리케이션을 컴파일할 수 있고 새로운 애플리케이션을 개발할 수 있는 편리하고 강력한 컴파일러를 제공하는 것을 목표로 합니다.GNU GPL(GNU General Public License)로 배포되는 반면 패키지와 런타임 라이브러리는 수정된 GNU Lesser General Public License(GNU LGPL)로 배포됩니다.Turbo Pascal, Delphi, Mac Pascal의 호환성 모드 이외에도 연산자 오버로드와 같은 확장 기능을 지원하는 자체 절차 및 객체 지향 구문 모드가 있습니다.많은 플랫폼과 운영체제를 지원합니다.현재 버전에는 ISO 모드도 있습니다.
  • Turbo51(Turbo51)은 인텔 8051 마이크로컨트롤러 계열의 자유 파스칼 컴파일러로, Turbo Pascal 7 구문을 갖추고 있습니다.
  • 옥시진(Oxygene, 이전 이름은 크롬)은 의 오브젝트 파스칼 컴파일러입니다.NETMono 플랫폼.렘오브젝트 소프트웨어가 만들고 판매했으며 엠바카데로가 프리즘의 백엔드 컴파일러로 한동안 판매했습니다.
  • Kylix는 Linux 운영 체제와 개선된 객체 라이브러리를 지원하는 델파이의 후손이었습니다.더 이상 지원되지 않습니다.컴파일러와 IDE는 비상업적인 용도로 사용할 수 있습니다.
  • GNU 파스칼 컴파일러(GPC)는 GNU 컴파일러 모음집(GCC)의 파스칼 컴파일러입니다.컴파일러는 C로 작성되며, 런타임 라이브러리는 대부분 파스칼로 작성됩니다.GNU 일반 공중 사용 허가서로 배포되며 많은 플랫폼과 운영 체제에서 실행됩니다.ANSI/ISO 표준 언어를 지원하며 부분 터보 파스칼 방언을 지원합니다.더 주목할 만한 누락 사항 중 하나는 완전한 터보 파스칼 호환(짧은) 문자열 유형이 없다는 것입니다.Borland Delphi 및 기타 언어 변형에 대한 지원은 상당히 제한적입니다.그러나 Mac-pascal에 대한 지원은 어느 정도 있습니다.
  • 가상 파스칼은 1995년 비탈리 미리야노프에 의해 볼랜드 파스칼 구문과 호환되는 네이티브 OS/2 컴파일러로 만들어졌습니다.그러다가 fPrint에 의해 Win32 지원을 추가하여 상업적으로 개발되었고, 2000년에 프리웨어가 되었습니다.오늘날 Win32, OS/2, 리눅스용으로 컴파일이 가능하며, 대부분 볼랜드 파스칼, 델파이와 호환됩니다.2005년 4월 4일 개발이 취소되었습니다.
  • 파스칼-P4 컴파일러, 파스칼에 구현된 수많은 후속 파스칼 컴파일러들의 기초입니다.그것은 완전한 파스칼의 부분집합을 구현합니다.
  • 파스칼-P5 컴파일러는 파스칼-P4를 응용한 ISO 7185입니다.
  • 파스칼-P6 컴파일러는 파스칼 언어 사양에 따라 파스칼-P5를 확장한 것입니다.
  • Smart Mobile Studio는 Pascal to HTML5/Javascript 컴파일러입니다.
  • 터보 파스칼은 1980년대와 1990년대 초반에 PC용으로 지배적인 파스칼 컴파일러였으며 강력한 확장 기능과 매우 짧은 컴파일 시간 때문에 인기가 있었습니다.터보 파스칼은 콤팩트하게 작성되었으며 디스크에 접근하지 않고도 메모리에서 모든 것을 컴파일, 실행, 디버그할 수 있었습니다.느린 플로피 디스크 드라이브는 그 당시 프로그래머들에게 일반적이었고, 터보 파스칼의 속도 장점을 더욱 돋보이게 했습니다.현재 이전 버전의 터보 파스칼(최대 5.5)을 볼랜드 사이트에서 무료로 다운로드 받을 수 있습니다.
  • IP 파스칼은 ISO 7185에 따라 원래 파스칼과 호환되는 고도로 확장된 파스칼 언어인 파스칼린(Pascaline)을 구현합니다.세마포어가 있는 병렬 태스크 모듈, 객체, 런타임에 할당되는 모든 차원의 동적 어레이, 오버로드, 오버라이드 및 기타 많은 확장을 포함하는 네임스페이스 제어 기능을 갖춘 모듈이 있습니다.IP Pascal에는 Pascal 언어에 맞춤형 휴대성 라이브러리가 내장되어 있습니다.예를 들어 1970년대 파스칼의 표준 텍스트 출력 응용 프로그램은 창에서 작동하도록 다시 컴파일될 수 있으며 그래픽 구성 요소도 추가될 수 있습니다.
  • 파스칼-XT는 지멘스가 메인프레임 운영체제인 BS2000과 SINIX를 위해 만들었습니다.
  • PocketStudio는 Palm OS API와의 인터페이스를 지원하기 위해 자체 확장 기능을 갖춘 Palm OS 및 MC68xxx 프로세서용 파스칼 서브셋 컴파일러이자 RAD 도구입니다.시각적 양식 디자이너, 객체 검사기, 소스 코드 편집기를 가진 델파이와 라자루스를 닮았습니다.
  • MIDletPascal – 모바일용 소프트웨어를 만들기 위해 특별히 설계된 작고 빠른 자바 바이트코드를 생성하는 Pascal 컴파일러이자 IDE입니다.
  • 벡터 파스칼(Vector Pascal)은 MMX와 AMD 3d Now와 같은 SIMD 명령어 세트를 위한 언어로, 모든 인텔 및 AMD 프로세서와 소니의 플레이스테이션 2 이모션 엔진을 지원합니다.
  • 모픽 파스칼은 오브젝트 파스칼(서버와 브라우저 모두)로 작성된 웹 애플리케이션을 개발할 수 있게 해줍니다.
  • WDSibyl – Visual Development Environment와 Win32 및 OS/2용 Pascal 컴파일러.
  • 핸드헬드 컴퓨터에서 직접 실행되는 팜 OS용 컴파일러 PP 컴파일러.
  • CDC 6000 파스칼 컴파일러는 최초의 CDC 6000 파스칼 컴파일러의 소스 코드입니다.
  • 파스칼-S[27]
  • 아미가 파스칼은 아미가 컴퓨터를 위한 무료 파스칼 컴파일러입니다.
  • VSI Pascal for OpenVMS(이전의 HP Pascal for OpenVMS, Compaq Pascal, DEC Pascal, VAX Pascal, 원래 VAX-11[28] Pascal)는 OpenVMS [29]시스템에서 실행되는 파스칼 컴파일러입니다.Tru64에 의해서도 지원되었습니다.[30][31]VSI Pascal for OpenVMS는 ISO/IEC 7185:1990 Pascal 및 ISO/IEC 10206:1990 확장 Pascal과 호환되며 자체 [29]확장 기능도 포함되어 있습니다.컴파일러 프론트엔드는 [32]BLIS에 구현됩니다.
  • 스토니 브룩 파스칼+(Stony Brook Pascal+)는 16비트 (이후 32비트)의 도스와 OS/2용 최적화 컴파일러로 터보 파스칼의 직접적인 대체품으로 판매되었으나 적어도 두 배 이상 빠른 속도로 실행되는 코드를 생산했습니다.

IDES

라이브러리

  • Free Pascal 컴파일러로 GUI 어플리케이션을 만들기 위한 WOL 라이브러리

기준

ISO/IEC 7185:1990 파스칼

1983년에 이 언어는 국제 표준 IEC/ISO[33] 7185와 미국 ANSI/IEEE 770X3.97-1983, ISO 7185:1983을 포함한 여러 지역 국가별 표준에서 표준화되었습니다.이 두 표준은 ISO 표준에 적합한 배열(실행 시간까지 배열의 경계를 알 수 없는 배열)을 위한 "레벨 1" 확장이 포함되어 있다는 점에서만 차이가 있었습니다. 여기서 ANSI는 원래(Wirth 버전) 언어로의 확장을 허용하지 않았습니다.1989년 ISO 7185는 원본 문서에서 발견된 여러 오류와 모호성을 수정하기 위해 개정되었습니다(ISO 7185:1990).

ISO 7185는 사용자 설명서와 보고서 [Jensen and Wirth]에 의해 상세하게 설명된 Wirth의 1974년 언어를 명확히 한 것으로 언급되었으나, 또한 표준에 레벨 1로 "적합한 배열 매개 변수"를 추가한 것도 주목할 만했고, 적합한 배열이 없는 레벨 0은 파스칼입니다.이 추가는 C. A. R. Hoare의 요청과 Niklaus Wirth의 승인으로 이루어졌습니다.결정적인 원인은 Hoare가 원래 FORTRAN으로 작성된 NAG 수치 알고리즘 라이브러리의 파스칼 버전을 만들기를 원했기 때문이며, 다양한 크기의 배열 매개 변수를 허용하는 확장 없이는 그렇게 할 수 없다는 것을 발견했기 때문입니다.유사한 고려사항들이 절차적 및 기능적 매개변수의 매개변수 유형을 명시하기 위해 설비의 ISO 7185에 포함되도록 동기를 부여했습니다.

Niklaus Wirth 자신은 1974년 언어를 CDC 6000 컴파일러의 기계 고유 기능과 구별하기 위해 "표준"이라고 불렀습니다.이 언어는 파스칼 사용자 매뉴얼 및 보고서의 두 번째 부분인 파스칼 [34]보고서에 기록되어 있습니다.

파스칼이 기원한 대형 기계(메인프레임 및 미니 컴퓨터)에서는 일반적으로 표준이 준수되었습니다.IBM PC에서는 그렇지 않았습니다.IBM PC에서는 볼랜드 표준 터보 파스칼과 델파이가 가장 많은 사용자를 보유하고 있습니다.따라서 특정 구현이 원래 파스칼 언어에 해당하는지, 아니면 볼란드 방언에 해당하는지를 이해하는 것이 일반적으로 중요합니다.

이 언어의 IBM PC 버전은 UCSD Pascal의 등장과 함께 여러 가지 누락 및 변경 사항과 함께 이 언어에 대한 여러 확장 기능을 특징으로 하는 해석적 구현체로서 차이가 나기 시작했습니다.볼랜드 방언을 포함한 많은 UCSD 언어 기능이 오늘날에도 남아있습니다.

ISO/IEC 10206:1990 확장 파스칼

1990년 확장 파스칼 표준은 IEEE/ANSI 770X3[37].160-1989와 기술적[36] 내용이 동일한 ISO/[35]IEC 10206으로 만들어졌습니다. 2019년 현재 FreePascal 컴파일러에서 확장 파스칼 지원이 계획되어 있습니다.[38]

변주곡

Niklaus Wirth의 취리히 버전의 파스칼은 두 가지 기본 형태로 ETH 외부에서 발행되었습니다: CDC 6000 컴파일러 소스와 파스칼-P 시스템이라고 불리는 포팅 키트.파스칼-P 컴파일러는 컴파일러의 부트스트랩에 필요하지 않은 풀 언어의 몇 가지 기능을 생략했습니다.예를 들어 매개 변수로 사용되는 절차와 기능, 차별화되지 않은 변종 레코드, 패킹, 폐기, 절차 간 고투 및 전체 컴파일러의 기타 기능은 생략되었습니다.

Kenneth Bowles 교수가 이끄는 UCSD 파스칼은 파스칼-P2 키트를 기반으로 했고, 결과적으로 파스칼-P 언어 제한을 몇 가지 공유했습니다.UCSD 파스칼은 나중에 애플 파스칼로 채택되었고, 여러 버전을 통해 계속되었습니다.UCSD 파스칼이 파스칼-P 키트에서 서브셋 파스칼을 확장하기는 했지만, 파스칼의 완전한 표준 설치는 아니었습니다.

1990년대 초, Alan Burns와 Geoff Davies는 Pl/0의 확장인 Pascal-FC를 개발했습니다(Niklaus의 책 알고리즘 + 데이터 구조 = 프로그램에서).파스칼-FC를 컨커런트 프로그래밍을 위한 교육 도구로 사용하기 위해 몇 가지 구성 요소(예: 세마포어, 모니터, 채널, 원격 호출 및 리소스)가 추가되었습니다.동시성을 입증할 수 있도록 컴파일러 출력(P-code의 일종)을 가상 머신에서 실행할 수 있습니다.이 가상 머신은 정상적인 공정한 환경을 시뮬레이션했을 뿐만 아니라 극단적인 조건(불공정 모드)도 시뮬레이션할 수 있었습니다.

볼랜드 같은 파스칼 컴파일러

볼란드터보 파스칼은 안데르스 헤일스버그가 쓴 것으로 UCSD와 취리히 컴파일러와는 독립적인 어셈블리어로 작성되었습니다.그러나 UCSD 컴파일러와 동일한 서브셋과 확장 기능을 많이 채택했습니다.이는 UCSD 시스템이 당시 사용 가능한 리소스 제한 마이크로프로세서 시스템에서 응용 프로그램을 개발하는 데 적합한 가장 일반적인 파스칼 시스템이었기 때문일 것입니다.

축소 포장된 터보 파스칼 버전 3 이상의 화신(볼랜드 오브제 파스칼과 델파이, 볼랜드와 거의 호환되지 않음)은 셰어웨어 저자를 포함한 프로그래머들에게 인기를 끌었고, 따라서 파스칼 코드의 SWAG 라이브러리는 델파이와 같은 버전을 염두에 두고 작성된 많은 양의 코드를 특징으로 합니다.

이 범주의 소프트웨어 제품(컴파일러, IDE/Rapid Application Development(RAD)):

  • 터보 파스칼 – "터보.버전 7까지는 EXE, 윈도우용 터보 파스칼(TPW), 매킨토시용 터보 파스칼.
  • 순수 파스칼과 HiSpeed 파스칼 2 파스칼 언어 환경 아타리 ST 계열 컴퓨터용
  • 볼랜드 파스칼 7 – DOS와 윈도우를 모두 대상으로 하는 터보 파스칼 계열의 전문가용 버전.
  • 오브젝트 파스칼 – 파스칼의 발명가인 Niklaus Wirth와 협의하여 Laurry Tesler이끄는 팀이 애플 컴퓨터에서 개발한 파스칼 언어의 확장판입니다. 기능은 매킨토시용으로 볼랜드의 터보 파스칼에, 1989년 DOS용으로 터보 파스칼 5.5에 추가되었습니다.
  • 델파이 – 오브젝트 파스칼은 본질적으로 그 기초 언어입니다.
  • 프리 파스칼 컴파일러 – 프리 파스칼은 볼랜드 파스칼 프로그래머들의 표준 방언인 볼랜드 터보 파스칼과 나중에 델파이를 채택했습니다.
  • 파스칼 ABC.NET – 컴파일러와 IDE를 포함한 새로운 세대의 파스칼 프로그래밍 언어.
  • 볼랜드 킬릭스(Borland Kylix)는 이전에 볼랜드에서 판매한 컴파일러이자 IDE입니다.볼랜드 델파이 소프트웨어 개발 환경과 C++Builder의 리눅스 버전입니다.
  • 라자루스(Lazarus)는 Kylix와 유사한 기능으로 객체 파스칼의 방언을 다양한 정도로 지원하는 자유 파스칼 컴파일러를 사용하는 RAD용 자유 크로스 플랫폼 시각 IDE입니다.
  • 버추얼 파스칼(VP2/1)은 OS/2와 윈도우 32용으로 볼랜드 파스칼과 볼랜드 델파이가 호환되는 32비트 파스칼 컴파일러입니다.[39]
  • 시빌(Sibil)은 델파이와 유사한 오픈 소스 IDE이자 컴파일러입니다. 구현 예는 다음과 같습니다.
    • WDSil[40] for Microsoft Windows and OS/2는 Speedsoft라는 이름의 회사가 출시한 상업용 볼랜드 파스칼 호환 환경으로, 나중에 Sybil이라는 이름의 델파이와 같은 RAD(Rapid Application Development) 환경으로 개발되었다가 그 회사가 문을 닫았을 때 GPL에 따라 오픈 소스가 되었습니다.
    • 오픈 시빌은 진행 중인 프로젝트로, 원래 스피드소프트의 WDsybl Sibyl Portable Component Classs(SPCC) 및 SvDE(Sibyl Visual Development Tool) 소스를 기반으로 한 OS/2 및 eCS용 오픈 소스 툴이지만, 현재는 IBM 시스템 객체 모델(SOM), WPS 및 OpenDoc[41]핵심입니다.

관련표준 목록

  • ISO 8651-2:1988 정보 처리 시스템 – 컴퓨터 그래픽스 – 그래픽 커널 시스템 (GKS) 언어 바인딩파트 2: 파스칼

접수처

파스칼은 컴퓨팅 커뮤니티에서 비판적이고 칭찬적인 다양한 반응을 이끌어냈습니다.

초기비평

1980년대와 1990년대 초에 매우 인기가 있었지만, 파스칼의 구현은 Wirth의 언어에 대한 최초의 정의를 거의 따랐으며, 교육 외부에서 사용하기에 적합하지 않다는 비판을 받았습니다.C 언어를 대중화한 브라이언 커니건(Brian Kernighan)은 1981년 "파스칼이 내가 가장 좋아하는 프로그래밍 [42]언어가 아닌 이유"라는 글에서 파스칼에 대한 그의 가장 주목할 만한 비평을 정리했습니다.커니건이 설명한 가장 심각한 문제는 배열 크기와 문자열 길이가 유형의 일부이기 때문에 가변 길이 배열이나 문자열을 매개 변수로 허용하는 함수를 작성할 수 없다는 것입니다.이것은 예를 들어 정렬 라이브러리를 쓸 수 없게 만들었습니다.커니건은 또한 부울 식의 예측 불가능한 평가 순서, 라이브러리 지원 부족, 정적 변수의 부족 등을 비판하고 더 작은 여러 문제를 제기했습니다.또한, 그는 그 언어가 제한과 제한을 "탈출"(알고 있고 강제적으로 무시하는) 간단한 구성요소를 제공하지 않았다고 말했습니다.다른[25][43] 출처의 더 일반적인 불만 사항은 선언의 범위가 원래 언어 정의에서 명확하게 정의되지 않았으며, 이는 포인터 유형을 정의하기 위해 순방향 선언을 사용할 때 또는 기록 선언이 상호 재귀로 이어질때때로 심각한 결과를 초래했다는 점에 주목했습니다.또는 식별자가 열거 목록에 사용되었을 수도 있고 사용되지 않았을 수도 있을 때.또 다른 문제는 ALGOL 60과 같이 언어가 매개변수의 예상되는 유형을 미리 정의하기 위해 매개변수로 전달되는 절차나 함수를 허용하지 않는다는 것입니다.

파스칼은 초기의 비판에도 불구하고 계속 진화하였고, 커니건의 지적은 볼랜드의 터보 파스칼과 같이 상용 제품 개발에 적합하도록 향상된 버전의 언어에는 적용되지 않습니다.커니건이 그의 기사에서 예측했듯이, 이러한 문제를 해결하기 위한 대부분의 확장은 컴파일러에서 컴파일러로 호환되지 않았습니다.그러나 1990년대 초반부터 대부분의 품종은 두 가지로 압축된 것으로 보입니다.ISO와 볼랜드 같은.확장 파스칼은 이러한 초기 비판의 많은 부분을 다루고 있습니다.가변길이 문자열, 변수 초기화, 별도 컴파일, 단락 부울 연산자, 기본값(otherwise) 사례 [44]진술에 대한 조항

참고 항목

참고문헌

  1. ^ "About Microsoft's "Delegates"". Archived from the original on 2012-06-27. We looked very carefully at Delphi Object Pascal and built a working prototype of bound method references in order to understand their interaction with the Java programming language and its APIs ... Our conclusion was that bound method references are unnecessary and detrimental to the language. This decision was made in consultation with Borland International, who had previous experience with bound method references in Delphi Object Pascal.
  2. ^ TechMetrix Research (1999). "History of Java" (PDF). Java Application Servers Report. Archived from the original (PDF) on 2010-12-29. The project went ahead under the name "green" and the language was based on an old model of UCSD Pascal, which makes it possible to generate interpretive code
  3. ^ "A Conversation with James Gosling – ACM Queue". Archived from the original on 16 July 2015. Retrieved 11 August 2015.
  4. ^ Wirth, Niklaus (2000). "The Development of Procedural Programming Languages Personal Contributions and Perspectives". Modular Programming Languages. Lecture Notes in Computer Science. Vol. 1897. pp. 1–10. doi:10.1007/10722581_1. ISBN 978-3-540-67958-5.
  5. ^ 허츠펠트, 앤디."헝가리 folklore.org Wayback Machine에서 2015-11-18 아카이브:Macintosh Stories.2012-03-06 검색.
  6. ^ https://www.computerhistory.org/atchm/adobe-photoshop-source-code/ Wayback Machine, Adobe Photoshop 소스 코드에서 2014-05-07 아카이브
  7. ^ "RAD Studio Application Showcase". 2021-10-29.
  8. ^ tiobe.com 2011년 1월 Wayback Machine, Programming Community Index에서 2012-03-15년 보관.
  9. ^ "Antique Software: Turbo Pascal v5.5". Archived from the original on 2010-11-24. Retrieved 2018-05-17.
  10. ^ 컴퓨터와 컴퓨팅. 개인적인 관점.Niklaus Wirth의 Wayback Machine 2017-05-10 보관
  11. ^ cbi.umn.edu , "John Brackett and Doug Ross와의 인터뷰", p15, Charles Babbage Institute, 2004
  12. ^ Australian Atomic Energy Commission Research Establishment, Lucas Heights, Nuclear Science and Technology Branch Report, Divisional Research (PDF). International Atomic Energy Agency (IEAE) (Report). 1977. p. 22.
  13. ^ 존 우델, 객체 지향 파스칼의 충돌, BYTE, 1989년 7월
  14. ^ M. I. 트로피모프, 파스칼의 종말?, BYTE, 1990년 3월, p. 36.
  15. ^ Rall, L. B. (1987). "An introduction to the scientific computing language Pascal-SC". Computers. 14: 53–69. doi:10.1016/0898-1221(87)90181-7.
  16. ^ PI (1986-08-29). "Cadmus jetzt mit Kulisch-Arithmetik - Uni Karlsruhe gibt Pascal-Compiler nach München" [Cadmus now comes with Kulisch arithmetic - University Karlsruhe delivers Pascal compiler to Munich]. Computerwoche (in German). Munich – Karlsruhe, Germany: IDG Business Media GmbH. Archived from the original on 2016-05-30. Retrieved 2016-05-30.
  17. ^ "Pascal-XSC: Pascal for Extended Scientific Computing". Archived from the original on 2014-01-05.
  18. ^ "XSC Software". Archived from the original on 1 November 2015. Retrieved 11 August 2015.
  19. ^ "Universitaet Wuppertal: Wissenschaftliches Rechnen / Softwaretechnologie". Archived from the original on 6 November 2015. Retrieved 11 August 2015.
  20. ^ Bamberger, Lothar; Davenport, James H.; Fischer, Hans-Christoph; Kok, Jan; Schumacher, Günter; Ullrich, Christian; Wallis, Peter J. L.; Winter, Dik T.; Wolff von Gudenberg, Jürgen (1990). Wallis, Peter J. L. (ed.). Improving Floating-Point Programming (1st ed.). Bath, United Kingdom: John Wiley & Sons Ltd. ISBN 0-471-92437-7.
  21. ^ Michel Gien, "SOL 운영 체제", Usenix Summer '83 Conference, Toronto, ON, (1983년 7월), pp. 75-78
  22. ^ "Overview of the CHORUS Distributed Operating Systems" (PDF). Chorus systems. 1991. Archived from the original (PDF) on February 7, 2015 – via cs.berkeley.edu.
  23. ^ Pascal ISO 7185:1990 Wayback Machine 6.10에서 2012-06-17 아카이브
  24. ^ Mandell, Steven L. (1987). Pascal Programming Today. West Publishing Company. ISBN 978-0-314-33935-5.
  25. ^ a b J. Welsh, W. J. Sneringer, C.A. R. Hoare, "파스칼의 모호성과 불안", 소프트웨어: 실천과 경험 7, pp. 685–696 (1977)
  26. ^ 파스칼, 넬 데일, 칩 윔즈, "Dangling Else", 페이지 160-161 웨이백 머신에서 보관 2017-03-18
  27. ^ "Pascal-S: A Subset and It Implementation", N. Wirthin Pascal – The Language and It Implementation, D.W. Barron, Wiley 1979.
  28. ^ "VAX-11 Pascal V1.0 User's Guide" (PDF).
  29. ^ a b "VSI Pascal for OpenVMS Software Product Description" (PDF). VSI. 2017. Retrieved 2022-02-07.
  30. ^ "Interview with a Pascal Architect - Compaq Pascal". Archived from the original on 2021-10-19. Retrieved 2022-05-28.
  31. ^ "Compaq Pascal Version 5.8 for Tru64 UNIX Software Product Description". Archived from the original on 2020-07-25. Retrieved 2022-05-28.
  32. ^ "VSI's John Reagan Interview on GEM vs. LLVM for X86/64". eCube Systems. 2019-03-12. Archived from the original on 2020-08-12. Retrieved 2022-02-07.
  33. ^ ISO/IEC 7185:1990 Pascal (PDF). Archived from the original (PDF) on 27 January 2016. Retrieved 16 September 2014.
  34. ^ Wirth, Niklaus (July 1973). The Programming Language Pascal (Revised Report). ETH Zürich. doi:10.3929/ethz-a-000814158.
  35. ^ Extended Pascal: ISO/IEC 10206:1990. Archived from the original on 2016-03-27. Retrieved 16 September 2014.
  36. ^ "Language standards: Pascal, Extended Pascal, Fortan". Archived from the original on 2014-07-14. Retrieved 16 September 2014.
  37. ^ 770X3.160-1989 – IEEE/ANSI Standard for the Programming Language Extended Pascal. 1990. doi:10.1109/IEEESTD.1990.101061. ISBN 978-0-7381-4247-0.
  38. ^ "Extended Pascal - Free Pascal wiki". wiki.freepascal.org.
  39. ^ "Virtual Pascal for OS/2". Archived from the original on 30 August 2011. Retrieved 3 April 2016.
  40. ^ Wolfgang (October 15, 2020). "WDSibyl: Visual Development Environment". WDSibyl.org. Archived from the original on 2020-02-12. Retrieved 2020-04-20.
  41. ^ "netlabs.org – Project: Open Sibyl". Archived from the original on 4 March 2016. Retrieved 3 April 2016.
  42. ^ 브라이언 W. 커니건 (1981)."파스칼이 내가 가장 좋아하는 프로그래밍 언어가 아닌 이유"Wayback Machine에서 2009-04-28 보관됨
  43. ^ O. 르까르메, P.Desjardins, "프로그래밍 언어 파스칼에 대한 더 많은 코멘트", Acta Informatica 4, pp. 231–243 (1975).
  44. ^ "Extended Pascal". Archived from the original on 2015-10-18.

추가열람

  • Niklaus Wirth: 프로그래밍 언어 파스칼. 35–63, Acta Informatica, 1971 1권
  • C. A. R. Hoare: "데이터 구조에 관한 참고"O.J. 달, E.W. 다이크스트라, C.A. R. Hoare 편집자, Structured Programming, 83-174페이지학술출판사, 1972
  • C. A. R. Hoare, Niklaus Wirth: 프로그래밍 언어 파스칼의 공리적 정의335–355, Acta Informatica, 2권, 1973.
  • Kathleen Jensen and Niklaus Wirth: Pascal사용 설명서보고서Springer-Verlag, 1974, 1985, 1991, ISBN 0-387-97649-3ISBN 3-540-97649-3.
  • Niklaus Wirth : 알고리즘 + 데이터 구조 = 프로그램Prentice-Hall, 1975, ISBN 0-13-022418-9.
  • Niklaus Wirth: 프로그래밍 언어 Pascal에 대한 평가.ACM SIGPLAN 공지사항 제10권, 1975년 6월 6호
  • N. 워스, 그리고 A.I. 와서먼, ed: 프로그래밍 언어 설계IEEE 컴퓨터학회 출판부, 1980
  • D. W. 배런 (Ed.): 파스칼 언어와 그 구현John Wiley 1981, ISBN 0-471-27835-1
  • Peter Grogono: 프로그래밍 in Pascal, 개정판, Addison-Wesley, 1980
  • 리처드 S.포사이스: 파스칼의 일과 놀이, 채프먼과 홀, 1982
  • N. Wirth, M. Broy, Ed, 그리고 E.Denert, ed: 소프트웨어 선구자들의 파스칼과 그 후계자들: 소프트웨어 공학에 대한 기여들.Springer-Verlag, 2002, ISBN 3-540-43081-4
  • N. Wirth: 파스칼의 발전에 대한 회상ACM SIGPLAN 공지사항, 제28권, No 3, 1993년 3월