파일 대 파일 맵이 볼 수 있는 것
복사 배달 기계는 맵이야. 원본 파일 하나, 도착 파일 하나, 그걸 받기로 한 소비자마다. 본문엔 정확해. 관계엔 말이 없어. 파일 A 가 파일 B 의 타입을 써도 맵은 그걸 몰라. B 를 적은 줄이 하나도 없는 소비자한테, 혹은 B 를 딴 데서 받아온 소비자한테 A 만 배달하고, 갖고 있는 줄은 하나같이 자기 원본이랑 깨끗하게 맞아.
잎한텐 그 침묵이 맞아. 생성된 어휘 바인딩은 키트 안 임포트가 없어. 시스템 키체인이랑 말하고 결과를 돌려주는 핀 도우미도 키트 안 임포트가 없어. 런처 본체 파일 복사본 여덟이 출처 스탬프를 세 가지로 달고 있어도, 본문만 같으면 해가 없어. 스탬프는 본문이 아니고, 그 파일들은 그래프를 안 만들거든.
서로 기대는 인프라는 그래프야. 정체성 타입에 기대는 울타리, 둘 다에 기대는 엔진, 문서 타입에 기대고 그 문서 타입은 디코더 도우미에 기대는 저장소. 이건 잎이 아냐. 잎처럼 배달하면, 어느 소비자의 줄이 한 파일만 싣고 다른 파일은 안 싣는 순간 실패가 와. 소비자 하나, 빌드 하나에서 컴파일 에러로. 맵의 어느 줄도 어긋남을 보고 안 하고. 맵은 맞는 바이트를 비교했어. 틀린 단위를 비교한 거야.
진짜 필요했던 단위는 컴파일러야
패키지는 빌드 하나야. 타깃은 저마다 따로인 모듈이지만, 전부 같은 트리에서 같은 빌드로 컴파일돼. 그래서 정합이 맞아. 컴파일러가 가장자리마다 실제로 옆에 놓인 그 판본에 대고 확인하거든. 파일 맵 위에 아무리 규율을 쌓아도 그 성질은 다시 못 만들어. 그러려면 파일이 뭘 뜻하는지 몰라야 하는 게 일의 전부인 스크립트 안에다 모듈 시스템을 손으로 다시 짓는 셈이야.
그래서 서로 기대는 스위프트는 옮겼어. 잎은 남았고. 생성된 카탈로그는 계속 생성으로 남았어. 그 권위는 어떤 스위프트 소스가 아니라 데이터 파일이거든. 그걸 패키지 상품으로 바꾸면, 손으로 쓴 네 번째 표를 잡으려고 있는 가드한테서 그 사본들이 숨어버려. 새 공용 스위프트 규칙은 이제 이래. 다른 공용 파일이 선언한 타입이나 함수를 쓰거나 다른 공용 파일이 그걸 쓰면, 그러니까 키트 안 가장자리 위에 앉아 있으면 패키지로 가. 그래프의 뿌리랑 잎은 같이 다녀. 그런 가장자리가 없으면, 파일 맵이 여전히 더 좁고 더 나은 기계야.
잎을 집안 정리로 옮기지 마
남은 스위프트 잎은 못 끝낸 일이 아니야. 파일 맵이 여전히 맞는 답인 파일들이야. "정리하자"고 하나를 패키지로 옮기면 정합 이득 0 에 변환 값을 치르고, 다음 저자한테 필요한 규칙을 흐려. 필요한 규칙은 그래프냐 잎이냐지, 스위프트냐 아니냐가 아니야.
잎은 어떤 변경이 그걸 키트 안 가장자리 위에 올릴 때만 옮겨. 다른 공용 파일이 선언한 걸 쓰기 시작하거나, 다른 공용 파일이 그걸 쓰기 시작할 때. 두 번째 소비자가 생기는 것도, 복사본 둘이 공용 테스트를 원하는 것도 복사 기계 쪽 계기지, 잎을 패키지에 넣을 이유가 아니야. 가장자리가 나타나기 전까진 패키지랑 맵이 나란히 앉아 있고, 다음 레슨은 둘이 서로한테 손을 뻗으면 안 되는 이유야.