Atravesse os olhos de um programador da Rust: primeiras impressões

Antecipando o início do curso, "Golang Developer" preparou uma tradução de material interessante. Qual foi a sua primeira impressão do Go?




Nas últimas semanas, pude usar o Go no meu trabalho. Eu usei o Go pela primeira vez em um projeto mais ou menos grande e sério. Antes disso, eu li muito sobre o Go e pratiquei em exemplos e programas pequenos enquanto estudava os recursos do Rust , mas a programação real é uma questão completamente diferente.

Eu pensei que você poderia estar interessado em ouvir sobre minhas impressões. Tentarei não ficar preso nas comparações com o Rust, mas como esse é o meu idioma principal, eles não podem ser evitados. Devo avisá-lo com antecedência de um forte viés em relação ao Rust, mas farei o possível para ser objetivo.

Impressões gerais


Ir a programação é bom. As bibliotecas tinham tudo o que eu precisava, sem muitas falhas. Aprender também foi uma experiência agradável - é uma linguagem bem pensada e prática. Como exemplo, se você aprender a sintaxe, verá que muitos idiomas de outros idiomas são migrados para o Go. Depois de dominar a parte Ir, você pode prever facilmente seus recursos. Com alguma experiência em outros idiomas, eu pude ler e entender o código Go sem nenhuma ajuda especial do Google.

Percebi muito menos frustração e muito mais produtividade do que usar C / C ++, Java, Python, etc. No entanto, o Go ainda é sentido como parte dessa geração de linguagens. Ele aprendeu com eles e acho que essa é provavelmente a melhor linguagem dessa geração; mas ele é definitivamente parte dessa geração. É mais provável uma melhoria incremental do que algo fundamentalmente novo (deve-se notar que isso não é um julgamento de valor - o incremento geralmente é benéfico no mundo do desenvolvimento de software). Um bom exemplo disso é nulo: linguagens como Rust e Swift se livram do paradigma nulo, eliminando assim toda uma classe de erros. Go torna menos perigoso: sem valores nulos; delimitação de zero e 0. Mas a idéia básica ainda está presente, bem como o erro de tempo de execução generalizado de desreferenciar um ponteiro nulo.

Facilidade de desenvolvimento


Ir é incrivelmente fácil de aprender. Sei que esse é um slogan publicitário propagado, mas fiquei muito surpreso com a rapidez com que consegui atingir o nível de produtividade. Graças à documentação, às ferramentas e ao próprio idioma, em apenas dois dias, comecei a escrever um código informativo e de fácil aceitação.

Vários fatores a favor da aprendizagem:

  • Vá pequeno. Muitos idiomas tentam ser pequenos, enquanto o Go é realmente um. (Isso é bom, principalmente, e estou impressionado com a disciplina necessária para isso).
  • A biblioteca padrão é boa (e também pequena). Encontrar e usar bibliotecas em um ecossistema é muito fácil.
  • O idioma tem muito pouco que não está em outros idiomas. O Go herda muitos bits de outras linguagens estabelecidas, os aprimora e os conecta perfeitamente. Ele cuidadosamente evita novidades.


Rotina de código


O código Go fica repetitivo muito rapidamente. Falta qualquer mecanismo, como macros ou genéricos, para reduzir a repetição (as interfaces são boas para abstrações, mas não tão boas para reduzir a duplicação de código). Costumo acumular um grande número de funções idênticas, exceto tipos.

O tratamento de erros também contribui para a repetição. Muitos recursos têm mais modelos if err != nil { return err }que o código original.

Às vezes, o uso de genéricos ou macros para reduzir a rotina do código é criticado pela troca com sua legibilidade. Mas no caso do Go, eu não concordaria com eles. Copiar e colar código é rápido e fácil, mas a leitura do código Go pode ser frustrante porque você deve ignorá-lo ou procurar diferenças sutis.

O que eu gostei


  • . ; Rust. , ( , C/C ++ , - ).
  • . Go — . , , , .
  • . , , .
  • if ...; ... { }sintaxe. A capacidade de limitar o escopo das variáveis ​​ao corpo de instruções if é boa. É semelhante a se deixar entrar Swift e Rust, mas de propósito mais geral (Go não tem um padrão correspondente como Swift e Rust, portanto, não pode ser usado se deixar).
  • Os comentários de teste e encaixe são fáceis de usar.
  • A ferramenta Ir é boa - tudo de uma vez em um só lugar, sem a necessidade de conectar muitas ferramentas pela linha de comando
  • Em estoque coletor de lixo (GC)! Não há necessidade de se preocupar com o gerenciamento de memória realmente facilita a programação
  • Varargs.


Do que eu não gostei


O pedido não importa.

  • nil fatias - nil, nil fatias e fatias vazias são coisas diferentes. Tenho mais que certeza de que você só precisa de dois deles, não dos três.
  • Sem classes primárias. O uso de constantes é incomum.
  • . , ( , , , , ).
  • switch
  • for ... range /. ( ), . -, , .
  • :
    • .
    • ( , , ); , , .
    • , return.
    • (type struct).
    • public private. , .
  • . , , , , , , , .
  • Você não pode gravar funções com um receptor em outro pacote; portanto, mesmo que as interfaces sejam digitadas implicitamente, elas não podem ser implementadas para tipos superiores, o que as torna muito menos úteis.

Eu já mencionei a falta de genéricos e macros acima.

Coerência


Como desenvolvedor e programador de idiomas, fiquei provavelmente surpreso com o fato de o Go frequentemente encontrar uma incompatibilidade entre o que está embutido e o que está disponível para os usuários. A tarefa de muitos idiomas é dissipar o máximo de magia possível e disponibilizar funções internas aos usuários. A sobrecarga do operador é um exemplo simples, mas controverso. Go tem muita mágica! E você se depara facilmente com uma parede de incapacidade de fazer o que as coisas embutidas podem fazer.

Alguns pontos que se destacam especialmente:

  • , , .
  • for ... range , , .
  • , len append, , . . , Go !
  • . ==, , map, . .



Go é uma linguagem simples, compacta e agradável. Tem alguns cantos afiados, mas a maioria é bem projetada. Ele é incrivelmente rápido em aprender e evita qualquer recurso que não seja conhecido em outros idiomas.

Comparado ao Rust, o Go é um idioma completamente diferente. Embora ambos possam ser descritos grosso modo como linguagens de sistema ou "substitutos" para C, eles têm objetivos e aplicações diferentes, estilos de design de linguagem e prioridades. A coleta de lixo é realmente uma grande diferença. Ter o GC in Go torna o idioma muito mais simples, menor e mais fácil de entender. A falta de GC no Rust torna muito rápido (especialmente se você precisar de um atraso claro, e não apenas de alta largura de banda) e fornece recursos e padrões de programação impossíveis no Go (pelo menos sem sacrificar o desempenho).

Go é uma linguagem compilada com um tempo de execução bem implementado. Ele é rápido. O Rust também é compilado, mas possui um tempo de execução muito menor. Ele é muito rápido. Supondo que não haja outras restrições, acho que escolher entre usar o Go e o Rust é um compromisso entre uma curva de aprendizado muito mais curta e programas mais simples (o que significa desenvolvimento mais rápido) e, por parte do Rust, um sistema mais rápido e expressivo tipos (que tornam seus programas mais seguros e aceleram a depuração e a solução de problemas).



A tradução chegou ao fim e convidamos você a uma aula prática gratuita online, onde aprenderá como criar um serviço http totalmente testado do zero em 60 minutos, sem dependências de terceiros.



All Articles