Por que o Python é escrito em C e não em C ++? [fechadas]

63

No tutorial do Python , pode-se ler que a implementação original do Python está em C;

On the other hand, the Python implementation, written in C, (...)

Estou muito curioso para saber por que o Python foi escrito em C e não em C ++? Eu gostaria de saber o raciocínio por trás dessa decisão e estou procurando referências a dados históricos.

    
por Piotr Dobrogost 23.11.2010 / 22:41
fonte

3 respostas

106

De tudo o que vi, é uma combinação de razões práticas e históricas. A (principalmente) razão histórica é que o CPython 1.0 foi lançado em 1989. Naquela época, o C foi recentemente padronizado. C ++ era quase desconhecido e decididamente não portátil, porque quase ninguém tinha um compilador C ++.

Embora o C ++ seja muito mais difundido e facilmente disponível hoje em dia, ainda seria necessário um bom trabalho para reescrever o CPython no subconjunto de C que é compatível com o C ++. Por si só, esse trabalho proporcionaria pouco ou nenhum benefício real.

É um pouco como post de Joel no blog sobre começar de novo e fazer uma reescrita completa como sendo o pior erro de um software empresa pode fazer. Eu contaria isso apontando para a conversão da Microsoft do núcleo do Windows 3.0 para o núcleo do Windows NT e a conversão da Apple do MacOS 9 para o Mac OS / X. Nenhum dos dois matou a empresa - mas ambos eram projetos grandes, caros e de longo prazo. Ambos também apontam para algo que é crucial para o sucesso: manter ambas bases de código por tempo suficiente para que (a maioria) os usuários possam mudar para a nova base de código, com base nos benefícios (pelo menos percebidos). / p>

Para uma equipe de desenvolvimento do tamanho do Python, no entanto, esse tipo de mudança é muito mais difícil. Até mesmo a mudança do Python 2 para o 3 deu muito trabalho e exigiu uma sobreposição similar. Pelo menos nesse caso, entretanto, há benefícios diretos para as mudanças, que reescrever em C ++ (por si só) não proveria (pelo menos imediatamente).

O discurso de Linus Torvalds contra o C ++ foi levantado, então vou mencionar isso também. Nada do que vi de Guido indica que ele tem esse tipo de sentimento strong e negativo em relação ao C ++. Sobre o pior que eu o vi dizer é que o ensino de C ++ é muitas vezes um desastre - mas ele imediatamente passou a dizer que isso é em grande parte porque os professores não sabiam / não sabem C ++.

Eu também acho que, embora seja possível converter muito código C para C ++ com facilidade relative , obter uma vantagem real do C ++ requer não apenas muito mais reescrita do que isso, mas também requer uma reeducação substancial da maioria dos desenvolvedores envolvidos. O C ++ mais bem escrito é substancialmente diferente do C bem escrito para fazer as mesmas coisas. Não é apenas uma questão de mudar malloc para new e printf para cout , em qualquer extensão da imaginação.

    
por 23.11.2010 / 23:43
fonte
28

Acho que a razão pela qual foi originalmente escrito em ANSI C89 é simplesmente porque, naquela época, o C ++ não era uma opção viável com incompatibilidades entre diferentes compiladores e tal. Quero dizer, demorou até que, o que era, 2005, para chegar a uma especificação ABI que permitisse código compilado com um compilador para chamar código compilado com um compilador diferente?

A questão mais interessante é por que é ainda escrito em C89.

E há uma resposta surpreendente: porque as pessoas realmente usam o Python em plataformas para as quais não existe nenhum compilador C ++ e C99! Quando as otimizações do interpretador de códigos encadeados inspiradas em Forth foram mescladas, houve uma discussão enorme sobre isso, porque o código (necessariamente) usou o goto calculado, que não faz parte do C89. Aparentemente, teme-se que esse recurso possa não estar disponível em algumas plataformas em que o Python está sendo usado atualmente.

O mesmo aconteceu com o Unladen Swallow, que usa o LLVM, escrito em C ++. Ficou muito claro que um requisito para mesclar o Swallow Unladen no CPython seria que você pode compilá-lo sem o compilador JIT, já que existem pessoas que executam o Python, para as quais não existe um compilador C ++.

Naturalmente, hoje em dia, o CPython não é mais a única implementação do Python. Há o PyPy, que é escrito em RPython (um subconjunto de Python datilografado estaticamente), Jython em Java, IronPython em C #, Pynie em NQP e PIR e assim por diante.

    
por 24.11.2010 / 02:22
fonte
9

Uma pergunta melhor pode ser: "Por que o Python não é escrito em Python?"

Mais precisamente, uma vez que primitivos suficientes para classes e objetos Python são escritos em C, eles podem ser usados para escrever o resto do interpretador, assim você não ganharia nada usando C ++.

    
por 23.11.2010 / 22:55
fonte