루아 소스 코드 읽기 시작

3 분 소요

서문

프로그래밍 언어를 만든다는 것은 어쩌면 아무런 의미없는 작업일지도 모릅니다. 세상에는 많은 프로그래밍 언어가 있고 그 중 제대로 사용되는 것은 극히 일부입니다. 사람들은 그저 재미로 혹은 그냥 만들고 싶어서 프로그래밍 언어를 만듭니다. 저도 지금까지 두 세 번 정도 프로그래밍 언어 비슷한 것을 만들었습니다. 제대로 프로그래밍 언어라고 불릴만한 수준까지 키우지 못하고 재미 없어져서 그만하길 반복했지요. 이번에 다시 도전합니다. 이번에는 조금 제대로 해보려고 합니다.

대한민국 대학교에 컴퓨터 관련 학과 과정을 보면 거의 다 프로그래밍 언어론을 가르칩니다. 게다가 거의다 전공 필수지요. 그래서 대학교에서 컴퓨터 관련 학과를 졸업한 사람은 프로그래밍 언어를 만드는데 필요한 지식은 갖추고 있습니다. 졸업한지 오래되어서 까먹었다고 하더라도 무의식에는 남아 있을 겁니다. :) 저도 대학교에서 프로그래밍 언어론을 수강했습니다. 게다가 학점도 높았습니다. 그래서 이론적으로 부족한 것은 없다고 스스로 생각하고 있습니다. 곰곰히 생각해 봤습니다. 왜 매번 하다 말까. 그렇게 제가 스스로 내린 결론은 이론이 문제가 아니라 기술적 방법과 순서를 모른다는 것입니다. 그러면 기술적 방법과 순서를 공부해야 겠지요.

사실 이 바닥에서 어떤 도메인의 기술적 방법과 순서를 안다는 것은 다시 말해서 그 도메인에 경력을 쌓았다는 말과 같습니다. 경력이 없으면 알 수 없는 것들이지요. 그런데 어디서 프로그래밍 언어를 만드는 경력을 쌓을 수 있을까요? 사실 돈 벌면서 프로그래밍 언어를 만드는 기회는 전 세계 소프트웨어 개발자들을 대상으로 봐도 극히 일부만 가질 수 있는 매우 얻기 힘든 것입니다. 그럼에도 방법은 있습니다. 어떻게 할 수 있을까요. 바로 다른 사람이 만든 프로그래밍 언어를 어떻게 만들었는지 분석하면 됩니다.

다행히 현재 가장 널리 쓰이는 프로그래밍 언어들은 거의 다 소스가 공개되어 있습니다. 정말 오픈 소스의 승리입니다. 이 중에 하나를 골라서 구현을 분석해 보는 것이 가장 좋은 방법입니다. 그러면 어떤 언어를 고를까요? 기준을 세워야 합니다. 무조건 세계에서 제일 많이 쓰이는걸 분석할테야! 하고 들이댄다면 파이썬 소스 코드를 봐야겠지요. 저도 도전해 봤습니다. 생각보다 그렇게 분량이 어마어마 하게 많지는 않았습니다. 그러나 역시 어렵더군요. 금방 지쳤습니다. 역시 돈이라는 강력한 동기 부여가 없으니까 아무리 의지를 가지고 있어도 쉽게 지쳤습니다. 조금 더 쉬운 대상을 찾아 봤습니다.

그러다가 찾은 것이 루아(Lua)입니다. 루아는 태생이 임베딩 언어입니다. 그래서 최신 버전도 코드 분량이 그리 많지 않습니다. 소스 코드를 다운받아서 압축을 풀어보면 파일이 몇 십개 밖에 안됩니다. 이거 분석해 볼 수 있겠다라는 생각이 들더라구요. 그리고 조금 더 찾아 봤더니 루아는 릴리즈 버전 별로 코드를 다운 받을 수 있게 해 놨더군요.

루아는 처음 공개되었던 1993년부터 가장 최근 버전이 릴리즈된 2018년까지 총 22번 릴리즈했습니다. 그래서 생각했습니다. 각 릴리즈 소스 코드를 따라가면서 분석하면 루아의 개발 과정을 따라가는 것이 될테고 만약 끝까지 할 수 있다면 최소한 루아에 대해서 만큼은 쭉 개발을 했던 사람 수준으로 히스토리와 발전 내역을 파악할 수 있지 않을까.

