파스칼의 진화에 어떤 특징이 기여 했습니까?


17

파스칼 언어의 자세한 역사를 편집 중이며 누락 된 세부 사항이 몇 가지 있습니다.

오늘날 우리가 당연한 것으로 생각하는 많은 기능이 있습니다. 파스칼의 진화에 크게 기여한 기능은 무엇이며 왜 중요한가?

플랫폼 또는 프레임 워크 기능이 아닌 언어 기능을 찾고 있습니다. 따라서 연산자 오버로드 또는 기본 매개 변수와 같지만 Linux 지원 또는 새로운 리치 텍스트 위젯은 아닙니다.

Pascal에는 몇 가지 맛 (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal 등)이 있으며 서로 다른 시간에 동시에 동일한 기능을 도입했습니다. 괜찮습니다. 나는 전체 파스칼 언어를보고하고있어 경우에 중요한 이정표가 발생 (날짜, 버전 등)


@Jim 귀하의 질문에 날짜 목록이 필요했지만 다른 사람이 왜 중요하다고 생각하는지에 대한 정보는 요청하지 않았습니다. 나는 당신의 질문에 그 측면을 포착하고 다시 열었습니다.

2
터보 파스칼 제품이 파스칼 세계에 혁명을 일으킨다는 것을 알고 있습니까? IBM PC 세계도 실제로? 특히 문자열을 고정했기 때문에.

4
UCSD 파스칼을 잊지 마십시오! Java가 Sun의 눈에 반짝이기 전에 바이트 코드 (p 코드)를 도입했습니다.
Macneil

1
+1 @Macneil UCSD p-Code 및 Smalltalk VM은 최신 관리 코드 (Java, .NET)에 대해 이야기 할 때 항상 설명하는 것입니다. 많은 '현대적인'것들을 볼 때 데자뷰를 갖는 것은 재미있다. ( Apps이것은 클라이언트 서버의 새로운 맛일 뿐이다).
Jeroen Wiert Pluimers

1
@Jeroen Pluimers : DVCS가 "새롭다"는이 이야기에 만족합니다. Sun에서 SCCS / Teamware를 사용했고 Torvalds는 BitKeeper를 사용했습니다. CVS를 보았을 때, 나는 그것이 Torvalds와 마찬가지로 파손되었음을 알았습니다. SVN에 대해 처음 들었을 때 나는 "아, 마침내 고쳤다"고 생각했다. 하지만. OSS 세계 (그리고 Joel!)는 CVS가 모든 것을 잘못하여 너무나 손상되었으므로 새로운 일이라고 믿어야합니다!
Macneil

답변:


10

언어의 역사적 관점에서 파스칼의 가장 큰 기여는 강력한 유형 안전성이었습니다. 파스칼 측이이긴 전투는 대부분 끝났고 산업의 전환점은 자바였습니다. 그러나 아주 오랫동안 C는 파스칼보다 우선권을 얻었습니다. 이로 인해 자신이 코더를 크게 성장 시켰다고 생각한 사람들은 포인터처럼 정수를 조작하는 자유를 원했습니다. 그러나 파스칼의 실제 구현에는 판별 필드를 동적으로 확인하지 않았거나 C와 동등한 점에 대한 포인터의 완전한 유형 캐스팅이있는 노조와 같은 허점이있었습니다 (터보 파스칼은 그 중 하나임).

이것은 복잡한 ALGOL 68 spec [1]의 단순화가 출발점이 될 수 있습니다.

[1] 언젠가 ALGOL 68 보고서를 읽어보십시오. 확실히 60 년대의 제품입니다! 웹의 한 사이트는 '버스 토큰', '보이지 않는 생산 트리', '주요 환경', '근친상간 노동 조합', '개념', '개념', '중도', '하이퍼 노트', ' paranotions '등


15

파스칼의 역사에서 가장 중요한 두 가지 원동력은 다음과 같습니다.

  1. 타입 안전성 : 파스칼은 언어에서 타입 안전성이 중요하고 중요하다는 신념을 만드는 데 중요했습니다.
  2. 컴파일러 효율성 : Pascal은 항상 단일 패스 언어로 설계되었으며, 전력을 포기하지 않고도 컴파일러가 얼마나 빠른지 세계를 보여줍니다. 빠른 컴파일러를 만드는 것은 잘 디자인되고 읽기 쉬운 언어를 만드는 것이기도합니다. 볼랜드의 천재도 모든 기능과 성능을 제공했습니다.

