Há um debate, sempre atual, sobre os trade-offs da adoção de tipagem estática ou de tipagem dinâmica. Nesse debate, um quase consenso é que a evolução de sistemas grandes, escritos com tipagem dinâmica, é mais difícil. Essa ideia, inclusive, foi defendida recentemente pelo criador da linguagem Python, Guido van Rossum.
Aprendi uma lição dolorosa: para programas pequenos a tipagem dinâmica é ótima, porém para programas grandes você precisa ter uma abordagem mais disciplinada, e ajuda se a linguagem realmente lhe der essa disciplina, em vez de lhe dizer “Bem, você pode fazer o que quiser”
(Guido van Rossum)
[tweet]O próprio Guido van Rossum, liderou uma iniciativa para adicionar suporte a anotações de tipo à linguagem Python.[/tweet] Na abordagem proposta por ele, isso pode acontecer de forma flexível, gradual e não impositiva. Alegadamente, segundo Guido, os benefícios incluem redução do volume de bugs, além da facilitar a compreensão e manutenção do código – habilitando mais suporte de IDEs modernas, incrementando a produtividade.
O MyPy, checker criado pelo grupo de desenvolvedores do Dropbox do qual Guido fazia parte, é utilizado, hoje, em mais de quatro milhões de linhas de Python da empresa.
Além do MyPy, há outra solução bastante promissora e amplamente adotada: o Pyright. Trata-se de um checker desenvolvido pela Microsoft, que, segundo seus desenvolvedores, chega a ser até 5 vezes mais rápida que as soluções concorrentes. A solução foi majoritariamente escrita em TypeScript.
As abordagens, tanto do MyPy quanto do Pyright, estão alinhadas com as conclusões de um famoso artigo, escrito por Erik Meijer e Peter Drayton e publicado pela Microsoft, que pondera as características de ambas as estratégias de tipagem.
Static typing where possible, dynamic typing when needed! (Meijer e Drayton)
Alinhando o entendimento do paper, bem como com a visão do criador da linguagem Python, infere-se que é recomendável explorar todo poder da tipagem dinâmica na elaboração de códigos pequenos e protótipos. Entretanto, na medida em que crescem, bases de código ficam mais sólidas e baratas de manter com a adoção gradual de conceitos e ferramentas para tipagem estática.