Go! (lenguaje de programación)

Go!
Frank G. McCabe y Keith Clark
http://www.nar.fujitsulabs.com/go/
Información general
Paradigma Multi-paradigma: concurrente, lógica, funcional, imperativa (basada en objetos)
Apareció en 2003
Diseñado por Francis McCabe, Keith Clark
Última versión estable 9-30-07 (30 de septiembre de 2007 (17 años, 11 meses y 3 días))
Sistema de tipos fuerte
Influido por Prolog
Sistema operativo Unix-like
Licencia GPLv2


Go! es un lenguaje de programación basado en agentes que sigue la tradición de los lenguajes de programación basados en la lógica, como Prolog.[1]​ Fue introducido en un artículo de 2003 por Francis McCabe y Keith Clark . [2]

Diseño

Los autores del lenguaje 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, tipado fuerte y de orden superior (en el sentido de la programación funcional). Contiene definiciones de relaciones, funciones y procedimientos de acción. Los hilos ejecutan procedimientos de acción, invocando funciones y consultando relaciones según sea necesario. Los hilos de 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 los estilos de programación lógico, funcional e imperativo.[3]

Ejemplo

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

Sex ::= male | female.

person <~ {dayOfBirth:[] => day.
      age:[] => integer.
      sex:[] => Sex.
      name:[] => string.
      home:[] => string.
      lives:[string]{}}.

person:[string, day, Sex, string] $= person.

person(Nm, Born, Sx, Hm)..{
 dayOfBirth() => Born.
 age() => yearsBetween(now(), Born).
 sex() => Sx.
 name() => Nm.
 home() => Hm.
 lives(Pl) :- Pl = home().
 yearsBetween:[integer, day] => integer.
 yearsBetween(...) => ..
}.

newPerson:[string, day, Sex, string] => person.

newPerson(Nm, Born, Sx, Hm) => $person(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 una 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 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 hay una etiqueta de teoría, con el functor person, para una teoría que define las propiedades características del tipo person (implementa la interfaz person ) 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 pidió a Google que cambiara el nombre de su lenguaje, ya que le preocupaba que «nos estuvieran pasando por encima» [4]​ El tema recibió atención entre los sitios web de noticias tecnológicas, algunos de los cuales caracterizaron a Go! como "oscuro". [5]​ El hilo de debate 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 que se llaman Go. En los 11 meses transcurridos desde nuestro lanzamiento, la confusión de los dos lenguajes ha sido mínima".[6]

Referencias

  1. Claburn, Thomas (11 de noviembre de 2009). «Google 'Go' Name Brings Accusations Of 'Evil'». InformationWeek (en inglés). Archivado desde el original el 22 de julio de 2010. Consultado el 14 de noviembre de 2009. 
  2. a b Clark, K.L.; McCabe, F.G. (2003). «Go! For multi-threaded deliberative agents». Proceedings of the second international joint conference on Autonomous agents and multiagent systems (en inglés). pp. 964-965. ISBN 978-1581136838. doi:10.1145/860575.860747. 
  3. a b Clark, K. L.; McCabe, F. G. (2006). «Ontology oriented programming in go!». Applied Intelligence (en inglés) 24 (3): 189-204. doi:10.1007/s10489-006-8511-x. 
  4. «Issue 9 - go - I have already used the name for *MY* programming language». 10 de noviembre de 2009. Consultado el 14 de noviembre de 2009. 
  5. Brownlee, John (13 de noviembre de 2009). «Google didn't google "Go" before naming their programming language». Geek.com. Archivado desde el original el 6 de mayo de 2012. Consultado el 18 de enero de 2010. 
  6. «I have already used the name for *MY* programming language · Issue #9 · golang/go». GitHub (en inglés). Consultado el 4 de julio de 2019. 

Bibliografía

Enlaces externos