PASCAL도 컴파일러가 PASCAL 자체로 작성된 최초의 언어가 아니 었습니까? 그 당시의 또 다른 주목할만한 점은 가상 파스칼 머신을위한 P 코드였습니다. 다른 기계에서 PASCAL을 구현하기 위해서는 P- 코드에 대한 인터프리터 또는 어셈블러를 작성해야했습니다.
Ingo

타입 안전성에는 대부분의 파스칼 컴파일러에서 런타임 검사라는 메커니즘이 포함되어 있다고 덧붙였습니다. (거의?) 모든 컴파일러에는 C 컴파일러가 선호하는 LINT 방식과 근본적으로 다릅니다.
Marco van de Voort

11

Niklaus Wirth의 역사를 찾아보십시오. 파스칼은 인생을 가르치는 언어로 시작했습니다. "알고리즘 + 데이터 구조 = 프로그램"은 좋은 출발점입니다.

당시 Pascal은 Algol 68 및 PL / 1보다 훨씬 간단했습니다. Fortran4와 달리 구조와 선언 및 강력한 유형 안전성을 강제했습니다 (Fortran 77은 약간 향상되었지만 여전히 빠른 속도로 느슨하게 재생할 수 있습니다). 그리고 COBOL과 비교하여 짧고 간단하며 프로그램 작성이 더 쉬웠습니다. (600 대신 약 6 줄의 세계)

파스칼에는 문자 배열과 같은 것이 문자열 처리를위한 것이 었습니다. 수년에 걸쳐 상황이 개선되었습니다.

파스칼 히스토리에 대해 자세히 알아 보려면 몇 가지 사항을 고려해야합니다.

  • Wirth의 원본 (표준 파스칼)
  • Vax에서 DEC (Digital Equipment Corp)의 확장
  • UCSD p- 시스템 (많은 컴퓨터, 특히 Apple-2)
  • 터보 파스칼
  • Apollo Domain Pascal (Aegis라고도하는 Domain / OS 운영 체제를 작성하는 데 사용됨)
  • 객체와 단위를 가진 터보 파스칼 (5.5 이상 버전. 편집 : 방금 TP 5.5 OOP PDF 발견 )
  • 델파이

1980 년대에 파스칼과 C 사이에 거대한 슬러그 페스트가있었습니다. 두 캠프에서 엄청난 양의 개발과 활동이있었습니다.

결과적으로 Bliss-32, Algol 및 PL / 1과 같은 이상하고 멋진 것들이 거의 사라졌습니다.

편집 : 일부 특수 속성을 부여하는 문자 배열을 포장 할 수 있지만 이제 문자열 처리로 알려진 것을 원한다면 직접 확장해야했습니다.


IIRC는 packed array[1..n] of char;예를 들어 Read (ln) 및 Write (ln)
Gerry

예, readln, writeln은 가변 문자 수의 입력 / 출력을 처리 할 수 ​​있다는 점에서 약간 특별했습니다. 1980 년대 후반에는 악의적이고 죄악이 많고 변수 구성 요소를 수용하기 때문에 언어 구성을 깨뜨리는 것에 대해 약간의 혼란이있었습니다. 순수 주의자들은 이것을 미워했습니다. 우리 중 나머지는 그것에 대해 너무 걱정하지 않고 방금 사용했습니다.
quick_now

어쩌면 "다른"Wirth 언어 Modula2의 모듈 / 장치 시스템 일 수도 있습니다. (Pascal standads에서 그것을 얻기위한 노력을 통해 간접적이지만, 다른 구문으로 확장 파스칼 표준을 만들었습니다)
Marco van de Voort

5

객체 지향 확장! Object Pascal은 90 년대 중반 델파이 (1)의 출시로 비공식적 인 최대 표준이었습니다. 하나만 선택하기는 어렵지만 전체적으로 객체 모델의 전체 핵심은 언어를 현대적 상태로 끌어 올리는 데 도움이되었습니다. 불행히도 오늘날까지 모든 컴파일러가 코딩 대칭을 준수하는 공식 단일 통일 표준으로 만들어지지 않았습니다.

