/ prog

El Lenguaje De programacion Go

golang, el lenguaje de programacion de sistemas de la gente de google con el que planea llebar a cabo sus mas retorcidos y stalkerosos deseos.

Hoy y tras pocos meses de programacion y muchas horas de investigacion linguistica intentando entender el english, les traigo una reseña de la biblia de golang (Go para los amigos) The Go Programming Language (en adelante TGPL o GPL(?))

el libro

Los usa-americanos tienen sus medidas extravagantes. Siguiendo su ejemplo, yo mido la extencion de un documento en las lineas (de 80 columnas indentadas) que abarca, por ejemplo, 7000-10000 lineas suelen ser la extencion regular de una novela, debajo de esta cantidad es un trabajo corto, superior de esta es extenso y superior a las 20000 lineas ya es muy extenso, aunque Dune utiliza (y muy bien) la friolera y descomunal cantidad de 34150 lineas.

Pues bien, TGPL son 21426 lineas, repartidas a partes iguales entre explicaciones y codigo fuente. Si quieres la extencion en paginas, son cerca de 400, aunque no confiaria en esta medida

La mayor parte del libro se utiliza para mostrar la forma de hacer las cosas en Go: sintaxis, ideologia y paquetes. Haciendo un simil con C seria algo asi como que te enseñaran a hacer muchas herramientas del sistema, mas una guia de gcc, make y alguna cosa mas.

Se asume que ya conoces al menos un lenguaje de programacion, particularmente C o alguno de su descendencia y aunque no es necesario que manejes programacion orientada a objetos y/o concurrencia es deseable contar con tales saberes antes de iniciar la aventura

Repitiendo, no es un manual para no iniciados, es decir, para quien no tenga ya asumido en su ser lo que es programar, resultara hostil. Diria que es apto como tercer o cuarto libro de programacion

Se enseña a construir aplicaciones no triviales, utilzando la rica libreria estandar del lenguaje, aunque la mayoria encaminadas al tema web, ninguna es despreciable, incluso se propone la construccion de un parser de espreciones-S y un pequeño interprete para un lenguaje de programacion. No se llega a profundizar veraderamente en ningun tema, pero se da lo suficiente como para enfrentar lo desconocido sin temor (jo, lo dice quien no ha hecho mas de 4 ejericios)

Igualmente poco se indaga sobre la herramienta principal del lenguaje (go) que es a la vez un compilador, perfilador (primera ves que utilizo algo asi), administador de paquetes, “visor” de documentacion y muchas cosas mas. Un par de comandos para iniciar a hacer cosas y un par de comandos esotericos. Vamos, tampoco es para abrumar, si es bueno y sencillo, es mas del doble de bueno… o eso diria. Siendo suficiente para iniciar, hecho en falta mayor detalle en varios comandos que requieren un orden y sintaxis nada evidentes, parecidos mas a conjuros misteriosos

en resumen, recomendo su lectura a cualquiera, en particular si se biene de C o C++ y se aspira a lenguajes mas desapegados de la maquina, sin topar de lleno en abstracciones incomprensibles

el lengueje

el libro esta muy bien!, que tal el lenguaje?

bueno, desde la perspectiva de un aficionado a C, que ha pasado por C++, bash y un ligero viaje por lisp, el lenguaje me gusta mucho, aunque no puedo perdonarle que inponga un estilo arbitrario de como han de indentarse y separarse las instrucciones, es decir el formateo. Viniendo de C tener llaves para instrucciones sencillas (una instruccion) me parece atroz, por no decir forzar la posicion de apertura y cierre de las demas llaves, sobre todo en instrucciones else, no lo soporto esteticamente! Ya por utilizar tabs para indentar, deben arder en la hogera

Como te obligan a seguir su estilo? si no cumples con el formato no compila…

dejando atras este no precisamente poco importante aspecto, tenemos el inmobiliario habitual de los descendientes de C, ifs, elses, else ifs, funciones, arreglos, switches, return, gotos y bucles for, careciendo de bucles while y do while, pero sumando slices, que son una especie de arreglo con crecimiento dinamico automagico (el lenguaje tien recolector de basura), mapas hash, una funcion llamada defer, gorutinas para programacion concurrente, canales para pasar datos a las gorutinas y asegurar que completen su ciclo, pero sobre todo y quiza lo mas interesante del lenguaje su orientacion a objetos no evidente

el lenguaje tiene una forma peculiar de organizar sus parametros (al revez de C tipo-nombre, aqui es nombre(s)-tipo) que no pocas veces me ha causado transtornos cuando regreso a tocar C, p-e-r-o ninguna queja, tambien se ve bien.

quiza lo que mas atractivo de Go es tratar de no ser ser innecesariamente complejo en ningun aspecto, al grado de que entrar a una libreria sin conocer el lenguaje da la imprecion de estar ante un lenguaje imperativo.

Fascinante es que la orientacion a objetos surja por si sola. MMMM, no esta permitida la sobre carga de operadores, la convercion automatica de tipos ni la extencion de una clase fuera de su fichero de definicion. A cambio nos dan composicion e interfases

