파스칼 (프로그래밍 언어)
패러다임 | 다중 패러다임 (명령형 절차적 구조적) |
---|---|
설계자 | 니클라우스 비르트 |
개발자 | 니클라우스 비르트 |
발표일 | 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
레코드의 포인터이다. 포인터들은 선언 전에 사용할 수 있다. 새로운 레코드를 만들어 값10
과 A
를 레코드 안의 필드 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.
절차와 함수는 어느 깊이로든 놓일 수 있으며, 프로그램 구조는 논리 외부 블록이다.
같이 보기
[편집]외부 링크
[편집]- (영어) 코드 짜는 법:파스칼
- (영어) 파스칼 배우기 강좌