¡Ir! es un lenguaje de programación basado en agentes en la tradición de los lenguajes de programación basados en lógica como Prolog . [1] Fue presentado en un artículo de 2003 por Francis McCabe y Keith Clark . [2]
Los autores de ¡Vamos! lo describen como "un lenguaje de programación multiparadigma que está orientado a las necesidades de programación segura, calidad de producción y aplicaciones basadas en agentes. Es multiproceso , fuertemente tipado y de orden superior (en el sentido de programación funcional). Tiene relación , definiciones de procedimientos de acción y funciones. Los subprocesos ejecutan procedimientos de acción, llaman a funciones y consultan relaciones según sea necesario. Los subprocesos en diferentes agentes se comunican y coordinan mediante mensajes asincrónicos. Los subprocesos dentro del mismo agente también pueden utilizar relaciones dinámicas compartidas que actúan como almacenes de tuplas al estilo Linda . " [2]
Los autores también proponen que el lenguaje es adecuado para representar ontologías debido a su integración de estilos de programación lógica , funcional e imperativa . [3]
El siguiente ejemplo ilustra el tipo "orientado a ontologías" y el estilo de declaraciones de Go!: [3]
Sexo ::= masculino | femenino .persona <~ { díaDeNacimiento: [] => día . edad :[] => entero . sexo :[] => Sexo . nombre :[] => cadena . inicio :[] => cadena . vidas :[ cadena ]{}}.persona :[ cadena , día , sexo , cadena ] $ = persona .persona ( Nm , Nacido , Sx , Hm )..{ díaDeNacimiento () => Nacido . edad () => años entre ( ahora (), nacido ). sexo () => Sx . nombre () => Nm . inicio () => Hm . vive ( Pl ) :- Pl = hogar (). añosentre: [ entero , día ] => entero . añosEntre (...) => .. }.nuevaPersona: [ cadena , día , Sexo , cadena ] => persona .nuevaPersona ( Nm , Nacido , Sx , Hm ) => $ persona ( Nm , Nacido , Sx , Hm ).
::=
regla define un nuevo tipo de datos algebraico , un tipo de datos que solo tiene constructores de datos.<~
regla define un tipo de interfaz: indica qué propiedades son características de a person
y también proporciona restricciones de tipo sobre estas propiedades. Documenta que age
es una propiedad funcional con un valor entero, que lives
es una relación unaria entre cadenas y que dayOfBirth
es una propiedad funcional con un valor que es un objeto de tipo day
.$=
regla de tipo indica que también hay una etiqueta de teoría, con el funtor person
, para una teoría que define las propiedades características del person
tipo (implementa la person
interfaz) en términos de cuatro parámetros dados de los tipos string
,,, y .day
Sex
string
En noviembre de 2009, Google lanzó un lenguaje de programación Go con un nombre similar (sin signo de exclamación ). McCabe le pidió a Google que cambiara el nombre de su idioma porque le preocupaba que estuvieran "sobre nosotros". [1] [4] El tema recibió atención entre los sitios web de noticias de tecnología, y algunos de ellos caracterizaron a Go! como "oscuro". [5] El hilo del tema abierto sobre el tema fue cerrado por un desarrollador de Google el 12 de octubre de 2010 con el estado personalizado "Desafortunado" y con el siguiente comentario: "hay muchos productos y servicios informáticos llamados Go. En los 11 meses transcurridos desde nuestro lanzamiento, ha habido una confusión mínima de los dos idiomas." [6]