Pharo, WebAssembly로 브라우저에서 바로 실행된다

Pharo in the Browser with WebAssembly

Pharo Smalltalk 가상 머신을 WebAssembly로 옮겨 브라우저에서 그대로 돌리는 프로젝트다. Pharo 13.1, 14, 15 이미지를 내려받아 실행할 수 있고, .st 파일이나 .image와 .changes, .sources를 끌어다 놓으면 바로 열린다. 이미지는 브라우저에 저장되며 Git 작업은 CORS 프록시 설정을 통해 처리한다.

이 프록시는 코드와 그 프록시를 거쳐 가는 자격 증명을 볼 수 있으므로, 직접 운영하거나 신뢰하는 프록시만 선택해야 한다.
  1. jsrcout

    저는 아직도 1981년 Byte지의 Smalltalk 특집을 기억합니다[0]. 고등학생이던 저에게 그것은 확실히 '미래'였어요. 정말 멋져 보였죠. 하지만 가족용 Apple II+[1]에서는 시도해 볼 방법이 없었습니다.

    최근 몇 년간 여러 Smalltalk 계열 시스템을 시험해 보면서, 전체 시스템을 하나의 언어로 구현하고 하나의 이미지에서 실행하는 장점을 알게 되었습니다. 프랙탈 같은 복잡함 대신 전반적인 단순함과 함께, 상쾌할 정도의 일관성과 예측 가능성이 모든 것에 깃들어 있습니다.

    언어/컴파일러, 수학 연산(기본 프리미티브는 제외인 것 같지만), 데이터 구조, 그래픽, 윈도우 시스템까지 전체 코드베이스를 하나의 창에서 둘러볼 수 있습니다. 모두 잘 정리되어 있죠. 심지어 핵심적인 메서드들도 대부분 작고 간결하며 군더더기가 없습니다. 많은 메서드가 단 한두 줄에 불과합니다.

    Smalltalk는 개발자에게 엄청난 힘을 줍니다. 당신은 '코드 안에서' 직접 작업하며, 변경 사항은 즉시 반영됩니다. 시스템 자체도 간단히 수정할 수 있습니다. 그냥 거기로 가서 타이핑을 시작하면 됩니다. 모두 같은 브라우저 창 안에서요. 실행 중인 어떤 프로그램이든 내부를 쉽게 들여다보고, 데이터는 물론 코드까지 바꾸면서 계속 진행할 수 있습니다. 지금 봐도 미래적입니다.

    보통 OpenGL/Vulkan/GUI/DOM 라이브러리를 고르고 make/rpm/docker/pip/npm 같은 도구를 설정해야 하는 것과 달리, 강력한 그래픽과 윈도우 시스템을 기본으로 제공받습니다. 아마 이 점이 단연코 가장 '공상과학적인' 측면일 겁니다.

    요컨대, 이것은 제가 시작하던 시절에 가능해 보였던 '젯슨 가족'식 미래였습니다. 실제로 우리가 맞이한 미래는 […]

  2. pmkary

    Pharo가 브라우저에서, 모바일에서 이렇게 빠르다니 내 눈으로 직접 보다니 믿을 수가 없다. 물론 세상이 발전했고 훨씬 더 미친 것들이 존재한다는 건 안다(예를 들어 Infinite Mac으로 OS X Tiger를 돌린다거나, SketchUp 웹이라거나...). 그래도 이건 여전히 충격적이다. 기술이 너무 빨리 발전해서 내 원숭이 뇌가 따라잡을 수가 없다.

  3. lynndotpy

    2017년이나 2018년쯤 Pharo를 가지고 놀면서 지뢰찾기 클론을 만든 적이 있습니다.

    저는 빠르고 즉각적인 반복이 가능한 환경을 정말 _정말_ 좋아합니다. 특히 프로젝트 구성에 예술성이나 탐구가 조금이라도 있는 경우에는 더욱요. 한 가지는 (어떤 경우에는) 그렇지 않았다면 보지 못했을 중간 결과나 창발적 결과, 의도치 않은 결과를 보게 된다는 점입니다.

    그다지 흥미로운 의도치 않은 결과는 아니었지만, (기억하기로는) 로직 문제 때문에 지뢰찾기의 확장이 매 동작마다 일어났습니다(즉, 한 번에 확산되는 대신 단계마다 지워진 셀이 전파되는 식).

  4. ajasmin

    멋지네요!

    그러면 이건 Emscripten으로 컴파일된 바이트코드 인터프리터라고 가정합니다? Squeak에도 비슷한 체험 페이지가 있지 않았나요?

    이미지 코드 일부를 JIT하거나 미리 컴파일하려는 시도는 없을 것 같습니다. Smalltalk의 동적 특성과 WebAssembly의 제한된 실행 모델을 고려하면 대단한 위업이겠죠.

    이런 걸 가지고 놀 수 있기를 바랐습니다. 코드는 어떻게 빌드할 수 있나요?

  5. Cieric

    Pharo는 전에 써본 적이 없는데, 제 Firefox에서는 너무 위쪽과 왼쪽으로 치우쳐 렌더링됩니다. 마우스가 캔버스로 어떻게 변환되는지는 모르겠지만 문제가 있는 것 같습니다(혹은 반대로 이상한 캔버스 스케일링 때문일 수도 있고요). 그래도 캔버스 CSS에서 `transform: scale(calc(1 / var(--world-dpr, 1)));`를 제거하니 저는 고쳐졌습니다.

이 날의 다른 글

2026-11-11