metalenguaje

__**Metalenguaje:**__ Es un lenguaje que se usa para hablar acerca de otro lenguaje.1 Al lenguaje acerca del cual se está hablando se lo llama el lenguaje objeto El metalenguaje puede ser idéntico al lenguaje objeto, por ejemplo cuando se habla acerca del español usando el español mismo.2 Un metalenguaje a la vez puede ser el lenguaje objeto de otro metalenguaje de orden superior, y así sucesivamente. Distintos metalenguajes pueden hablar acerca de diferentes aspectos de un mismo lenguaje objeto.

ML es un lenguaje de programación de propósito general de la familia de los lenguajes de programación funcional desarrollado por Robin Milner y otros a finales de los años 1970 en la Universidad de Edimburgo. ML es un acrónimo de Meta Lenguaje dado que fue concebido como el lenguaje para desarrollar tácticas de demostración en el sistema LCF (El lenguaje para el cual ML era meta lenguaje es pplambda, una combinación del cálculo de predicados de primer orden y el lambda-cálculo polimórfico sencillamente tipificado).

Frecuentemente se clasifica a ML como un lenguaje funcional impuro dado que permite programar imperativamente con efecto colateral, a diferencia de otros lenguajes de programación funcional, tales como Haskell.

Entre las características de ML se incluyen evaluación por valor, álgebra de funciones, manejo automatizado de memoria por medio de recolección de basura, polimorfismo parametrizado, análisis de estático de tipos, inferencia de tipos, tipos de datos algebraicos, llamada por patrones y manejo de excepciones. Esta combinación particular de conceptos hace que sea posible producir una de los mejores compiladores actualmente disponibles.

En la actualidad varios lenguajes de la familia ML están disponibles, principalmente Standard ML (SML) y Ocaml (Ocaml contiene la sintaxis de ML como un subconjunto). Varias ideas aparecidas en ML han influido el diseño de otros lenguajes, tales como Cyclone y Nemerle.

Los lenguajes de la familia ML se aplica principalmente en diseño y manipulación de lenguajes de programación (compiladores, analizadores, demostradores de teoremas), así como en bioinformática, sistemas financieros, protocolos de sincronización, etc..