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

Pascal

1. 개요
2. 역사
3. 설명
4. 점유율과 플랫폼별 지원상황
4.1. 파스칼로 만들어진 프로그램들
5. 여담
6. 델파이

1. 개요

프로그래밍 언어의 한 종류. 분류상 C와 비슷한 고급 프로그래밍 언어에 속한다.

2. 역사

1970년에 스위스의 니클라우스 비르트(Niklaus Wirth)가 개발했다. 문법 설계가 깔끔하기 때문에 구조적 프로그래밍의 개념을 구현하고 설명하기에 알맞아서 교육용 언어로 분류된다.

실제로 1990년대 후반까지 미국의 고등학교와 대학에서 프로그래밍 교육을 위해서 가장 널리 사용된 언어였다. 하지만 경쟁 언어라 할 수 있는 C가 90년대 중반부터 대인기를 끌면서 밀리다가 21세기에 들어오면서 C++, Java 시대를 거치면서 존재감이 사라진 언어이다. 전성기 때 대표적이었던 Borland 사의 터보 파스칼(Turbo Pascal)이 사실상의 표준이 되면서 독자적 언어 사양을 늘려나가고, 이 과정에서 파편화가 점점 심해진 것도 나중에 문제가 되었다. 현재 남아있는 파스칼 사용 분야 대부분은 가장 성공했던 델파이(Delphi) 제품과 관련된다.

죽은 언어라고도 하는 이도 있지만 아직 죽지는 않았다. 사실상 언어라는 게 정말로 아예 안 쓰이는 것이 아니면 죽었다고 하기 어렵다. 그리고 그런 말이 나오면 귀신같이 화석들이 뛰쳐나와서 '나 아직도 프로그램 만든다 안죽었다!' 라고 하기 때문에 결판이 나지 않는다 아래에서도 보이지만 Delphi라는 이름으로 아직도 시장에 출시되는 개발 툴도 있으며, 오픈소스 영역에서는 Free Pascal이라는 컴파일러도 출시된다. 웬만한 상용 프로그램의 수준을 능가하는 수준의 공개 프로그램도 활발하며 이를 사용한 Lazarus라는 통합 개발 환경도 지속적으로 개발되고 있다.

컴퓨터 언어의 역사를 소개할 때 나오는 많은 언어들이 실제로 그 언어를 사용해볼 수 있는 컴파일러를 구하고자 할 때 인터넷을 아무리 뒤져도 구할 수 없거나, 구할 수 있어도 매우 조잡한 수준의 옛날옛적의 프로그램밖에 없는 경우도 흔한 현실[1]에서 파스칼 언어는 단 한 번의 검색으로도 꽤 훌륭한 개발환경을 지닌 컴파일러를 무료로 구할 수 있는 언어이다. 아직도 많은 일반 사용자와 팬들이 존재하면서 활동하고 있다는 것이다. 비록 주류 언어에서 밀려난 것은 사실이지만 무수히 많은 컴퓨터 언어 중에서 그래도 자기 자리를 아직도 지키고 있는 언어이다.

Ada라는 언어가 파스칼의 친척 쯤 되는 언어이다. 생긴 것도 비슷하다. 미국 국방성을 위하여 개발된 언어이고 무기제어, 항공우주산업 등에 쓰이고 있다. 영화에도 자주 출연한다.

3. 설명

