¿Por qué está escrito Python en C y no en C ++? [cerrado]

63

En 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é se escribió Python en C y no en C ++? Me gustaría saber el razonamiento detrás de esta decisión y estoy buscando referencias a datos históricos.

    
pregunta Piotr Dobrogost 23.11.2010 - 22:41

3 respuestas

106

De todo lo que he visto, es una combinación de razones prácticas e históricas. La razón (en su mayoría) histórica es que CPython 1.0 se lanzó en 1989. En ese momento, C fue recientemente estandarizado. 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 conseguir hoy en día, aún se necesitaría una buena cantidad de trabajo para volver a escribir CPython en el subconjunto de C que sea compatible con C ++. Por sí mismo, ese trabajo proporcionaría poco o ningún beneficio real.

Es un poco como publicación del blog de Joel sobre comenzar de nuevo y hacer una reescritura completa siendo el peor error un software empresa puede hacer. Lo contrarrestaría 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 compañía, pero ambos fueron definitivamente grandes, costosos y proyectos a largo plazo. Ambos también apuntan a algo que es crucial para el éxito: mantener las bases de código de ambos durante el tiempo suficiente para que (la mayoría) los usuarios puedan cambiar a la nueva base de código cuando lo deseen, basándose en los beneficios (al menos percibidos). / p>

Para un equipo de desarrollo del tamaño de Python's, sin embargo, ese tipo de cambio es mucho más difícil. Incluso el cambio de Python 2 a 3 ha costado bastante trabajo y requiere una superposición similar. Sin embargo, al menos en ese caso, hay beneficios directos de los cambios, que la reescritura en C ++ (por sí misma) no proporcionaría (al menos inmediatamente).

La perturbación de Linus Torvalds contra C ++ se planteó, así que lo mencionaré también. Nada de lo que he visto de Guido indica que tiene ese tipo de sentimientos fuertes y negativos hacia C ++. Lo peor que le he visto decir es que enseñar C ++ es a menudo una desastre - pero inmediatamente dijo que esto se debe en gran parte a que los maestros no sabían / no conocían C ++.

También creo que si bien es posible convertir una gran cantidad de código C a C ++ con relativa facilidad, obtener una gran ventaja real de C ++ requiere no solo un poco más de reescritura, sino 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 la C bien escrita para hacer las mismas cosas. Es no solo una cuestión de cambiar malloc a new y printf a cout , por cualquier tramo de la imaginación.

    
respondido por el Jerry Coffin 23.11.2010 - 23:43
28

Creo que la razón por la que fue originalmente escrita en ANSI C89 es simplemente porque en ese entonces, C ++ simplemente no era una opción viable con incompatibilidades entre compiladores diferentes y demás. Quiero decir, se tardó hasta que, ¿qué era, en 2005, en crear 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é está todavía escrito en C89.

Y hay una respuesta sorprendente: ¡porque la gente realmente usa Python en plataformas para las que no existe ningún compilador C ++ ni C99! Cuando se fusionaron las optimizaciones de intérpretes de código roscado inspiradas en Forth, hubo una discusión enorme al respecto, porque el código (necesariamente) usó goto computado que no es parte de C89. Aparentemente hubo temores reales de que esta característica podría no estar disponible en algunas de las plataformas en las que se usa actualmente Python.

Lo mismo sucedió con Unladen Swallow, que utiliza LLVM, que está escrito en C ++. Se dejó muy claro que un requisito para fusionar Unladen Swallow con CPython sería poder compilarlo sin el compilador JIT, ya que existen plataformas en las que se ejecuta Python, para las cuales no existe un compilador de 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 de Python tipificado estáticamente), Jython en Java, IronPython en C #, Pynie en NQP y PIR y así sucesivamente.

    
respondido por el Jörg W Mittag 24.11.2010 - 02:22
9

Una mejor pregunta podría ser: "¿Por qué no se escribe Python en Python?"

Más al punto, una vez que las primitivas suficientes para las clases y los objetos de Python se escriben en C, se pueden usar para escribir el resto del intérprete, por lo que no obtendrías nada con C ++.

    
respondido por el Larry Coleman 23.11.2010 - 22:55

Lea otras preguntas en las etiquetas