Oz (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 29 de septiembre de 2017; las comprobaciones requieren 5 ediciones .
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 ) ( 2018-09-05 )
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 .

Historial de desarrollo

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.

Características del lenguaje

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.

Descripción general del idioma

Estructuras de datos

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:

'|'(2 '|'(4 '|'(6 '|'(8 cero)))) 2|(4|(6|(8|nil))) % azúcar sintáctico 2|4|6|8|nil % es aún más corto [2 4 6 8] % de uso efectivo de azúcar sintáctico para implementar una sintaxis concisa

Estos valores son entidades constantes de primer tipo (primera clase), mientras que la tipificación es dinámica.

Funciones

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 final

Variables de subprocesos y concurrencia declarativa

Si 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 extremos

No es posible cambiar el valor de una variable de flujo que tiene un valor asociado:

X=1 X = 2% de error

Las 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} final

Debido 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] .

Programas de ejemplo en Oz

Criba de Eratóstenes

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 final

Evaluación perezosa

De 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 final

Paso de mensajes

El 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|_ final

La 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} final

Estados y objetos

El 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 final

Con 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} final

Un ejemplo de un programa de Oz que resuelve un acertijo

Condició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.} final

mostrará todas las soluciones de este acertijo en forma de tabla.

Véase también

Notas

  1. Conceptos, técnicas y modelos de programación informática . Consultado el 30 de noviembre de 2010. Archivado desde el original el 26 de agosto de 2014.
  2. Mozart-oz.org Concurrencia (enlace no disponible) . Fecha de acceso: 30 de noviembre de 2010. Archivado desde el original el 24 de febrero de 2015. 

Enlaces