교육용이라고 해서 진짜 교육을 목적으로 고안된 언어란 뜻은 아니다. 당시의 다른 언어(포트란, 코볼, 베이직)들이 비구조적 언어의 형태를 띤 고문 수준으로 복잡했기 때문에 '이 정도면 프로그래밍의 원리를 가르칠 때 쓰면 좋지'하고 내놓은 식. 문법이 엄격하고 다중으로 해석될 여지가 없어서[2] 프로그래밍 개념을 익히는 데 좋다는 의미 정도이다. 스펙이나 퍼포먼스를 비교해 봐도 C/C++에 뒤지지 않는다. 실제로 지금도 윈도우 기반의 기존 코드가 현장에서 쓰이고 있으며 고대에서는 C와 함께 양대산맥이었다. 매킨토시쪽에서는 오브젝트 파스칼이 상당히 세력있는 객체지향 개발 언어였으며, 포토샵 1.0도 오브젝트 파스칼로 개발되었다. 국내 압축프로그램인 빵집은 파스칼 기반의 델파이로 개발되었다. 2인의 제작자가 개발한 그녀의 기사단도 델파이. 또다른 지식의 성전시리즈도 파스칼.[3] 애플 시대까지 거슬러 올라가면 위저드리 시리즈 초기작을 비롯한 많은 게임들이 파스칼로 개발되었다. 여담으로, 이는 사실 언어 자체가 특별히 탁월하다기 보다는 볼랜드 사의 터보 파스칼 시리즈가 워낙 품질이 좋아서 그런 것이다. 비주얼 스튜디오가 득세하기 전까진 프로그래밍 언어계에서 볼랜드가 甲이었던 시절이 있었다.

파스칼은 C와 마찬가지로 알골계 언어이므로 전체적으로 보면 C과 문법의 스타일이 조금 다른 것을 빼곤 큰 차이점은 없지만 여러 소소한 차이점이 있다. 그 중에서 중요한 문제 한 가지는, 배열이나 문자열 자체가 하나의 타입인 것이 아니고 배열과 문자열의 크기 및 범위까지를 포함해서 타입으로 정의한다는 점이다. 예컨대 Array 1..10 of Integer 와 Array 2..8 of Integer 는 서로 다른 타입이다.[4] 이 때문에 컴파일러에서 배열의 범위 검사 등을 하기가 매우 용이해졌기 때문에 더 높은 안전성을 보장하지만, 임의의 길이의 배열을 변수로 받는 함수 등을 정의할 수 없다는 점은 많은 프로그래머들, 특히 C 등의 언어에 익숙한 프로그래머들이 쉽게 받아들이기 어려운 것이었다. 이 때문에 여러 상업용 컴파일러들이 이를 수정한 문법을 제시하였지만, 이런 부분은 표준이 아니라서 서로 호환되지 않는다.

특히 '문자열을 저장할 때 그 길이를 같이 저장한다'라는 개념은 일명 '파스칼 식 문자열'로 불리우며, 문자열의 끝에 특수한 기호를 두어 끝을 표시하는 'C 식 문자열' 과 함께 전산학에서 중요한 떡밥이 되었다. 파스칼 식 문자열은 용량에 있어서 손해를 보고 길이가 수정될 때마다 매번 길이를 계산해서 업데이트해 줘야 하지만 긴 문자열들을 처리할 때 속도상에 이득이 있다. (길이를 구할 때, C 문자열의 경우 무조건 처음부터 훑으면서 처리해야 하는 반면 파스칼 식 문자열은 바로 길이를 얻을 수 있다. 참고로, C++의 std::string도 길이를 같이 저장한다.) 이 때문에 많은 수의 데이터를 빠르게 처리해야 하는 마이크로소프트 엑셀에서는 C언어 계열로 만들어졌지만 자체적으로 파스칼 식 문자열 저장 형식을 만들어서 각 '셀'의 정보를 저장한다.

파스칼에서도 포인터를 지원하며 또한 함수와 프로시저를 구분하는데, 리턴값이 있는 것이 함수이며 없는 것이 프로시저이다. 프로시저는 C에서의 void 타입 함수와 유사하다. 파스칼에서는 함수나 프로시저 내부에서 다시 함수나 프로시저를 정의해서 해당 함수/프로시저 내부에서만 사용하도록 할 수 있다. 파스칼 함수의 리턴값은 함수 중간의 어디에서나 할당될 수 있으며, 리턴값을 할당한 후에도 함수는 코드 마지막까지 계속 실행된다. 확장자는 .pas를 쓴다.

