História do Python - History of Python

Logotipo antigo do Python, década de 1990 a 2006
Novo logotipo Python, 2006 - presente

A linguagem de programação Python foi concebida no final dos anos 1980 e sua implementação foi iniciada em dezembro de 1989 por Guido van Rossum no CWI na Holanda como um sucessor do ABC capaz de lidar com exceções e fazer interface com o sistema operacional Amoeba . Van Rossum é o autor principal do Python, e seu papel central contínuo na decisão da direção do Python se reflete no título dado a ele pela comunidade Python, Benevolent Dictator for Life (BDFL) . (No entanto, van Rossum deixou o cargo de líder em 12 de julho de 2018.). Python foi batizado com o nome do programa de TV da BBC Monty Python's Flying Circus .

O Python 2.0 foi lançado em 16 de outubro de 2000, com muitos novos recursos importantes, incluindo um coletor de lixo com detecção de ciclo (além da contagem de referência ) para gerenciamento de memória e suporte para Unicode . No entanto, a mudança mais importante foi no próprio processo de desenvolvimento, com uma mudança para um processo mais transparente e apoiado pela comunidade.

Python 3.0, uma versão principal incompatível com versões anteriores, foi lançado em 3 de dezembro de 2008 após um longo período de testes. Muitos de seus principais recursos também foram adaptados para o Python 2.6 e 2.7 compatível com versões anteriores, embora agora sem suporte.

História antiga

Em fevereiro de 1991, Van Rossum publicou o código (rotulado como versão 0.9.0) para alt.sources. Já está presente nesta fase em desenvolvimento foram classes com a herança , o processamento de excepções, as funções e os principais tipos de dados de list, dict, stre assim por diante. Também nesta versão inicial estava um sistema de módulo emprestado do Modula-3 ; Van Rossum descreve o módulo como "uma das principais unidades de programação do Python". O modelo de exceção do Python também se assemelha ao do Modula-3, com a adição de uma elsecláusula. Em 1994 , comp.lang.python , o fórum de discussão principal do Python, foi formado, marcando um marco no crescimento da base de usuários do Python.

Versão 1

Python chegou a versão 1.0 em janeiro de 1994. As principais novas funcionalidades incluídas nesta versão foram as ferramentas de programação funcional lambda, map, filtere reduce. Van Rossum afirmou que "Python adquiriu lambda, reduz (), filtro () e mapa (), cortesia de um hacker Lisp que os perdeu e enviou patches de trabalho ".

A última versão lançada enquanto Van Rossum estava no CWI foi o Python 1.2. Em 1995, Van Rossum continuou seu trabalho em Python na Corporation for National Research Initiatives (CNRI) em Reston , Virgínia , de onde lançou várias versões.

Na versão 1.4, Python adquiriu vários novos recursos. Notáveis ​​entre eles são os argumentos de palavra - chave inspirados em Modula-3 (que também são semelhantes aos argumentos de palavra-chave do Common Lisp ) e suporte integrado para números complexos . Também está incluída uma forma básica de ocultação de dados por mutilação de nome , embora isso seja facilmente contornado.

Durante a estada de Van Rossum no CNRI, ele lançou a iniciativa Computer Programming for Everybody (CP4E), com a intenção de tornar a programação mais acessível a mais pessoas, com uma "alfabetização" básica em linguagens de programação, semelhante à alfabetização básica em inglês e habilidades matemáticas exigidas por a maioria dos empregadores. Python desempenhou um papel central nisso: por causa de seu foco na sintaxe limpa, já era adequado e os objetivos do CP4E eram semelhantes aos de seu predecessor, o ABC. O projeto foi financiado pela DARPA . A partir de 2007, o projeto CP4E está inativo e, embora o Python tente ser facilmente aprendido e não muito misterioso em sua sintaxe e semântica, o alcance a não programadores não é uma preocupação ativa.

Esta aberto

Em 2000, a equipe de desenvolvimento principal do Python mudou-se para BeOpen.com para formar a equipe BeOpen PythonLabs, sob a direção do ex- aluno do Google Domenic Merenda. O CNRI solicitou o lançamento de uma versão 1.6, resumindo o desenvolvimento do Python até o ponto em que a equipe de desenvolvimento deixou o CNRI. Consequentemente, os cronogramas de lançamento para 1.6 e 2.0 tiveram uma quantidade significativa de sobreposição. Python 2.0 foi o único lançamento da BeOpen.com. Depois que o Python 2.0 foi lançado pela BeOpen.com, Guido van Rossum e os outros desenvolvedores do PythonLabs se juntaram à Digital Creations .

A versão Python 1.6 incluiu uma nova licença CNRI que era substancialmente mais longa do que a licença CWI que tinha sido usada para versões anteriores. A nova licença incluía uma cláusula declarando que a licença era regida pelas leis do estado da Virgínia . A Free Software Foundation argumentou que a cláusula de escolha da lei era incompatível com a GNU General Public License . BeOpen, CNRI e a FSF negociaram uma mudança na licença de software livre do Python que o tornaria compatível com a GPL. O Python 1.6.1 é essencialmente o mesmo que o Python 1.6, com algumas pequenas correções de bugs e com a nova licença compatível com GPL.

