Factor (lenguaje de programación)

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 11 de marzo de 2018; las comprobaciones requieren 4 ediciones .
factor
clase de idioma Lenguaje de programación concatenativo
Apareció en 2003
Autor Slava Pestov
Desarrollador Pestov, Sviatoslav
Liberar 0,98 ( 31 de julio de 2018 )
sistema de tipos dinámico , estático
sido influenciado Alegría , adelante , ceceo , uno mismo
Licencia licencia BSD
Sitio web factorcode.org

Factor es un lenguaje de programación concatenativo  tipado dinámicamente desarrollado e implementado por Slava Pestov . Las principales influencias en el lenguaje Factor fueron los lenguajes de programación Joy , Forth , Lisp y Self .

El autor define Factor como un "lenguaje de programación práctico basado en pilas", los factores importantes para determinar la dirección de su desarrollo son el rendimiento, la riqueza de los medios expresivos (mientras se mantiene la claridad y la coherencia) y la creación de una biblioteca estándar bastante completa.

Al igual que otros lenguajes concatenados , Factor tiene una sintaxis de postfijo , lo que significa que los argumentos de la función se escriben antes de su nombre. Por ejemplo, Hello world en el lenguaje Factor es:

Impresión "Hola mundo"

Factor es un lenguaje tipado dinámicamente con un sistema de objetos único cercano a CLOS . Factor tiene un pequeño conjunto de tipos base , y los usuarios y la biblioteca estándar pueden crear sus propias clases usando tuplas y otros mecanismos. El factor apoya la herencia . Además de las clases que son tuplas, existen otros mecanismos para crear clases ; Factor admite clases de predicado (subconjuntos de una determinada clase para la que se cumple una condición de predicado) y clases de unión . Los tipos de datos compuestos integrados de Factor incluyen vectores de longitud fija y variable y tablas hash . Al igual que lenguajes como Common Lisp y Python , Factor admite un amplio conjunto de tipos de datos aritméticos: enteros simples, enteros de longitud ilimitada, números de coma flotante. Los números complejos , las fracciones (números racionales) se implementan en la biblioteca estándar. La biblioteca estándar también implementa listas enlazadas , matrices de valores tipificados estáticamente [1] y otras estructuras de datos.

Uno de los objetivos principales de Factor es que se utilice en el desarrollo basado en pruebas iterativas , por lo que el núcleo de Factor puede considerarse un dialecto seguro de Forth . Aunque Factor es un lenguaje de tipo dinámico, el compilador tiene acceso a la profundidad de pila de una palabra (función).

Implementación

La primera implementación pública de Factor se escribió en Java , sin embargo, para aumentar la eficiencia, se reescribió más tarde en C (y luego, en mayo de 2009, en C++ [2] ), se abandonó la versión de Java. La cantidad de código C en la implementación del lenguaje está disminuyendo gradualmente y el código de factor está creciendo en consecuencia.

Factor era originalmente un lenguaje puramente interpretado , pero ahora está completamente implementado como un compilador (un compilador que no optimiza esencialmente desenrolla el ciclo de interpretación [3] [4] ), el intérprete se retiene solo para proporcionar un modo de operación interactivo). El compilador de optimización para código nativo también está escrito completamente en Factor. No produce ejecutables independientes, sino que genera código nativo que se guarda en un archivo de imagen. Estas imágenes se ejecutan con una sobrecarga mínima mediante una máquina virtual. El subsistema de implementación (despliegue) le permite generar un archivo ejecutable independiente desde el programa [5] . La implementación de Factor estuvo fuertemente influenciada por Steel Bank Common Lisp [6] .

La última versión estable está fechada el 20 de abril de 2013 y tiene el número 0.96 [7] . Además, aunque la versión 1.0 todavía está en desarrollo, las Compilaciones continuas se publican regularmente para todas las plataformas compatibles [8] .

Entre el lanzamiento de las versiones 0.91 [9] y la versión 0.92 [10] que le siguió , pasaron aproximadamente 2 años de desarrollo activo del lenguaje (con el lanzamiento de compilaciones intermedias). Durante este tiempo, se realizaron cambios significativos tanto en el núcleo del lenguaje como en las bibliotecas que lo rodean (en particular, todo el trabajo con cadenas se transfirió a Unicode con soporte para UTF-8 y UTF-16 ). [diez]

Biblioteca estándar

Factor tiene una biblioteca en evolución con soporte para diccionarios , continuaciones , un servidor HTTP y un marco web adjunto , un contenedor OpenGL , una biblioteca GUI , un analizador XML , etc.

Notas

  1. Matrices de valores primitivos sin caja y un Mersenne Twister más rápido . Consultado el 5 de marzo de 2009. Archivado desde el original el 6 de febrero de 2009.
  2. Factor VM portado a C++ . Consultado el 15 de enero de 2010. Archivado desde el original el 14 de mayo de 2009.
  3. La compilación de dos niveles llega a Factor . Consultado el 5 de marzo de 2009. Archivado desde el original el 14 de septiembre de 2008.
  4. Revisión del compilador . Consultado el 5 de marzo de 2009. Archivado desde el original el 12 de enero de 2008.
  5. Implementación de aplicaciones independientes en Windows . Consultado el 5 de marzo de 2009. Archivado desde el original el 9 de julio de 2008.
  6. Lisp en concatenative.org . Consultado el 5 de marzo de 2009. Archivado desde el original el 22 de febrero de 2009.
  7. Factor 0.96 ahora disponible . Consultado el 18 de mayo de 2013. Archivado desde el original el 26 de mayo de 2013.
  8. Factor de obtención . Fecha de acceso: 5 de marzo de 2009. Archivado desde el original el 24 de febrero de 2009.
  9. Factor 0.91 ahora disponible . Fecha de acceso: 19 de julio de 2010. Archivado desde el original el 29 de noviembre de 2010.
  10. 12 Factor 0.92 ahora disponible . Consultado el 23 de febrero de 2010. Archivado desde el original el 19 de febrero de 2010.

Literatura

Enlaces