los ficheros de codigo fuente por defecto utilizan codificacion unicode utf-8, que en conjunto con una funcion nativa llamada range permiten iterar sobre cadenas unicode sin tener que recurrir a esotericas librerias. Tambien se permite convecion automagica de entre runas unicode de 32 bits a cadenas de caracteres utf-8

por cierto, aunque el nucleo del lenguaje es compacto la libreria estandar es muy rica, te da un servidor web, analisis en cadenas, codificadores, compresores y otro monton de cosas

es sencillo crear programas relativamente complejos con estas facilidades, aunque encuentro incomoda la herramienta de documentacion para linea de comandos

pese a lo amplio de la libreria estandar, carece de librerias nativas para graficos y esto es un punto flaco, considerando que si te apegas a la libreria estandar tus programas son multiplataforma y que el costructor de programas es por naturaleza multiplataforma es triste no contar con herramientas oficiales para crear GUIs o al menos TUIs. Lamentablemente, veo poco probable que algun dia llegue a tener librerias nativas para estos menesteres… a menos que el gestor de paquetes pueda meter sus manos en el gestor de paquetes del sistema en si (apt, dnf, yum, etc)

me encanta como administra las “librerias”/paquetes externos, nada de buscar por internet, ni compilar a mano, ni naaah, el solito busca las dependencias y las enlaza. Nunca perdonare al comite de los estandares de C y C++, por no copiar este aspecto y evolucionarlos de forma razonable, si hicieran su labor no tendria que aparecen Go

respecto a la concurrencia, no tenia ninguna experiencia previa, era un tema mistico, magico y misterioso y sin embargo he podido implementar un tipo concurrente, aunque no se, encuentro un poco criptica las formas en que esta implementada, aunque como digo desconosco como se haga esto en otros lenguajes, de momento la puedo usar sin muchos complejos ingorando una parte que tenia que ver con bucles for, captura de variables y cosas concurrentes que no me quedo muy clara en el libro

cosas feas

ademas del jodido formateo? cast, cast, cast por todas partes, y si no aplicas cast, he?, creas una varible extra con el cast apropiado al inicio de la funcion… teniendo que asignar memoria extra…?

tan dificil y peligroso es asumir que el programador sabe que es lo que hace con los tipos que escoge y en consonancia hacer conversion automatica de tipos, digo con tener conversion autamatica en llamadas a fuciones seria un gran alivio, pero no, ademas ni ellos resepetan su estricto y seguro tipado (ironia), pues aveces hacen convesiones automaticas para ciertas tareas, a sabiendas de lo poco practico de tal desicion. La evidencia de que comprenden el problema se muestra cuando por lo general se regresar ints aun en valores que deverian ser unsigned

no le haria mal al lenguaje separar la herramienta go en varias utilidades, en particular para la documentacion, pruebas y perfilado

tener un solo paquete por directorio es bueno, pero en paquetes conseptualmente extensos puede ser dificil averiguar la procedencia de una funcion, no es grave y es principalmente un problema del programador no distribuir el codigo de forma coherente, pero aun asi se vuelve dificil seguir la logica de un programa extenso

conclucion

Me gusta y lo recomiendo como lenguaje secundario. Si bien es cierto que tiene un fuerte enfoque para aplicaciones web es utilizable como lenguaje de proposito general, entregando un rendimiento aceptable

segun pruebas mias, su rendimiento esta entre 3 a 4 veces mas lento que su homologo en C, es decir, si un pragrama demora 1, en Go, demora 4 o 5, bueno no? si, eheemee, aun tengo conflictos psicologicos al saber que va 3 o 4 veces mas lento que C, pero bueno al menos no es 100 veces mas lento como el fabulosisimo python o JS

alto, tengo que sacarlo de mi sistema, no programes con python, ni JS, no lo hagas, por fabor, no son lenguajes paro programar por mas (falsamente) simples o elegantes que sean. Los lenguajes interpretados son para extender programas o para servir como prompts, no para crear algo de cero. Sirve de algo tardar unas horas menos programando en esos lenguajes cuando pasaras la eternidad ejecutandolos lentamente? hay lo dejo

Go apenas se encuentra en los limites que considero un rendiminto aceptable.

Entre 7 y 10 veces mas lento que C, sin importar el paradigma, solo podre considerar al lenguaje una curiosidad intelectual

porg

durante el ultimo mes, he estado traduciendo o mas bien dando sentido a la traduccion de las maquinas sobre el libro en cuestion. Pueden optener una copia del codigo y resultados con

git clone https://github.com/nasciiboy/TGPL.git
cd TGPL

abren los ficheros html en su navegador de confianza (pista: el que tiene un sufijo es, es el que esta en español

tambien hay verciones web de una sola pagina del material

para crear el material desde el codigo

go get -u https://github.com/nasciiboy/morg
morg toHtml The-Go-Programming-Language.morg
morg toHtml The-Go-Programming-Language_es.morg

para ver el fichero directamente en su terminal, utilice morg tui fichero.morg

en fin, una labor estandar de traduccion a mi estilo sin acentos.

apenas es lo suficientemente entendible, y apenas dare mi primer lectura seria al libro y de paso correjir algunas cosas.

tuve problemas al localizar muchas cosas, pero si quieres colaborar a mejorar un manual que nunca iba a aparecer en españøl (o si) tienes mi correo y clave gpg abajo

happy hacking

/ prog