Versão 2

O Python 2.0, lançado em outubro de 2000, introduziu as compreensões de lista , um recurso emprestado das linguagens de programação funcionais SETL e Haskell . A sintaxe do Python para esta construção é muito semelhante à de Haskell, exceto pela preferência de Haskell por caracteres de pontuação e pela preferência de Python por palavras-chave alfabéticas. Python 2.0 também introduziu um coletor de lixo capaz de coletar ciclos de referência.

O Python 2.1 era próximo ao Python 1.6.1, assim como o Python 2.0. Sua licença foi renomeada como Licença Python Software Foundation . Todo o código, documentação e especificações adicionadas, a partir do momento do lançamento alfa do Python 2.1, são propriedade da Python Software Foundation (PSF), uma organização sem fins lucrativos formada em 2001, modelada a partir da Apache Software Foundation . O lançamento incluiu uma mudança na especificação da linguagem para suportar escopos aninhados, como outras linguagens com escopo estático . (O recurso estava desativado por padrão e não era obrigatório até o Python 2.2.)

Python 2.2 foi lançado em dezembro de 2001; uma grande inovação foi a unificação dos tipos de Python (tipos escritos em C ) e classes (tipos escritos em Python) em uma hierarquia. Essa unificação tornou o modelo de objeto do Python pura e consistentemente orientado a objetos. Também foram adicionados geradores inspirados no Icon .

Python 2.5 foi lançado em setembro de 2006 e introduziu a withinstrução, que inclui um bloco de código dentro de um gerenciador de contexto (por exemplo, obter um bloqueio antes de o bloco de código ser executado e liberar o bloqueio depois, ou abrir um arquivo e fechá-lo) , permitindo um comportamento semelhante ao RAII ( Resource Acquisition Is Initialization ) e substituindo um idioma try / finally comum.

O Python 2.6 foi lançado para coincidir com o Python 3.0 e incluiu alguns recursos desse lançamento, bem como um modo de "avisos" que destacou o uso de recursos que foram removidos no Python 3.0. Da mesma forma, o Python 2.7 coincidiu e incluiu recursos do Python 3.1, que foi lançado em 26 de junho de 2009. As versões paralelas 2.xe 3.x cessaram, e o Python 2.7 foi a última versão da série 2.x. Em novembro de 2014, foi anunciado que o Python 2.7 teria suporte até 2020, mas os usuários foram incentivados a migrar para o Python 3 o mais rápido possível. O suporte ao Python 2.7 terminou em 1º de janeiro de 2020, junto com o congelamento do código do branch de desenvolvimento 2.7. Uma versão final, 2.7.18, ocorreu em 20 de abril de 2020 e incluiu correções para bugs críticos e bloqueadores de versão. Isso marcou o fim da vida útil do Python 2.

Versão 3

Python 3.0 (também chamado de "Python 3000" ou "Py3K") foi lançado em 3 de dezembro de 2008. Ele foi projetado para retificar falhas de design fundamentais na linguagem - as alterações necessárias não puderam ser implementadas, mantendo a compatibilidade total com versões anteriores com o 2. série x, que exigia um novo número de versão principal. O princípio orientador do Python 3 era: "reduza a duplicação de recursos removendo velhas formas de fazer as coisas".

Python 3.0 foi desenvolvido com a mesma filosofia das versões anteriores. No entanto, como o Python acumulou maneiras novas e redundantes de programar a mesma tarefa, o Python 3.0 enfatizou a remoção de construções e módulos duplicados, de acordo com "Deve haver uma - e de preferência apenas uma - maneira óbvia de fazer isso".

No entanto, Python 3.0 permaneceu uma linguagem multiparadigma . Os codificadores ainda podiam seguir paradigmas de programação orientada a objetos , estruturada e funcional , entre outros, mas dentro dessas opções amplas, os detalhes deveriam ser mais óbvios no Python 3.0 do que no Python 2.x.

Compatibilidade

O Python 3.0 quebrou a compatibilidade com versões anteriores e grande parte do código do Python 2 não é executado sem modificações no Python 3. A tipagem dinâmica do Python combinada com os planos para alterar a semântica de certos métodos de dicionários, por exemplo, fez uma tradução mecânica perfeita de Python 2.x para Python 3.0 muito difícil. Uma ferramenta chamada "2to3" faz as partes da tradução que podem ser feitas automaticamente. Com isso, o 2to3 pareceu ser bastante bem-sucedido, embora uma revisão inicial tenha observado que havia aspectos da tradução que essa ferramenta nunca seria capaz de lidar. Antes do lançamento do Python 3, os projetos que exigiam compatibilidade com as séries 2.xe 3.x eram recomendados para ter uma fonte (para a série 2.x) e produzir versões para a plataforma Python 3.x usando 2to3. As edições no código Python 3.x foram desencorajadas enquanto o código precisava ser executado no Python 2.x. Isso não é mais recomendado; a partir de 2012, a abordagem preferida era criar uma única base de código que pudesse ser executada em Python 2 e 3 usando módulos de compatibilidade.

Recursos

