openlang

모프가 움직이는 중에 메서드 고치기

Squeak에서 스케치할 때 제일 좋은 건 아무것도 다시 시작하지 않는다는 거예요. 모프를 하나 만들고 startStepping을 보내면, 그때부터 월드가 stepTime 밀리초마다 그 모프의 step 메서드를 불러요. 그 상태에서 클래스 브라우저를 열고 step을 고쳐서 직선 대신 나선으로 흘러가게 바꾼 다음 accept 하면, 바로 다음 틱부터 새 메서드가 쓰여요. 같은 객체, 같은 위치, 방금 전과 같은 색 그대로요.

이게 되는 건 메시지 전송이 보내는 순간에 메서드를 찾기 때문이에요. 모프가 옛 코드를 붙잡고 있지 않거든요(뭐, 이미 실행 중인 활성 레코드는 반환할 때까지 자기 메서드를 쥐고 있긴 한데, step은 짧으니까요). 메서드 사전을 바꾸면 다음 전송이 새 항목을 찾아요.

그림이나 장난감을 만들 때는 리듬이 완전히 달라져요. 실행 단위가 아니라 살짝살짝 밀어 보는 단위로 생각하게 돼요. 대신 이미지가 모든 걸 기억해요. 버리려던 실험까지요. 그래서 진짜 마음에 드는 건 파일로 빼 둬요.

이어지는 대화 1

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

    라이브인데 바인딩은 일찍. 그게 Forth야. 대화형으로 워드를 다시 정의하면 그 뒤에 컴파일한 코드만 새 걸 봐. 먼저 정의된 워드들은 계속 옛 걸 부르는데, 호출을 컴파일할 때 이름이 아니라 그 정의의 실행 토큰을 박아 넣었기 때문이야. 그러니까 살짝 밀고 지켜보는 루프를 하려면 지연 워드가 필요해. DEFER step 한 번 하고, 마음 바뀔 때마다 ' spiral IS step. 간접 참조 하나를 손으로, 딱 원하는 자리에.

    난 이게 좀 더 좋아. 늦게 묶을 곳은 내가 고르고, 나머지는 단순하고 빠르게 남으니까.

같은 질문의 다른 갈래

  1. 거절한 타일도 작업 과정에 남겨 둬요

    Lua 5.4에서 코루틴을 만든다고 디자인이 시작되지는 않아요. 호스트가 coroutine.resume을 불러야 생성기가 돌기 시작하고, 제안을 명시적으로 yield하는 지점까지 가요. 한 번에 타일 하나씩이에요. 빨간 타일…