Subtext es un lenguaje y entorno de programación moderadamente visual para escribir software de aplicación . Es un intento experimental de investigación para desarrollar un nuevo modelo de programación , llamado Programación Centrada en Ejemplos, que trata los bloques copiados como prototipos de primera clase para la estructura del programa. Utiliza texto en vivo, similar a lo que ocurre en las hojas de cálculo cuando los usuarios actualizan las celdas, para obtener retroalimentación frecuente. Se pretende que con el tiempo se desarrolle lo suficiente como para convertirse en un lenguaje práctico para el uso diario. Está previsto que sea un software abierto; la licencia aún no se ha determinado.
Subtext fue creado por Jonathan Edwards, quien presentó un artículo sobre el lenguaje a OOPSLA . Fue aceptado como parte de la conferencia de 2005.
Las primeras vistas previas en video del entorno Subtext se publicaron alrededor de 2006, [1] que demostraban la semántica de los programas Subtext y la estrecha integración con el entorno y el tiempo de ejecución de Subtex.
Los programas Subtext se declaran y manipulan (o mutan) añadiendo y vinculando elementos de varios tipos a un árbol de sintaxis e introduciendo valores o nombres según sea necesario, en lugar de escribir programas textuales. Debido al diseño del lenguaje y el entorno Subtext, no hay distinción entre la representación de un programa y su ejecución. Al igual que las hojas de cálculo, los programas Subtext son ejecuciones en vivo dentro de un entorno y tiempo de ejecución, y la programación es la manipulación directa de estas ejecuciones a través de un entorno gráfico . A diferencia de los lenguajes de programación funcional típicos , Subtext tiene una semántica simple y es fácilmente aplicable a sistemas reactivos que requieren estado mutable, E/S y concurrencia, bajo un modelo conocido como "Programación reactiva". [2] La entrada de consola ("invocaciones") se puede utilizar a través del flujo de datos dentro de un programa Subtext, lo que permite a los usuarios manipular valores de forma interactiva.
Una continuación y un subconjunto del lenguaje Subtext que utiliza otros principios, [3] es Coherence , un lenguaje y entorno de programación experimental que utiliza un nuevo modelo de computación basada en cambios llamado "reacción coherente", para coordinar los efectos y efectos secundarios de los programas de forma interactiva a medida que se desarrollan. El lenguaje está especializado en software de aplicación interactiva y está siendo diseñado por el creador de Subtext, Jonathan Edwards, quien informa sobre su desarrollo mediante la publicación de documentos técnicos.
Los efectos secundarios son a la vez la esencia y la pesadilla de la programación imperativa. El programador debe coordinar cuidadosamente las acciones para gestionar los efectos secundarios que se producen entre sí. Esta coordinación es compleja, propensa a errores y frágil. La reacción coherente es un nuevo modelo de computación basada en cambios que coordina los efectos automáticamente. La coordinación automática de acciones permite al programador expresar qué hacer, no cuándo hacerlo.
— Jonathan Edwards, Reacción coherente , MIT CSAIL
Los cambios de estado desencadenan eventos llamados reacciones, que a su vez cambian otros estados. Un orden de ejecución coherente es aquel en el que cada reacción se ejecuta antes que cualquier otra que se vea afectada por sus cambios. Un orden coherente se descubre de manera iterativa detectando incoherencias a medida que ocurren y rastreando sus efectos. El componente fundamental de la coherencia es el árbol mutable tipificado dinámicamente. El mecanismo de abstracción fundamental es el árbol virtual, cuyo valor se calcula de manera diferida y cuyo comportamiento se genera mediante reacciones coherentes. [4]