그렇게 루아에 대해 파악을 하면 프로그래밍 언어를 어떻게 만드는지에 대해서 알게 될 것입니다. 그러면 루아 개발자들의 경력을 압축해서 습득했다고 볼 수도 있을 것입니다. 이제 프로그래밍 언어 개발 경력자인 것입니다. 궤변같지만 그렇게 생각하려고요. 이제 경력자이니 저의 프로그래밍 언어를 만들 수도 있지 않을까 생각해봅니다.

루아 소스 코드를 거창하게 ‘분석’한다고 말하고 싶진 않습니다. 남이 작성한 코드를 분석한다고 말하기엔 제가 머리가 너무 나쁘거든요. 그래서 그냥 루아 소스 코드를 읽는다고 말하고 싶습니다. 흔히 말하는 대본 리딩, 교재 리딩(reading)처럼 쭉쭉 읽어 보겠습니다. 모르거나 이해 안되는 부분이 나와도 파고 들어 분석하는게 아니라 읽고 넘어가는 거지요.

1995년에 릴리즈한 루아 1.1 소스 코드로 시작합니다. 이 글을 쓰는 시점에서 전 아직 코드 읽기를 시작하지 않았습니다. 시작하기 전에 마음을 다잡을 겸, 계획을 정리할 겸 서문격으로 이 글을 먼저 쓰는 것입니다. 소스 코드 읽기를 하면서 동시에 글을 쓸까 합니다. 지금까지 제가 썼던 글처럼 누구에게 뭘 알려주려고 쓰는 글이 아니라 제가 읽고 파악한 내용을 기록하는 목적으로 글을 쓰려고 합니다. 그리고 이렇게라도 해야 어느 정도 작지만 동기부여가 되어서 쉽게 중도 포기하는 것을 방지하거든요. 그래도 하다 말고 포기할 수 있으니 하는데까지만이라도 최대한 해 보려고 합니다.

소스 코드를 읽고 글을 쓰려고 마음먹고 보니 두 가지 전략을 쓸 수 있겠더라구요. 첫 번째는 소스 코드를 어느 정도 통으로 읽고 논리적 단위를 식별해 낸 다음 알아낸 내용을 글로 쓰는 것입니다. 이렇게 하면 읽는 사람이 좋습니다. 만약 제가 강좌 형식으로 글을 쓰려고 했다면 이 방식으로 코드 읽기를 진행 할 것 같습니다. 두 번째는 소스 코드를 다짜고짜 읽으면서 파악하는 과정 자체를 그대로 글로 기록하는 것입니다. 이러면 코드 읽기 속도가 느려진다는 문제가 있습니다. 당연히 그냥 읽고 지나가는 대신 읽고 생각한 것을 글로 타이핑하는 시간이 추가로 더 드니까요.

그래도 두 번째 방식으로 소스 코드 읽기를 하려합니다. 왜냐면 제가 걱정하는 것은 시간이 오래 걸리는 것이 아니라 중도 포기거든요. 곰곰히 생각해 봤는데 코드를 읽으면서 글을 쓰는 것이 더 동기부여가 잘 될것 같다는 것입니다. 학교에서 수업들을 때 노트에 필기하면서 수업듣는 것하고 비슷한 맥락입니다. 누가 가르쳐 주는 사람이 없으니 혼자 눈으로 보고 손으로 필기하는 것이지요.

루아 1.1부터 시작해서 루아 5.3까지 소스 코드를 쭉 읽어 나간다고 해서 계속 힘들거라 생각하진 않습니다. 오히려 한 루아 3.x 쯤 읽는 시점에서는 더 수월하지 않을까 기대합니다. 상식적으로 생각하면 당연합니다. 처음에 구조와 흐름을 이해하는데 시간이 오래 걸리지 그 이후에 변경 사항이나 추가 사항을 파악하면서 따라가는 것은 그리 어렵지 않거든요. 저는 그 시점이 루아 3.x 쯤 읽을 때가 되지 않을까하고 막연히 추정합니다.

이렇게 말해놓고 얼마나 갈지 모르겠으나 계획했던 것을 이뤘으면 좋겠습니다.

댓글남기기