prolog - ¿Para qué se usa SML?
dcg (7)
¿Cuáles son los usos de SML en la palabra real?
¿Son sus usos prácticos similares a los de Prolog?
El proyecto FoxNet de Carnegie Mellon Univ se construye utilizando SML.
Compañía comercial exclusiva de Jane Street, use O''Caml para su propio software interno.
Laurance C. Paulson, el autor de ML for the Working Programmer, usó SML para construir Isabell, un probador de teoremas LCF.
Philip Wadler, profesor y experto en Haskell, mantiene una lista de proyectos del mundo real que utilizan la Programación Funcional, entre los cuales se encuentran ML que se encuentran en http://homepages.inf.ed.ac.uk/wadler/realworld/
En el trabajo, utilizamos SML en los productos de software de la vida real que enviamos a los clientes que pagan. Usamos MLton para compilar nuestro código SML a código nativo que se ejecuta en Windows, Linux, Solaris, AIX y HP-UX. Funciona bien, y estamos contentos con nuestra elección.
No veo que el SML sea particularmente adecuado para cualquier nicho claro. De hecho, SML es un lenguaje de programación de propósito general muy completo. Prolog está bien establecido en el (los) nicho (s) de resolución de sistemas de programación lógica / inteligencia artificial / basados en reglas, pero se usa para muchas otras cosas además de estos dominios tradicionales.
Para cualquier persona que esté considerando usar SML para un proyecto de software en el "mundo real", aquí están algunas de las ventajas y desventajas que hemos notado hasta ahora:
- SML es un lenguaje de programación general muy agradable, especialmente el sistema de módulos de rocas.
- MLton optimiza tan bien que puede usar abstracciones libremente sin perder rendimiento
- Nuestro código anterior está escrito en el llano C. Podemos reemplazar esa pieza por pieza con SML, vinculando los códigos C y SML con los mismos ejecutables.
- SML/NJ proporciona una respuesta para un rápido desarrollo
- Portátil a todas nuestras plataformas.
Desventajas:
- Minúscula base de usuarios
- Falta en el área de herramientas de soporte (IDE, documentación de código, depuradores, etc.)
- Tuve que portar MLton a AIX y HP-UX
ML no es directamente comparable a Prolog. Prolog es un lenguaje de programación de lógica declarativa que es básicamente un probador de teoremas que utiliza cláusulas de Horn. Una de las características agradables de (Prolog no puro) es que le permitirá modificar un programa severamente durante la compilación o el tiempo de ejecución. Por ejemplo, en la mayoría de las implementaciones modernas de Prolog puede escribir gramáticas directamente utilizando el formalismo DCG (gramática de cláusula definida). Las reglas gramaticales que usan el operador ''->'' se reescriben a las cláusulas Prolog utilizando la expansión de términos. P.ej:
a(N) --> b, c(N).
Será reescrito a:
a(N,P0,P2) :- b(P0,P1), c(N,P1,P2).
El uso de variables de posición impone la adyacencia de las hijas en el lado derecho de la flecha. Dado que Prolog intentará probar la cabeza de una cláusula demostrando a sus hijas (por retroceso), básicamente tiene un analizador de arriba a abajo de izquierda a derecha sin ningún trabajo adicional. Otro ejemplo de modificación del programa es la afirmación o retracción de hechos o cláusulas (dinámicas), que se pueden usar para modificar el comportamiento de un programa en tiempo de ejecución.
ML por otro lado es un lenguaje funcional impuro. La conexión entre Prolog y ML es que algunos probadores de teoremas están escritos en ML. Yo diría que ML es mucho más general, pero para sus nichos, Prolog es muy conveniente. Ambos son muy útiles para aprender, incluso solo para ampliar tus horizontes.
No es SML, pero está estrechamente relacionado, es OCAML, que se ha utilizado para varias cosas:
http://caml.inria.fr/about/successes.en.html
Me gusta más la "Transformada de Fourier más rápida en el oeste", donde ML se utiliza para generar C optimizado ...
No he visto muchas aplicaciones comerciales de ML, pero esto puede deberse a los entornos disponibles, en lugar de una reflexión sobre el lenguaje. He visto varios bancos que usan F # (que es la misma familia que ML) para procesar flujos de datos, hacer álgebra de matriz y buscar patrones. El hecho de que Microsoft lo haya empaquetado para .NET obviamente ayuda a no tener fin.
Sólo lo he utilizado personalmente en la universidad para un curso de teoría de números. Tengo que decir que realmente disfruté usarlo. Se podía manejar grandes números, lo que era bueno cuando se trata de criptografía.
Si me importa, estaba usando Moscow ML http://www.itu.dk/people/sestoft/mosml.html
SML es utilizado por los escritores del compilador. Tanto Prolog como SML se utilizan en los probadores de teoremas.