Pharo llega al navegador gracias a WebAssembly
Pharo in the Browser with WebAssembly
Massimo Nocentini publica Pharo World, un entorno que ejecuta la máquina virtual de Pharo directamente en el navegador mediante WebAssembly. Permite arrancar imágenes de Pharo 13.1, 14 y 15, abrir archivos .st, .zip o .image con sus .changes y .sources, y guardar imágenes en el propio navegador. Incluye un REPL de Smalltalk y ajustes de proxy para clones y pushes de Git a través de Iceberg y Metacello.
El proxy ve el código y cualquier credencial que pase por él, así que elige solo uno que tú ejecutes o en el que confíes.
- jsrcout
Todavía recuerdo el número de Byte sobre Smalltalk de 1981 [0]. Para el yo de secundaria era El Futuro, sin duda. Se veía tan genial. Aunque no tenía forma de probarlo en el Apple II+ [1] familiar.
Probar varios sistemas de la familia Smalltalk en los últimos años mostró las ventajas de implementar todo el sistema en un solo lenguaje y ejecutarlo en una sola imagen. Hay una coherencia y previsibilidad refrescantes en todo, y una simplicidad omnipresente en lugar de complejidad fractal.
Puedes navegar por todo el código base en una sola ventana: lenguaje/compilador, operaciones matemáticas (excepto las primitivas base, creo), estructuras de datos, gráficos, sistema de ventanas, todo bien organizado. Los métodos, incluso los críticos, son en su mayoría pequeños, directos y sin complicaciones. Muchos son solo una o dos líneas.
Smalltalk le da al desarrollador un poder inmenso. Trabajas directamente "en el código"; tus cambios son en vivo al instante. Puedes modificar trivialmente el sistema mismo: solo ve allí y empieza a escribir. Todo en la misma ventana del navegador. Puedes mirar fácilmente dentro de cualquier programa en ejecución, cambiar sus datos e incluso su código, y seguir adelante. Incluso ahora se siente futurista.
Obtienes gráficos potentes y un sistema de ventanas listos para usar en lugar de la historia habitual en la que seleccionas bibliotecas OpenGL/Vulkan/GUI/DOM y configuras herramientas como make/rpm/docker/pip/npm. Ese es probablemente el aspecto más "de ciencia ficción" con diferencia.
En resumen, este era el futuro de "Los Supersónicos" que parecía posible cuando estaba empezando. El futuro que realmente obtuvimos, de […]
- pmkary
No puedo creer lo que veo con mis propios ojos: que Pharo sea así de rápido, en un navegador, en un móvil. Quiero decir, entiendo que las cosas han avanzado y que hay cosas mucho más locas por ahí (como ejecutar OS X Tiger con Infinite Mac, o SketchUp web, o...), pero esto todavía me impacta. La tecnología avanza demasiado rápido para que mi cerebro de mono pueda seguirle el ritmo.
- lynndotpy
Jugué con Pharo en algún momento de 2017 o 2018, haciendo un clon del Buscaminas en él.
Realmente _realmente_ me gustan los entornos donde la iteración rápida e inmediata es posible, especialmente para cualquier proyecto con algo de arte o exploración en su construcción. Una cosa es que (en algunos casos) ves resultados intermedios, emergentes o no intencionados que de otro modo no habrías visto.
Aunque no es un resultado no intencionado particularmente interesante, un problema de lógica (si mal no recuerdo) hacía que la expansión del Buscaminas ocurriera con cada acción (es decir, propagando las celdas despejadas con cada paso en lugar de en un instante).
- ajasmin
¡Genial!
Así que supongo que este es el intérprete de bytecode compilado con Emscripten, ¿no? ¿No tenía Squeak una página similar para probarlo?
Supongo que no hay intento de JIT o de precompilar parte del código de la imagen, lo cual sería una hazaña dada la naturaleza dinámica de Smalltalk y el modelo de ejecución limitado de WebAssembly.
Esperaba tener algo así para jugar. ¿Cómo puedes construir el código?
- Cieric
Nunca he usado Pharo antes, pero en mi Firefox se renderiza demasiado hacia arriba y a la izquierda. No estoy seguro de cómo se traduce el ratón al canvas, pero parece que hay un problema con eso (o viceversa y es el extraño escalado del canvas). Sin embargo, eliminar `transform: scale(calc(1 / var(--world-dpr, 1)));` del CSS del canvas parece solucionarlo en mi caso.