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

파스칼
패러다임다중 패러다임 (명령형 절차적 구조적)
설계자니클라우스 비르트
개발자니클라우스 비르트
발표일1970년(55년 전)(1970)
주요 구현체
UCSD, 터보
오브젝트 파스칼
영향을 받은 언어
알골
영향을 준 언어
델파이, 크롬

파스칼(Pascal)은 1969년에 스위스 ETH 취리히컴퓨터 과학자 니클라우스 비르트가 개발한 프로그래밍 언어로, 당대의 가장 인기있는 교육용 언어 중 하나였으며, 1980년대와 1990년대 초반에 걸쳐 널리 사용되었다.

파스칼은 발표 당시에는 아주 기본적인 컴퓨터 언어의 요소만을 가지고 있었으므로 시스템을 직접 다루기에는 부족하였다. 파스칼이라는 이름은 프랑스의 수학자이자 철학자 블레즈 파스칼의 이름을 딴 것이다. 포인터를 사용한 구조적 프로그래밍데이터 구조화(data structuring)를 그 특징으로 한다.

과학 연구를 목적으로 만들어진 고급언어알골 60의 영향을 받은 까닭에, 같은 시기에 마찬가지 영향을 받아 제작된 C와 여러 가지 면에서 유사한 점을 갖는다. 그러나 코드를 간결하게 하고 버그를 더 쉽게 잡아내기 위한 목적으로 몇 가지 기능을 제한함으로써 결과적으로 C 언어에 비해 활용도가 떨어지는 언어가 되었다. 그러나 완전히 비실용적인 언어라는 뜻은 아니며, 실제로 TeX나 초기 매킨토시 운영 체제 제작에 사용됐다. 최근[언제?]에는 파스칼 컴파일러 자체가 크게 개선되고 소프트웨어 개발 기술의 발전으로 이런 사소한 차이점은 거의 무시할 수 있는 단점이 되었다. 어셈블리를 직접 사용한다.

현재는 초기의 파스칼에 비해 많은 부분이 추가, 개선되고 다른 언어의 장점들을 따와 상용 파스칼 컴파일러인 델파이는 C++과 거의 기능 차이가 없다.

컴파일러

[편집]

많은 변종들이 존재하며, 객체 지향 프로그래밍을 위해 기능을 추가한 변종들도 다수 존재한다. 엠바카데로 사의 델파이카일릭스는 파스칼의 직계 후손이라 할 수 있는 오브젝트 파스칼을 사용한다. 델파이 7 버전부터는 델파이라는 말을 사용하기도 한다.

오픈 소스로 제작된 프리 파스칼이나 GNU 파스칼도 있다.

개발도구

[편집]

델파이 언어로 불리는 변종 오브젝트 파스칼은 델파이, 프리 파스칼 IDE, 라자루스 등에서 개발할 수 있다. 볼랜드 파스칼이라 불리는 델파이 이전의 오브젝트 파스칼은 터보 파스칼, 프리 파스칼 IDE에서 개발할 수 있다.

언어 구성

[편집]

Hello world

[편집]
program HelloWorld(output); begin   writeln('Hello, World!') end. 

콘솔 입출력

[편집]
program WriteName;  VAR   Name:string; { This declares the variable Name as a string }  BEGIN   Write('Please give your name: ');   Readln(Name); { Readln reads the string printed on the screen }   WriteLn('Hello ', Name); END. 

자료 구조

[편집]
var   r: Real;   i: Integer;   c: Char;   b: Boolean;   e: (apple, pear, banana, orange, lemon); 

일반 유형의 하부 범위는 다음과 같이 짤 수 있다:

type   fruit=(apple, pear, banana, orange, lemon);  var   x: 1..10;   y: 'a'..'z';   z: pear..orange; 

다른 프로그래밍 언어와 달리, 파스칼은 집합 유형을 지원한다:

var   set1: set of 1..10;   set2: set of 'a'..'z';   set3: set of pear..orange; 

집합은 현대 수학에 있어 기본적인 개념이며 수많은 알고리즘이 집합을 사용하여 정의된다. 그러므로 이러한 알고리즘을 추가하는 것은 파스칼에 매우 알맞다고 볼 수 있다. 집합형 연산은 효율적이기도 하다.

많은 파스칼 컴파일러가

if i in [5..10] then   ... 

if (i>4) and (i<11) then   ... 

보다 더 빠르게 수행한다.

형(type)은 선언을 통해 다른 형으로부터 정의될 수 있다:

type   x = Integer;   y = x;  ... 

또한, 복잡한 형은 단순한 형으로 구성할 수 있다:

type   a = Array [1..10] of Integer;   b = record         x: Integer;         y: Char       end;   c = File of a; 

포인터

[편집]

파스칼은 포인터 사용을 지원한다:

 type    a = ^b;    b = record          x: Integer;          y: Char;          z: a        end;  var    pointer_to_b: a; 

가변 pointer_to_b가 자료형 b 레코드의 포인터이다. 포인터들은 선언 전에 사용할 수 있다. 새로운 레코드를 만들어 값10A를 레코드 안의 필드 a, b로 할당하려면, 다음과 같은 명령어를 사용하면 된다:

   new(pointer_to_b);    pointer_to_b^.x := 10;    pointer_to_b^.y := 'A';    pointer_to_b^.z := nil;  ... 

한정자를 보다 효과적으로 통제하기 위해서는 with 문을 써서 다음과 같은 방식을 사용할 수도 있다.

   new(pointer_to_b);    with pointer_to_b^ do      begin          x := 10;          y := 'A';          z := nil      end;  ... 

제어 구조

[편집]

파스칼은 구조 프로그래밍 언어이며, 제어 흐름을 goto 문 없이 표준화할 수 있다.

 while a <> b do writeln('Waiting');   if a > b then    writeln('Condition met')  else    writeln('Condition false');   for i := 1 to 10 do writeln('Iteration: ', i:1);   repeat a := a + 1 until a = 10; 

절차 및 함수

[편집]

파스칼 구조는 절차와 함수로 짜여진다.

 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. 

절차와 함수는 어느 깊이로든 놓일 수 있으며, 프로그램 구조는 논리 외부 블록이다.

같이 보기

[편집]

외부 링크

[편집]