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

Pascal

1 개요

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

2 역사

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

실제로 1990년대 후반까지 미국의 고등학교와 대학에서 프로그래밍 교육을 위해서 가장 널리 사용된 언어였다.
하지만 경쟁언어라 할 수 있는 C언어가 90년중반부터 대인기를 끌면서 밀리다가 21세기에 들어오면서 C++, Java시대를 거치면서 존재감이 사라진 언어이다.
죽은 언어라고도 하는 이도 있지만 아직 죽지는 않았다. 아래에서도 보이지만 Delphi라는 이름으로 아직도 시장에 출시되는 툴도 있으며, Free Pascal이라는 이름으로 왠만한 상용프로그램의 수준을 능가하는 수준의 공개프로그램도 활발하며 이를 사용한 Lazarus라는 통함개발환경 컴파일러도 지속적으로 개발되고 있다.
컴퓨터언어의 역사를 소개할 때 나오는 많은 언어들이 실제로 그 언어를 사용해볼 수 있는 컴파일러를 구하고자할 때 인터넷을 아무리 뒤져도 구할 수 없거나, 구할 수 있어도 매우 조잡한 수준의 옛날옛적의 프로그램밖에 없는 경우도 흔한 현실[1]에서 파스칼언어는 단한번의 검색으로도 꽤 훌륭한 개발환경을 지닌 컴파일러를 무료로 구할 수 있는 언어이다.[2]
즉, 주류언어에서 밀려난 것은 사실이지만 무수히 많은 컴퓨터언어중에서 그래도 자기자리를 아직도 지키고 있는 언어이다.[3]

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

3 설명

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

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

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

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

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

이후 고전 개인능력과시(...)언어[11]의 시대가 저물어가면서 파스칼 같은 언어가 살아나나 싶었더니만 C가 미친듯이 성장하면서 파스칼은 물론 다른 언어들까지 땅바닥에 처박히게 되며, '좋기는 좋은데 하여간 대세는 안되는 언어'로 지내며 시들시들 고사위기로 접어들게 된다. 이 때문에 국내 파스칼/델파이 커뮤니티를 보면 뭔가 비주류 웹사이트의 스멜을 느끼지 않을 수가 없다.

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

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

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

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

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

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

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

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

유명한 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, 안드로이드까지 지원한다. 몰라 뭐야 이거 무서워...

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

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

C와 파스칼을 알기 쉽게 비유하자면 MP3와 RM(realmedia)쪽이 더 어울리지 않을까...?

진짜 여담으로, Scala를 만든 Martin Odersky 교수는 바로 이 파스칼을 만든 Niklaus Wirth 교수의 지도로 박사학위를 받았다. Niklaus Wirth는 ETH Zurich의 교수로 재직했고, Martin Odersky는 EPFL의 교수로 있으며, 이 두 학교는 유럽의 MIT라 불리는 스위스 연방 공과대학(ETH Domain)을 이루고 있다.
  1. 즉, 이경우는 개발한 사람에게서도 버림받은 것이다.
  2. 즉, 아직도 많은 일반사용자와 팬들이 존재하면서 활동하고 있다는 것이다.
  3. 특히 태어난 곳인 유럽에서 많이 쓰이고 있는 것 같음. 대한민국처럼 일등쏠림현상이 극심한 나라에서는 오직 Java뿐! 이라고 외치는 소리밖에는 안들리지만...
  4. 요즘 보면 이해가 안 가지만 예전에는 언어 스펙만 보고 그대로 만들다 보면 귀에 걸면 귀걸이 코에 걸면 코걸이로 어떻게 작동할 지 하나로 집어야 하는 언어들도 많았다
  5. 확인바람. 울티마 1은 애플소프트 베이식과 어셈블리어로 제작되었다. 혹시 위저드리 초기작들(1, 2편)이 파스칼로 제작된 것과 혼동한 것 아닌지.
  6. 파스칼에서는 배열의 인덱스 첫 번째가 0으로 고정되어 있지 않고 사용자가 임의로 지정할 수 있다.
  7. 무려 1983년 등장했다!
  8. 이 글에 따르면 파스칼이나 ADA는 분홍겅쥬들이나 쓰는 기집애 언어다(...) 이 와중에 C는 '쓰기 나름으로 좋을 것 같다' 라는 호평을 해 준다.
  9. 여기에서 지적된 많은 문제점들은 이후에 이래저래 보완 수정되기는 했다.
  10. 그런데 위의 글에서 진짜 프로그래머가 쓰는 언어는 무엇이냐하면 어셈블리어나 16진수기계어, 포트란 등이라고 하는 것이다!
  11. 어셈블리언어로 남들이 못알아보게 복잡하게 프로그래밍해야지 천재처럼 취급받는 암흑시대가 있었다
  12. 하지만 볼랜드가 이 Object Pascal을 도입한 후에는 자기맘대로 진화를 거듭하였기 때문에 지금의 Delphi의 언어는 Object Pascal이라고 불리기는 하지만 그 Object Pascal하고는 아득히 먼 언어가 되었다. 볼랜드(망하기전)에서도 Delphi언어라고 불러달라고 할 정도이다.
  13. 현재는 개발툴 부분이 분사되어 엠바카데로에 인수되었다. 따라서 엠바카데로/코드기어 브랜드를 사용한다.
  14. 델파이의 뛰어난 고속 개발 환경(Rapid Application Development Environment)는 C++ Builder를 통해 계승되었고, 볼랜드 사가 망한 이후엔 그 개발자가 MS에 스카웃되어 현재 C#에서 그 개념을 찾아볼 수 있다. 역사란...
  15. 문서에도 나오지만 Lazarus는 Delphi6을 목표로하여 개발되었다. 따라서 델파이와 많은 부분에서 서로 소스레벨에서 호환된다. 하지만 Free Pascal 컴파일러를 사용하고 있고 VCL을 클론한 LCL의 효율에 문제가 있어서 컴파일속도는 델파이보다 많이 느린편이다.
  16. LCL이 느린이유는 근본적으로 멀티플랫폼용으로 개발되었기 때문에다. 즉 VCL처럼 Windows만을 위한것이 아니라 Linux, Mac OS를 모두 지원하도록 만들어야 하기 때문에 여러가지 제약이 많을 수 밖에 없다.
  17. 이런 이유로 Totalcommander의 유니코드 지원이라든가 64bit 지원 등의 기능과 같은 좀 새로운 기능들은 델파이가 기능을 지원할 때에 맞추어서 추가되고 있다.