Categorías > Discusión general > Análisis de Go [Sintaxis] ...
Nuevo Mensaje | Responder
Sorancio


307 envíos
Desconectado
1708 lecturas
4 respuestas
Análisis de Go [Sintaxis]22-02-2010 a las 17:04:44

¡Buenas!

Como muchos sabéis (o deberíais saber), Google ha diseñado y implementado un nuevo lenguaje de programación al que han llamado Go. En este análisis, todos los ejemplos han sido sacados de la página oficial del lenguaje: www.golang.org

Nadie sabe que se supone que es




Los señores de Google, la empresa que sabe más de nosotros que nosotros mismos, catalogan a Go como el lenguaje simple, rápido, seguro, concurrente, rápido y de código abierto. ¡Si le insistes un poco te hace cafés y todo! En fin, siendo testigo de tanto optimismo, ¿porque no opinar objetivamente y subjetivamente del lenguaje?

Comenzaré con un rodeo a la sintaxis, el porque usarlo y el porque NO usarlo desde mi punto de vista. Cabe destacar que cualquiera puede tener sus opiniones sobre el lenguaje, que son aceptadas aunque no las comparta.

Veamos, la sintaxis de Go es bastante innovadora, aunque basada en C tiene bastas diferencias. La primera que a la mayoría que hemos programado en C o C++ nos salta a la vista es la declaración de las variables.
Código Go:

var s string = "";

Como podemos apreciar, ponemos var al comienzo, luego el identificador y más tarde el tipo de la variable. ¿Porque tanto palabrerío inútil? Es la estoica y permanente batalla, estúpida en parte, de hacer los lenguajes de programación exactos a los lenguajes humanos. Lo más grave es que el tipo puede ser omitido dejándole al compilador a imaginarse cualquier absurdez. Los que hemos programado en C sabemos que el tipo es importantísimo, porque un tipo mal elegido puede hacer que gastemos hasta 8 veces más memoria de la necesaria. En Go dejamos que el compilador nos lo elija. Eso sí, menos mal que tiene tipos de tamaño fijo, como uint32 y int32 también, sino es para pegarles un tiro.

Otro error, más grave aún que cómo definir variables, ¡es que hay tipos complejos estándares! Hay un mapa estándar, hay hashes, incluso string. ¿Que problema hay? Diréis... Uno, muy, grave... Si hay un error en la definición del mapa, y esto hace que haya un agujero de seguridad, todos los programas hechos con ese compilador estarán afectados por la errata del equipo de Google. Algo que no me gusta de C++, pero es útil, es su librería estándar que permite la redefinición de las clases, así cualquiera puede implementarlas a su gusto. Aprende, Google.

En fin, no todo serán malas noticias para los de Mountain View, algo que si me ha gustado son las interfaces, algo que ya hemos visto en PHP. Son la simpleza del polimorfismo. Básicamente, crea declaraciones sin necesidad de definirlas, para que luego, cada objeto que las herede, las defina a su manera. No es nada nuevo ya que C++ puede simularlo con las clases virtuales puras.

Algo que me ha parecido bastante inútil, ya que nadie fallece por poner paréntesis, es cómo trabaja con la precedencia de operadores. Cuánto más espacio entre operador y operando, menor prioridad tiene. Así que estás obligado a programar como ellos quieren. Por ejemplo:
Código Go:
x<<8 + y<<16

En este caso, << tiene más preferencia que +. Los que programan sin espacios entre operadores se joden literalmente. Adios al formateo personal y cómodo de cada uno.

Otro error GRAVE es el de los paquetes (packages), comunmente tratados cómo nombres de espacio para los programadores de C++. Esto es ofensivo... ¡¡Un miembro de un paquete es sólo accesible cuándo comienza por una letra mayúscula!! Así que tendremos que programar como montañas, olvidaos del estilo de toda la vida.

Más errores sumamente perjudiciales para la salud es el de los punto y comas. En Go, se ponen puntos y comas para finalizar sentencia, como en C, C++, C#, Java y lenguajes parecidos. Bien, pues NO son obligatorios. Que bien, ¿verdad? ¡No! Porque el compilador se dedica a ponerlos donde cree conveniente, y hay que usar un formato impuesto. Por ejemplo:
Código Go:

if i < f() {
    g()
}

Está bien, pero:
Código Go:

if i < f()  // wrong!
{          // wrong!
    g()
}

No, porque el compilador confunde f() con una sentencia y pone ;, por lo que dará resultados imprevistos.

El switch de Go es mejor que el de C, ya que permite comparaciones más complejas, esto es correcto, algo que personalmente me ha gustado mucho:
Código Go:
func unhex(c byte) byte {
    switch {
    case '0' <= c && c <= '9':
        return c - '0'
    case 'a' <= c && c <= 'f':
        return c - 'a' + 10
    case 'A' <= c && c <= 'F':
        return c - 'A' + 10
    }
    return 0
}


Algo que no me ha gustado, ya que no encuentro útil, pero que a los programadores de muy alto nivel les gustará, es que las funciones pueden devolver múltiples valores. Así pues, esto es correcto:
Código Go:
func nextInt(b []byte, i int) (int, int) {
    for ; i < len(b) && !isDigit(b[i]); i++ {
    }
    x := 0
    for ; i < len(b) && isDigit(b[i]); i++ {
        x = x*10 + int(b[i])-'0'
    }
    return x, i
}
for i := 0; i < len(a); {
        x, i = nextInt(a, i)
        fmt.Println(x)
    }



Y bueno, por hoy he acabado, mañana seguiré analizando más este lenguaje, aquí tenéis un ejemplo sacado de la página de Go. Un servidor Web: http://golang.org/doc/effective_go.html#web_server

Saludines


Responder | Citar | Moderar | Mensaje Privado
Training Channel
Sawyer


62 envíos
Desconectado

#1
RE: Análisis de Go [Sintaxis]22-02-2010 a las 18:27:33

Un poco de odio hacia google se nota aqui al parecer ...

"Las mejores cosas ocurren, cuando menos las esperamos"
Responder | Citar | Moderar | Mensaje Privado
Sorancio


307 envíos
Desconectado

#2
RE: Análisis de Go [Sintaxis]23-02-2010 a las 08:05:09

¿Odio a Google? Si utilizo Chrome, Docs, el buscador, Wave y estoy aprendiendo como va Buzz , y estoy a la vanguardia en información sobre la empresa porque me gusta mucho como trabaja.

Es más, he puesto todas las cosas buenas y malas que he visto, desde mi punto de vista, lo demás sobre la sintaxis a mi parece está bien y no es innovador, por lo que no requeriría nombrarlo.


Responder | Citar | Moderar | Mensaje Privado
lompa


150 envíos
Desconectado

#3
RE: Análisis de Go [Sintaxis]24-02-2010 a las 13:33:39

Me parece que este lenguaje sera uno de los que quiero aprender, pero irá para ratoooo Perimero C/C++


Responder | Citar | Moderar | Mensaje Privado
realloc


55 envíos
Desconectado

#4
RE: Análisis de Go [Sintaxis]22-03-2010 a las 14:43:56

Buen análisis introductorio Pese a que no he probado golang y que no lo haré a corto plazo, me interesa mucho el tema jejeje. En agosto tengo pensado probarlo porque ahora no tengo tiempo ni me quiero arriesgar a una posible enganchada XDD

Saludos

return 0;
Responder | Citar | Moderar | Mensaje Privado