No tutorial do Python, pode-se ler que a implementação original do Python está em C;
Por outro lado, a implementação do Python, escrita em C, (...)
Estou muito curioso 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 a resposta deve ser apoiada por referências históricas (e não baseadas em opiniões).
python
c++
history
implementations
Piotr Dobrogost
fonte
fonte
Respostas:
De tudo o que vi, é uma combinação de razões práticas e históricas. A razão histórica (principalmente) é que o CPython 1.0 foi lançado em 1989. Naquela época, C era padronizado recentemente. 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, ainda seria necessário bastante trabalho para reescrever o CPython no subconjunto de C compatível com C ++. Por si só, esse trabalho traria pouco ou nenhum benefício real.
É um pouco como o post de Joel sobre começar de novo e reescrever completamente, sendo o pior erro que uma empresa de software pode cometer. Eu diria 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 deles matou a empresa - mas ambos eram definitivamente grandes, caros e projetos de longo prazo. Ambos também apontam para algo crucial para o sucesso: manter as duas bases de código por tempo suficiente para que (a maioria) os usuários possam mudar para a nova base de código à vontade, com base nos benefícios (pelo menos percebidos).
Para uma equipe de desenvolvimento do tamanho do Python, esse tipo de mudança é muito mais difícil. Até a mudança de Python 2 para 3 exigiu bastante trabalho e exigiu uma sobreposição semelhante. Pelo menos nesse caso, no entanto, existem benefícios diretos para as alterações que a reescrita no C ++ (por si só) não forneceria (pelo menos imediatamente).
O discurso de Linus Torvalds contra C ++ foi levantado, então vou mencionar isso também. Nada que eu tenha visto de Guido indica que ele tem esse tipo de sentimentos negativos e fortes em relação ao C ++. O pior que o vi dizer é que o ensino de C ++ geralmente é um desastre - mas ele imediatamente disse que isso ocorre principalmente porque os professores não conhecem / não conhecem C ++.
Eu também acho que, embora seja possível converter muito código C em C ++ com relativa facilidade, obter uma grande vantagem real do C ++ requer não apenas um pouco mais de reescrita quanto isso, mas também requer uma reeducação substancial da maioria dos desenvolvedores envolvidos. A maioria dos C ++ bem escritos é substancialmente diferente do C bem escrito para fazer as mesmas coisas. É não apenas uma questão de mudar
malloc
paranew
eprintf
decout
, por qualquer trecho da imaginação.fonte
Eu acho que a razão pela qual ele 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 outros. Quero dizer, demorou até, o que foi, em 2005, para chegar a uma especificação ABI que permitisse que o código compilado com um compilador chamasse o código compilado com um compilador diferente?
A questão mais interessante é por que ainda está escrita em C89.
E há uma resposta surpreendente: porque as pessoas realmente usam Python em plataformas para as quais não existe nenhum compilador C ++ e C99! Quando as otimizações do intérprete de código encadeado inspiradas na Forth foram mescladas, houve uma grande discussão sobre o assunto, porque o código (necessariamente) usado calculava o
goto
que não faz parte do C89. Aparentemente, havia um medo real de que esse recurso não estivesse disponível em algumas das 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 Unladen Swallow no CPython seria que você possa compilá-lo sem o compilador JIT, já que existem plataformas nas quais as pessoas executam o Python, para as quais não existe nenhum compilador C ++.
Certamente, atualmente, o CPython não é mais a única implementação em Python. Existe o PyPy, que é escrito em RPython (um subconjunto estatístico do Python), Jython em Java, IronPython em C #, Pynie no NQP e PIR e assim por diante.
fonte
Uma pergunta melhor pode ser: "Por que o Python não é escrito em Python?"
Mais precisamente, uma vez que primitivas suficientes para classes e objetos Python sejam escritas em C, elas podem ser usadas para escrever o restante do intérprete, para que você não ganhe nada usando C ++.
fonte