이래저래 콩라인을 타면서 우여곡절이 많았던 언어. 파스칼이 처음 나왔던 시기만 해도 '대세 언어'는 아니었으며, 실무에서 쓰이는 많은 고전 언어들에 밀려 교육용으로 좋고 많이 알려진 언어 중 하나 수준이었다. 고전 전산 개그(?)인 "Real programmers don't use pascal'[5]을 보면 많은 현역 프로그래머들이 파스칼을 '뭐 나쁘진 않은데 진지한 업무현장에서 쓸 만한 건 좀 아니지 엣헴' 하면서 자기 나름대로 선을 긋고 있었음을 알 수 있다.[6] 심지어 C 언어의 아버지 중 하나인 커닝햄은 '내가 가장 좋아하는 언어가 파스칼이 아닌 이유[7]'라는 글까지 썼다. 물론 이런 이야기들은 자동차 동호회의 논쟁처럼 극히 편파적인 말들인 것도 사실이다.[8]

이후 고전 개인능력과시(...) 언어[9]의 시대가 저물어가면서 파스칼 같은 언어가 살아나나 싶었더니만 C가 미친듯이 성장하면서 파스칼은 물론 다른 언어들까지 땅바닥에 처박히게 되며, '좋기는 좋은데 하여간 대세는 안되는 언어'로 지내며 시들시들 고사위기로 접어들게 된다. 이 때문에 국내 파스칼/델파이 커뮤니티를 보면 뭔가 비주류 웹사이트의 스멜을 느끼지 않을 수가 없다. 전체적인 유저 연령대도 높고, 대상도 윈도우 클라이언트 쪽에 고여있다. (델파이를 인수한 엠바카데로에서는 여러 플랫폼 지원을 광고하면서 노력하지만 완성도는 떨어진다.) 주기적으로 델파이가 죽었느냐, 아니 안죽었다, 아직 내 주위에서는 현역이다 등의 화제가 올라오면서 대세에 대한 불안정함을 느낌과 동시에 델파이로 다진 유저들의 입지를 보며 안심하는 일의 반복.

4. 점유율과 플랫폼별 지원상황

C나 C++에 밀려서 사라질 듯 했던 파스칼은 객체지향을 받아들이면서 부활했다. C에서 C++이 파생된 것처럼 파스칼에서도 Object Pascal이라는 놈이 파생된 것인데, C++을 따라잡기 위해 OOP 개념을 적극적으로 도입했다.

애플에서 처음 만든 Object-Pascal은 당대의 메이저 컴파일러 제작사인 볼랜드 사가 1989년에 Turbo Pascal 5.5 부터 이것을 지원하기 시작하면서 급부상했다. 의외라고 생각할지 모르지만, 애플은 1980년대 초기부터 애플 Lisa 와 MC68K 계열 CPU가 탑재되던 구형 매킨토시 컴퓨터에서 사용할 프로그래밍 언어의 개발을 진행했으며, 그 산물 중 하나가 바로 이 Object-Pascal 이다.[10]

Turbo C/C++에 이은 쓸만한 언어로 취급받던 Object Pascal은 Borland Delphi[11]로 탄생하며 시장에 충격을 주었다. 초창기에는 비주얼 베이직을 가볍게 쌈싸먹는 생산성과 기능 지원, 효과적인 컴파일을 통해 얻은 C++과 거의 맞먹는 성능으로 국내에서도 많이들 사용했다. 당시 MS 비주얼 C++의 MFC는 기껏 해야 열 몇 개, 성능을 상당히 희생하고 직관적인 시각적 다이얼로그 편집을 추구한 비주얼 베이직이 몇 십 개 정도의 드래그-드롭 컨트롤을 가지고 있었던 데 반해, 델파이는 시작부터 윈도우 API의 거의 모든 기능과 어지간한 표준 라이브러리를 망라한 백 몇 십 개의 컴포넌트를 가지고 있었다. 이게 단순히 GUI 컴포넌트만 이러한 형태로 존재하는 것이 아닌, 네트웍 소켓 등의 눈에 보이지 않는 것들도 죄다 컨트롤로 때려박아 넣어서 말 그대로 마우스로 드래그 앤 드롭을 한 다음, 설정 창에서 파라미터를 조금 고쳐주고 이벤트 핸들러 등에 코드를 적어주는 식으로 프로그래밍이 가능한 본격적인 객체 지향 언어였다. 거기에 Turbo Pascal 시절부터 보여줬던 사기급의 빛과 같은 컴파일 속도 또한 Delphi도 그대로 가지고 있었다. 정보처리기사 실기 시험을 직접 프로그램을 작성하여 코드를 제출했던 2005년 이전 시험방식에서 사용 언어로 Delphi를 지원할 정도로 사용자가 많았다. 현재는 마이크로소프트의 물량공세에 사용자가 많이 줄었지만, 아직도 FA나 증권사 쪽에서는 독보적인 점유율을 가지고 있다. 델파이의 뛰어난 고속 개발 환경(Rapid Application Development Environment)는 C++ Builder를 통해 계승되었고, 볼랜드 사가 망한 이후엔 그 개발자(Anders Hejlsberg)가 MS에 스카웃되어 현재 C#에서 그 개념을 찾아볼 수 있다.

