Perché Python è scritto in C e non in C ++? [chiuso]

63

Nel tutorial di Python si può leggere che l'implementazione originale di Python è in C;

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

Sono molto curioso perché Python sia stato scritto in C e non in C ++? Mi piacerebbe conoscere il ragionamento alla base di questa decisione e sto cercando riferimenti a dati storici.

    
posta Piotr Dobrogost 23.11.2010 - 22:41
fonte

3 risposte

106

Da tutto ciò che ho visto, è una combinazione di motivi pratici e storici. La ragione (principalmente) storica è che CPython 1.0 è stato rilasciato nel 1989. A quel tempo, C era stato recentemente standardizzato. Il C ++ era quasi sconosciuto e decisamente non portatile, perché quasi nessuno aveva un compilatore C ++.

Sebbene C ++ sia molto più diffuso e facilmente disponibile oggi, ci vorrebbe comunque una discreta quantità di lavoro per riscrivere CPython nel sottoinsieme di C compatibile con C ++. Di per sé, quel lavoro fornirebbe poco o nessun vantaggio reale.

È un po 'come il post del blog di Joel su come ricominciare e fare una riscrittura completa è il peggiore errore di un software l'azienda può fare. Lo contrasterei indicando la conversione di Microsoft dal core di Windows 3.0 al core di Windows NT e la conversione di Apple da MacOS 9 a Mac OS / X. Nessuno dei due ha ucciso la compagnia, ma entrambi erano decisamente grandi, costosi, a lungo termine. Entrambi puntano anche a qualcosa che è cruciale per il successo: mantenere le basi di codice entrambe per un tempo sufficientemente lungo che (la maggior parte) gli utenti possono passare alla nuova base di codice a loro piacimento, basandosi su benefici (almeno percepiti). / p>

Per un team di sviluppo delle dimensioni di Python, tuttavia, quel tipo di cambiamento è molto più difficile. Anche il passaggio da Python 2 a 3 ha richiesto un po 'di lavoro e ha richiesto una sovrapposizione simile. Almeno in questo caso, tuttavia, vi sono benefici diretti per le modifiche, che la riscrittura in C ++ (da sola) non fornirebbe (almeno immediatamente).

Il lamento di Linus Torvalds contro il C ++ è stato accennato, quindi ne parlerò anche io. Nulla di ciò che ho visto da Guido indica che ha quel tipo di sentimenti forti e negativi verso il C ++. Per quanto riguarda il peggio, l'ho visto dire che insegnare C ++ è spesso un disastro - ma ha subito detto che questo è in gran parte dovuto al fatto che gli insegnanti non conoscono / non conoscono il C ++.

Penso anche che mentre è possibile convertire un sacco di codice C in C ++ con un relativo facile, che ottenere un reale vantaggio dal C ++ richiede non solo un po 'più di riscrittura, ma anche richiede una sostanziale rieducazione della maggior parte degli sviluppatori coinvolti. Il C ++ più ben scritto è sostanzialmente diverso da C ben scritto per fare le stesse cose. È non solo questione di cambiare malloc in new e printf in cout , con qualsiasi sforzo dell'immaginazione.

    
risposta data 23.11.2010 - 23:43
fonte
28

Penso che il motivo per cui è stato originariamente scritto in ANSI C89 è semplicemente perché, a quei tempi, il C ++ non era una scelta praticabile su incompatibilità tra diversi compilatori e così via. Voglio dire, ci sono voluti fino a quando, nel 2005, è venuto fuori una specifica ABI che avrebbe permesso al codice compilato con un compilatore di chiamare il codice compilato con un compilatore diverso?

La domanda più interessante è perché è ancora scritto in C89.

E c'è una risposta sorprendente: perché le persone effettivamente usano Python su piattaforme per le quali non esiste C ++ e nessun compilatore C99! Quando sono state unite le ottimizzazioni dell'interprete di codice thread di ispirazione Forth, c'è stata una enorme discussione su di esso, poiché il codice (necessariamente) ha utilizzato goto calcolato che non fa parte di C89. Sembra che ci siano paure reali sul fatto che questa funzione potrebbe non essere disponibile su alcune delle piattaforme su cui Python è attualmente utilizzato.

La stessa cosa è successa con Unladen Swallow, che usa LLVM, che è scritto in C ++. È stato reso molto chiaro che un requisito per unire Unladen Swallow in CPython sarebbe che è possibile compilarlo senza il compilatore JIT, dal momento che ci sono piattaforme su cui Python è eseguito, per cui non esiste alcun compilatore C ++.

Naturalmente, al giorno d'oggi, CPython non è più l'unica implementazione Python. C'è PyPy, che è scritto in RPython (un sottoinsieme tipizzato staticamente di Python), Jython in Java, IronPython in C #, Pynie in NQP e PIR e così via.

    
risposta data 24.11.2010 - 02:22
fonte
9

Una domanda migliore potrebbe essere: "Perché Python non è scritto in Python?"

Più precisamente, una volta che abbastanza primitive per le classi e gli oggetti Python sono scritte in C, queste possono essere usate per scrivere il resto dell'interprete, quindi non si otterrebbe nulla usando C ++.

    
risposta data 23.11.2010 - 22:55
fonte

Leggi altre domande sui tag