제3화 타미의 수상한 계산

코드의 일생 04

모모의 변신 공장

같은 코드가 전혀 다른 모습이 될 수 있을까?

타미의 검사를 무사히 통과한 나무가 있어.

이 나무는 이제 모모의 공장으로 가.

모양이 바뀌어도 뜻은 그대로 남을 수 있을까?

오늘의 이상한 질문

검사를 통과한 1 + 2 나무를 모모가 받았어.

모모는 이 나무를 어떻게 할까?

그렇게 생각했구나.

모모가 나무를 어떻게 다루는지 따라가 보자.

만화

장면 1 공장 문 앞

타미검사 끝났어. 이제 네 차례야.

모모좋아. 잘 받을게.

장면 2 작업대의 틀

한줄이나 이제 또 어떻게 되는 거야?

모모모양을 바꿀 거야. 뜻은 그대로 두고.

장면 3 카드 꽂이

한줄이어, 내 나무 모양이 없어졌어!

모모실을 따라가 봐.이 카드가 어떤 카드를 가리키는지 알 수 있어.

장면 4 낯선 낱말

한줄이내 더하기는 어디 갔지?

모모여기 있어. 이 카드에서 뻗은 실을 따라가 봐.

장면 5 선반

한줄이그럼 화면에는 뭐가 나와?

모모그건 다음에 뚝딱이랑 보자.먼저 이 실 하나만 따라가 볼래?

나무의 더하기는 어느 카드가 됐을까?

실을 따라가 보자.

작은 실험

모모의 실 따라가기

토파즈 컴파일러 5.21.1 기록

같은 1 + 2가 나무에서 카드로 바뀌었어.

지금은 식을 나타내는 카드만 펼쳤어.

더하기 카드가 쓰는 두 수는 어디에 있을까? 카드에서 뻗은 두 실을 따라가 봐.

따라갈 실 고르기

아래 실 목록에서 한 줄을 골라 봐. 고른 실과 양 끝 카드가 함께 표시돼.

카드가 무엇을 쓰는지는 실을 따라가며 읽을 수 있어.

두 실을 다 봤다면 아래 「한 번 더」도 펼쳐 봐.

한 번 더 1 + 2 * 3

이번 더하기 카드는 무엇과 무엇을 더할까? 실을 따라가 봐.

따라갈 실 고르기

아래 실 목록에서 한 줄을 골라 봐. 고른 실과 양 끝 카드가 함께 표시돼.

더하기 카드의 둘째 실은 곱하기 카드로 이어져. 그 카드에서 두 실을 더 따라가면 2와 3을 찾을 수 있어. 이 더하기는 1과 2 * 3의 결과를 더해.

나무와 견줘 보기

나무에서 더하기 아래에 있던 곱하기가, 카드에서도 더하기의 실 끝에 있어.

곱하기가 왜 더하기 아래에 묶이는지는 제8화에서 볼 거야.

바깥 카드 두 장 1 + 2 * 3

1 + 2 * 3의 카드 전체를 펼쳤어. 식을 나타내는 다섯 카드 바깥에 문장 카드와 프로그램 시작 준비 카드가 있어.

제2화에서 본 그림은 나무의 식 부분이었어. 이 두 장은 그 바깥에서 왔어.

실은 프로그램 시작 준비, 문장, 더하기 순으로 이어져.

  1. 프로그램 시작 준비 카드

    프로그램 시작 준비 카드의 첫째 실은 문장 카드로 이어져.

  2. 문장 카드

    문장 카드의 첫째 실은 더하기 카드로 이어져.

  3. 더하기 카드

    더하기 카드의 첫째 실은 1 카드로 이어져.

    더하기 카드의 둘째 실은 곱하기 카드로 이어져.

  4. 1 카드
  5. 곱하기 카드

    곱하기 카드의 첫째 실은 2 카드로 이어져.

    곱하기 카드의 둘째 실은 3 카드로 이어져.

  6. 2 카드
  7. 3 카드

실은 이야기 속 표시야. 카드가 가리키는 카드는 실제 컴파일러 기록에서 왔어.

진짜 속사정

모양은 바뀌어도 뜻은 남아

모모가 한 일은 둘째 답이야. 모모는 1 + 2의 나무를 카드로 다시 적었어. 더하기 카드에는 1 카드와 2 카드로 가는 실이 남아 있어. 다음 화에서는 화면에 쓰는 줄을 넣은 프로그램을 실행해 3을 만나 볼 거야.

다음 단계가 받아 쓸 수 있게, 할 일과 그 일에 쓸 값의 연결을 다시 적는 거야.

컴파일러가 프로그램을 살펴보고 다루려고 안에서 쓰는 표현을 중간 표현, 줄여서 IR이라고 해. 여기서는 검사를 마친 코드를 다음 단계가 쓰기 좋은 모양으로 옮겼어. 이런 변환을 로어링이라고 불러.

카드는 토파즈가 lowered.jsonl에 남긴 작업 줄 가운데 식을 나타내는 것만 골라 그렸어. 1 + 2는 다섯 작업 가운데 셋이고, 1 + 2 * 3은 일곱 작업 가운데 다섯이야.

이 카드들은 컴퓨터가 차례로 하나씩 하는 명령이 아니야. 카드가 무엇을 쓰는지는 실을 따라가며 읽을 수 있어.

모든 컴파일러가 이런 카드를 만들까?

아니. 중간 표현을 몇 번 거치는지, 어떤 모양인지는 컴파일러마다 달라.

오늘 본 것은 토파즈 컴파일러 5.21.1의 기록이야.

한 줄 정리

오늘 알게 된 것

컴파일러는 검사를 마친 코드를 다음 단계가 쓰기 좋은 모양으로 옮겨 적는다.

모양은 바뀌어도 무엇과 무엇을 더하는지는 실로 이어져 남아 있어.

처음의 `1 + 2`에서, 더하기에 쓰이는 두 수를 찾으려면 어느 실을 따라가야 할까?

답 펼쳐 보기

더하기 카드에서 뻗은 두 실을 따라가 봐. 첫 번째는 1로, 두 번째는 2로 이어져.

카드가 꽂힌 자리를 외우지 않아도 찾을 수 있어.

  1. 더하기 카드
  2. 1 카드
  3. 2 카드

이제 같은 뜻이 다른 모습으로 바뀌는 걸 알아볼 수 있겠네.

속사정 도감낱말 다시 보기중간 표현

다음 이야기

제5화뚝딱이와 드디어 3

이번에는 뚝딱이가 공구 상자를 열었어.

뚝딱이이제 실행할 준비를 하자!

언제 진짜로 계산할까?

다음에는 프로그램이 실제로 실행되는 순간을 만나 보자.