Quando parliamo di Python spesso intendiamo non solo il linguaggio ma anche l’implementazione. Python è in realtà una specifica per un linguaggio che può essere implementato in molti modi diversi.
Sfondo
Prima di procedere oltre cerchiamo di capire la differenza tra bytecode e codice macchina (codice nativo).
Codice macchina (aka codice nativo)
Il codice macchina è un insieme di istruzioni che viene eseguito direttamente dalla CPU. Ogni istruzione esegue un compito unico, come il caricamento o un’operazione logica sui dati nella memoria della CPU. Quasi tutti i linguaggi di alto livello come il C traducono il codice sorgente in codice macchina eseguibile con l’aiuto di compilatori, caricatori e linker. Ogni processore o famiglia di processori ha il proprio set di istruzioni del codice macchina.
Bytecode
Bytecode è anche una rappresentazione binaria eseguita dalla macchina virtuale (non dalla CPU direttamente). La macchina virtuale (che è scritta diversamente per le diverse macchine) converte l’istruzione binaria in una specifica istruzione della macchina. Uno dei linguaggi che usa il concetto di Bytecode è Java.
Il codice macchina è molto più veloce rispetto al Bytecode ma il Bytecode è portabile e sicuro rispetto al codice macchina.
Implementazioni di Python
Cpython
L’implementazione di default del linguaggio di programmazione Python è Cpython. Come suggerisce il nome, Cpython è scritto in linguaggio C. Cpython compila il codice sorgente Python in bytecode intermedio, che viene eseguito dalla macchina virtuale Cpython. CPython è distribuito con una grande libreria standard scritta in un misto di C e Python. CPython fornisce il più alto livello di compatibilità con i pacchetti Python e i moduli di estensione C. Tutte le versioni del linguaggio Python sono implementate in C perché CPython è l’implementazione di riferimento.
Alcune delle implementazioni che sono basate sul core runtime di CPython ma con comportamenti o caratteristiche estese in alcuni aspetti sono Stackless Python, wpython, MicroPython.
Stackless Python – CPython con un’enfasi sulla concorrenza usando tasklet e canali (usato da dspython per il Nintendo DS)
Altre implementazioni
Ci sono anche altre implementazioni del linguaggio Python Le uniche implementazioni che sono note per essere compatibili con una data versione del linguaggio sono IronPython, Jython e PyPy.
Jython
Jython è un’implementazione del linguaggio di programmazione Python che può girare sulla piattaforma Java. I programmi Jython usano classi Java invece di moduli Python. Jython compila in codice Java byte, che può essere eseguito dalla macchina virtuale Java. Jython permette l’uso di funzioni della libreria di classi Java dal programma Python. Jython è lento rispetto a Cpython e manca di compatibilità con le librerie CPython.
IronPython
Un’implementazione Python scritta in C# che punta al framework .NET di Microsoft. Simile a Jython, usa .Net Virtual Machine, cioè Common Language Runtime. IronPython può usare il .NET Framework e le librerie Python, e altri linguaggi .NET possono usare il codice Python in modo molto efficiente. IronPython funziona meglio nei programmi Python che usano thread o core multipli, perché ha un JIT, e anche perché non ha il Global Interpreter Lock.
PyPy
“Se vuoi che il tuo codice venga eseguito più velocemente, probabilmente dovresti usare PyPy”. – Guido van Rossum (creatore di Python)
Python è un linguaggio di programmazione dinamico. Si dice che Python sia lento perché l’implementazione predefinita di CPython compila il codice sorgente python in bytecode, che è lento rispetto al codice macchina (codice nativo). Qui entra in gioco PyPy.
PyPy è un’implementazione del linguaggio di programmazione Python scritta in Python. L’interprete è scritto in RPython (un sottoinsieme di Python).
PyPy usa (compilazione just-in-time). In termini semplici JIT usa metodi di compilazione per rendere il sistema dell’interprete più efficiente e veloce. Quindi fondamentalmente JIT rende possibile compilare il codice sorgente in codice macchina nativo che lo rende molto veloce.
PyPy viene anche fornito di default con il supporto per la modalità stackless, fornendo micro-threads per una massiccia concorrenza. Si dice che Python sia circa 7,5 volte più veloce di Cpython.
Alcune altre implementazioni di Python sono CLPython, Pyston, Psyco, Cython, IPython.
Questo articolo è contribuito da Saurabh Daalia. Se ti piace GeeksforGeeks e vuoi contribuire, puoi anche scrivere un articolo usando contribute.geeksforgeeks.org o spedire il tuo articolo a [email protected]. Vedi il tuo articolo apparire sulla pagina principale di GeeksforGeeks e aiuta altri Geek.