Smalltalk의 초기 역사 (1993)

The Early History of Smalltalk (1993)

worrydream.com ▲ 109 댓글 64 _reza

요약

앨런 케이가 객체 지향 프로그래밍과 Smalltalk가 태어난 과정을 직접 돌아본 회고록입니다.

앨런 케이가 1993년 ACM 프로그래밍 언어 역사 학술대회(HOPL-II)에 낸 글입니다. 이번에 올라온 것은 브렛 빅터가 웹에서 읽기 좋게 다시 꾸민 판입니다.

왜 중요한가

  • 객체 지향의 출발점은 데이터 추상화가 아니라 메시지를 주고받는 작은 컴퓨터라는 발상이었다고 당사자가 밝힙니다.
  • 개인용 컴퓨터와 교육용 컴퓨팅의 구상이 1960~70년대의 어떤 연구에서 이어졌는지 계보를 보여 줍니다.

핵심 내용

  • 케이는 객체를 서로 메시지만 주고받는 작은 컴퓨터로 보고, 생물의 세포에 빗댔습니다.
  • Sketchpad의 마스터·인스턴스 구조와 Simula의 클래스를 보고 객체라는 생각을 굳혔다고 했습니다.
  • 아이들에게 LOGO를 가르친 시모어 페퍼트의 연구를 보고 공책 크기의 개인용 컴퓨터 Dynabook을 구상했습니다.
  • 제록스 PARC에서 언어 전체를 코드 한 쪽으로 정의하겠다는 내기를 했고, 댄 잉걸스가 이를 실제로 구현했습니다.
  • 케이는 공을 한 사람에게 돌리기 어렵다며 잉걸스와 아델 골드버그 등 동료의 몫을 강조했습니다.

HN 반응

  • Smalltalk가 Objective-C와 NeXTSTEP, Self를 거쳐 Java와 V8의 JIT(실행 중 기계어 번역)까지 영향을 줬다는 계보가 여러 댓글에서 정리됐습니다.
  • Smalltalk-76부터는 Simula 67의 객체 모델로 크게 바뀌었다며 이 글보다 댄 잉걸스의 논문을 권하는 반론도 나왔습니다.

댓글

