NewtonScript es un lenguaje de programación basado en prototipos creado para escribir programas para la plataforma Newton . [1] Está fuertemente influenciado por el lenguaje de programación Self , pero modificado para adaptarse más a las necesidades de los dispositivos móviles e integrados . [2]
Paradigma | Prototipo orientado a objetos |
---|---|
Diseñada por | Walter Smith |
Desarrollador | computadora Apple |
Apareció por primera vez | 1993 |
Disciplina de mecanografía | Dinámica |
Influenciado por | |
Yo , Dylan | |
Influenciado | |
Io |
Historia
El 3 de agosto de 1993, Apple presentó Apple Newton MessagePad . El dispositivo tenía 640 KB de RAM y 4 MB de ROM y se ejecutaba en una máquina Acorn RISC de 20 MHz.
La intención principal detrás del proyecto Newton era desarrollar un dispositivo capaz de reemplazar una computadora y al mismo tiempo ser portátil. Con batería y memoria limitadas, los desarrolladores buscaban un lenguaje de programación capaz de enfrentar estos desafíos.
Los desarrolladores miraron el lenguaje C ++ pero se dieron cuenta de que carecía de flexibilidad. Comenzaron a centrarse en lenguajes basados en prototipos y quedaron impresionados con Smalltalk y Self. [3] Al mismo tiempo, Apple estaba desarrollando otro lenguaje de programación dinámico llamado Dylan , que era un fuerte candidato para la plataforma Newton. [4]
Sin embargo, tanto Self como Dylan fueron descartados, ya que ambos estaban en una etapa incipiente para una integración adecuada.
En cambio, un equipo encabezado por Walter R Smith, desarrolló un nuevo lenguaje llamado NewtonScript. estuvo influenciado por un lenguaje dinámico como Smalltalk y un modelo prototipo basado en Self. [3]
Características
Aunque NewtonScript estuvo fuertemente influenciado por Self, hubo algunas diferencias en ambos lenguajes.
Las diferencias surgieron debido a tres problemas percibidos con uno mismo.
- Una es que la instantánea Self típica requiere 32 MB de RAM para ejecutarse, mientras que la plataforma Newton fue diseñada para usar solo 128 KB para el sistema operativo. Esto requirió una seria reducción del motor para que encajara y aún tuviera espacio para aplicaciones.
- Otro problema fue el rendimiento. Dado que el lenguaje se usaría para todo el sistema, en lugar de solo ejecutarse en un sistema operativo existente, debía ejecutarse lo más rápido posible.
- Finalmente, el sistema de herencia en el motor Self normal tenía un solo objeto principal, [5] mientras que las GUI generalmente tienen dos: una para los objetos y otra para el diseño de la GUI que generalmente se maneja mediante la adición de una ranura en algún tipo de GUI. -objeto de jerarquía (como Vista ).
La sintaxis también se modificó para permitir un estilo de programación más basado en texto, a diferencia del uso generalizado de Self de un entorno GUI para la programación. Esto permitió que los programas de Newton se desarrollaran en una computadora que ejecutaba el kit de herramientas, donde los programas se compilaban y luego se descargaban a un dispositivo Newton para su ejecución.
Una de las ventajas de la herencia basada en prototipos de NewtonScript fue la reducción del uso de memoria, una consideración clave en el Newton de 128 KB. El prototipo de un objeto GUI podría almacenarse en la ROM, por lo que no era necesario copiar los datos o funciones predeterminados en la memoria de trabajo.
A diferencia de los lenguajes basados en clases, donde la creación de un objeto implica la asignación de memoria a todos sus atributos, el uso de la herencia de prototipos de NewtonScripts le permitió asignar memoria a pocos campos como _proto y _parent en lugar de crear un objeto completamente nuevo. Aquí, _proto y _parent significan si el objeto está usando herencia prototipo o padre. [6]
Un ejemplo para ilustrar el concepto anterior, un desarrollador podría crear una nueva instancia de botón. Si el botón usa la fuente predeterminada, acceder a su "ranura" de fuente (es decir, propiedad o variable miembro) devolverá un valor que está realmente almacenado en la ROM; la instancia del botón en la RAM no tiene un valor en su propia ranura de fuente, por lo que se sigue la cadena de herencia del prototipo hasta que se encuentra un valor. Si el desarrollador cambia la fuente del botón, establecer su ranura de fuente en un nuevo valor anulará el prototipo; este valor de anulación se almacena en la RAM. La " herencia diferencial " de NewtonScript, por lo tanto, hizo un uso eficiente de la costosa memoria RAM flash de Newton al almacenar la mayor parte de los datos y el código predeterminados en la ROM mucho más grande y más barata de la PDA .
Términos importantes
Vistas: Son objetos creados por Newton View System, que se crean en tiempo de ejecución para renderizar vistas.
Plantilla: es un plano a partir del cual se crean las vistas.
Protos: pueden ser un modelo para una plantilla o una vista, y son elementos de las bibliotecas de código NewtonScript.
Trama y ranura: la trama es una colección dinámica de ranuras y un elemento de la trama se denomina ranura. Una ranura se compone de nombre y valor. El valor puede ser de cualquier tipo. Vale la pena señalar que todos los objetos en NewtonScript son marcos. [7]
Sopa y entrada: es una colección relacionada de marcos / datos. La entrada es un marco individual en una sopa.
Frame Heap: RAM asignada dinámicamente por NewtonScript.
Vista Base: Es la vista principal de la aplicación, que consta de todas las variables y métodos utilizados en la aplicación.
Ventajas y desventajas
Ventajas
- NewtonScript es un lenguaje de programación basado en prototipos dinámicos, que utiliza herencia diferencial. Esto significa que es muy eficaz utilizar el espacio de la memoria. Al ser dinámico, es fácil modificar objetos, verificación de tipos, etc. en tiempo de ejecución, lo que brinda una gran flexibilidad para los desarrolladores.
- Los objetos creados se pueden almacenar en la memoria permanente como una tarjeta flash o una memoria interna. La RAM se usa solo para almacenar atributos cuyos valores cambian durante el tiempo de ejecución. Esto reduce el consumo de memoria.
- La escritura de interfaces para aplicaciones GUI se puede implementar de manera efectiva usando el modelo de prototipo, ya que podemos escribir directamente un objeto para un control GUI en lugar de crear una clase y instanciarla.
- La recolección de basura la realiza automáticamente el sistema. Esto ayudó a los desarrolladores a centrarse más en el desarrollo de aplicaciones en lugar de preocuparse por la gestión de la memoria. La recolección de basura también ayudó a mitigar el problema de punteros colgantes donde un puntero apunta erróneamente a una ubicación de memoria que fue desasignada. [6]
Desventajas
- Dado que el código NewtonScript se escribió en una plataforma y se ejecutó en otra, era prácticamente imposible depurarlo. [2] Un mejor código de depuración en el motor de Newton habría ayudado a compensar este problema hasta cierto punto, pero la memoria limitada lo dificultaba. En cambio, el desarrollador obtendría una indicación vaga junto con un código de error, sin ninguna capacidad para hacer coincidir las líneas del código original.
- Otra desventaja es que la variable dinámica reduce la velocidad de operación ya que la desreferencia de puntero simple no se puede usar como en tipado estático como C ++ y Java.
Influencias
Con la cancelación del proyecto Newton por parte de Apple en 1998, [8] se detuvieron todos los desarrollos convencionales adicionales en NewtonScript. Sin embargo, las características utilizadas en NewtonScript continuarían inspirando otros modelos y lenguajes de programación.
El modelo de objetos basado en prototipos de Self y NewtonScript se usó en JavaScript , el lenguaje más popular y visible para usar el concepto hasta ahora.
NewtonScript es también uno de los antepasados conceptuales (junto con Smalltalk, Self, Act1, Lisp y Lua ) de un lenguaje de programación de propósito general llamado Io [9] que implementa el mismo modelo de herencia diferencial, que se utilizó en NewtonScript para conservar la memoria.
Ver también
- Programación basada en prototipos
- Lenguaje de programación dinámico
- JavaScript
Referencias
- ↑ Smith, WR (1 de febrero de 1994). La arquitectura de la aplicación Newton . Compcon Spring '94, Recopilación de artículos . págs. 156-161. doi : 10.1109 / CMPCON.1994.282931 . ISBN 978-0-8186-5380-3.
- ^ a b Schödl, Arno (10 de octubre de 2004). "El lenguaje de programación NewtonScript" . Archivado desde el original el 10 de octubre de 2004 . Consultado el 15 de septiembre de 2016 .CS1 maint: bot: estado de URL original desconocido ( enlace )
- ^ a b Smith, Walter R. (1 de enero de 1995). Uso de un lenguaje basado en prototipos para la interfaz de usuario: la experiencia del proyecto Newton . Actas de la Décima Conferencia Anual sobre Sistemas, Lenguajes y Aplicaciones de Programación Orientada a Objetos . OOPSLA '95. Nueva York, NY, EE.UU .: ACM. págs. 61–72. doi : 10.1145 / 217838.217844 . ISBN 978-0897917032.
- ^ "Dylan: un lenguaje dinámico orientado a objetos" . www.cise.ufl.edu . Consultado el 22 de septiembre de 2016 .
- ^ Chambers, C .; Ungar, D .; Lee, E. (1 de enero de 1989). Una implementación eficiente de SELF, un lenguaje orientado a objetos de tipo dinámico basado en prototipos . Actas de conferencias sobre sistemas de programación orientados a objetos, lenguajes y aplicaciones . OOPSLA '89. Nueva York, NY, EE.UU .: ACM. págs. 49–70. CiteSeerX 10.1.1.588.6955 . doi : 10.1145 / 74877.74884 . ISBN 978-0897913331.
- ^ a b "El lenguaje de programación NewtonScript" (PDF) . 1996 . Consultado el 6 de junio de 2021 .
- ^ McKeehan, Julie; Rhodes, Neil (1994). Programación para Newton®: Desarrollo de software con NewtonscriptTM . 955 Massachusetts Avenue, Cambridge, Massachusetts 02139: Profesional AP. ISBN 978-0-12-484800-9.Mantenimiento de CS1: ubicación ( enlace )
- ^ "Apple cancela a Newton" . windowsitpro.com . 1998-02-28 . Consultado el 22 de septiembre de 2016 .
- ^ "guía io" . iolanguage.org . Consultado el 15 de septiembre de 2016 .
enlaces externos
- SELF y los orígenes de NewtonScript , por Walter Smith, 1994.
- Uso de un lenguaje basado en prototipos para la interfaz de usuario: La experiencia del proyecto Newton (PDF), por Walter Smith, 1995.
- Programación NewtonScript basada en clases por Walter Smith, 1993.
- Artículos adicionales relacionados con Newton por Walter Smith.
- El lenguaje de programación NewtonScript (caché de archive.org; enlace original muerto el 15/10/04).
- NEWT / 0 Un compilador / intérprete NewtonScript portátil
- NewtDevEnv , un entorno de desarrollo de NewtonScript que permite que el desarrollo se lleve a cabo directamente en Newton por Steve Weyer.
- DyneTK , un entorno de desarrollo NewtonScript que reemplaza al Newton ToolKit (NTK) original; funciona en MS Windows y Mac OS X por Matthias Melcher.