Onz | |
---|---|
Semántica | computación funcional, procesal, declarativa, orientada a objetos, restringida, modelos H, computación paralela |
clase de idioma | lenguaje de programación , lenguaje de programación de restricciones [d] y lenguaje de programación multiparadigma |
tipo de ejecución | compilado |
Apareció en | 1991 |
Autor | Gert Smolka y sus alumnos |
Liberar |
Oz 1.4.0 Mozart 2.0.1 (5 de septiembre de 2018 ) |
Implementaciones principales | Mozart |
sido influenciado | Prólogo |
influenciado | Alicia |
Licencia | licencia MIT |
Sitio web | mozart.github.io |
Oz es un lenguaje de programación educativo de alto nivel que combina semántica funcional , procedimental y declarativa .
El desarrollo del lenguaje de programación Oz fue iniciado en 1991 por el profesor Gert Smolka con sus estudiantes del Laboratorio de Sistemas de Programación de la Universidad Católica de Lovaina en Bélgica. En 1996, Seif Haridi y Peter Van Roy del Instituto Sueco de Ciencias de la Computación se unieron al proceso de desarrollo y utilizaron el lenguaje en su libro de texto clásico Conceptos, técnicas y modelos de programación de computadoras [1] . De 1999 a 2005, el lenguaje se desarrolló bajo la dirección de un grupo de investigación internacional (Consorcio Mozart), compuesto por tres universidades: la Universidad de Saarland , el Instituto Sueco de Informática (Instituto Sueco de Ciencias de la Computación) y la Universidad Católica de Lovaina .
Mozart , una implementación de código abierto de alta calidad del lenguaje Oz, incluye un IDE basado en la extensión del editor de Emacs , un compilador , un depurador , un generador de perfiles y otras utilidades.
La gestión del desarrollo del sistema de programación Mozart en 2005 se transfirió a un grupo de desarrollo (Mozart Board) para atraer a una gama más amplia de investigadores. Este sistema fue lanzado por Mozart Consortium bajo una licencia gratuita y posteriormente portado (portado) a los sistemas operativos más populares , incluidos Unix , FreeBSD , Linux , Microsoft Windows y Mac OS X.
El lenguaje de programación Oz incluye la mayoría de los conceptos de los paradigmas de programación populares , incluidos los lógicos, funcionales ( computación perezosa y vigorosa), imperativo, orientado a objetos, programación con restricciones, programación distribuida y paralela. Por un lado, Oz tiene una semántica formal simple y, por otro lado, se ha creado una implementación de software eficiente para él.
Las principales ventajas de este lenguaje incluyen soporte para programación multiparadigma, programación con restricciones y programación distribuida. Por lo tanto, a nivel de las construcciones del lenguaje, se admite la distribución y paralelización simple y natural de los cálculos a través de la red, lo que facilita la creación de aplicaciones tolerantes a fallas. Para implementar la programación de restricciones en el lenguaje Oz, se introduce el concepto de espacios computacionales, en los que se busca una solución. Esto permite resolver problemas de programación matemática y, en particular, problemas de optimización discreta.
El núcleo del lenguaje está formado por unas pocas estructuras de datos básicas, pero puede ampliarse con lo que se conoce como azúcar sintáctico .
Estructuras de datos básicas:
Estos valores son entidades constantes de primer tipo (primera clase), mientras que la tipificación es dinámica.
Las funciones son entidades del primer tipo , lo que nos permite aplicar el paradigma de programación funcional:
diversión {Fact N} % factorial si N =< 0 entonces 1 más N*{Fact N-1} end final diversión {Comb NK} % número de combinaciones {Fact N} div ({Fact K} * {Fact NK}) % de enteros pueden ser arbitrariamente grandes final diversión {SumList List} % de la suma de los elementos de la lista caso Lista de cero entonces 0 [] H|T luego H+{SumList T} % de coincidencia de patrón para la lista final finalSi el programa encuentra una variable no enlazada, espera hasta que se le asigne un valor a la variable:
hilo Z = X+Y % espera hasta que las variables X e Y obtengan valores {Examinar Z} % muestra el valor Z final hilo X = 40 extremo hilo Y = 2 extremosNo es posible cambiar el valor de una variable de flujo que tiene un valor asociado:
X=1 X = 2% de errorLas variables de subproceso facilitan la creación de agentes que se ejecutan en subprocesos paralelos:
diversión {Ints N Max} si N == Max entonces cero más {Retraso 1000} N|{Enteros N+1 Máx.} final final diversión {Sum S Stream} case Flujo de cero entonces S [] H|T luego S|{Suma H+ST} fin final XY locales en subproceso X = {Ints 0 1000} fin subproceso Y = {Suma 0 X} final {Examinar Y} finalDebido a la forma en que funcionan las variables de flujo, puede usar subprocesos en cualquier parte de su programa que garanticen que devolverán el mismo resultado, lo que facilita la programación paralela. Al mismo tiempo, los subprocesos consumen muy pocos recursos del sistema: como en Erlang, 100 000 subprocesos pueden ejecutarse simultáneamente [2] .
Este ejemplo calcula un flujo de números primos utilizando el algoritmo tamiz de Eratóstenes. Para hacer esto, cree recursivamente flujos paralelos que filtren números compuestos:
divertido {tamiz Xs} caso Xs de cero luego cero [] X|Xr luego Ys en subproceso Ys = {Filtro Xr divertido {$Y} Y mod X \= 0 fin} fin X|{Tamiz Ys} final finalDe forma predeterminada, Oz utiliza el modelo de evaluación ansiosa, pero también admite la llamada evaluación perezosa:
divertido perezoso {Hecho N} si N =< 0 entonces 1 más N*{Fact N-1} end final XY locales en X = {Dato 100} Y = X + 1% ya que se requiere el valor de X, se calcula en este momento finalEl modelo de concurrencia declarativa se puede ampliar utilizando el mecanismo de paso de mensajes:
declarar Puerto de flujo local en Puerto = {Flujo de puerto nuevo} {Puerto de envío 1} % Stream ahora es 1|_ ('_' indica una variable no vinculada y sin nombre) {Puerto de envío 2} % La transmisión ahora es 1|2|_ ... {Puerto de envío n} % La transmisión ahora es 1|2| .. |n|_ finalLa creación de agentes asíncronos se implementa mediante hilos y puertos:
diversión {Diversión de inicio de NewAgent} Mensaje de salida en subproceso {FoldL Msg Fun Init Out} final {Mensaje puerto nuevo} finalEl modelo de concurrencia declarativa se puede ampliar para admitir el concepto de programación orientada a objetos y de estado; para hacer esto, debe crear una estructura de datos de Celdas, cuyo valor se puede cambiar:
AX local en A = {Celda nueva 0} A := 1% cambia el valor de A a 1 X = @A % @ se utiliza para acceder al valor de A finalCon esta ligera extensión de la semántica, puede usar todo el poder de la programación orientada a objetos:
contador de clase attr-val metanfetamina init(Valor) valor:=Valor final navegar por la metanfetamina {Examinar @val} final metanfetamina incrementada(Valor) valor :=@valor+Valor final final C local en C = {Nuevo Contador inicial(0)} {C incrementado(6)} {C navegar} finalCondición:
PIE +BOL --- EL JUEGO Donde I=0 y todas las letras diferentes representan números diferentes.Solución:
res de pie local en proc {Fuera C} F#U#T#B#O#L#G#R#A = C en C ::: 0#9 {FD.distinto C} F\=: 0 B\=: 0 100*F+10*U+T+100*B+10*O+L=: 100*G+10*R+A {FD.distribuir ff C} final {Buscar en todos los pies} {Examinar Res.} finalmostrará todas las soluciones de este acertijo en forma de tabla.
Lenguajes de programación | |
---|---|
|