Pico ceceo
| pico ceceo | |
|---|---|
| | |
| clase de idioma | lenguaje de programación |
| Apareció en | 1988 |
| Autor | hamburguesa alexander |
| sistema de tipos | dinámica |
| Licencia | licencia MIT |
| Sitio web | picolisp.com |
| Plataforma | POSIX |
PicoLisp es un dialecto libre minimalista del lenguaje de programación Lisp diseñado para su uso en Linux y otros sistemas POSIX .
Historia
El autor de PicoLisp es el desarrollador alemán Alexander Burger. El predecesor de PicoLisp fue "8kLisp", creado en 1986-1987 por el mismo autor para computadoras con el sistema operativo CP/M ; las ideas principales ya estaban establecidas entonces.
La primera versión del intérprete PicoLisp se creó para computadoras Macintosh a fines de la década de 1980. El primer desarrollo comercial de PicoLisp, un sistema de diseño de impresión y procesamiento de imágenes que se ejecutaba en Mac II, se realizó en 1988 [1] .
En 2009, apareció una versión de 64 bits, escrita en "código de máquina general", que se traduce al código específico de la plataforma de destino utilizando PicoLisp.
En 2010 se lanzó una versión Java de "Ersatz Picolisp" [2] .
Principios y características
- Solo intérprete.
- PicoLisp fue construido como un Lisp puramente interpretado . Según el autor de [1] [3] , para una técnica de programación que usa las características específicas de Lisp, como transformaciones complejas de estructuras de listas y generación dinámica de código, la ganancia de velocidad debido a la compilación es insignificante y no vale la pena las complicaciones que esto conlleva. uno tiene que introducir en el lenguaje para una compilación eficiente. El autor cree que no tiene sentido complicar el lenguaje y el entorno en aras de una diferencia de velocidad, que el usuario probablemente ni siquiera notará.
- Según el autor [3] , los programas típicos de procesamiento de listas Lisp que se ejecutan bajo el intérprete PicoLisp muestran aproximadamente el mismo rendimiento que los compilados en CMUCL y superan significativamente a los compilados en CLISP y Scheme 48 . Para código con muchos cálculos, el intérprete de PicoLisp es más lento que los programas compilados. Por lo tanto, las secciones de tiempo crítico para las que el intérprete realmente se convierte en un factor limitante se proponen implementarlas mediante código externo en un lenguaje compilado (generalmente en lenguaje C o ensamblador ), que, por regla general, resulta ser más rápido que cualquier lenguaje compilado . código ceceo.
- Simplicidad y claridad.
- El lenguaje se centra en la simplicidad y el minimalismo. El número de construcciones sintácticas, conceptos básicos y funciones del sistema se reduce al mínimo suficiente para una operación eficiente. A nivel de idioma, solo hay tres tipos de datos: números, cadenas y listas, a nivel de máquina virtual, el único tipo de datos: Cons-cell [4] . El rechazo de la compilación permitió simplificar significativamente el lenguaje y, debido a esto, simplificar el núcleo del intérprete, lo que condujo a la creación de un entorno de ejecución muy eficiente y eficiente en memoria.
- Ortogonalidad.
- Debido al alto grado de universalidad de las construcciones sintácticas básicas (logrado en gran medida por el rechazo a la compilación), se excluyen del lenguaje mecanismos adicionales que las dupliquen. Por lo tanto, una de las características llamativas es el rechazo de la función
lambdatradicional para los sistemas Lisp (incluidos Common Lisp y Emacs Lisp ) - se ha vuelto innecesaria debido al cambio en la funciónquote, que en PicoLisp devuelve todos sus argumentos sin cambios, y no solo la primera celda [3] . El mecanismo universal para describir funciones con soporte para controlar el cálculo de parámetros hizo posible abandonar la sintaxis especial para macros y valores de funciones; todos ellos pueden ser adecuadamente representados por la sintaxis general de las declaraciones de funciones. Gracias a la interpretación, las funciones están libres de muchas restricciones y pueden trabajar eficientemente con datos de tipos arbitrarios y procesar un número arbitrario de parámetros. El lenguaje ni siquiera admite matrices , el único tipo de datos no atómico es una lista. - Enlace dinámico.
- A diferencia de la mayoría de los dialectos modernos, PicoLisp se basa en el enlace de datos dinámico porque es mucho más fácil y eficiente de implementar en el intérprete.
- orientación a objetos.
- PicoLisp tiene un sistema orientado a objetos liviano pero poderoso escrito en el propio lenguaje. Tanto las clases como los objetos se implementan como símbolos Lisp. Se admiten propiedades y métodos, tanto objetos como clases, herencia múltiple y única. La naturaleza dinámica del lenguaje le permite agregar propiedades y métodos a objetos específicos según sea necesario.
- Sentido práctico.
- Gracias a una gran cantidad de funciones de procesamiento de listas incorporadas, los programas de PicoLisp son compactos, expresivos y bastante productivos [5] .
- Miércoles.
- PicoLisp no es solo un lenguaje de programación, sino también una plataforma de software de desarrollo de aplicaciones que incluye una base de datos, un servidor de aplicaciones web y un marco web (representado como una biblioteca GUI XHTML). La plataforma también incluye una implementación integrada de Prolog , proporciona llamadas a funciones C y Java desde el código Lisp.
- Localización.
- El lenguaje admite la codificación UTF-8, lo que permite trabajar de forma transparente con caracteres de cualquier alfabeto. No hay ningún tipo de cadena en PicoLisp; en su lugar, se pueden usar caracteres temporales (transitorios), caracteres cuyo nombre es una secuencia de caracteres entre comillas. A diferencia de las cadenas en otros idiomas, estos caracteres tienen todas las propiedades inherentes a los caracteres, incluida la posibilidad de tener un valor. Al manipular estos valores, puede proporcionar una traducción transparente a cualquier idioma.
Ejemplos
Información de codificación de código en Base58 [6] :
( setq *B58Alpha
( chop "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" ) )
( de hex2L ( H )
( make
( for ( L ( chop H ) L ( cddr L ))
( link ( hex ( pack ( car L ) ( cadr L )))) ) ) )
( de b58enc ( Lst )
( let
( P 1
Z 0
A
( suma
' (( X )
( * X ( swap 'P ( >> -8 P ))) )
( inverso Lst ) ) )
( para L Lst
( T ( n0 L ))
( inc 'Z ) )
( pack
( necesita Z "1" )
( make
( while ( gt0 A )
( yugo
( prog1
( get *B58Alpha ( inc ( % A 58 )))
( setq A ( / A 58 )) ) ) ) ) ) ) )
El sitio web oficial del idioma proporciona una serie de ejemplos de aplicaciones completas, incluida una aplicación web con una base de datos integrada, un editor de texto de consola con todas las funciones (menos de 1 mil líneas de código), un cliente IRC .
Notas
- ↑ 1 2 http://software-lab.de/radical.pdf Archivado el 28 de julio de 2019 en Wayback Machine Pico Lisp. Un enfoque radical para el desarrollo de aplicaciones. Alexander Hamburguesa, 2006.
- ↑ Hamburguesa de Alejandro. Sucedáneo de PicoLisp . picolisp.com . Consultado el 26 de julio de 2017. Archivado desde el original el 12 de noviembre de 2017.
- ↑ 1 2 3 Preguntas frecuentes sobre PicoLisp . software-lab.de. Consultado el 25 de julio de 2017. Archivado desde el original el 6 de agosto de 2017.
- ↑ Hamburguesa Alejandro. "Estructuras internas" . PicoLisp.com . Consultado el 26 de julio de 2017. Archivado desde el original el 25 de diciembre de 2016.
- ↑ Ejemplos de Rosetta Code : Categoría:PicoLisp - Rosetta Code (ing.) . rosettacode.org. Consultado el 25 de julio de 2017. Archivado desde el original el 6 de agosto de 2017.
- ↑ mihailp/tankfeeder/source/base58.l - Bitbucket . bitbucket.org. Recuperado: 26 Julio 2017. (enlace no disponible)
Enlaces
- Sitio oficial
- Última versión Archivado el 24 de marzo de 2017 en Wayback Machine (enlace directo al archivo)
- Archivo de lista de correo Archivado el 13 de junio de 2017 en Wayback Machine .
- Macropis, un marco de desarrollo web en Picolisp . Archivado el 3 de marzo de 2016 en Wayback Machine .
- Bibliotecas PicoLisp con licencia de MIT Archivado el 8 de marzo de 2017 en Wayback Machine (bcrypt, json, nanomsg, unit testing, https)