newLISP es un lenguaje de scripting , un dialecto de la familia de lenguajes de programación Lisp . Fue diseñado y desarrollado por Lutz Mueller. [ 2 ] Debido a sus bajos requisitos de recursos, newLISP puede utilizarse en aplicaciones de sistemas embebidos. Incluye numerosas funciones, como funciones de red, soporte para procesamiento distribuido y multinúcleo, y estadística bayesiana. newLISP es software libre y de código abierto, distribuido bajo la Licencia Pública General de GNU , versión 3 o posterior.
Historia
El diseño de newLISP está influenciado por los dos dialectos principales de Lisp , Common Lisp y Scheme , y por otros lenguajes como Pascal y C. newLISP se originó en 1991 y se desarrolló originalmente en una estación de trabajo Sun-4 . [ 3 ] Posteriormente se trasladó a Windows 3.0 , donde la versión 1.3 se lanzó en CompuServe alrededor de 1993, y luego estuvo disponible como una aplicación con interfaz gráfica de usuario (GUI) de Windows y una aplicación de consola MS-DOS (ambas de 16 bits ). En 1995, con el lanzamiento de Windows 95 , newLISP pasó a 32 bits .
En abril de 1999, newLISP se adaptó a Linux ; algunos de sus algoritmos principales se reescribieron y se eliminó todo el código específico de Windows. newLISP se lanzó como un proyecto de software de código abierto bajo la licencia GPL , y el desarrollo en Windows se detuvo después de la versión 6.0.25. Durante la primera mitad de 2001, newLISP se adaptó nuevamente a Windows en la plataforma Cygwin sin capacidades gráficas. En la segunda mitad de 2001, se lanzó una interfaz multiplataforma Tcl / Tk llamada newLISP-tk, alrededor de la versión 6.3.0. En 2006, se introdujo la precisión de 64 bits para la aritmética de enteros y para algunas operaciones con archivos en la versión 9.0.
Desde el lanzamiento de la versión 6.5 a mediados de 2002, el desarrollo ha sido muy activo y se han añadido muchas características nuevas. [ 4 ]
Filosofía
newLISP intenta proporcionar una versión de scripting rápida, potente, multiplataforma y con todas las funciones del lenguaje Lisp, utilizando solo recursos modestos del sistema, como almacenamiento de datos (por ejemplo, espacio en disco) y memoria . [ 5 ] [ 6 ]
Ofrece características de Lisp como listas, procesamiento de símbolos, mapeo de funciones, funciones anónimas (expresiones lambda), expresiones S (excepto listas impropias) y macros. También proporciona las funciones propias de un lenguaje de scripting moderno, incluyendo compatibilidad con expresiones regulares , XML , Unicode ( UTF-8 ), redes mediante el Protocolo de Control de Transmisión (TCP), el Protocolo de Internet (IP) y el Protocolo de Datagramas de Usuario (UDP), procesamiento de matrices y arreglos , matemáticas avanzadas, estadística y análisis estadístico bayesiano , finanzas matemáticas y computación distribuida.
newLISP funciona en los sistemas operativos Berkeley Software Distribution (BSD), Linux , macOS , Solaris y Windows . [ 1 ] Admite el acceso a bases de datos MYSQL , SQLite y ODBC , Common Gateway Interface (CGI), Simple Mail Transfer Protocol (SMTP), Post Office Protocol (POP) 3, File Transfer Protocol (FTP) y XML Remote Procedure Call ( XML-RPC ). Puede ejecutarse en modo servidor como un demonio .
Características del idioma
Contextos
newLISP admite espacios de nombres denominados contextos , que pueden asignarse a variables y pasarse a funciones , pero que están asociados a símbolos únicos a nivel global, lo que limita su uso como ciudadanos de primera clase (objetos). En newLISP es posible un estilo de programación orientado a objetos basado en prototipos , utilizando contextos como prototipos para construir objetos . Las variables dentro de los contextos no interfieren con las variables del mismo nombre en otros contextos, pero dentro de un contexto, las variables se comportan según las reglas del ámbito dinámico .
Alcance
newLISP utiliza ámbito dinámico . Cuando se llama a una función, esta puede ver todas las variables de quien la llama, de quien llama a su vez, y así sucesivamente, dentro del mismo contexto o espacio de nombres . Admite variables dinámicas locales definidas tanto explícita como implícitamente que ocultan las variables con el mismo nombre del entorno externo, evitando así el uso o la modificación accidental de las variables del entorno de quien la llama. Las variables de parámetros de la función llamada ocultan automáticamente el entorno de variables de quien la llama. Globalmente, las variables se pueden agrupar en espacios de nombres separados. [ 7 ]
Gestión de la memoria
newLISP utiliza un método de gestión automática de memoria distinto de los esquemas tradicionales de recolección de basura , denominado gestión de memoria de referencia única (ORO). Cada variable es referenciada únicamente por su contexto, y cada contexto es referenciado globalmente.
En newLISP no se admite el uso compartido de subobjetos entre objetos , estructuras cíclicas o múltiples variables que apunten al mismo objeto. Los objetos se copian cuando se almacenan en estructuras de datos o se pasan a funciones, excepto ciertas funciones integradas. Las excepciones son los símbolos y los contextos, que se comparten en lugar de copiarse y, por lo tanto, se pueden usar para la indirección. Los símbolos y los contextos tienen nombres globales y se eliminan explícitamente; al eliminar un símbolo o contexto, se examinan todos los demás objetos para reemplazar las referencias a él con nil.
Opciones de interfaz gráfica de usuario
El servidor de interfaz gráfica de usuario (GUI) newLISP (newLISP-GS) es un servidor basado en Java para el conjunto de protocolos de Internet (TCP/IP) que proporciona una interfaz de programación gráfica. Las distribuciones binarias de newLISP incluyen un entorno de desarrollo basado en newLISP-GS, y están disponibles interfaces de programación basadas en GTK-server , OpenGL y Tcl / Tk .
binarios independientes
Cualquier nueva versión de LISP permite crear archivos ejecutables, aplicaciones portátiles , para su implementación, que son autónomas y no requieren instalación.
Interacción con bibliotecas compartidas
newLISP tiene una función de importación que permite importar funciones desde una biblioteca de vínculos dinámicos (DLL) en la API Win32 de Windows, o desde una biblioteca compartida en Linux o Unix .
Marcos de trabajo
Entre los frameworks web disponibles para newLISP se incluyen Dragonfly [ 8 ] y Rockets. [ 9 ]
Referencias
- 1 2 3 "newLISP" . Consultado el 20 de noviembre de 2018 .
- ↑ Walling, Rob. "Una entrevista con Lutz Mueller, creador de newLISP" . Softwarebyrob.com . Archivado del original el 31 de octubre de 2007. Consultado el 20 de noviembre de 2018 .
- ↑ Mueller, Lutz. "newLISP – un lenguaje de scripting LISP" . don Lucio . Archivado del original el 12 de abril de 2016. Recuperado el 20 de noviembre de 2018 .
- ↑ Kobayashi, Shigeru. "kosh04/newlisp" . GitHub . Consultado el 20 de noviembre de 2018 .
- ↑ "Categoría:newLISP" . Código Rosetta . Consultado el 20 de noviembre de 2018 .
- ↑ Lazar, Alexandru (5 de enero de 2009). "Una mirada a newLISP" . OSNews . Recuperado el 20 de noviembre de 2018 .
- ↑ BRASWELL, NATHAN (22 de marzo de 2023). "Compilación práctica de fexprs usando evaluación parcial. Las fexprs pueden reemplazar eficientemente las macros en Lisp puramente funcional" .
{{cite web}}: CS1 mantenimiento: estado de la URL ( enlace ) - ↑ Slepak, Greg; Hildmann, Marc. "Marco web Dragonfly" . AppTruck . Archivado del original el 3 de marzo de 2016. Consultado el 20 de noviembre de 2018 .
- ↑ Reimer, Jeremy. "El blog newLISP on Rockets 2.0" . Rocket Man . Consultado el 20 de noviembre de 2018 .
Enlaces externos
- Sitio web oficial
- newlisp en GitHub
- Lenguajes de programación de tipado dinámico
- Lenguajes funcionales
- Familia de lenguajes de programación Lisp
- Lenguajes de scripting