티스토리 툴바


F# (FSharp)의 역사에 대해서 제나름대로 설명을 해보면 아무래도 제일 먼저 자바 이야기부터 해야할 것 같군요. 자바는 "WORA(Write Once, Run Anywhere)"을 기치로  1990년 중반에 등장한 VM 기반의 언어였지요. 자바로 한번만 작성하면 어떤 플랫폼이든지 상관없이 동작할 수 있다는 것은 매우 매력적인 것이었지요.

당시에 저는 소프트웨어 공학 연구실에 있었는데 그때 연구실에서 만든 개발툴이 유닉스상에서 C/C++와 Motif로 작성되었는데 업체에 배포를 하기가 매우 난감했답니다. 실행바이너리로 배포하고 싶었는데 사용자 컴퓨터에서 돌아가리란 보장이 없었지요. 결국은 코드를 배포해서 각자 재컴파일하도록 하는 수밖에 없었지요. 연구실 내에서도 리눅스버전은 따로 관리해야 했답니다. 외국 컨퍼런스에 데모라도 하러 가려면 알파머신을 바리바리 싸들고 가던 그런 때였죠. 이런 이유로 몇년간 개발하던 툴을 미련없이 자바로 재코딩을 하게 되었답니다. 그게 90년대 후반이었죠.

자바의 폭발적인 성장은 당연히 마이크로소프트에는 부담이 될 수 밖에 없었고, 마이크로소프트에서는 자바에 대항마로 닷넷이라는 또다른 플래폼을 들고 나옴니다. 아직도 닷넷의 실체는 잘 모르겠지만 (2000년 초반에 갔던 코엑스 컴덱스에선 닷넷이 부스하나를 차지할 정도였는데 뭘 봤는지는 기억조차없군요) 제가 이해하기로는 여러 프로그램언어가 돌아갈 수 있는 공통의 실행환경입니다.

자바는 동일한 문법체계의 자바언어가 거의 모든 영역(ME, SE, EE)에 사용된다는 개념임에 비해서 닷넷은 하나의 플랫폼 위에 여러 종류의 언어가 서로 조화를 이루면서 동작할 수 있습니다. 결국 선 마이크로시스템은 모든 컴퓨팅(PC에서 모바일까지)을 자바언어로 통일시키고자 했고 마이크로소프트는 모든 컴퓨팅을 (윈도우즈 위에서 돌아갈) 닷넷으로 통합시키고자 했던 것으로 보입니다. 마이크로소프트는 내심 J#, C#을 선보이면서 자바를 닷넷안에 가두어 두려고 했었지만, 2007년 현재 자바는 말그대로 어디에나 쓰이는 성공한 언어가 된 반면에 닷넷은 그 명맥을 찾아보기 힘들게 되었습니다. 하지만, 학계가 아닌 업무용 특히 파이낸셜, 금융쪽에서는 C#을 많이 쓴다고 들었습니다.

자바가 폭발적으로 성장을 하면서 몇몇 실험가들이 C/C++을 자바바이트코드로 변환시켜서 JVM위에서 돌려보기 시작합니다. 조그만 수정을 가하면 풍부한 자바의 라이브러리를 사용할 수 있게 된다는 사실에 열광을 하면서 많은 아마추어 언어개발자들이 자신들이 쓰는 언어들(Tcl, Lisp, Scheme, Basic, Logo, Prolog, Eiffel, SmallTalk, OCaml, Scala, COBOL, Ada, Ruby, Python, Forth, Snobol, Tiger, Perl, E)을 JVM에 올리기 시작했습니다.

참고: JVM위에서 돌라가는 언어들

1999년 이런 흐름에 편승해 유명한 함수형 언어 중 하나인 SML을 JVM으로 올리는 프로젝트가 캠브리지 PL 연구팀에서 시작되고 MLj라는 컴파일러가 세상에 등장합니다. 이로서 ML 프로그램이 애플릿으로 웹브라우저에서 돌아가게 된 것입니다.

그런데,이 MLj를 개발했던 팀의 핵심 연구원들(닉 벤튼, 앤드류 케네디 등)이 마이크로소프트에 입사하게 됩니다. (라고 말해도 사실은 마이크로소프트가 캠브리지 대학 옆에 캠브리지 연구센터를 만듭니다.) 이 연구소에 프로그래밍 언어 연구팀이 있는데 이 팀에 있는 연구원들은 당대 최고의 튜닝상 수상자이자 퀵소트를 만든 토니 호어, Haskell을 만든 피터 존스 사이먼 등을 포함합니다. 마이크로소프트의 캠브리지 연구선터에서 닉 벤튼은 JVM위에서 돌아가던 MLj를 기반으로 2000년 경 닷넷 위에서 돌아가는 SML.NET을 내놓습니다. 아마도 닷넷에서의 첫번째 함수형 언어였으리라 생각됩니다.

1998년부터 캠브리지 연구팀에서 CLR을 개선하는 일을 하던 돈 심이 기존에 하던 연구를 바탕으로 OCaml을 기반으로 한 또다른 함수형 언어 F#을 2005년 초에 선보입니다. 닉 벤튼이 또다른 언어들을 개발하느라 바빠 SML.NET은 버전업이 거의 없는 동안 (2006년 중순에 발표된 1.2가 마지막- 어찌보면 SML.NET이 기반으로 삼은 SML자체가 큰 변화가 없었으니 자잘한 버그 잡는 일 외는 큰 일이 없었으리라 생각되 됩니다만) 돈 심은 끊임없이 F#을 개선하여 (2007년 현재 1.9.2 버전 발표) 2007년 가을에 F#을 마이크로소프트 제폼군에 포함하겠다는 결정이 내려집니다.

이 결정은 1) 함수형 언어가 드디어 유행을 타기 시작했고 2) 파이넨셜이나 과학분야에 이런 함수형 언어가 더 자연스럽고 3) 막강한 타입 시스템을 적용할 수 있으리란 기대감과 4) 학계의 관심을 끌어 닷넷을 다시금 홍보할수 있을 것이란 마이크로소프트의 기대심리를 반영한 것입니다. 자바에 비해서 이상할 정도로 학교나 연구기관에서 인기가 없었던 것을 만회해 보겠다는 것이죠.

언제나처럼  플랫폼을  지배하는 자가 시장을 독식할 것입니다. 한쪽에서는 브라우저라는 플랫폼을 바탕으로 성장하는 구글이 있고, 플래시란 플랫폼으로 질주하는 아도브, 윈도우즈란 걸출한 운영체제를 바탕으로 앞서나가있는 마이크로소프트, MacOsX 혹은 아이툰이란 플렛폼을 확보한 애플의 무한 경쟁이 시작되었습니다.

컴파일어 개발자들도 플랫폼을 결정할 것을 강요받고 있는데, 마이크로소프트는 닷넷을 주장하고, 선 마이크로시스템즈는 JVM을, 그리고 또다른 별세계에서는 Parrot이란 가상머신으로 유혹을 합니다. 하지만, 결국 C#이 JVM이나 Parrot으로 컴파일되는 세상이 올것이고 닷넷이 윈도우즈에 닫힌 것이 아닌 mono라는 오프소스 프로젝트로 마이크로소프트 품을 떠나는 마당에 프로그래머 입장에서는 이번 기회에 확 새로운 언어로 말을 바꿔타볼 것을 꿈꾸게 하는 그런 시기입니다.

그래서, 이번참에 F#을 공부해 보고자 합니다.
Posted by PLTeacher