파스칼과 델파이도 오픈소스로 제작된 것이 있다. Free Pascal, Lazarus가 그것이다. 파스칼의 호환성을 훌륭하게 재현했으나[12][13], 아무것도 안하는 Hello World 류 프로그램의 실행파일 크기가 Free Pascal 은 2 MB, Lazarus 는 22 MB라는 무식한 용량을 자랑한다. (프로젝트 옵션에서 debug info 포함을 해제하면 각각 30kb, 1MB 내외의 정상적인 크기가 된다. 디버깅 정보를 다른 툴처럼 별도의 파일로 만들지 않고 실행파일에 포함시키기 때문이다.) 그래도 꽤 잘 만들어놔서 파스칼과 델파이를 공부하는 용도로 전혀 손색이 없을 정도를 넘어 정식 프로그램개발에도 충분할 정도이다. 더구나 윈도우, 리눅스(x86, ARM), OS X(x86, PPC) 등의 다양한 플랫폼을 지원한다. 동일한 소스코드로 컴파일하여도 다양한 플랫폼의 애플리케이션을 얻을 수 있는 것이다.

파스칼에서 파생된 언어로는 Modula, Modula-2, Oberon 등이 있다.

4.1. 파스칼로 만들어진 프로그램들

국내에서는 빵집, 외국의 경우 Skype(윈도우용)를 비롯해서 파일매니저 프로그램으로 유명한 TotalCommander가 델파이로 만들어졌다.[14] 애플 II 시절, 위저드리도 파스칼로 만들었다고 한다.[15]

유명한 DAWFL Studio 역시 델파이로 개발되며 계속 업데이트되고 있다. 다만 이 때문에 유저들의 원성에도 불구하고 64비트나 타 플랫폼 지원(대표적으로 OS X, Android나 iOS 등의 모바일 플랫폼)이 상당히 늦어지기도 했다. C++ 같은 언어와는 달리 델파이 컴파일러나 라이브러리가 해당 플랫폼들을 지원하기 전까지 아무런 손을 쓸 수가 없었기 때문.

5. 여담

Borland Delphi 2007의 경우 C#과도 연동할 수 있게 되는 등 마이크로소프트의 공세 속에서도 꿋꿋이 살아남으면서도 대세를 따라가는 모습을 보이고 있다. 다만 2009부터 C# 지원이 중단되었는데, C# 개발자는 전부 MS의 개발툴을 사용하기 때문이다. 엠바카데로(구 볼랜드)에서는 델파이에 대한 애착이 커서, C++ Builder보다 델파이에 더 지원 노력을 기울인다는 인상을 받게 된다.

전통적으로 델파이와 C++ 빌더의 IDE, 그리고 델파이 컴파일러는 델파이로 제작한다. 그리고 희한하게도, 차기 윈도우 지원이 MS의 개발툴보다도 훨씬 빠르다. 예를 들면 오피스 2007이 나오기 전 리본 인터페이스를 지원한다든가, 윈도우 7 스펙이 나오자 마자 터치 스크린 및 멀티 마우스 포인터 지원을 추가하는 등. 메이저 컴파일러 시장에서 빠르게 신기술을 지원하는 축에 속한다. 델파이 XE2 에서는 64비트를 지원하는 김에 추가로 OS X리눅스, iOS, 안드로이드까지 지원한다.

