# S8

S8, es una implementación de Smalltalk multiplataforma de diseño moderno.
No requiere de una máquina virtual Smalltalk para ejecutar; los objetos comparten el espacio de ejecución provistos por otros lenguajes (Javascript, Lua, Julia, Python).
El código Smalltalk es traducido dinámicamente al lenguaje de ejecución, pudiendo así cambiar el sistema mientras ejecuta, incluso en lugares no planeados con anterioridad y/o de forma modular.
La misma forma de trabajo se utiliza en todos los lugares dónde ejecuta, permitiendo un intercambio de código y contenidos dinámicamente, incluso entre sistemas remotos.
El sistema puede generar una captura (Snapshot) el cual es un texto que puede ser guardado en un archivo, enviado remotamente para ejecutar o nutrir parcialmente otro sistema S8.
Todas las características de Smalltalk (dinamismo, reflexión, metaprogramación, etc) se conservan y amplían para explotar las capacidades de ejecución conjunta con otros modelos de programación (inlining, builders y framework de salto son algunas de las características únicas de S8 Smalltalk).
Los sistemas S8 no requieren de interfaz gráfica, generalmente son desarrollados por interacción remota (desde navegador o entre sistemas S8).
Los objetos S8 pueden usar las estructuras nativas provistas en el ámbito de ejecución y viceversa.
Su plataforma de desarrollo web comunitaria es denominada U8 (Universo 8).

## Características

S8 es producto de la búsqueda de un cambio en la forma de utilizar Smalltalk basado en un esquema de producción de desarrollo social de software, superando los límites impuestos por el diseño original de Smalltalk80. Cuenta con las capacidades típicas y herramientas básicas de un sistema Smalltalk. Se encuentra entre los sistemas que se pueden ejecutar prácticamente en casi todas las plataformas de hardware que soportan Javascript, Lua, Julia o Python.
Las herramientas de desarrollo funcionan remotamente y sirven para modificar el comportamiento del sistema con un tamaño mínimo y sin requerir interfaz gráfica.
Los sistemas implementados con S8 Smalltalk pueden ejecutar en páginas de internet, servidores (nodejs y otros), teléfonos y tabletas (android e IOS) sobre Javascript, Lua (desktop, IOS, Android), Julia (desktop) y Python (desktop, Android, IOS).
Los sistemas S8 pueden ejecutar en dispositivos Raspberry Pi sin requerir instalación de software adicional.

## Formas de uso

S8 es utilizado para transformar/migrar sistemas escritos en Smalltalk, a otras plataformas de ejecución; permitiendo el desarrollo de soluciones en arquitecturas modernas sin esperar una nueva Máquina Virtual Smalltalk.
El salto de los objetos a un nuevo ámbito de ejecución (nuevos lenguajes de ejecución) se realiza por medio de un framework abierto.
En todos los casos se puede activar un servidor en el sistema para ser controlado y desarrollado remotamente desde un navegador de Internet.
En los casos de ejecución con Julia y Python, el sistema tiene acceso e interactúa directamente con cualquier objeto y/o librería permitiendo una ejecución eficiente y cómoda en manejo de altos volúmenes de imágenes, audio, visión por computador e IA.

### Servidor

Utilizando Node.js se puede desarrollar servidores web, basándose en la contribución NodeJS Framework.
En los casos de ejecución sobre Lua, Julia, Python los servidores usan los frameworks de cada plataforma con acceso directo.

### Plataformas Móviles

El desarrollo para Android e IOS produce aplicaciones nativas (requiere de Android Studio y XCode).
En los casos de desarrollo Android con Javascript, la aplicación incluye NodeJS y una capa de interacción directa con los objetos Java, pudiendo usar e implementar la aplicación nativa en S8 Smalltalk.
En los casos de desarrollo Android con Lua, la aplicación no incluye NodeJS pero si las mismas características de interacción con Java.
En los casos de desarrollo IOS, la interacción con ObjetiveC; permite subclasificar, refinar e implementar lo necesario a nivel nativo en S8 Smalltalk.

### Web

Las herramientas de desarrollo están contenidas en una página web (image base para web), y en U8 se permite grabar el image como contribuciones comunitarias.

### Consola

En todas las alternativas de ejecución existe un ejecutable para desarrollo de sistemas con interfaz de consola.
Para Javascript se puede utilizar directamente la versión en consola.

## Interfaz gráfica

Actualmente la GUI ofrecida por el servicio U8 es generada dinámicamente y se accede como WI8. En su modalidad base consta con herramientas de desarrollo.
El desarrollo de sistemas embebidos en páginas Web se hace de manera modular basada en los frameworks Web de base.
La carga de interfaz de usuario y paquetes puede realizarse de forma modular y bajo demanda, por lo que un sistema puede tener un tamaño mínimo y ser generado (Snapshot) con el contenido suficiente para arrancar; sin fuentes, sin herramientas de desarrollo, incluso sin compilador (si es requerido).

## Organización

* U8 es un servicio para el desarrollo social basado usando Smalltalk.
* Grupo de Smalltalking es un grupo social para debatir sobre S8 y realizar consultas.