Comparando Python com outras linguagens

Python é freqüentemente comparado a outras linguagens interpretadas, como Java, JavaScript, Perl, Tcl ou Smalltalk. As comparações com C++, Common Lisp e Scheme também podem ser esclarecedoras.

Nesta seção, eu compararei brevemente a linguagem com cada uma dessas linguagens abaixo. Essas comparações se concentram apenas em questões de linguagem. Na prática, a escolha de uma linguagem de programação é muitas vezes ditada por outras restrições do mundo real, como custo, disponibilidade, treinamento e investimento prévio, ou até mesmo apego emocional. Como esses aspectos são altamente variáveis, parece uma perda de tempo considerá-los muito para esta comparação.

Java
Espera-se que os programas Python sejam mais lentos do que os programas Java, mas eles também demoram muito menos para se desenvolver. Os programas Python são geralmente entre 3-5 vezes mais baixos do que os programas Java equivalentes. Essa diferença pode ser atribuída aos tipos de dados de alto nível integrados do Python e à sua digitação dinâmica. Por exemplo, um programador Python não perde tempo declarando os tipos de argumentos ou variáveis, e a poderosa lista polimórfica de Python e tipos de dicionário, para os quais o suporte sintático rico é construído diretamente na linguagem, encontrar um uso em quase todos os programas Python. Devido à digitação em tempo de execução, o tempo de execução do Python deve funcionar mais do que o Java. Por exemplo, ao avaliar a expressão a+b, primeiro deve inspecionar os objetos a e b para descobrir seu tipo, o que não é conhecido no tempo de compilação. Em seguida, invoca a operação de adição apropriada, que pode ser um método sobrecarregado pelo usuário definido. Java, por outro lado, é possível executar um número inteiro eficiente ou adição de ponto flutuante, mas requer declarações de variáveis para a e b, e não permite a sobrecarga do operador + para instâncias de classes definidas pelo utilizador.

Por estas razões, o Python é muito mais adequado como linguagem de “cola”, enquanto o Java é melhor caracterizado como uma linguagem de implementação de baixo nível. Na verdade, os dois juntos fazem uma excelente combinação. Os componentes podem ser desenvolvidos em Java e combinados para formar aplicativos em Python; O Python também pode ser usado para protótipos de componentes até que o seu desenho possa ser “endurecido” em uma implementação Java. Para suportar este tipo de desenvolvimento, uma implementação do Python escrita em Java está em desenvolvimento, o que permite chamar o código Python de Java e vice-versa. Nesta implementação, o código-fonte Python é traduzido para bytecode Java (com a ajuda de uma biblioteca de tempo de execução para suportar a semântica dinâmica de Python).

Javascript
O subconjunto “baseado em objeto” do Python é aproximadamente equivalente ao JavaScript. Como o JavaScript (e ao contrário de Java), o Python suporta um estilo de programação que usa funções e variáveis simples sem se envolver em definições de classe. No entanto, para JavaScript, isso é tudo o que existe. O Python, por outro lado, suporta escrever programas muito maiores e a melhor reutilização de código através de um verdadeiro estilo de programação orientado a objetos, onde classes e herança desempenham um papel importante.

Perl
Python e Perl vêm de um plano de fundo semelhante (scripts Unix, que ambos superaram há muito tempo) e possuem muitas características semelhantes, mas têm uma filosofia diferente. Perl enfatiza o suporte para tarefas comuns orientadas a aplicativos, por exemplo por ter construído expressões regulares, digitalização de arquivos e recursos geradores de relatórios. Python enfatiza o suporte para metodologias de programação comuns, como desenho de estrutura de dados e programação orientada a objetos, e encoraja os programadores a escrever um código legível (e, portanto, sustentável), fornecendo uma notação elegante, mas não excessivamente encriptora. Como conseqüência, o Python se aproxima de Perl, mas raramente o bate no seu domínio de aplicação original; no entanto, Python tem uma aplicabilidade bem além do nicho de Perl.

Tcl
O Tcl é utilizável como um idioma de extensão do aplicativo, bem como uma linguagem de programação autônoma. No entanto, o Tcl, que tradicionalmente armazena todos os dados como cadeias de caracteres, é fraco nas estruturas de dados e executa o código comum muito mais lento do que o Python. Tcl também carece de recursos necessários para escrever grandes programas, como namespaces modulares. Assim, enquanto um aplicativo grande “típico” usando o Tcl geralmente contém extensões Tcl escritas em C ou C++ que são específicas desse aplicativo, um aplicativo equivalente em Python pode ser escrito em “Python puro”. Claro, o desenvolvimento puro do Python é muito mais rápido do que ter que escrever e depurar um componente C ou C++. Foi dito que a única qualidade de Tcl é o kit de ferramentas Tk. O Python adotou uma interface para o Tk como a sua biblioteca de componentes GUI padrão.
Tcl 8.0 aborda o assunto da velocidade, proporcionando um compilador bytecode com suporte tipo de dados limitado, e acrescenta namespaces. No entanto, ainda é uma linguagem de programação muito mais pesada.

Smalltalk
Talvez a maior diferença entre eles seja a sintaxe “mainstream” de Python, o que lhe dá uma vantagem no treinamento do programador. Como Smalltalk, o Python possui digitação e vinculação dinâmica e tudo em nele é um objeto. No entanto, o ele distingue os tipos de objetos internos das classes definidas pelo usuário e, atualmente, não permite a herança de tipos incorporados. A biblioteca padrão da Smalltalk de tipos de coleta de dados é mais refinada, enquanto a biblioteca do Python possui mais facilidades para lidar com as realidades da Internet e da WWW, como e-mail, HTML e FTP.
Python tem uma filosofia diferente em relação ao ambiente de desenvolvimento e distribuição de código. Onde a Smalltalk tradicionalmente tem uma “imagem do sistema” monolítica, que compreende tanto o ambiente como o programa do usuário, o Python armazena módulos padrão e módulos de usuários em arquivos individuais que podem ser facilmente reorganizados ou distribuídos fora do sistema. Uma conseqüência é que há mais de uma opção para anexar uma Interface gráfica de usuário (GUI) a um programa Python, uma vez que a GUI não está incorporada no sistema.

C++
Quase tudo o dito para o Java também se aplica ao C++, apenas mais: onde o código Python é normalmente 3-5 vezes menor do que o código Java equivalente, é geralmente 5-10 vezes menor do que o código C++ equivalente. Evidências anedóticas sugerem que um programador Python pode terminar em dois meses o que dois programadores C++ não podem completar em um ano. Python brilha como uma linguagem de cola, usada para combinar componentes escritos em C++.

Common Lisp e Scheme
Essas linguas são próximas dele em sua semântica dinâmica, mas tão diferentes em sua abordagem à sintaxe que uma comparação torna-se quase um argumento religioso: a falta de sintaxe de Lisp é uma vantagem ou uma desvantagem? Deve-se notar que o Python possui recursos introspectivos semelhantes aos de Lisp e os programas Python podem construir e executar fragmentos de programa em tempo real. Normalmente, as propriedades do mundo real são decisivas: Common Lisp é grande (em todos os sentidos), e o mundo do Scheme está fragmentado entre muitas versões incompatíveis, onde a Python possui uma implementação única, gratuita e compacta.