quinta-feira, 23 de abril de 2009

Introdução e Visão Geral

Publicação original: http://python-history.blogspot.com/2009/01/introduction-and-overview.html
Autor original: Guido van Rossum

Introdução

Python é atualmente uma das mais populares linguagens dinâmicas de programação, junto a Perl, Tcl, PHP e a novata Ruby. Embora frequentemente vista como linguagem de "scripts", é, na verdade, uma linguagem de programação de propósito geral, na mesma linha de Lisp ou Smalltalk (assim como outras linguagens, por assim dizer).
Hoje, Python é usada para tudo, desde scripts simples de uso único a grandes e escaláveis servidores web que proveem serviço ininterrupto 24x7. É usada em GUI (interfaces gráficas de usuário) e programação para banco de dados, programação web tanto no lado cliente quanto servidor e teste de aplicações. É usada por cientistas escrevendo programas para os supercomputadores mais velozes e por crianças aprendendo a programar.
Neste blog, focarei na história de Python. Em particular, como Python foi desenvolvida, as grandes influências em seu design, erros cometidos, lições aprendidas e próximos passos para a linguagem.

Agradecimento: Estou em dívida com Dave Beazley por muitas das melhores idéias neste blog. (Para ler mais sobre as origens deste blog, veja meu outro blog.)


Uma visão geral do Python


Quando alguém é exposto pela primeira vez ao Python, geralmente a pessoa se sente atordoada pelo modo como código escrito em Python se parece, pelo menos superficialmente, com código escrito em outras linguagens convencionais como C ou Pascal. Isso não é acidente, a sintaxe do Python é fortemente influenciada por C. Por exemplo, muitas das palavras chave reservadas (if, else, while, for, etc.) são as mesmas em C, identificadores em Python seguem a mesma regra de nomenclatura que C e muitos dos operadores possuem o mesmo significado dos operadores em C.
É claro, Python obviamente não é C e uma das maiores áreas onde as linguagens diferem é no uso de indentação em vez de chaves para agrupamento de comandos. Por exemplo, em vez de escrever comandos em C como

if (a < b) {
    max = b;
} else {
    max = a;
}


Python simplesmente dispensa as chaves (além de ponto-e-vírgula ao fim dos comandos) e usa a seguinte estrutura

if a < b:
    max = b
else:
    max = a


Outra grande área onde Python difere de linguagens semelhantes a C reside o uso de tipagem dinâmica. Em C, variáveis devem ser declaradas explicitamente e atribuídas a certo tipo de dados, como int ou double. Essa informação é usada para realizar verificações estáticas em tempo de compilação bem como para alocação de memória usada para armazenar os valores das variáveis. Em Python, variáves simplesmente são nomes que se referem a objetos. Não há necessidade de declarar variáveis antes que elas sejam atribuídas e elas podem até mudar de tipo no meio do programa. Assim como outras linguagens dinâmicas, toda verificação de tipo é realizada em tempo de execução por um interpretador em vez de ser realizada durante uma fase separada de compilação.

Os tipos internos primitivos de Python incluem Booleanos, números (inteiros do tamanho da palavra da máquina, inteiros de precisão arbitrária, e números de ponto flutuante reais e complexos) e cadeias de caracteres (8 bits e Unicode). Todos são tipos imutáveis, o que significa que os valores são representados por objetos que não podem ser modificados após a criação. Tipos internos compostos incluem tuplas (vetores imutáveis), listas (vetores redimensionáveis) e dicionários (tabelas de espalhamento, ou hash).

Para fins de organização, Python suporta pacotes (grupos de módulos e/ou outros pacotes), módulos (códigos relacionados agrupados em um único arquivo), classes, métodos e funções. Para controle de fluxo, Python provê if/else, while e um comando for de alto nível que percorre objetos “iteráveis”. Para tratamento de erros, Python usa exceções (não-continuáveis). O comando raise lança uma exceção e os comandos try/except/finally especificam os tratamentos de exceção. Operações internas lançam exceções quando condições de erro são atingidas.

