90년대 컴퓨터 공학 이야기 (10) — Compiler
오늘 주제는 Compiler 에 해당하는 몇몇 기억 조각들. Programming = Basic 인 채로 C 언어를 배우게 되었고, 인터프리터와 컴파일러가 다르다는 정도의 기본 지식과 학과 숙제, 아르바이트 등으로 다양한 연관된 경험들을 하게 되었다. C/C++ 과 교과서 위주의 기억 몇 개.
The C Programming Language / Turbo C 2.0
첫 기억 조각은 1학년 첫 수업 시간에 교재로 만난 원서 The C Programming Language 아마도 2nd edition. 중간에 포인터가 나오는 부분을 기준으로 앞뒤가 다른 두 개의 책인 기억이다. 강렬했던 기억들로 1) 이렇게 간단하게 표현하다니 싶었던 switch / case 문, 2) binary search 와 shell sort 를 이해하며 얻게 되었던 희열(?) 등이 있다.
집에서 숙제 용으로 하기 위해 플로피 디스크에 담아 왔던 Turbo C 가 그 다음 기억이다. 아직 win95 를 구하기 전에 MS-DOS 에서 무려 .exe 를 만들어서 실행해 볼 수 있었던 기억이고, 학교에서 GDB 를 가지고 버벅대던 것과 대비해서 IDE 와 디버깅의 아름다움을 알 수 있게 해 준 도구였다. 두껍지만 한글로 된 책을 큰 맘 먹고 사서 친구들과 꽤 오랫동안 돌려 보던 기억인데.. 아마도 이 두 권 중 하나였으리라.
Borland C++ / Visual C++
학부 2학년 때 선배들이 C 를 공부했던 사람들은 쉽게 C++ 한다고 잘못된 정보들을 주셔서 고생을 꽤 오랫동안 했더랬다. OOP 개념을 조금 더 뒤에 배워서 그렇기도 했을 거고, 아마 내가 만든 코드들은 거의 C 에 껍질만 바꿔 놓은 모양이었을 것이다. 플로피 디스켓 한두개로 설치할 수 있던 터보 C 와는 다르게 C++ 은 아주 어렵게 접할 수 있었는데, Windows95를 플로피 디스켓 20장으로 깔던 시기에, 이 두 툴은 제대로 구해서 깔아 보기도 힘들고 비싸고 해서 꽤 늦게 인연이 닿았었다.
당시 왜인지 모르는 MS 에 대한 반감에 괜히 Borland 것을 좋아했던 기억이지만, 아르바이트들을 하기 위해서 뭐 이것 저것 했었어야 했었다. 숙제들도 몇 개 했었더랬는데, 코드를 만졌던 시간보다 환경 잡고 driver 설치하고 뭐 이러는 데 노력을 들였던 기억들이 많았고, 여기서 해도 학교 컴퓨터에 플로피 디스크로 들고 가면 어차피 다시 짜야 하는 일들이 꽤 오랫동안 벌어졌다. VI 만 지금까지 써 왔지만, 이 때 과제 디버깅 용으로만 emacs 를 썼던 기억이다. 단축키들도 꽤 잘 썼던 기억인데 emacs 로 개종하기까지는 아니었다.
aCC / gcc
임베디드 리눅스 세상이 오게 되면서 cross compile 을 과제로 해야 하는 상황에서 다시 compiler 를 뜯어 보는 일들이 생겼다. 주로 했던 건 parser 이후의 hint 와 code generation 바꾸고 이런 저런 optimization 하는 것들.. 이 때 기억이야말로 build 가 안 되면 왜 안 되는지, 되면 왜 되는지 모른 채 여러 인내심과 versioning 으로 풀어 나갔던 시기였던 거 같다. 한참 고쳐 놓으면 mainline 이 또 바뀌어서 merge conflict 풀어 나가는…
집에서는 cygwin 이라는 것을 설치해서 쓰기도 하고, 무거운 노트북에 불편한 리눅스를 설치해서 인내심 있게 써 보기도 했더랬다. 이후 대학원 때는 gcc 는 performance 쪽에서 널리 쓰이던 꽤 무거운 benchmark 로 쓰기도 했었는데, 뭔가 잘 된 기억보다는 잘 안 된 기억들이 많은 거 보니… 구글과 인터넷이 없던 시기에 뭔가 개발을 심각하게 해 보기에는 기량이 많이 모자랐던 모양이다.
Compiler 수업
아마도 학부 3학년 때 compiler 수업을 배웠더랬다. 교수님의 라떼는 이야기를 듣는 시간, 기말 고사 문제가 정해져 있는 과목이었고, parser 부터 다루어서 당시에도 실제로 이 과목이 도움이 되냐 안 되냐 등의 논란이 있었던 기억이다. 개인적으로는 꽤 재미난 시간이긴 했지만, 기말 고사 시간에 점수를 성적 내림차순으로 나누어 주셔서 상처가 있었던 기억도 있다.
이 과목이 왜 생겼는가 혹은 이 컴파일러라는 게 왜 생겼는가 라는 게 나름 역사가 꽤 깊은데, 당시 컴퓨터를 만져야 하는 기술자들이 어셈블리어 혹은 기계어로 작업을 해야 하는데, 너무 귀찮아서 컴퓨터에게 그 작업을 대신하게 해서 만들어진 제품이라 하셨던 기억이다. 사람이 훨씬 빠른 판단을 하던 그 옛날부터 준비하던 제품이었을 테고, 나는 이 과목을 배우던 즈음부터 이미 앞으로 뭘 해야 하나 등에 대해 고민을 많이 하게 되었다.
댓글을 작성해보세요.