고맙게도 Free Pascal 프로젝트 개발자는 Borland와 Embarcadero가 Delphi에 추가 한 기능을 상당히 수용하고 있습니다. RemObjects는 그리 많지 않지만 델파이 프리즘에서 Embarcadero와 관련이 있으므로 표준 (언어를 더 .NET 호환으로 만들기 위해)에서 벗어나면 문서화됩니다.


8
객체는 터보 파스칼과 파스칼로 5.5 도입
mcottle

1
프로 시저 및 함수는 기본적으로 정적입니다. virtual서브 클래스로 대체 할 수 있도록 키워드 를 사용해야했습니다 .

1
가상은 델파이에서 예약어가 아닙니다. Delphi 예약어 및 Prism 키워드 목록은 여기여기 에서 찾을 수 있습니다 .
David I

2
오브젝트는 Apple에 의해 Pascal에 도입되었습니다. en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Carl Manaster

2
@Carl-클래식 맥이 파스칼로 프로그래밍 된 것을 잊어 버렸고, Wirth가 공동으로 만든 파스칼의 OO 버전이라는 것을 몰랐습니다.
mcottle

4

MS-DOS에서 Pascal을 오래 사용했을 때 기억 나는 것 한두 가지 :

Turbo Pascal은 80 년대에 일종의 IDE를 도입했습니다. (그리고 UCSD Pascal에 비해 컴파일 성능이 크게 향상되었습니다.

90 년대 중반 쯤 볼랜드는 터보에서 볼랜드 파스칼로 . 첫 단계로 Units를 도입하여 대규모 프로젝트를 별도의 컴파일 단위로 분할 할 수있었습니다.

나중에 그들은 객체 지향 프로그래밍도 추가했습니다.


터보 파스칼은 간단한 제품이었습니다. 볼랜드 파스칼 등 조립과 같은 여분의 물건을 많이했다

2
Turbo Pascal (v4 IIRC)에 도입 된 장치. 이들은 현재 dcu 파일의 전신 인 .tpu (터보 파스칼 유닛) 파일로 컴파일되었습니다. 나는 그것들이 Wirth의 Modula-2 언어의 개념에 기초한 것으로 생각합니다.
Gerry

1
ISTR UCSD p-System에도 유닛이 있었지만 Turbo Pascal보다 먼저 출시되었는지는 알 수 없습니다.
TMN

흥미롭게도 1980 년 Atari 2600 용 "BASIC PROGRAMMING"카트리지는 CodeView 화면과 놀라 울 정도로 유사한 프로그래밍 화면을 제공했습니다. 화면의 한 영역에서 프로그램 (현재 실행 지점이 강조 표시됨), 변수 값 (1 초) 및 "print"문의 출력 (3 번째)을 볼 수 있습니다. 불행히도, 프로그래머가 사용할 수있는 RAM의 양은 너무 제한되어서 "장난감"응용 프로그램에만 국한된 것이 아니라 장난감이 아니 었습니다. 다음과 같은 플랫폼에서 여전히 흥미로운 기술적 성과입니다.
supercat

... 무려 128 바이트 의 RAM (스크린 포인터에 필요한 24 바이트 포함)과 4K의 ROM (문자 모양 포함)에 맞는 전체 개발 시스템과 함께. 이러한 제약 조건을 감안할 때 사용자에게 64 바이트의 RAM이 프로그램, 변수 및 출력을 보유 할 수있게하는 것은 매우 깔끔한 트릭입니다. 너무 나쁜 Atari는 "SARA"칩 (128 바이트에서 256 바이트로 RAM을 두 배로 늘리기)을 개발하기 전에 기본 프로그래밍을 발표했습니다. 프로그램에 128 바이트의 RAM을 사용하고 변수와 출력에 64를 사용하는 것이 모든 것에 64 바이트를 사용하는 것보다 훨씬 낫습니다.
supercat

4

파스칼의 핵심 진화 단계 중 하나는 현의 적절한 개념이었습니다. ISO 7185 ( "표준 파스칼")에는 이러한 기능이 없었습니다. 그러나 모든 실제 프로그래머가이를 필요로했으며 가능한 파스칼 구현 (예 : Borland / Turbo Pascal)이이를 제공했습니다.


4

델파이의 파스칼 언어 혁신을 되돌아 보면-클래스, 프로퍼티, 메소드, 이벤트 (PME) 모델과 "게시"섹션을 추가하겠습니다. 따라서 네이티브 코드를 사용하고 사용하기 쉽고 구성 요소 작성을 확장 할 수있었습니다. 구성 요소는 소프트웨어 IC에 대한 Brad Cox의 약속을 이행했습니다.



3

80 년대와 90 년대 초 파스칼의 여러 맛 사이의 싸움.

당신은 한 애플 파스칼 , 마이크로 소프트 파스칼과 QuickPascal , 그리고 터보 파스칼 .

모든 방법으로 Object Pascal이 도입되었습니다 (QuickPascal 1.0과 Turbo Pascal 5.5 가 같은 시간대에). OO가 '쿨'해졌 기 때문에 플랫폼, Microsoft 및 Borland에 필요했기 때문에 Apple (QuickPascal은 곧 사망했으며 Turbo Pascal 6.0은 Turbo Vision 이라는 합리적인 OO 프레임 워크를 추가했습니다. ).

Rudy Velthuis은 (는) 자신의 포럼 게시물 에서 이것에 대해 매우 완전합니다 .

DOS 6.22와 그 시대의 DOS 파스칼 컴파일러ISO 이미지를 다운로드 할 수 있습니다 .


2

인터페이스를 (Delphi 3 IIRC에) 도입하는 것이 현대 객체 지향 언어로 만드는 데 매우 중요하다고 생각합니다.


그 주 인터페이스 상속이 아닌 OO 그 자체에 있지만 다형성의 진정한 형태 중 하나가 될 것으로 간주됩니다. COM 과 동일한 VMT 형식을 공유했기 때문에 COM 과의 상호 운용이 훨씬 쉬워졌습니다 (사람들은 좋은 점 또는 나쁜 점에 대해 폭 넓은 의견을 가지고 있습니다 <g>).
Jeroen Wiert Pluimers

2

익명의 메소드와 제네릭을 믹스에 추가하겠습니다.


1
아마도 가장 최신 버전의 델파이 일 것입니다. 필자는 델파이 7을 사용 했으므로 익명 메소드 나 제네릭을 사용하지는 않았다.
Frank Shearar


2

나를 위해 두 가지 가장 큰 것 (C와 같은 다른 언어 뒤에)은 대소 문자를 구분하지 않고 컴파일러 속도였습니다.

그리고 그 후에는 핀란드어 키보드로 작성하는 것이 더 쉽다는 사실이 있습니다. 나는 {} 또는 도달하기 어려운 다른 키가 끊임없이 필요하지 않기 때문입니다.

나는 Delphi2 이후에 탑승했지만 몇 년 동안 D1을 사용했습니다 ...


1

Dahl, Dijkstra 및 Hoare의 "Structured Programming"으로 시작하십시오 . Dijkstra의 섹션은 오늘날에도 기본입니다. 데이터 구조화에 대한 Tony Hoare의 섹션은 PASCAL을위한 많은 토대를 마련했습니다. (Dahl의 섹션은 결국 객체 지향 프로그래밍이 된 것에 대해 이야기했습니다. 그는 Simula 67에서 클래스가 된 것을 설명했습니다.)

Wirth의 ALGOL-60 변형을 구현 한 ALGOL-W를 살펴보십시오.

또한 PL / I 및 IBM 360 링크 편집기 (링커)에 대해서도 알아야합니다. 알래스카 주노의 1 월에 당밀보다 느리게 진행된 사소한 문제와 함께, 그것은 일반성의 경이였습니다. PASCAL은 속도를 위해 한 번에 컴파일 및 링크되도록 특별히 설계되었습니다. (언어는 메모리가 많은 CDC 6400 주니어 슈퍼 컴퓨터에서 언어를 시작하여 원 패스 컴파일러를 실용적으로 만드는 데 도움이되었습니다.)

ETH 취리히에서 PASCAL의 두 가지 주요 버전이 실제로 존재했습니다. PASCAL로 현재 모든 사람들이 알고있는 언어는 실제로 두 번째 버전 인 PASCAL2였습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.