Confronto tra IronPython e cPython
Ci sono alcune piccole differenze e incompatibilità tra IronPython e Python "standard" ("cPython"). Alcuni sono errori diretti in IronPython e dovrebbero essere rimossi nelle versioni future. Tuttavia, altri sono considerati "dettagli di implementazione" e rimarranno. Alcuni di loro sono argomenti molto impegnativi.
La differenza più evidente per gli utenti è la gestione delle stringhe. Original cPython ha due diversi tipi di stringhe per "stringhe di byte" e "stringhe Unicode". Questo concetto è simile ai tipi di dati STRING e WSTRING in IEC. IronPython utilizza semplicemente stringhe .NET che sono sempre compatibili con Unicode e utilizzano internamente UTF-16. Tuttavia, IronPython implementa un trucco per nascondere la differenza con cPython al programmatore. (Interessante: per la nuova versione di Python 3, gli sviluppatori hanno completamente rielaborato la gestione delle stringhe. Il risultato è stato un modello molto più vicino a IronPython. Le stringhe Unicode vengono sempre utilizzate dopo e c'è un tipo di dati separato per la gestione dei byte grezzi)
I moduli Python scritti in C non possono essere importati in IronPython perché cPython utilizza strutture dati interne completamente diverse da IronPython. La maggior parte dei moduli della libreria standard è stata reimplementata in IronPython. Tuttavia, alcuni moduli (come l'interfaccia TK) non sono disponibili fintanto che non vengono portati su IronPython in modo esplicito. D'altra parte, IronPython fornisce l'accesso agli assembly .NET, incluso il framework .NET (come mostrato sopra), che compensa ampiamente questa funzionalità.
Mentre cPython utilizza il conteggio dei riferimenti e un Garbage Collector deterministico per ripulire i rifiuti ciclici, IronPython si basa sul Garbage Collector non deterministico .NET. Nella maggior parte dei casi, questa differenza non ha importanza. Ma quando apri file o altre risorse dalla libreria standard Python o dal framework .NET, dovresti assicurarti di chiuderli in un secondo momento. È meglio usare il with istruzione con il gestore di contesto Python o .NET IDisposable istanze.
Per ulteriori informazioni, vedere: Gestori di contenuti e .NET IDisposable