델파이는 신기술 지원 추가에 열성적인 반면, 그 기능 자체의 완성도와 사후지원이 미비하다. 새로운 버전이 매년 판매되는데, 해당 버전에서 기능들이 추가되어도 이러저러한 버그가 많아 문제가 있는 경우가 많고 몇 단계의 버전을 거치면서 수정이 되어야 비로소 안정적이 되거나, 혹은 지원이 부실한 채 남겨지는 일이 많다. 마케팅용 스펙 추가에 급급하다는 이야기가 관련 커뮤니티에서 나온다. 우선순위에 대한 불만의 예는 2009 버전이 되어서야 비로소 유니코드가 기본 사용되었다는 점 등이 있다. 매년 새로운 버전이 나오고 업그레이드하려면 비용을 지불해야 하는데 그만한 당위성이 뚜렷하지 못해 구 버전에 남아있는 사용자들이 많다 (델파이 사용자들 상당수가 레거시 코드 이용자라는 점도 있다)

볼랜드에서 Delphi 핵심 개발자였던 앤더슨 헤즐버그가 마이크로소프트로 이직하고서 만든 언어가 유명한 C#이다. 그래서 그런지 C#을 포함한 닷넷 프레임워크의 개발환경이나 개발방법을 보면 Delphi와 매우 유사한 것을 느낄 수 있다.

현재 사용되고 있는 프로그래밍 언어 중에서 네이티브 코드를 만들어내는 언어를 선택한다고 하면 C/C++를 제외하면 Free Pascal, Delphi가 두번째로 올 수 있다. Java, C#, Objective-C, Python, PHP, Visual Basic, Ruby... 등등 모두가 가상머신 또는 런타임환경이 필요한 언어이다.

여담으로, Scala를 만든 Martin Odersky 교수는 바로 이 파스칼을 만든 Niklaus Wirth 교수의 지도로 박사학위를 받았다. Niklaus Wirth는 취리히 연방 공과대학교의 교수로 재직했고, Martin Odersky는 EPFL의 교수로 있으며, 이 두 학교는 유럽의 MIT라 불리는 스위스 연방 공과대학(ETH Domain)을 이루고 있다.

6. 델파이

#!syntax cpp
procedure button1Click(Sender : TObject)
begin
  showmessage('Hello, World!');
end

파스칼이 객체지향적으로 발전한 Object Pascal로 만들어진 통합 개발 환경. 흔히 '델파이는 델파이로 만들어졌다'고 하는데 이것을 두고 하는 말이다.[16]

물론 그것도 델파이7까지의 이야기이고, 현재 매년마다 출시하는 델파이 XE 시리즈는 IDE 자체가 닷넷을 기반으로 한다. XE 개발 당시 닷넷 개발까지 고려하여 IDE를 설계했기 때문이라고 하는데, 결과적으로 IDE가 매우 무겁고 문제가 있다.

경쟁 제품이라고 볼 수 있는 비주얼 스튜디오와 비교한다면 너무나 단점들이 많아 전면적인 IDE 교체가 필요해 보이지만 개발사가 경영 문제로 여러 번 인수, 합병을 거치고 모바일 플랫폼 위주의 전략을 펼치다보니 당장에 IDE 개선이 이루어지진 않을 듯하다.

그러다보니 구관이 명관이듯이 출시된지 10년도 넘은 델파이7이 현역으로도 잘 사용된다. 하지만 유니코드를 못 쓰고 기본 컨트롤들이 고전이다. 사실상 파스칼계의 Visual Studio 6.0

물론 그 이유에는 잘 설계된 VCL이란 라이브러리와 모든 소스 코드가 포함되어 있어 버그 및 개선이 제 3자에 의해 지속적으로 이루어진다는 점 때문일 것이다.

