¡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 introducido en un artículo de 2003 por Francis McCabe y Keith Clark . [2]
Paradigma | Multi-paradigma : concurrente , lógico , funcional , imperativo ( basado en objetos ) |
---|---|
Diseñada por | Francis McCabe , Keith Clark |
Apareció por primera vez | 2003 |
Versión de vista previa | 9-30-07 / 30 de septiembre de 2007 |
Disciplina de mecanografía | fuerte |
SO | Tipo Unix |
Licencia | GPLv2 |
Influenciado por | |
Prólogo [1] |
Diseño
Los autores de Go! describirlo como "un lenguaje de programación multi-paradigma que está orientado a las necesidades de programación segura, calidad de producción y aplicaciones basadas en agentes. Es multi-hilo , fuertemente tipado y de orden superior (en el sentido de programación funcional). Tiene relación , funciones y definiciones de procedimiento de acción. Los subprocesos ejecutan procedimientos de acción, invocando funciones y consultando 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 usar relaciones dinámicas compartidas que actúan como tiendas 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ógicos , funcionales e imperativos . [3]
Ejemplo
El siguiente ejemplo ilustra el tipo "orientado a la ontología" y el estilo de declaraciones de Go !: [3]
Sexo :: = masculino | mujer.person <~ {dayOfBirth: [] => día . edad: [] => entero . sexo: [] => Sexo. nombre: [] => cadena . inicio: [] => cadena . vidas: [ cadena ] {}}. persona: [ cadena , día , sexo, cadena ] $ = persona. persona (Nm, Nacido, Sx, Hm) .. { dayOfBirth () => Nacido. edad () => años entre (ahora (), Nacido). sexo () => Sx. nombre () => Nm. casa () => Hm. vidas (Pl) : - Pl = hogar (). yearsBetween: [ integer , day ] => integer. añosEntre (...) => ..}. newPerson: [ cadena , día , Sexo, cadena ] => persona. newPerson (Nm, Born, Sx, Hm) => $ persona (Nm, Born, Sx, Hm).
La ::=
regla define un nuevo tipo de datos algebraicos , un tipo de datos con solo constructores de datos.
La <~
regla define un tipo de interfaz: indica qué propiedades son características de a person
y también da restricciones de tipo sobre estas propiedades. Documenta que age
es una propiedad funcional con un valor entero, que lives
es una relación unaria sobre cadenas y que dayOfBirth
es una propiedad funcional con un valor que es un objeto de tipo day
.
La $=
regla de tipo indica que también existe una etiqueta de la teoría, con el funtor person
, para una teoría que define las propiedades características de la person
tipo - implementos la person
interfaz - en términos de cuatro parámetros dados de tipos string
, day
, Sex
, y string
.
Conflicto con Google
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, ya que le preocupaba que estuvieran "arrastrándonos". [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] Un desarrollador de Google cerró el hilo del problema abierto sobre el tema 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 desde nuestra versión, ha habido una confusión mínima de los dos idiomas ". [6]
Referencias
- ↑ a b c Claburn, Thomas (11 de noviembre de 2009). "El nombre de Google 'Go' trae acusaciones de 'maldad ' " . InformationWeek . Consultado el 14 de noviembre de 2009 .
- ^ a b Clark, KL; McCabe, FG (2003). ¡Ir! para agentes deliberativos de subprocesos múltiples . Congreso Internacional de Agentes Autónomos (AAMAS'03) . págs. 964–965. CiteSeerX 10.1.1.117.184 . doi : 10.1145 / 860575.860747 . ISBN 978-1581136838. S2CID 2047545 .
- ^ a b Clark, KL; McCabe, FG (2006). "Programación orientada a la ontología en marcha". Inteligencia aplicada . 24 (3): 189-204. CiteSeerX 10.1.1.117.184 . doi : 10.1145 / 860575.860747 . S2CID 2047545 .
- ^ "Número 9 - adelante - Ya he usado el nombre de * MI * lenguaje de programación" . 2009-11-10 . Consultado el 14 de noviembre de 2009 .
- ^ Brownlee, John (13 de noviembre de 2009). "Google no Google" Go "antes de nombrar su lenguaje de programación" . Geek.com. Archivado desde el original el 6 de mayo de 2012 . Consultado el 18 de enero de 2010 .
- ^ "Ya utilicé el nombre para * MI * lenguaje de programación · Edición n. ° 9 · golang / go" . GitHub . Consultado el 4 de julio de 2019 .
Otras lecturas
- Clark, KL; McCabe, FG (2003). "Programación orientada a ontología en Go!" (PDF) . Cite journal requiere
|journal=
( ayuda ) - Clark, KL; McCabe, FG (2004). "¡Vamos! —Un lenguaje de programación de paradigmas múltiples para implementar agentes de subprocesos múltiples" . Anales de Matemáticas e Inteligencia Artificial . 41 (2–4): 171–206. CiteSeerX 10.1.1.133.1069 . doi : 10.1023 / B: AMAI.0000031195.87297.d9 . S2CID 6992205 .
- R. Bordini; et al. (2006). "Estudio de lenguajes y plataformas de programación para sistemas multiagente" . Informatica . 30 : 33–44. Archivado desde el original el 15 de noviembre de 2009.
- M. Fisher; et al. (2007). "Agentes y lógicas computacionales: una hoja de ruta de las tecnologías actuales y las tendencias futuras" . Inteligencia computacional . 23 (1): 61–91. CiteSeerX 10.1.1.114.6149 . doi : 10.1111 / j.1467-8640.2007.00295.x . S2CID 3393868 . Archivado desde el original el 6 de enero de 2013.
- McCabe, Francis G. (7 de febrero de 2007). ¡Vamos! . Prensa de agente de red. ISBN 978-0-9754449-1-7.
- C. Varela; et al. (2004). Sobre el modelado de sistemas de agentes con Erlang . Taller ACM SIGPLAN Erlang '04 .
enlaces externos
- Página de Github
- Ejemplo de código en 99-bottles-of-beer.net