30개 표시 · 전체 64개
  1. mcswell HN

    저는 Smalltalk 프로그래머였던 적은 없습니다. (간단한 Smalltalk 모듈 하나를 코드 출력물을 보면서 디버깅한 적은 있지만요.) 다만 Smalltalk 위에 만든 객체지향 언어(OOPL)로 한동안 일한 적이 있습니다. 그 프로젝트는 너무 느려서 죽었는데, 프로젝트가 쓰던 Smalltalk 업체가 망하면서 호환도 안 되고 비싸기까지 한 Smalltalk만 유일하게 남은 탓도 있었습니다. (적어도 제가 듣기로는 그렇습니다.)

    지금 그 프로젝트는 C++로 작성되어 있습니다. C++의 장점은 무료이고 빠르다는 점이었고요. (제가 보기에는 읽어서 이해하기도 어렵고 툭하면 죽기도 합니다.)

  2. slowin HN

    Smalltalk가 NeXTSTEP과 Objective-C에 큰 영향을 줬다는 걸 모르는 사람이 많습니다. Interface Builder -> Project Builder -> XCode로 이어지는 GUI 직렬화에서 그 흔적이 많이 보입니다. 물론 Obj-C의 메시지 전달 방식과 전반적인 동적 성격도 그렇고요.

    이 글이 역사를 잘 정리해 줍니다.

    https://computerhistory.org/blog/the-deep-history-of-your-apps-steve-jobs-nextstep-and-early-object-oriented-programming/

  3. linguae HN

    여러 면에서 NeXTSTEP은 Smalltalk의 동적인 성격을 일부 내주고 Unix 생태계와의 호환성을 얻은 "실용적인 Smalltalk 환경"이라고 볼 수 있습니다. 넥스트가 처음 노린 시장이 고등교육이었다는 점을 떠올려 보세요. 고등교육은 1980년대에도 이미 Unix에 의존하기 시작했습니다. Unix 워크스테이션의 시대였고, 넥스트는 선, SGI, HP, DEC 같은 Unix 워크스테이션 업체의 경쟁자였다고 할 수 있습니다. 넥스트의 차별점은 Objective-C 위에 세운, Smalltalk에서 영감을 받은 객체지향 환경이었습니다.

    그래도 순수한 Smalltalk 워크스테이션이 어떤 모습이었을지, 그걸 빠르게 만들려면 어떤 하드웨어가 필요했을지는 궁금합니다. 80년대 후반은 Lisp 머신의 시대이기도 했지만, Lisp 머신은 NeXT 큐브보다 훨씬 비쌌죠. 제 기억이 맞다면 Xerox Alto의 Smalltalk는 느렸습니다. 그런데 (RISC로 유명한) 데이비드 패터슨의 박사과정 학생이 성능 좋은 Smalltalk VM을 만들었고, 그 작업 일부가 정신적 후속작인 Self로 이어졌습니다. Self는 Java VM 설계에 큰 영향을 줬고요. 90년대 중반에 Java가 느리게 느껴졌던 기억이 있는데, Java VM의 근본적인 문제라기보다는 Java 애플릿에 대한 나쁜 기억 때문일 수도 있습니다.

  4. rjsw HN

    텍트로닉스가 Smalltalk 워크스테이션을 팔았고[1], 거기서 Lisp도 돌릴 수 있었습니다. Alto보다 상당히 빨랐던 Xerox Daybreak에서도 Smalltalk-80을 돌릴 수 있었을 겁니다.

    최초의 JIT은 L 피터 도이치가 68020용으로 Smalltalk에 만들었습니다.

    [1] https://www.mirrorservice.org/sites/www.bitsavers.org/pdf/tektronix/44xx/ [2] https://en.wikipedia.org/wiki/Xerox_Daybreak

  5. allenwb HN
  6. yolp5 HN

    저는 몇 년째 이걸 찾고 있어요. 매물로 나온 건 본 적이 없는 것 같아요. 아쉽게도 레트로컴퓨팅을 즐기던 시절도 (특히 이렇게 희귀하고 비쌀 법한 기계라면) 거의 끝나 가고요. Lisp 머신을 좋은 가격에 넘겨주겠다는 사람들은 만나 봤지만, 이건 그보다도 좀 더 마이너한 물건이겠죠.

  7. kjs3 HN

    그러게요... Tek 4404 한 대 구하고 싶은 건 우리 모두 마찬가지죠 :-)? 이 사람을 보면서 대리만족해 보시는 건 어때요? https://medium.com/@adambillyard/restoring-an-ai-workstation-from-40-year-ago-125abb5c89b4

  8. rjsw HN

    이 사람이 Mame에 4404 에뮬레이션도 추가한 모양입니다.

  9. rjsw HN

    저는 4404가 새 제품이던 시절 전시회에서 잠깐 만져 본 적이 있습니다. 그 뒤로는 매물로 나온 걸 본 적이 없고요.

  10. pjmlp HN

    그 Smalltalk가 이후 제록스 안에서 Mesa, Cedar, Interlisp-D에 영향을 줬습니다.

    Mesa와 Cedar는 니클라우스 비르트가 Modula-2/Lilith와 Oberon을 만드는 데 영향을 줬습니다.

    그게 다시 롭 파이크에게 영향을 줘서, Plan 9의 ACME를 개발하는 방식에 반영됐습니다.

    한편 StrongTalk와 Objective-C는 Java가 만들어진 방식과 JIT 컴파일 접근법에 영향을 줬습니다.

    또 다른 갈래로, Smalltalk는 Self의 설계에 영향을 줬고, Self는 V8 JIT이 설계되는 데 영향을 줬습니다.

    거기에 Ruby도 있고요.

    이 모든 걸 생각하면, Smalltalk를 쓴다는 게 실제로 어떤 건지 여전히 해 보지 않은 사람이 많다는 게 안타깝습니다.

    참고로 Interface Builder는 넥스트가 인수하기 전에는 Lisp 프로토타입으로 시작했습니다.

    https://paulhammant.com/2013/03/28/interface-builders-alternative-lisp-timeline/

  11. kragen HN

    Rochus와 저는 몇 주 전에 이 문제로 논쟁을 벌였고, 저는 역사 논문을 한 무더기 읽었습니다. 테이텔바움이 Smalltalk가 Interlisp-D에 영향을 줬다고 말하는 글과, 램슨이 GUI의 공을 사실상 Smalltalk에 돌리는 글도 있었습니다. https://news.ycombinator.com/item?id=49857855

    Interface Builder의 Lisp 역사는 전혀 몰랐습니다! 찾아서 알려 주셔서 감사합니다!

  12. gumby HN

    저는 그 당시 Smalltalk가 Interlisp에 영향을 줬다는 기억이 별로 없습니다. (저는 KSL에 있었지만 3Lisp 작업을 하고 있었기 때문에, 이론상 Interlisp는 우리 쪽 구현 언어일 뿐이었습니다. 물론 PARC는 그런 경계를 따지는 곳이 아니었지만요.

  13. NetMageSCW HN

    저는 프로그래밍 언어에 빠져들면서 Mesa와 Cedar에 흥미가 있었습니다. 그래도 더 관심이 갔던 건 Trellis/Owl이었습니다. (DEC SRC에 편지를 썼더니 문서를 보내 줘서 사본도 갖고 있었습니다.)

  14. rjsw HN

    JMH가 INRIA에서 작성한 LeLisp 버전의 Interface Builder는 링크에 나온 타임라인보다 앞섭니다.

  15. pjmlp HN

    그 링크가 제가 아는 공식적인 이야기인데, 그 이야기는 어디서 읽을 수 있나요?

  16. rjsw HN

    SOS Interface에 관한 (프랑스어) 논문 종이 사본이 있습니다. 한때는 스캔본도 있었고요.

    그분이 돌아가시기 몇 년 전 INRIA에서 한 강연[1]에 타임라인이 좀 더 나와 있습니다.

    [1] https://www.inria.fr/en/jean-marie-hullot-perforated-cards-iphone

  17. Rochus HN

    Which then influenced Mesa, Cedar

    어떤 점에서요? 이 주장의 근거가 된 자료는 뭔가요?

  18. kragen HN

    그 얘기는 두 주 전에 당신과 제가 이미 아주 길게 했고, 그때 제가 자료를 많이 찾아 왔습니다. https://news.ycombinator.com/item?id=49857855

  19. pjmlp HN

    디지털 아카이브에 있는 제록스 논문들입니다. 찾아볼 수는 있습니다. 예를 들어 Mesa의 XDE Tajo 경험을 다룬 논문을 보세요.

  20. Rochus HN

    MPS/MPL은 1971년에 시작됐고, Mesa라는 이름은 1974년 6월에 정해졌으며, Alto 크로스 컴파일러는 1975년 봄에 동작했습니다. Cedar는 언어(Mesa의 확장으로, 예컨대 GC가 추가됨. 다만 램슨이 제안한 객체지향 기능은 제가 아는 한 구현된 적이 없습니다)이면서 개발 환경이기도 합니다. 말씀하신 주장은 후자에 관한 것이라고 짐작합니다. 프로그래밍 언어 쪽은 Smalltalk와 공통점이 전혀 없고, 기초 작업은 오히려 Smalltalk보다 먼저 이루어졌습니다.

  21. pjmlp HN

    네, 제 주장은 모든 제록스 PARC 환경이 공유한 IDE 경험, 그리고 그것이 각 언어의 설계에 어떤 영향을 줬느냐에 관한 겁니다.

    논문들을 찾아보겠습니다.

  22. Rochus HN

    처음의 Alto 운영체제(들)에 이미 GUI가 있었고, 그게 Bravo나 Gypsy 같은 유명한 애플리케이션의 토대였다는 점도 잊으면 안 됩니다. 그 원래 OS와 애플리케이션들은 BCPL로 구현됐고, 전부 Smalltalk-76보다 먼저 동작하고 있었습니다. 비르트가 1976-77년에 처음 PARC를 방문했을 무렵 Mesa는 이미 스스로를 호스팅하는 시스템 개발 도구(작은 운영체제와 심볼릭 디버거)가 되어 있었고, 저는 그 시기에 Smalltalk가 실질적인 영향을 줬다는 건 알지 못합니다.

  23. kragen HN

    I'm not aware of any substantial Smalltalk influence at that time.

    알고 계셔야 합니다. 제가 두 주도 안 된 때에 몇 시간이나 들여서 Alto와 Bravo 설계자들의 글을 인용문과 함께 길게 가져와 자세히 설명해 드렸으니까요. 그때 당신은 그 점을 인정하면서, 그건 자신이 반박하려던 게 아니었다고 했고요. https://news.ycombinator.com/item?id=49857855

  24. swannodette HN

    Interface Builder는 원래 Lisp 프로젝트였습니다.

    https://www.inria.fr/en/jean-marie-hullot-visionary-computer-scientist-and-tech-expert

  25. Rochus HN

    이것도 모르는 사람이 또 많은데, Smalltalk-76부터는 Simula 67의 객체 모델을 (그만한 완성도로는 처음으로) 구현했고, 이는 Smalltalk-72에서 근본적으로 벗어난 것이었습니다. 자세한 내용은 잉걸스의 1978년 논문과 2020년 논문을 보세요 ( https://dl.acm.org/doi/10.1145/512760.512762 와 https://dl.acm.org/doi/10.1145/3386335 ). 둘 다 제목에 나온 글보다 더 흥미롭고 더 의미 있는 글이고, 우리가 오늘날 Smalltalk-80이라고 아는 기술의 대부분을 발명한 사람이 썼습니다.

  26. kragen HN

    맞습니다.

  27. kjs3 HN

    대학 시절에 브래드 콕스가 와서 Objective-C(그리고 더 넓게는 그의 '소프트웨어 IC' 아이디어)에 관해 강연한 적이 있습니다. Smalltalk가 핵심적인 영향이었다고 아주 분명하게 말했습니다. ObjC에 관한 그의 책에도 그 이야기가 나오고요. 지금 봐도 아주 흥미로운 내용입니다.

  28. NetMageSCW HN

    저도 대학에서 브래드 콕스를 만났는데, 제가 방과 후에 함께 일하던 교수님을 만나러 오셨을 때였습니다. 재미있는 점은, 그가 케이가 말한 '작은 컴퓨터로서의 객체' 대신 소프트웨어 IC를 떠올렸고, 그 개념을 구현하려고 Smalltalk에서 가져와 Objective-C를 만들었다는 겁니다. 그것도 가능한 가장 단순한 방식으로, 거의 둘을 나란히 붙여 놓은 수준이었습니다. 반면 스트롭스트룹은 Simula의 영향을 더 크게 받았습니다. (특히 실제로 시뮬레이션을 만들고 있었으니까요.) 그래서 Simula에는 없던 성능을 얻으려고 C를 객체로 확장했고요.

  29. twoodfin HN

    사람들은 으레 문법이나 기존 인기 언어와의 상호운용 문제에 매달리지만, 정말 중요한 건 Smalltalk, Objective-C, Self, C++ 등의 객체 모델 차이입니다.

    참고: https://www.abebooks.com/9780201834543/Object-Model-Lippman-Stanley-B-0201834545/plp

  30. kencausey HN

    s/Similar/Simula/

Hacker News에서 보기 ↗