390 likes | 997 Views
Lenguaje de Programación GO. Agenda. Historia Características Mecanismos de concurrencia Ejemplos Desventajas Accesibilidad Conclusiones Bibliografía. Historia. Características. Lenguaje Compilado Desempeño Velocidad Seguridad Velocidad de desarrollo
E N D
Agenda Historia Características Mecanismos de concurrencia Ejemplos Desventajas Accesibilidad Conclusiones Bibliografía
Características Lenguaje Compilado Desempeño Velocidad Seguridad Velocidad de desarrollo Elimina dependencias innecesarias Minimiza el árbol de dependencias Velocidad de compilación
Características Sintaxis Similar a C o C++ Diferencias: Declaración de las variables For es la única instrucción para ciclos Punto y coma innecesario a final de instrucciones If y For no usan paréntesis para encerrar condición No maneja clases; sino structs con métodos
Características package main import "fmt“ var a,b int = 1,2 func main() { a := 0 for i := 0; i < 10; i++ { a += i } fmt.Println(a) }
Características Lenguaje Orientado a Objetos? Lenguaje orientado a objetos donde no existen objetos Cubetas que implementan cosas Recolector de basura Open Source Lenguaje Multipropósito Programación Mobil Programación Web Programación Sistemas
Métodos de Concurrencia Do not communicate by sharing memory; instead, share memory by communicating.
Goroutines Elemento básico de concurrencia Ejecución en paralelo Misma dirección de memoria Livianos Multiplexados en muchos hilos del S.O go list.Sort()
Ejemplos package main import "fmt" func sum(a []int, c chan int) { sum := 0 for _, v := range a { sum += v } c <- sum // send sum to c } func main() { a := []int{7, 2, 8, -9, 4, 0} c := make(chan int) go sum(a[:len(a)/2], c) go sum(a[len(a)/2:], c) x, y := <-c, <-c // receive from c fmt.Println(x, y, x + y) }
Canales Combinan comunicación con sincronización Buffered o unbuffered Envío y recepción de mensajes con operador -> Bloquean hasta que ambos lados del canal esten listos. canal <- 4 <- canal
Ejemplos package main import "fmt" func main() { c := make(chan int, 2) c <- 1 c <- 2 fmt.Println(<-c) fmt.Println(<-c) }
Paralelización Uso de múltiples núcleos Cálculos complejos divididos Canal recibe resultados
Ejemplos const NCPU = 4 // number of CPU cores func (v Vector) DoAll(u Vector) { c := make(chan int, NCPU) // Buffering optional but sensible. for i := 0; i < NCPU; i++ { go v.DoSome(x,y) } // Drain the channel. for i := 0; i < NCPU; i++ { <-c // wait for one task to complete } // All done. }
Desventajas Lenguaje experimental Compilador no funciona en Windows No tiene manejo de excepciones
Accesibilidad Tour Compilación y ejecución en línea Ejercicios Prácticas de programación Código fuente Instrucciones de instalación Documentación Especificación
Conclusiones Go es un potente lenguaje de programación que mezcla las ventajas de lenguajes compilados con las de los lenguajes dinámicos. Semántica similar a lenguajes de programación básicos. Aumenta velocidad de desarrollo y por ende el desempeño de los trabajadores. Brinda mecanismos de concurrencia muy prácticos y de uso sencillo.
Bibliografía www.golang.org http://blog.golang.org/2010/09/go-concurrency-patterns-timing-out-and.html http://www.genbetadev.com/herramientas/introduccion-al-lenguaje-de-programacion-go http://www.eweek.com/c/a/Application-Development/12-Things-to-Know-About-Googles-Go-Programming-Language-859839/ http://golang.org/doc/effective_go.html#concurrency http://www.eweek.com/c/a/Application-Development/12-Things-to-Know-About-Googles-Go-Programming-Language-859839/1/