Diferenças entre Go e Cython

Hoje um grande amigo meu me perguntou quais são as principais diferenças entre a mais nova linguagem Go e Cython , que é um conjunto de extensões C para Python. Eu não tenho muito conhecimento sobre Python, alguém pode me dizer por que o Go é melhor / pior que o Cython?

O Cython não é realmente uma linguagem no sentido convencional. É um pré-processador para construir extensões Python que usam a syntax semelhante a Python (na verdade, elas buscam compatibilidade total com Python) e produz código C (usando a API C do Python). Fazendo isso, eles podem include algumas otimizações de casos especiais, mas os benefícios reais surgem quando você adiciona informações de tipo estáticas específicas do Cython que são incorporadas no código C, ignorando o tempo de execução do Python para essas operações e resultando em alta velocidade.

Go é uma linguagem de programação compilada. A primeira coisa que pode ser feita no Go é produzir um executável que não inclua o tempo de execução do Python / inicie um interpretador Python – isso é impossível no Cython. (Pode não ser tecnicamente impossível – mas não há realmente nenhum ponto para usar o Cython se você não estiver trabalhando com o Python). Como o Cython apenas produz C, a maioria de suas perguntas no comentário não se aplicam – você pode usar qualquer depurador C (embora o fato de ser uma extensão do Python torne as coisas um pouco mais complicadas).

O gevent é uma biblioteca concorrente que usa o Cython em seu núcleo. Parece ser bem rápido: http://nichol.as/asynchronous-servers-in-python

Diferenças? Praticamente tudo!

  • concurrency e canais.
  • Interfaces
  • Typechecking estático.

E quanto ao suporte? Você está confiando em um único compilador, fornecido pelo Google. E se o Go for dobrado ou for comercial?

Com o Cython você pode sempre voltar ao Python (ou portar o código C) se o projeto do Cython for dobrado.

ATUALIZAÇÃO: devo dizer que agora estou chateado com o Cython. A falta de suporte de thread é um grande golpe. Cython é thread-safe, mas a um custo sério. O bloqueio global do interpretador é mantido durante todo o tempo em que uma function é executada. Desabilitando a execução simultânea sobre uma base de código inteira!

Os resources semelhantes ao C do Cython são mal documentados e confusos para os novatos. Eu admito.

O propósito do Cython é suportar o software de matemática Sage; O Go é para apoiar os ambiciosos planos do Google para hardware caro e de ponta.

Em resumo, eu não gosto mais de nenhum desses idiomas. Voltando ao C ++ (novamente). Meu favorito é o Cython .

GO apresenta goroutines e canais. Veja o idioma FAQ

Minha principal razão para experimentar é a suposta facilidade de introduzir a simultaneidade nos programas. Acho que essa será a “próxima grande novidade”, à medida que as velocidades do processador forem diminuindo, e cada vez mais vários núcleos estiverem disponíveis. Se você quiser fazer uso de processadores multicore, você precisa escrever seu programa para que ele possa executar coisas simultaneamente.

Anteriormente olhei para Erlang, mas apesar de estar acostumada com o Prolog, ainda acho um pouco estranho; é tão diferente da sua linguagem de programação ‘média’ (da família C ou Pascal). Mas seus resources de simultaneidade são fáceis de usar, assim que você pegar o jeito. Com muito pouco esforço, consegui escrever um analisador paralelo, que não usa uma pilha, mas gera um novo “thread / processo” toda vez que havia várias opções.

Até agora, parece bem, apesar de algumas pequenas inconsistências. E também é rápido, o que é um bônus.

Então, a menos que o Cython também facilite a concorrência, eu prefiro ir …