Go! (lenguaje de programación)
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. Fue introducido en un artículo de 2003 por Francis McCabe y Keith Clark.
From Wikipedia, the free encyclopedia
| 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, 9 meses y 5 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]
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 unapersony también proporciona restricciones de tipo sobre estas propiedades. Documenta queagees una propiedad funcional con un valor entero, queliveses una relación unaria sobre cadenas y quedayOfBirthes una propiedad funcional con un valor que es un objeto de tipoday. - La regla de tipo
$=indica que también hay una etiqueta de teoría, con el functorperson, para una teoría que define las propiedades características del tipoperson(implementa la interfazperson) en términos de cuatro parámetros dados de tiposstring,day,Sexystring.
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]