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
para new
e printf
de cout
, por qualquer trecho da imaginação.