openlang

Pharo에서 코드는 어디에 사는가

Ruby를 오래 쓰다가 Pharo를 조금씩 만져 보는 중인데, 파일에 익숙한 사람으로서는 민망할 만큼 기초적인 데서 막혔습니다. 시스템 브라우저에서 클래스를 하나 만들고 메서드를 몇 개 저장했는데, 디스크 어디에도 .st 파일이 생기지 않았습니다. 이미지를 저장하고 다시 열면 메서드는 그대로 있습니다(Ruby에서 온 사람에게는 ls로 보여 줄 게 없다는 사실이 묘하게 불안합니다).

그렇다면 코드는 이미지 안에 사는 것이고, 소스 파일이라는 건 따로 없는 셈입니까? 이미지 옆의 .changes 파일이 관련이 있어 보이기는 합니다만, 텍스트 편집기로 열어 보니 제가 한 일이 실수까지 포함해서 순서대로 다 적혀 있어서 오히려 더 헷갈렸습니다.

Ruby라면 git add lib/로 끝날 일입니다. Pharo를 쓰시는 분들은 이걸 git에 어떻게 넣습니까? 이미지 파일을 통째로 커밋하지는 않을 거라고 짐작만 하고 있습니다.

영어에서 번역원문 보기

이어지는 대화 1

서로의 근거를 따라
  1. 고유 링크

    네, 이미지 안에 살아요. 싸우기보다 익숙해질 만한 부분이에요(저는 여전히 이게 참 좋은데, 남과 나누기가 생각보다 번거롭다는 건 인정해요). 클래스와 컴파일된 메서드는 이미지 안의 객체예요. 소스 텍스트는 그 옆의 파일 두 개에 들어 있는데, 기본 시스템 것은 .sources에, 그 뒤로 저장한 건 전부 .changes에 순서대로 덧붙고, 메서드마다 자기 자리를 가리키고 있어요. .changes가 일기장처럼 읽히는 게 그래서예요.

    git은 Pharo에 들어 있는 Iceberg로 해요. 거기서 저장소를 추가하고, 패키지를 그 저장소에 넣고, 같은 창에서 커밋하면 돼요. 패키지는 클래스마다 파일 하나씩 평범한 텍스트로 써지니까 diff도 보통 소스처럼 보여요. 새 이미지에서는 Iceberg로 클론한 다음 패키지를 불러오면 코드가 돌아와요.

    그러니까 이미지는 작업대고 저장소가 기록이에요. .image 파일을 커밋하는 사람은 없어요. 짐작하신 대로예요.

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. round(2.5)가 2라는 걸 학습자들은 안 믿는다

    학습자들은 자꾸 round(2.5)가 3일 거라고 짐작하는데, 제가 주로 쓰는 두 언어는 다 2라고 해요. Python은 정수 2를, Julia는 2.0을 줘요. 둘 다 동점을 짝수 쪽 이웃으로 보내서 round(0.5)는…

  2. 3 + 4 * 2가 14라는 건 쉬운 쪽이다

    Smalltalk을 처음 배우는 사람은 누구나 일찍 3 + 4 * 2를 만나고 그게 14라는 말을 들어요. 이항 메시지는 산술 우선순위 없이 왼쪽에서 오른쪽으로 가니까요. 이 부분은 한 번 보여 주면 기억에 남아요(정말 그냥…

  3. 옛 CoffeeScript를 손으로 옮기는 JavaScript 연습

    유행은 지났지만 생각보다 훨씬 잘 먹히는 연습이 있습니다. 배우는 사람에게 작고 오래된 CoffeeScript 파일을 하나 주고, 컴파일러를 돌리지 말고 현대 JavaScript로 다시 쓰게 하는 것입니다. 거의 모든 설탕…