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 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]
Referencias
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ «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.
- ↑ 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.
- ↑ «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
- Clark, K. L. (2003). «Ontology Oriented Programming in Go!» (en inglés).
- Clark, K. L.; McCabe, F. G. (2004). «Go!—A Multi-Paradigm Programming Language for Implementing Multi-Threaded Agents». Annals of Mathematics and Artificial Intelligence (en inglés) 41 (2–4): 171-206. doi:10.1023/B:AMAI.0000031195.87297.d9.
- R. Bordini (2006). «A Survey of Programming Languages and Platforms for Multi-Agent Systems». Informatica (en inglés) 30: 33-44. Archivado desde el original el 15 de noviembre de 2009.
- M. Fisher (2007). «Computational Logics and Agents - A Roadmap of Current Technologies and Future Trends». Computational Intelligence (en inglés) 23 (1): 61-91. doi:10.1111/j.1467-8640.2007.00295.x. Archivado desde el original el 6 de enero de 2013.
- McCabe, Francis G. (7 de febrero de 2007). Lets Go! (en inglés). Network Agent Press. ISBN 978-0-9754449-1-7.
- C. Varela (22 de septiembre de 2004). «ACM SIGPLAN Erlang Workshop '04». ACM SIGPLAN Erlang Workshop (en inglés). Archivado desde el original el 15 de noviembre de 2009.