En el tutorial de Python se puede leer que la implementación original de Python está en C;
Por otro lado, la implementación de Python, escrita en C, (...)
Tengo mucha curiosidad por qué Python se escribió en C y no en C ++.
Me gustaría saber el razonamiento detrás de esta decisión y la respuesta debe estar respaldada por referencias históricas (y no basadas en opiniones).
python
c++
history
implementations
Piotr Dobrogost
fuente
fuente
Respuestas:
Por todo lo que he visto, es una combinación de razones prácticas e históricas. La razón (principalmente) histórica es que CPython 1.0 se lanzó en 1989. En ese momento, C se estandarizó recientemente. C ++ era casi desconocido y decididamente no portátil, porque casi nadie tenía un compilador de C ++.
Aunque C ++ está mucho más extendido y es más fácil de obtener hoy en día, aún requeriría una gran cantidad de trabajo reescribir CPython en el subconjunto de C que es compatible con C ++. Por sí mismo, ese trabajo proporcionaría poco o ningún beneficio real.
Es un poco como la publicación del blog de Joel sobre volver a escribir y hacer una reescritura completa como el peor error que puede cometer una empresa de software. Contrarrestaría eso señalando la conversión de Microsoft del núcleo de Windows 3.0 al núcleo de Windows NT, y la conversión de Apple de MacOS 9 a Mac OS / X. Ninguno de los dos mató a la empresa, pero ambos fueron definitivamente proyectos grandes, caros y a largo plazo. Ambos también apuntan a algo que es crucial para el éxito: mantener ambas bases de código durante el tiempo suficiente para que (la mayoría) de los usuarios puedan cambiar a la nueva base de código a su gusto, en función de los beneficios (al menos percibidos).
Sin embargo, para un equipo de desarrollo del tamaño de Python, ese tipo de cambio es mucho más difícil. Incluso el cambio de Python 2 a 3 requirió bastante trabajo y requirió una superposición similar. Sin embargo, al menos en ese caso, hay beneficios directos a los cambios, que la reescritura en C ++ (por sí sola) no proporcionaría (al menos de inmediato).
El discurso de Linus Torvalds contra C ++ fue mencionado, así que lo mencionaré también. Nada de lo que he visto de Guido indica que tenga ese tipo de sentimientos fuertes y negativos hacia C ++. Lo peor que le he visto decir es que enseñar C ++ a menudo es un desastre , pero inmediatamente continuó diciendo que esto se debe principalmente a que los maestros no sabían / no sabían C ++.
También creo que, si bien es posible convertir una gran cantidad de código C a C ++ con relativa facilidad, obtener mucha ventaja real de C ++ requiere no solo un poco más de reescritura que eso, sino que también requiere una reeducación sustancial de la mayoría de los desarrolladores involucrados. La mayoría de C ++ bien escrito es sustancialmente diferente de C bien escrito para hacer lo mismo. Es no sólo una cuestión de cambiar
malloc
anew
yprintf
acout
, por cualquier tramo de la imaginación.fuente
Creo que la razón por la que se escribió originalmente en ANSI C89 es simplemente porque en aquel entonces, C ++ simplemente no era una opción viable, con incompatibilidades entre diferentes compiladores y demás. Quiero decir, me tomó hasta, ¿qué fue, 2005, llegar a una especificación ABI que permitiera que el código compilado con un compilador llame al código compilado con un compilador diferente?
La pregunta más interesante es por qué todavía está escrito en C89.
Y hay una respuesta sorprendente: ¡porque la gente realmente usa Python en plataformas para las que no existe un compilador C ++ ni C99! Cuando se fusionaron las optimizaciones del intérprete de código roscado inspiradas en Forth, hubo una gran discusión al respecto, porque el código (necesariamente) se usaba computado
goto
que no forma parte de C89. Aparentemente, existían temores reales de que esta característica podría no estar disponible en algunas de las plataformas en las que Python se usa actualmente.Lo mismo sucedió con Unladen Swallow, que usa LLVM, que está escrito en C ++. Se dejó muy claro que un requisito para fusionar Unladen Swallow en CPython sería que puede compilarlo sin el compilador JIT, ya que hay plataformas en las que las personas ejecutan Python, para las cuales no existe un compilador C ++.
Por supuesto, hoy en día, CPython ya no es la única implementación de Python. Hay PyPy, que está escrito en RPython (un subconjunto estático de Python), Jython en Java, IronPython en C #, Pynie en NQP y PIR, etc.
fuente
Una mejor pregunta podría ser: "¿Por qué Python no está escrito en Python?"
Más concretamente, una vez que se escriben suficientes primitivas para las clases y los objetos de Python en C, se pueden usar para escribir el resto del intérprete, por lo que no ganaría nada usando C ++ en su lugar.
fuente