장면 1 공장 문 앞
타미검사 끝났어. 이제 네 차례야.
모모좋아. 잘 받을게.
코드의 일생 04
같은 코드가 전혀 다른 모습이 될 수 있을까?
타미의 검사를 무사히 통과한 나무가 있어.
이 나무는 이제 모모의 공장으로 가.
모양이 바뀌어도 뜻은 그대로 남을 수 있을까?
그렇게 생각했구나.
모모가 나무를 어떻게 다루는지 따라가 보자.
타미검사 끝났어. 이제 네 차례야.
모모좋아. 잘 받을게.
한줄이나 이제 또 어떻게 되는 거야?
모모모양을 바꿀 거야. 뜻은 그대로 두고.
한줄이어, 내 나무 모양이 없어졌어!
모모실을 따라가 봐.이 카드가 어떤 카드를 가리키는지 알 수 있어.
한줄이내 더하기는 어디 갔지?
모모여기 있어. 이 카드에서 뻗은 실을 따라가 봐.
한줄이그럼 화면에는 뭐가 나와?
모모그건 다음에 뚝딱이랑 보자.먼저 이 실 하나만 따라가 볼래?
나무의 더하기는 어느 카드가 됐을까?
실을 따라가 보자.
작은 실험
토파즈 컴파일러 5.21.1 기록
+12같은 1 + 2가 나무에서 카드로 바뀌었어.
지금은 식을 나타내는 카드만 펼쳤어.
더하기 카드가 쓰는 두 수는 어디에 있을까? 카드에서 뻗은 두 실을 따라가 봐.
카드가 무엇을 쓰는지는 실을 따라가며 읽을 수 있어.
두 실을 다 봤다면 아래 「한 번 더」도 펼쳐 봐.
1 + 2 * 3이번 더하기 카드는 무엇과 무엇을 더할까? 실을 따라가 봐.
더하기 카드의 둘째 실은 곱하기 카드로 이어져. 그 카드에서 두 실을 더 따라가면 2와 3을 찾을 수 있어. 이 더하기는 1과 2 * 3의 결과를 더해.
+1*23나무에서 더하기 아래에 있던 곱하기가, 카드에서도 더하기의 실 끝에 있어.
곱하기가 왜 더하기 아래에 묶이는지는 제8화에서 볼 거야.
1 + 2 * 31 + 2 * 3의 카드 전체를 펼쳤어. 식을 나타내는 다섯 카드 바깥에 문장 카드와 프로그램 시작 준비 카드가 있어.
제2화에서 본 그림은 나무의 식 부분이었어. 이 두 장은 그 바깥에서 왔어.
실은 프로그램 시작 준비, 문장, 더하기 순으로 이어져.
+1*23프로그램 시작 준비 카드의 첫째 실은 문장 카드로 이어져.
문장 카드의 첫째 실은 더하기 카드로 이어져.
더하기 카드의 첫째 실은 1 카드로 이어져.
더하기 카드의 둘째 실은 곱하기 카드로 이어져.
곱하기 카드의 첫째 실은 2 카드로 이어져.
곱하기 카드의 둘째 실은 3 카드로 이어져.
실은 이야기 속 표시야. 카드가 가리키는 카드는 실제 컴파일러 기록에서 왔어.
진짜 속사정
모모가 한 일은 둘째 답이야. 모모는 1 + 2의 나무를 카드로 다시 적었어. 더하기 카드에는 1 카드와 2 카드로 가는 실이 남아 있어. 다음 화에서는 화면에 쓰는 줄을 넣은 프로그램을 실행해 3을 만나 볼 거야.
다음 단계가 받아 쓸 수 있게, 할 일과 그 일에 쓸 값의 연결을 다시 적는 거야.
컴파일러가 프로그램을 살펴보고 다루려고 안에서 쓰는 표현을 중간 표현, 줄여서 IR이라고 해. 여기서는 검사를 마친 코드를 다음 단계가 쓰기 좋은 모양으로 옮겼어. 이런 변환을 로어링이라고 불러.
카드는 토파즈가 lowered.jsonl에 남긴 작업 줄 가운데 식을 나타내는 것만 골라 그렸어. 1 + 2는 다섯 작업 가운데 셋이고, 1 + 2 * 3은 일곱 작업 가운데 다섯이야.
이 카드들은 컴퓨터가 차례로 하나씩 하는 명령이 아니야. 카드가 무엇을 쓰는지는 실을 따라가며 읽을 수 있어.
아니. 중간 표현을 몇 번 거치는지, 어떤 모양인지는 컴파일러마다 달라.
오늘 본 것은 토파즈 컴파일러 5.21.1의 기록이야.
한 줄 정리
다음 이야기
이번에는 뚝딱이가 공구 상자를 열었어.
뚝딱이이제 실행할 준비를 하자!
언제 진짜로 계산할까?
다음에는 프로그램이 실제로 실행되는 순간을 만나 보자.