또한 델파이7은 닷넷이 필요치 않은 순수 Object Pascal로 만든 버전으로 매우 가볍다는 것과 한창 프로그래밍 붐이 일던 IT, 벤처 시기에 출시된 꽤 완성도 있는 개발툴이란 점도 중요하다. 오히려 현대의 델파이는 버그가 많고 기능이 불완전하다는 평을 받고 있는 것과 대조적이다.


  1. [1] 즉, 이 경우는 개발한 사람에게서도 버림받은 것이다.
  2. [2] 요즘 보면 이해가 안 가지만 예전에는 언어 스펙만 보고 그대로 만들다 보면 귀에 걸면 귀걸이 코에 걸면 코걸이로 어떻게 작동할 지 하나로 집어야 하는 언어들도 많았다.
  3. [3] 정확히는 1편인 또다른 지식의 성전이 파스칼로 제작되었다가 이후 C언어로 포팅되어 재배포되었으며, 이후 작품들은 C언어로 제작되었다.
  4. [4] 파스칼에서는 배열의 인덱스 첫 번째가 0으로 고정되어 있지 않고 사용자가 임의로 지정할 수 있다.
  5. [5] 무려 1983년 등장했다!
  6. [6] 이 글에 따르면 파스칼이나 ADA는 분홍겅쥬들이나 쓰는 기집애 언어다(...) 이 와중에 C는 '쓰기 나름으로 좋을 것 같다' 라는 호평을 해 준다.
  7. [7] 여기에서 지적된 많은 문제점들은 이후에 이래저래 보완 수정되기는 했다.
  8. [8] 그런데 위의 글에서 진짜 프로그래머가 쓰는 언어는 무엇이냐 하면 어셈블리어나 16진수 기계어, 포트란 등이라고 하는 것이다!
  9. [9] 어셈블리어로 남들이 못 알아보게 복잡하게 프로그래밍해야지 천재처럼 취급받는 암흑시대가 있었다.
  10. [10] 하지만 볼랜드가 이 Object Pascal을 도입한 후에는 자기맘대로 진화를 거듭하였기 때문에 지금의 Delphi의 언어는 Object Pascal이라고 불리기는 하지만 그 Object Pascal하고는 아득히 먼 언어가 되었다. 볼랜드(망하기 전)에서도 Delphi 언어라고 불러달라고 했을 정도이다.
  11. [11] 현재는 개발 툴 부분이 분사되어 엠바카데로에 인수되었다. 따라서 엠바카데로/코드기어 브랜드를 사용한다.
  12. [12] 문서에도 나오지만 Lazarus는 Delphi 6을 목표로하여 개발되었다. 따라서 델파이와 많은 부분에서 서로 소스레벨에서 호환된다. 하지만 Free Pascal 컴파일러를 사용하고 있고 VCL을 클론한 LCL의 효율에 문제가 있어서 컴파일속도는 델파이보다 많이 느린 편이다.
  13. [13] LCL이 느린 이유는 근본적으로 멀티플랫폼용으로 개발되었기 때문에다. 즉 VCL처럼 Windows만을 위한 것이 아니라 Linux, Mac OS를 모두 지원하도록 만들어야 하기 때문에 여러 가지 제약이 많을 수밖에 없다.
  14. [14] 이런 이유로 Totalcommander의 유니코드 지원이라든가 64bit 지원 등의 기능과 같은 좀 새로운 기능들은 델파이가 기능을 지원할 때에 맞추어서 추가되고 있다.
  15. [15] 매뉴얼에 따르면 파스칼을 이용해 14,000여줄의 코드로 만들었다고 한다.
  16. [16] 현대 C++ 컴파일러들이 C++로 만들어지는 것에 대해 대응되는 발언이다.

최종 확인 버전:

cc by-nc-sa 2.0 kr

Contents from Namu Wiki

Contact - 미러 (Namu)는 나무 위키의 표가 깨지는게 안타까워 만들어진 사이트입니다. (86.37ms)