¡Vamos! | |
---|---|
clase de idioma | multiproceso |
Apareció en | 2003 |
Autor | Frances McCabeKeith Clark |
sido influenciado | prólogo [1] |
Licencia | GPLv2 |
Plataforma | Sistema operativo similar a Unix |
¡Vamos! es un lenguaje de programación de subprocesos múltiples desarrollado por Keith Clark y Francis McCabe en 2003. Multiparadigma , enfocado en programación segura y aplicaciones distribuidas (usando arquitectura de agente), con tipado fuerte . Hay soporte para definiciones de funciones y procedimientos, así como relaciones entre ellos. Los subprocesos ejecutan procedimientos, llaman a funciones y solicitan las conexiones necesarias según sea necesario. Los subprocesos de diferentes agentes interactúan entre sí mediante mensajes asíncronos. Los hilos de un mismo agente pueden establecer vínculos dinámicos entre sí, formando una especie de memoria compartida.
Debido a su naturaleza multiparadigma, el lenguaje tiene soporte para programación lógica y funcional , hay soporte para estilos de programación imperativa y orientada a objetos , y el modelado ontológico es totalmente compatible , similar al sistema de tipo utilizado para la Web Semántica , debido a qué clases de OWL se pueden representar como sistemas de tipo[ aclarar ] [2] .
Debido al lanzamiento del lenguaje de programación propio de Google, Go , Go! se convirtió en víctima de un conflicto de nombres, y este conflicto no se ha resuelto hasta ahora [1] .
El siguiente ejemplo ilustra el tipo 'ontológico' y el estilo de declaración adoptado en Go!.
Género ::= masculino | femenino _ persona < ˜ { diaDelNacimiento : []=> dia . edad : []=> entero . género : []=> Género . nombre : []=> cadena . inicio : []=> cadena . vive : [ cadena ]{}}. persona : [ cadena , día , Sexo , cadena ] $ = persona . persona ( Nm , Nacido , Sx , Hm ) ..{ dayOfBirth ()=> Nacido . edad () => años entre ( ahora (), nacido ). género ()=> Sx . nombre ()=> Nm . casa ()=> hm . vive ( Pl ) : - Pl = hogar (). yearsBetween : [ entero , día ]=> entero . años entre (...) => .. }. newPerson : [ cadena , día , Sexo , cadena ]=> persona . nuevaPersona ( Nm , Nacido , Sx , Hm )=> $persona ( Nm , Nacido , Sx , Hm ).La regla ::= define un nuevo tipo algebraico , un tipo de datos que consta únicamente de constructores de datos .
La regla <˜ define el tipo de interfaz: dice exactamente qué propiedades caracterizan a una persona en este caso y también impone restricciones típicas (restricciones) sobre estas propiedades. Esto corrige que age (edad) es una propiedad de función con valores enteros, y el parámetro 'vive con' (vidas) es una relación unaria para cadenas, y el parámetro 'Cumpleaños' (dayOfBirth) es una propiedad de función que indica el día de la objeto.
Una regla como $= dice que también hay una marca como teoría (suposición) que indica a una persona específica; la propia teoría define las características de un tipo de persona (es decir, una especie de implementación de la interfaz de persona), expresadas en cuatro parámetros dados con tipos: cadena, día, género y cadena.