Em Python, todos os objetos nomeáveis são considerados de "primeira classe." Isso significa que funções, classes, métodos, módulos e todos outros objetos nomeados podem ser facilmente referenciados, inspecionados e alocados em várias estruturas de dados (por exemplo, listas ou dicionários) em tempo de execução. Por falar em objetos, Python também fornece suporte à programação orientada a objetos, incluindo classes definidas pelo usuário, herança e ligação de métodos em tempo de execução.

Python possui uma ampla biblioteca, o que é um dos principais motivos para sua popularidade. A biblioteca padrão possui mais de 100 módulos e está em evolução constante. Alguns desses módulos incluem expressões regulares, funções matemáticas, threads, interface com sistema operacional, programação em rede, protocolos para internet (HTTP, FTP, SMTP, etc), manipulação de e-mail, processamento de XML, processamento de HTML e um kit para interface gráfica de usuário (Tcl/Tk).

Além disso, há um amplo suprimento de módulos e pacotes de terceiros, a maioria dos quais também de código aberto. Dentre esses, pode-se encontrar frameworks para web (há muitos para serem listados!), mais kits de interface, bibliotecas numéricas eficientes (incluindo empacotadores para vários pacotes populares em Fortran), interface com bancos de dados relacionais (Oracle, MySQL e outros), SWIG (uma ferramente para disponibilizar bibliotecas arbitrárias em C++ como módulos Python) e muito mais.

Um tópico atraente de Python (e outras linguagens dinâmicas por assim dizer) é o fato de que tarefas aparentemente complicadas podem ser frequentemente expressas com pouco código. Como exemplo, este é um script simples em Python que baixa uma página da web, a examina em busca de URLs e imprime as 10 primeiras referências.

# Examina a página web procurando por referências a URLs

import re
import urllib

regex = re.compile(r'href="([^"]+)"')

def matcher(url, max=10):
    "Imprime as primeiras referências a URLs em uma URL fornecida."
    data = urllib.urlopen(url).read()
    hits = regex.findall(data)
    for hit in hits[:max]:
        print urllib.basejoin(url, hit)

matcher("http://python.org")


Esse programa pode ser modificado facilmente para se criar um indexador web e, de fato, Scott Hassan me disse que escrevera o primeiro indexador do Google em Python. Hoje, Google emprega milhões de linhas de código em Python para gerenciar vários aspectos de suas operações, desde automação a gerenciamento de propagandas. (Aviso legal: atualmente sou um funcionário do Google.)

Debaixo dos panos, Python tipicamente é implementado usando uma combinação de compilador para bytecode e um interpretador. A compilação é executada implicitamente assim que módulos são carregados e várias primitivas requerem que o compilador esteja disponível em tempo de execução.
Embora a implementação de-facto seja escrita em C e esteja disponível para toda plataforma de hardware/software imaginável, várias outras implementações tornaram-se populares. Jython é uma versão que roda sobre uma máquina virtual Java e apresenta forte integração com Java. IronPython é uma versão para a plataforma Microsoft.NET e apresenta integração similar com linguagens rodando sobre .NET. PyPy é um compilador/interpretador otimizado escrito em Python (ainda um projeto de pesquisa sendo desenvolvido sob financiamento da União Européia). Também há o Stackless Python, uma variação da implementação em C que reduz a dependência na pilha para chamada de funções em C, para permitir co-rotinas, continuações e microthreads.

[Editado: adicionada uma frase que não foi traduzida. (2013-03-20)]

5 comentários:

  1. Olá Douglas, parabéns pela iniciativa. Apenas uma ressalva: você esqueceu de cortar o último parágrafo do original em inglês.

    Abraços

    ResponderExcluir
  2. Muito interessante a iniciativa, parabéns. Já estou acompanhando pelo feed.

    ResponderExcluir
  3. @photon: Obrigado por avisar. Demorei um tempo p/ corrigir, mas agora estou de volta ao blog.

    ResponderExcluir
  4. Wynn Casino, Las Vegas - MapYRO
    Find all 경산 출장안마 information and 동해 출장안마 best 경상북도 출장안마 deals of Wynn Casino, Las Vegas, 세종특별자치 출장안마 NV, 89109 on MapYRO. Realtime driving directions 군포 출장샵 to Wynn Casino, Las Vegas,

    ResponderExcluir