Pharo läuft jetzt im Browser – dank WebAssembly

Pharo in the Browser with WebAssembly

Massimo Nocentini hat die Pharo-VM nach WebAssembly portiert, sodass die Smalltalk-Umgebung direkt im Browser startet. Nutzer können fertige Images von Pharo 13.1 bis 15 laden oder eigene .image-, .changes- und .sources-Dateien öffnen, im Browser speichern und wieder herunterladen. Ein integrierter REPL namens Console sowie Einstellungen für Git-Zugriffe über CORS-Proxys für Iceberg und Metacello runden das Ganze ab.

Der Proxy sieht den Code und alle Zugangsdaten, die durch ihn laufen – wähle also nur einen, den du selbst betreibst oder dem du vertraust.
  1. jsrcout

    Ich erinnere mich noch an die Byte-Ausgabe über Smalltalk von 1981 [0]. Für mich als Highschool-Schüler war das definitiv die Zukunft. Es sah so cool aus. Ich hatte allerdings keine Möglichkeit, es auf dem Apple II+ [1] meiner Familie auszuprobieren.

    In den letzten Jahren habe ich verschiedene Systeme aus der Smalltalk-Familie ausprobiert und dabei die Vorteile gesehen, das gesamte System in einer Sprache zu implementieren und in einem Image laufen zu lassen. Es gibt eine erfrischende Kohärenz und Vorhersehbarkeit in allem, und eine allgegenwärtige Einfachheit statt fraktaler Komplexität.

    Man kann die gesamte Codebasis in einem einzigen Fenster durchsuchen – Sprache/Compiler, mathematische Operationen (außer den Basis-Primitiven, glaube ich), Datenstrukturen, Grafik, Fenstersystem, alles schön organisiert. Methoden, selbst kritische, sind meist klein, unkompliziert und frei von Ballast. Viele sind nur ein oder zwei Zeilen lang.

    Smalltalk gibt dem Entwickler immense Macht. Man arbeitet direkt „im Code“; die Änderungen sind sofort live. Man kann das System selbst trivial modifizieren – einfach hingehen und anfangen zu tippen. Alles im selben Browserfenster. Man kann leicht in jedes laufende Programm hineinschauen, seine Daten und sogar seinen Code ändern und einfach weitermachen. Selbst jetzt fühlt es sich futuristisch an.

    Man bekommt leistungsstarke Grafik und ein Fenstersystem out of the box, statt der üblichen Geschichte, bei der man OpenGL/Vulkan/GUI/DOM-Bibliotheken auswählt und Tools wie make/rpm/docker/pip/npm konfiguriert. Das ist wahrscheinlich der mit Abstand „science-fiction-mäßigste“ Aspekt.

    Kurz gesagt, das war die „Jetsons“-Zukunft, die möglich schien, als ich anfing. Die Zukunft, die wir tatsächlich bekommen haben, von […]

  2. pmkary

    Ich kann nicht glauben, was ich mit eigenen Augen sehe: Pharo ist so schnell, im Browser, auf einem Handy. Ich meine, ich verstehe, dass die Dinge fortgeschritten sind und es so viel Verrückteres gibt (wie OS X Tiger mit Infinite Mac laufen zu lassen, oder SketchUp web, oder …), aber das schockiert mich immer noch. Die Technik entwickelt sich zu schnell, als dass mein Affenhirn mithalten könnte.

  3. lynndotpy

    Ich habe um 2017 oder 2018 herum mit Pharo herumgespielt und darin einen Minesweeper-Klon gebaut.

    Ich mag wirklich _wirklich_ Umgebungen, in denen schnelle und unmittelbare Iteration möglich ist, besonders für jedes Projekt mit künstlerischem Anspruch oder Erkundungscharakter in seiner Konstruktion. Eine Sache ist, dass man (in manchen Fällen) Zwischen-, emergente oder unbeabsichtigte Ergebnisse sieht, die man sonst nicht gesehen hätte.

    Obwohl kein besonders interessantes unbeabsichtigtes Ergebnis, hatte ein Logikproblem (iirc) zur Folge, dass die Minesweeper-Ausbreitung bei jeder Aktion geschah (d. h. das Aufdecken von Zellen mit jedem Schritt propagierte statt sofort).

  4. ajasmin

    Schön!

    Ich nehme also an, das ist der Bytecode-Interpreter, kompiliert mit Emscripten? Hatte Squeak nicht eine ähnliche Ausprobier-Seite?

    Ich würde annehmen, dass es keine Versuche gibt, einen Teil des Image-Codes zu jitten oder vorzukompilieren, was angesichts der dynamischen Natur von Smalltalk und dem begrenzten Ausführungsmodell von WebAssembly eine Meisterleistung wäre.

    Ich hatte gehofft, so etwas zum Herumspielen zu haben. Wie kann man den Code bauen?

  5. Cieric

    Ich habe Pharo noch nie benutzt, aber in meinem Firefox rendert es zu weit nach oben und links. Ich bin nicht sicher, wie die Maus auf das Canvas übertragen wird, aber es scheint ein Problem damit zu geben (oder umgekehrt, und es ist die seltsame Canvas-Skalierung). Das Entfernen von `transform: scale(calc(1 / var(--world-dpr, 1)));` aus dem Canvas-CSS scheint es für mich zu beheben.

Mehr von diesem Tag

2026-11-11