CS · Compile
빌드 - 그 한 줄이 실제로 하는 일들
빌드 명령 한 줄 뒤에는 여러 단계가 줄지어 있고, 단계마다 파일이 하나씩 남는다. 그 파일들이 남는다는 사실이 증분 빌드를 가능하게 하고, 동시에 가끔 clean을 해야 하는 이유도 만든다.
돌아가기 전에 벌어지는 일 6편
CS · Compile
링크 - 흩어진 조각을 하나로 묶는 일
프로그램은 한 파일로 만들어지지 않는다. 여러 조각이 따로 옮겨지고, 조각마다 '이 이름은 다른 데 있다'는 빈칸이 남는다. 그 빈칸을 채우는 일이 링크이고, '그 라이브러리를 못 찾겠다'는 에러가 여기서 나온다.
돌아가기 전에 벌어지는 일 5편
CS · Compile
JIT - 돌려 보고 나서 다시 옮긴다
미리 옮길 때는 알 수 없던 것이 있다. 어느 코드가 실제로 자주 도는지, 어떤 값이 실제로 들어오는지는 돌려 봐야 안다. JIT는 그 앎을 얻은 뒤에 다시 옮기는 방식이고, 우리가 '워밍업'이라 부르는 것이 그 대가다.
돌아가기 전에 벌어지는 일 4편
CS · Compile
바이트코드 - 한 번 더 접으면 무엇이 쉬워지나
소스와 기계어 사이에 한 겹을 끼워 넣으면 만들어야 할 번역기의 수가 곱셈에서 덧셈으로 바뀐다. '한 번 짜서 어디서나 돌린다'가 실제로 옮긴 것이 무엇인지, 그리고 그 대가로 무엇을 내주는지를 본다.
돌아가기 전에 벌어지는 일 3편
CS · Compile
컴파일과 인터프리터 - 미리 옮기나 그때그때 읽나
옮기는 일을 실행 전에 몰아서 하느냐, 실행하는 내내 조금씩 하느냐. 이 선택 하나가 시작 속도와 실행 속도, 그리고 오류를 언제 알게 되는지를 통째로 바꾼다. 그런데 실제 언어들은 둘 중 하나에 딱 서 있지 않다.
돌아가기 전에 벌어지는 일 2편
CS · Compile
기계어 - CPU가 아는 말은 따로 있다
우리가 쓴 코드는 CPU가 읽을 수 있는 글이 아니다. CPU가 아는 것은 수의 나열뿐이고, 그 수의 뜻마저 기계마다 다르다. 왜 소스가 그대로 돌지 못하는지, 그리고 왜 실행 파일이 아무 컴퓨터에서나 열리지 않는지가 여기서 갈린다.
돌아가기 전에 벌어지는 일 1편