Telescript es un lenguaje de programación orientado a agentes, desarrollado por General Magic como parte del sistema Magic Cap . Los programas Telescript utilizaban una sintaxis modificada similar a C , conocida como High Telescript, y se compilaban a un lenguaje basado en pila llamado Low Telescript para su ejecución. Low Telescript se ejecutaba dentro de intérpretes de máquinas virtuales , o "motores Telescript", en ordenadores anfitriones.
El modelo básico de Telescript es similar al de Java , y se diferencia principalmente en dónde se ejecutan las aplicaciones. Java se diseñó para permitir la descarga de aplicaciones Java en cualquier plataforma y su ejecución local. Telescript, en esencia, invirtió este proceso, permitiendo que equipos de usuario final con capacidades limitadas cargaran programas Telescript en servidores para aprovechar las capacidades de estos. Telescript incluso podía migrar un programa en ejecución; el lenguaje incluía funciones para gestionar el código y el estado serializado de un programa , transferirlo a otro motor Telescript (en un dispositivo o servidor) para continuar la ejecución y, finalmente, devolverlo al dispositivo cliente o servidor de origen para entregar su resultado.
General Magic se desarrolló originalmente como un equipo dentro de Apple Inc. y se independizó en 1990. Cuando comenzaron a generar cierto interés en la prensa en 1992, Apple decidió entrar en el mismo mercado con su tableta Newton . General Magic no logró encontrar un nicho de mercado y los servicios de Telescript pronto fueron descontinuados en favor de nuevos productos ajenos a la informática móvil .
Historia
En 1990, Marc Porat convenció al entonces director ejecutivo de Apple, John Sculley, de que el futuro de la informática no residía en las computadoras personales de escritorio , sino en dispositivos portátiles mucho más pequeños que combinaran potencia de cálculo, sistemas de comunicación y datos ubicados en servidores accesibles en red. [ 1 ] Señaló que las computadoras portátiles siempre tendrían menos potencia que las máquinas a las que se conectarían y sugirió que esto formara parte del diseño: en lugar de intentar construir una computadora portátil que pudiera realizar las tareas de un sistema de escritorio, el dispositivo portátil debería utilizar de forma invisible la potencia de cálculo de los servidores para producir un resultado similar. [ 2 ] [ 3 ]
Sculley accedió a permitir que Porat comenzara a investigar los conceptos bajo el nombre en clave "Pocket Crystal". Los miembros clave del equipo inicial fueron Porat y los famosos desarrolladores de Macintosh Bill Atkinson y Andy Hertzfeld . El equipo pronto se vio ignorado por la alta dirección y tuvo que luchar constantemente por los recursos. Se acercaron de nuevo a Sculley con la idea de convertir Pocket Crystal en una empresa independiente. Sculley aceptó, así como la idea de invitar a nuevos socios en el área de hardware. La nueva empresa, General Magic (GM), se creó en mayo de 1990 con Apple, Sony y Motorola con una participación del 10% cada una. Pronto se unieron a la empresa otros ex empleados de Macintosh, como Joanna Hoffman , Susan Kare , Dan Winkler, Bruce Leak y Phil Goldman . [ 1 ]
Para 1992, GM había firmado acuerdos de desarrollo con varias compañías para trabajar con el entorno Magic Cap, incluyendo Sony, Motorola, Matsushita , Philips , British Telecom y AT&T Corporation . Esto generó un considerable revuelo en la prensa. [ 3 ] Apple ya había comenzado el proyecto Newton , un diseño para una computadora portátil más grande, similar a una tableta, parecida al iPad de tamaño completo . Con el éxito de General Magic en la prensa, reposicionaron el Newton directamente en el mismo mercado y aceleraron su lanzamiento en 1993. También vendieron su participación en General Magic y los demandaron. Los socios de General Magic no lanzaron hardware hasta 1994, momento en el que el Newton ya había definido esencialmente lo que debía ser un asistente digital personal (PDA), y los sistemas PDA se juzgaban por sus capacidades de reconocimiento de escritura a mano . Magic Cap era una interfaz de apuntar y hacer clic (similar a HyperCard o al iOS moderno ). [ 2 ]
Para 1995, la empresa era una sombra de lo que había sido y la mayoría de los desarrolladores originales se habían marchado. En 1996, Steve Markman fue contratado para hacerse cargo, y contrató a Kevin Surace para llevar a la empresa en una nueva dirección. Un nuevo equipo desarrolló el sistema de asistente personal telefónico Portico, que perdura hasta hoy como base de OnStar . El grupo original de dispositivos portátiles se escindió en 1998 como DataRover Mobile Systems Incorporated y posteriormente se renombró como Icras en 2000, [ 4 ] prestando servicios a varios mercados verticales antes de cerrar en 2001. [ 5 ] Los restos de la empresa original fueron liquidados en 2004. [ 3 ]
Descripción
Conceptos subyacentes
Telescript se basó en el concepto de pequeños programas, conocidos como agentes , que interactuarían con servicios informáticos denominados lugares. Todos ellos se ejecutaban en un clúster de uno o más servidores que albergaban lo que se denominaba una nube Telescript. El dispositivo portátil del usuario era uno de esos lugares, aunque con capacidades limitadas. El modelo asumía que la mayor parte de la información y los servicios serían proporcionados por lugares que se ejecutaban en servidores más grandes alojados por proveedores de comunicaciones como AT&T. Incluso los primeros documentos se referían a esto como " ejecutarse en la nube" . [ 1 ] Los programas orientados al usuario consistirían en varios de estos agentes, que podrían ejecutarse localmente, en los hosts del proveedor, o incluso reenviarse a servidores de terceros. Para coordinar las comunicaciones, Telescript también incluía los conceptos de telenombre , que identificaba de forma única a los usuarios, y teledirecciones , que identificaban el dispositivo incluso cuando se movía entre redes. [ 6 ]
Por ejemplo, consideremos una aplicación de compras donde el usuario solicita encontrar precios para una nueva parrilla que desea comprar. En un modelo cliente-servidor tradicional , la aplicación formularía varias consultas, las enviaría a diversos servicios y luego recopilaría los resultados y los mostraría. En el modelo Telescript, la aplicación crearía un nuevo agente con los datos de la solicitud, lo personalizaría con el nombre y la dirección del usuario y lo enviaría a una tienda en un servidor para su procesamiento. Este servidor podría entonces gestionar la solicitud directamente o transferir el agente a otros lugares, como las tiendas de los vendedores, para su posterior procesamiento. Los resultados podrían almacenarse en los campos de datos internos del agente y enviarse de vuelta a través de la red al dispositivo del usuario, o bien se podría crear un nuevo agente "mensajero" que transportara únicamente los datos de los resultados y los enviara de vuelta para minimizar la transferencia de datos en la red. [ 7 ]
El modelo también se diferencia de las soluciones tradicionales en la forma en que se produce el intercambio de datos en el caso de programas que interactúan. Por ejemplo, si el usuario decide comprar una de las barbacoas que encontró en su búsqueda anterior, en un sistema convencional la tarea de completar los formularios de pedido y confirmar el pago se realizaría mediante comunicaciones directas entre el dispositivo del usuario y el servidor remoto, lo que requeriría un canal de comunicación "en vivo" durante todo el proceso. En el modelo Telescript, se envía un nuevo agente con la información necesaria para completar la compra al establecimiento del vendedor, este interactúa con el establecimiento o con los agentes del vendedor y luego regresa con el resultado (éxito o fracaso). Las comunicaciones principales se producen entre los agentes y los establecimientos en el servidor remoto, por lo que la comunicación a través de la red solo es necesaria al inicio y al final del proceso. [ 8 ]
Telescript era orientado a objetos (OO) y utilizaba una serie de términos poco comunes para describir el estado y las comunicaciones de los objetos. Los atributos corresponden a lo que otros lenguajes denominan variables de instancia o campos. Las llamadas a métodos se conocían como solicitudes , y la ejecución de la implementación de un método se conocía como realizarla . Todas estas llamadas siempre respondían con un mensaje que indicaba éxito o fracaso; el objeto solicitante podía, opcionalmente, interceptar esos mensajes y responder a ellos . Las indicaciones sobre cómo pasar los datos dentro y fuera de las llamadas a métodos se conocían como restricciones , y abarcaban las comunes " por referencia " y " por valor ", entre otras. [ 9 ]
Telescript generalmente no mantenía estado en lo que respecta al ciclo de vida de los datos. Todos los datos dentro del programa, tanto las variables de instancia como las locales, siempre se serializaban. Los agentes podían invocarse o suspenderse en cualquier momento sin perder su estado. Este mismo mecanismo también permitía que los agentes se comunicaran fácilmente entre hosts.
Sintaxis y diseño
Aunque el control y la disposición de Telescript se inspiraron en C, su sintaxis precisa era considerablemente diferente. Una diferencia obvia fue la sustitución de las llaves de estilo C por paréntesis a nivel de definición, conservando las llaves para agrupar sentencias dentro de sentencias de lógica y control de flujo , y el uso de los dos puntos para separar un nombre de su definición. El siguiente código define la interfaz para objetos del tipo Pie : [ 10 ] [ N 1 ]
Pastel: interfaz(Objeto) = ( público nombre: Cadena; inicializar: op(nombre: String); );
Nótese el uso de la palabra clave op, que corresponde a functiono subque se encuentra en otros lenguajes. La implementación de Pie podría usarse en uno o más classobjetos, que pueden organizarse en modulesde forma similar a la construcción de Visual Basic .NETnamespace . #includese utiliza para importar archivos de encabezado, pero la importación es local a modules, no al archivo en su conjunto. [ 11 ]
Los conceptos de agente y lugar de Telescript se invocaban simplemente creando subclases de esas dos clases, Agente y Lugar, ambas subclases de Proceso. Para mayor claridad del código, se podían colocar ambas en un solo archivo, e incluso agruparlas en un solo módulo. El siguiente código define los agentes necesarios para implementar una tienda que vende pasteles: [ 12 ]
PieStoreModule: módulo = ( #incluir "pie.i" PieBuyer: clase(Agente) = ( público en vivo: patrocinado op() = { *.ir(*.destino); miPie = lugar@PieVendedor.sellPie(); *.go(*.originPlace); }; ); Vendedor de tartas: clase(Lugar) = ( público venderPie: op() Pie = { aPie: Pastel | Ninguno; unPie = *.getPieFromStock; si (aPie = nil) { PieBuyer(*.distributorTicket, Permit(nil)); aPie = *.waitForPie(); devolver un pastel; }; }; ); );El objeto PieBuyer, un Agente, contiene un único método, live, el método de inicio estándar utilizado por todos los Agentes. [ 13 ] Simplemente crear un PieBuyer e invocarlo hará liveque se llame al método, de una manera similar a la newoperación que se encuentra en la mayoría de los lenguajes OO, aunque este método se llama después de la configuración. El * reemplaza lo que se implementa más comúnmente como selfo Me, refiriéndose al objeto en sí, en este caso el agente PieBuyer. El código básicamente dice que cuando se crea, el objeto debe enviarse a sí mismo (*.go) a la ubicación que se le envió durante la creación (*.destination). Una vez allí, debe indicarle al objeto de lugar correspondiente, en este caso un PieSeller, que venda Pie. Cuando ese comando se complete, el agente regresará a su lugar de origen. La aplicación que lo invocó puede entonces examinar los resultados inspeccionando la variable myPie. [ 12 ]
El objeto PieSeller, un Place, también contiene un único método. sellPieEste define una variable local llamada aPie, que se define como un objeto Pie, o "nada", que se usa en caso de que no haya pasteles. Luego intenta asignar un valor a aPie llamando a su propio método getPieFromStock (no se muestra aquí) y luego verifica si este devolvió un valor. Si no lo logra, por ejemplo, si el stock está vacío, crea un nuevo objeto PieBuyer, envía la solicitud a otra tienda y espera una respuesta. Esa tienda podría reenviar la solicitud a otra, y así sucesivamente. Cuando esta cadena de eventos concluye, ya sea con un pastel o sin éxito, el lugar PieSeller finalmente devuelve el PieBuyer que lo llamó. [ 12 ]
Los objetos normalmente son "propiedad" del lugar que los creó. La propiedad también confiere capacidades y configuraciones de seguridad. El lenguaje puede tomar posesión de un objeto a través de la own {}construcción, o en este caso, usar la sponsoredpalabra clave para indicar que debe ejecutarse bajo la propiedad del lugar en el que se está ejecutando. Esto podría usarse, por ejemplo, para otorgar al agente la capacidad de ver el stock en el inventario, valores que de otro modo serían privados. Usar sponsoredes exactamente el mismo resultado que colocar el código en un own {}bloque, pero permite que esto tenga lugar en el llamador. [ 14 ]
Telescript incluye varios tipos de colecciones integradas, Set, List, Dictionary, y Collection, el último de los cuales es esencialmente una lista con índices de texto (la mitad de un diccionario). Una fuente común de errores en Telescript era que, si bien una colección en su conjunto podía devolverse a un agente, los elementos individuales dentro de ella pertenecían al lugar. Por lo tanto, si se usaba return MyCollection[someIndex];, llegaría al dispositivo del usuario como nulo. La solución fue una sintaxis adicional, las sugerencias DictOwnedy ColOwned, que hacían que la propiedad de los valores devueltos cambiara al regresar, y por lo tanto se serializara en los resultados al regresar al lugar original. [ 15 ]
Las subclases se conocían como sabores ; la clase PieBuyer descrita anteriormente es un sabor de Agent. Telescript también incluía el concepto de clases mix-in , que ofrecían características similares a la herencia múltiple al permitir la creación de clases que contenían solo código que luego podía incluirse en otras clases. Las clases mix-ins no eran sabores. [ 16 ]
Al igual que muchos lenguajes modernos de programación orientada a objetos, Telescript separó la interfaz de la implementación, colocándolas en .iarchivos para la interfaz y .tarchivos para la implementación (t como en "t"elescript). De manera poco común, el lenguaje también definió un tercer tipo de archivo, .d, que combinaba varios .iarchivos. [ 17 ] El código compilado se colocaba en un .sarchivo, que era guiado por las instrucciones del enlazador en un .larchivo. [ 18 ] El marco de aplicación externo permitía que Telescript llamara al código C++ . [ 19 ]
Notas
- ↑ Estos ejemplos son modificaciones de los originales que se encuentran en la Guía, corrigiendo varios errores de sintaxis y ortografía.
Referencias
Citas
- 1 2 3 Levy 1994 .
- 1 2 Clark y Knaster 1995 .
- 1 2 3 Kanellos 2011 .
- ^ Dan Hanttula, "Magic Mirror" , Pen Computing , abril de 2000
- ↑ Mark Beaulieu, "Aplicaciones y arquitectura de Internet inalámbricas" , Addison-Wesley Professional, 2002, 9780201733549, pág. 12.
- ↑ Referencia 1995 , pág. 1.
- ↑ Referencia 1995 , págs. 1–2.
- ↑ Referencia 1995 , pág. 2.
- ↑ Referencia 1995 , págs. 8–12.
- ↑ Guía 1995 , pág. 7.
- ↑ Guía 1995 , pág. 8.
- 1 2 3 Guía 1995 , pág. 9.
- ↑ Guía 1995 , pág. 66.
- ↑ Guía 1995 , pág. 40.
- ↑ Guía 1995 , pág. 42.
- ↑ Referencia 1995 , pág. 20.
- ↑ Guía 1995 , pág. 3.
- ↑ Guía 1995 , pág. 4.
- ↑ Guía 1995 , pág. 5.
Bibliografía
- Levy, Steven (abril de 1994). "La excelente aventura de Bill y Andy II" . Wired .
- Clark, Richard; Knaster, Scott; et al. (mayo de 1995). "Introducción para desarrolladores a General Magic y Magic Cap" . MacTech .
- Kanellos, Michael (18 de septiembre de 2011). "General Magic: ¿La empresa muerta más importante de Silicon Valley?" . Forbes .
- Referencia del lenguaje telegráfico (PDF) . Magia general. Octubre de 1995.
- Guía de programación de Telescript . Magia general. 1995.
- Lenguajes de programación orientados a objetos