Algumas das principais mudanças incluídas no Python 3.0 foram:

  • Mudar printpara que seja uma função embutida , não uma instrução. Isso tornou mais fácil alterar um módulo para usar uma função de impressão diferente, além de tornar a sintaxe mais regular. No Python 2.6 e 2.7 print()está disponível como integrado, mas é mascarado pela sintaxe da instrução de impressão, que pode ser desativada digitando from __future__ import print_functionno topo do arquivo
  • Remoção da inputfunção Python 2 e renomeação da raw_inputfunção para input. A inputfunção do Python 3 se comporta como a raw_inputfunção do Python 2 , em que a entrada é sempre retornada como uma string em vez de ser avaliada como uma expressão
  • Movendo-se reduce(mas não mapou filter) para fora do namespace integrado e para dentro functools(a lógica é que o código que usa reduceé menos legível do que o código que usa um loop for e uma variável de acumulador)
  • Adicionando suporte para anotações de função opcionais que podem ser usadas para declarações de tipo informal ou outros fins
  • Unificando os tipos str/ unicode, representando o texto e introduzindo um bytestipo imutável separado ; e um bytearraytipo mutável geralmente correspondente , sendo que ambos representam matrizes de bytes
  • Remover recursos de compatibilidade com versões anteriores, incluindo classes de estilo antigo, exceções de string e importações relativas implícitas
  • Uma mudança na funcionalidade da divisão inteira : no Python 2, 5 / 2é 2; em Python 3, 5 / 2é 2.5. (Tanto no Python 2 (2.2 em diante) quanto no Python 3, existe um operador separado para fornecer o comportamento antigo: 5 // 2é 2)

Versões subsequentes da série Python 3.x incluíram novos recursos adicionais substanciais; todo o desenvolvimento contínuo da linguagem é feito na série 3.x.

Tabela de versões

Versões antes das versões numeradas:

Versão Versão micro mais recente Data de lançamento Fim do suporte total Fim das correções de segurança
Versão antiga, não mais mantida: 0.9 0.9.9 20/02/1991 29/07/1993
Versão antiga, não mais mantida: 1.0 1.0.4 26/01/1994 15/02/1994
Versão antiga, não mais mantida: 1,1 1.1.1 11/10/1994 10/11/1994
Versão antiga, não mais mantida: 1,2 13/04/1995 Sem suporte
Versão antiga, não mais mantida: 1,3 13/10/1995 Sem suporte
Versão antiga, não mais mantida: 1,4 25/10/1996 Sem suporte
Versão antiga, não mais mantida: 1,5 1.5.2 03/01/1998 13/04/1999
Versão antiga, não mais mantida: 1,6 1.6.1 05/09/2000 2009-09
Versão antiga, não mais mantida: 2.0 2.0.1 16/10/2000 22/06/2001
Versão antiga, não mais mantida: 2,1 2.1.3 15/04/2001 09/04/2002
Versão antiga, não mais mantida: 2,2 2.2.3 21/12/2001 30/05/2003
Versão antiga, não mais mantida: 2,3 2.3.7 29/06/2003 11/03/2008
Versão antiga, não mais mantida: 2,4 2.4.6 30/11/2004 19/12/2008
Versão antiga, não mais mantida: 2,5 2.5.6 19/09/2006 26/05/2011
Versão antiga, não mais mantida: 2,6 2.6.9 01/10/2008 24-08-2010 29/10/2013
Versão antiga, não mais mantida: 2,7 2.7.18 03/07/2010 01-01-2020
Versão antiga, não mais mantida: 3,0 3.0.1 03-12-2008 27/06/2009
Versão antiga, não mais mantida: 3,1 3.1.5 27/06/2009 12/06/2011 06/04/2012
Versão antiga, não mais mantida: 3,2 3.2.6 20/02/2011 13/05/2013 20/02/2016
Versão antiga, não mais mantida: 3,3 3.3.7 29/09/2012 08/03/2014 29/09/2017
Versão antiga, não mais mantida: 3,4 3.4.10 16/03/2014 09/08/2017 18/03/2019
Versão antiga, não mais mantida: 3,5 3.5.10 13/09/2015 08/08/2017 30/09/2020
Versão mais antiga, mas ainda mantida: 3,6 3.6.15 23-12-2016 24/12/2018 2021-12
Versão mais antiga, mas ainda mantida: 3,7 3.7.12 27/06/2018 27/06/2020 2023-06
Versão mais antiga, mas ainda mantida: 3,8 3.8.12 14/10/2019 2021-05-03 2024-10
Versão mais antiga, mas ainda mantida: 3,9 3.9.7 05/10/2020 2022-05 2025-10
Versão estável atual: 3,10 3.10.0 2021-10-04 2023-05 2026-10
Versão futura: 3,11 3.11.0a0 2022-10-03 2024-05 2027-10
Lenda:
Lenda:
Versão antiga
Versão mais antiga, ainda mantida
Última versão
Versão de visualização mais recente
Lançamento futuro
Itálico indica a micro versão mais recente das versões atualmente suportadas em 2021-07-15.

Notas de mesa:

Apoio, suporte

Veja também

Referências

links externos