Articulo de referencia

¡Adelante! (lenguaje de programación)

"},"license":{"wt":"[[GPLv2]]"},"website":{"wt":""},"operating_system":{"wt":"[[Unix-like]]"}},"i":0}}]}"> Go! es un lenguaje de programación basado en agentes, en la tradición ...

Go! es un lenguaje de programación basado en agentes, en la tradición de 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 ]

Diseño

Los autores de Go! lo describen como "un lenguaje de programación multiparadigma orientado a las necesidades de programación de aplicaciones seguras, de calidad de producción y basadas en agentes. Es multihilo , fuertemente tipado y de orden superior (en el sentido de la programación funcional). Posee definiciones de relaciones, funciones y procedimientos de acción. Los hilos ejecutan procedimientos de acción, llamando a funciones y consultando relaciones según sea necesario. Los hilos en diferentes agentes se comunican y coordinan mediante mensajes asíncronos. Los hilos dentro del mismo agente también pueden usar 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ógicos , funcionales e imperativos . [ 3 ]

Ejemplo

El siguiente ejemplo ilustra el estilo de tipo y declaraciones "orientado a la ontología" de Go!: [ 3 ]

Sexo ::= masculino | femenino .persona <~ { díaDeNacimiento: [] => día . edad :[] => entero . sexo :[] => Sexo . nombre :[] => cadena . hogar :[] => cadena . vive :[ cadena ]{}}.persona :[ cadena , día , sexo , cadena ] $ = persona .persona ( Nm , Nacido , Sx , Hm )..{ díaDeNacimiento () => Nacido . edad () => añosEntre ( ahora (), Nacido ). sexo () => Sx . nombre () => Nm . hogar () => 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 ) => $ person ( Nm , Nacido , Sx , Hm ).
  • La ::=regla define un nuevo tipo de dato algebraico , un tipo de dato con solo constructores de datos.
  • La <~regla define un tipo de interfaz: indica qué propiedades son características de persony también proporciona restricciones de tipo sobre estas propiedades. Documenta que agees una propiedad funcional con un valor entero, que liveses una relación unaria sobre cadenas y que dayOfBirthes una propiedad funcional con un valor que es un objeto de tipo day.
  • La $=regla de tipo indica que también hay una etiqueta de teoría, con el functor person, para una teoría que define las propiedades características del persontipo - implementa la personinterfaz - 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 con un nombre similar, Go (sin signo de exclamación ). McCabe pidió a Google que cambiara el nombre de su lenguaje, ya que le preocupaba que estuvieran "aplastándonos". [ 1 ] [ 4 ] El asunto recibió atención en sitios web de noticias tecnológicas, y algunos de ellos caracterizaron a Go! como "oscuro". [ 5 ] El hilo de discusión 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 mínima confusión entre los dos lenguajes". [ 6 ]

Referencias

  1. 1 2 3 Claburn, Thomas (11 de noviembre de 2009). "El nombre 'Go' de Google genera acusaciones de 'maldad'"" . InformationWeek . Archivado del original el 22-07-2010 . Consultado el 14-11-2009 .
  2. 1 2 Clark, KL; McCabe, FG (2003). "¡Adelante! Para agentes deliberativos multihilo". Actas de la segunda conferencia internacional conjunta sobre agentes autónomos y sistemas multiagente . págs. 964–965 . CiteSeerX 10.1.1.117.184 . doi : 10.1145/860575.860747 . ISBN   978-1581136838. S2CID 2047545 . 
  3. 1 2 Clark, KL; McCabe, FG (2006). "Programación orientada a ontologías en go!". Applied Intelligence . 24 (3): 189– 204. doi : 10.1007/s10489-006-8511-x .
  4. "Número 9 - adelante - Ya he usado el nombre para *MI* lenguaje de programación" . 10 de noviembre de 2009. Consultado el 14 de noviembre de 2009 .
  5. Brownlee, John (13 de noviembre de 2009). "Google no buscó en Google 'Go' antes de nombrar su lenguaje de programación" . Geek.com. Archivado del original el 6 de mayo de 2012. Consultado el 18 de enero de 2010 .
  6. "Ya he usado el nombre para *MI* lenguaje de programación · Problema n.° 9 · golang/go" . GitHub . Consultado el 4 de julio de 2019 .

Lecturas adicionales

  • Clark, KL; McCabe, FG (2003). "¡Programación orientada a ontologías en Go!" (PDF) .
  • Clark, KL; McCabe, FG (2004). "Go!—Un lenguaje de programación multiparadigma para implementar agentes multihilo" . Annals of Mathematics and Artificial Intelligence . 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). "Un estudio de lenguajes de programación y plataformas para sistemas multiagente" . Informatica . 30 : 33–44 . Archivado del original el 15 de noviembre de 2009.
  • M. Fisher; et  al. (2007). "Lógicas y agentes 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 .  {{cite journal}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  • McCabe, Francis G. (7 de febrero de 2007). ¡Vamos! Network Agent Press. 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. Archivado del original el 15 de noviembre de 2009. Recuperado el 12 de noviembre de 2009 .
  • Página de Github
  • Ejemplo de código en 99-bottles-of-beer.net