Mercurio (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 agosto de 2016; las comprobaciones requieren 4 ediciones .
Mercurio
clase de idioma lógico , funcional
Apareció en 1995
Autor Zoltán Somogyi
Desarrollador Universidad de Melbourne
extensión de archivo .m
Liberar 22/01 (31 marzo 2022 ) ( 2022-03-31 )
sistema de tipos estricto , estático , polimórfico
Implementaciones principales Compilador Melbourne Mercury
sido influenciado Prólogo , Haskell
Licencia GPL para el compilador, LGPL para la biblioteca estándar
Sitio web mercuriolang.org

Mercury  es un lenguaje de programación de lógica funcional fuertemente tipado diseñado para resolver los siguientes dos problemas que surgen al usar el lenguaje de programación de lógica clásico Prolog :

  1. problema de rendimiento Las implementaciones modernas de lenguajes de programación lógicos son inferiores en rendimiento a las implementaciones de lenguajes de programación de tipo imperativo .
  2. problema de depuración Las implementaciones de lenguajes de programación lógicos realizan menos comprobaciones en tiempo de compilación que las implementaciones de lenguajes de programación de tipo imperativo. Esto obliga al programador a encontrar errores por sí mismo y sin ninguna ayuda significativa del depurador.

El lenguaje fue desarrollado en la Universidad de Melbourne . La primera versión fue lanzada por Fergus Henderson, Thomas Conway y Zoltan Somogyi el 8 de abril de 1995 .

Características

La sintaxis de Mercury se hereda en parte de Prolog, el sistema de tipos es similar al de Haskell . Este es un lenguaje puramente declarativo , los desarrolladores eliminaron por completo todas las características imperativas , lo que hizo posible mejorar las capacidades de optimización integradas en el compilador . El nombre Mercurio se da en honor al dios de la velocidad Mercurio y refleja el enfoque en obtener programas de alta velocidad. Las operaciones que normalmente evitarían un enfoque puramente declarativo, como E/S , se expresan en Mercury con construcciones declarativas que utilizan tipos lineales .

Implementación

El compilador del lenguaje Mercury está escrito en el propio lenguaje. Antes de que el compilador Mercury pudiera compilarse a sí mismo, se utilizó el lenguaje Prolog . Se distribuye bajo los términos de la licencia GPL y funciona en todos los sistemas operativos modernos. Es posible traducir código a muchos lenguajes de programación populares, como: C , Java , Erlang , IL para la plataforma .NET .

Desde 2010, Project Mercury ha tenido un ciclo de lanzamiento de 6 meses, donde el número de versión principal corresponde al año de lanzamiento, el número de versión secundaria corresponde al mes en que comenzó el trabajo en el lanzamiento. Las versiones anteriores tenían números como 0.12, 0.13… y el tiempo entre lanzamientos de versiones estables era muy largo (alrededor de 3 años).

El compilador Mercury se distribuye en el sitio oficial en código fuente, los usuarios de Windows también pueden usar la distribución no oficial de winmercury. Este es un instalador útil que instala MinGW , el compilador GCC y todos los archivos Mercury necesarios en una forma compilada y configurada. También contiene un archivo de ayuda HTML con una práctica tabla de contenido e índice, así como un complemento para el editor Vim . La última versión de Mercury hasta la fecha es 20.01.2.

Ejemplos

hola mundo :

:- módulo hola . : -interfaz . : - import_module.io . :- pred principal ( io : :di , io : :uo ) es det . :- implementación . principal (! IO ) : - io . write_string ( "¡Hola, mundo!\n" , ! IO ).

Calculando el décimo número de Fibonacci (de la manera más obvia) [1] :

:- módulo fib . : -interfaz . : - import_module.io . :- pred principal ( io : :di , io : :uo ) es det . :- implementación . :- import_module int . : -func fib ( int ) = int . mentira ( N ) = ( si N =< 2 entonces 1 otra cosa mentira ( N - 1 ) + mentira ( N - 2 )). principal (! IO ) : - io . write_string ( "fib(10) = " , ! IO ), io . write_int ( fib ( 10 ), ! IO ), io . nl (! IO ). % En su lugar, podría usar io.format("fib(10) =%d\n", [i(fib(10))], !IO).

Notas

  1. Basado en el tutorial Mercury de Ralph Becket. Archivado el 21 de septiembre de 2020 en Wayback Machine .

Enlaces