Red Yard

Mojo: un linguaggio di programmazione innovativo
Mojo, il nuovo linguaggio compatibile con l’ecosistema Python, progettato dagli sviluppatori per poter creare app più veloci ed efficienti.
Mojo ia
Mojo ia
Mojo ia
Mojo, un nuovo linguaggio di programmazione in grado di combinare l’usabilità di Python con la velocità e l’efficienza di C. Le tecniche utilizzate assicurano l’ottimizzazione delle prestazioni e garantiscono velocità.

Che cos’è Mojo

Mojo è un nuovo linguaggio di programmazione sviluppato da Modular, società leader nel campo delle infrastrutture AI (Artificial Infrastracture).
Mojo a new programming language
Progettato dagli sviluppatori per poter creare app più veloci ed efficienti, Mojo si differenzia dai linguaggi di programmazione standard per superare alcune difficoltà e impedimenti.
Vediamo come!

La storia di Mojo

Modular, startup leader a livello mondiale, nasce grazie a Chris Lattner e Tim Davis, i suoi fondatori.
Quando si sono conosciuti in Google, hanno capito quanto potesse fare la differenza un linguaggio di programmazione che combinasse l’usabilità di Python con la velocità e l’efficienza di C.
Allo stesso tempo, hanno identificato la necessità di un linguaggio che permettesse agli sviluppatori di creare applicazioni ad alte prestazioni senza dover apprendere i linguaggi di descrizione dell’hardware standard.
Il risultato è Mojo, un linguaggio progettato per essere completamente compatibile con l’ecosistema Python, che al contempo offre prestazioni di livello C.
Questo linguaggio permette agli sviluppatori di sfruttare la potenza dell’IA in modo più efficiente e accessibile, superando le limitazioni delle infrastrutture precedenti.

Come funziona Mojo

Mojo utilizza diverse tecniche per ottimizzare le prestazioni e garantire velocità.
Vediamo di seguito le più importanti:
  • LLVM (Low Level Virtual Machine) è un framework di compilazione ampiamente utilizzato per la creazione di linguaggi ad alte prestazioni. È caratterizzato da un insieme di strumenti utili all’ottimizzazione e alla generazione di codice macchina. Questo consente a Mojo di generare, in tempo reale, codice altamente ottimizzato;
  • JIT (Just In Time) è un compilatore che converte il codice scritto nel linguaggio Mojo in codice macchina. A differenza di un compilatore tradizionale, che converte tutto il codice sorgente in codice macchina prima dell’esecuzione, un compilatore JIT effettua la compilazione “appena in tempo”. Poiché il codice viene compilato e ottimizzato al momento dell’esecuzione, il compilatore JIT può prendere decisioni più informate sull’ottimizzazione, basandosi sui dati effettivi disponibili in quel momento. Questo processo è simile a quello utilizzato nei linguaggi di programmazione come C o C++. La differenza principale è che il compilatore Mojo viene eseguito durante l’esecuzione del codice, consentendo l’ottimizzazione per la piattaforma hardware specifica.
  • GPU e altri acceleratori hardware servono per velocizzare ulteriormente l’esecuzione del codice
  • Mojo ha la capacità di creare applicazioni autonome e portabili. Gli utenti non devono avere una specifica versione di Python installata sul proprio sistema per eseguire il codice Mojo. Questo è possibile perché il codice viene compilato in codice macchina. Le applicazioni possono essere eseguite su qualsiasi piattaforma che supporti l’architettura della CPU sottostante.

Le caratteristiche di Mojo

Approfondiremo di seguito le caratteristiche di Mojo, riportate sul sito ufficiale.

Programmabilità

Tipi progressivi

I tipi progressivi del linguaggio di Mojo consentono agli sviluppatori di migliorare l’efficienza e i controlli degli errori nel proprio codice.
Le annotazioni di tipo forniscono informazioni più dettagliate sulle variabili e sulle strutture dati utilizzate nel codice. Queste consentono al compilatore di effettuare controlli di coerenza e di segnalare eventuali incongruenze o errori potenziali.
Ciò aiuta gli sviluppatori a individuare e risolvere i problemi in modo tempestivo, riducendo il tempo necessario per il debug e migliorando la qualità del codice.
Quindi, l’uso di annotazioni di tipo in Mojo crea un ambiente di sviluppo più solido e affidabile.

Astrazioni a costo zero

Gli sviluppatori controllano l’archiviazione in-linea dei dati grazie alle astrazioni a costo zero di Mojo.
Ciò migliora l’efficienza del codice, riducendo le allocazioni di memoria aggiuntive e il codice superfluo.

Gestione della proprietà e controllo dei prestiti

Mojo sfrutta la sicurezza della memoria eliminandone le varie complicazioni aggiuntive.

Algoritmi parametrici portabili

Si tratta di algoritmi indipendenti dall’hardware.
Vengono impiegati durante la meta-programmazione in fase di compilazione per ridurre il codice ripetitivo.

Sintonizzazione automatica della lingua integrata

La sintonizzazione automatica della lingua integrata consente agli sviluppatori di trovare automaticamente i migliori valori per i tuoi parametri, per sfruttare l’hardware di destinazione.
Ciò semplifica l’ottimizzazione del codice senza regolazioni manuali per ogni combinazione hardware.

In più…

Oltre ciò che abbiamo appena visto, Mojo Language fornisce:
  • L’intera potenza del MLIR (Multi-Level Intermediate Representation)
  • Un tempo di esecuzione eterogeneo parallelo
  • Tempi di compilazione rapidi

Parallelizzazione

Tra le prestazioni di Mojo, la più importante è sicuramente la parallelizzazione.
Infatti, come detto precedentemente, Mojo utilizza il framework MLIR. Quest’ultimo consente ai programmatori di sfruttare vettori, thread e unità hardware per l’intelligenza artificiale.
La parallelizzazione differenzia Mojo da altri linguaggi proprio in termini di velocità.
Mojo parallelization
Supportando l’elaborazione parallela su più core, infatti, raggiunge una velocità 35.000 volte superiore rispetto a Python.

Interoperabilità

Mojo permette un’interoperabilità autentica con l’intero ecosistema Python.
Questo significa che è possibile integrare librerie arbitrarie come Numpy e Matplotlib insieme al tuo codice personalizzato in Mojo.
Si può importare qualsiasi modulo Python nel programma Mojo e creare tipi Python dai tipi Mojo.

Estensibilità

L’estensibilità di Mojo è fondamentale: consente, come dice la parola stessa, di estendere facilmente i propri modelli grazie ad operazioni di pre e post elaborazione.
Mojo estensibilità
La fusione del kernel, la riscrittura dei grafici, le funzioni di forma e molto altro ancora, sono essenziali al fine di migliorare i propri modelli e lo stack modulare.

Mojo e Python

Come abbiamo detto, l’azienda di infrastrutture per l’IA, Modular, ha lanciato Mojo, un linguaggio di programmazione per sviluppatori di intelligenza artificiale che mira a combinare l’usabilità di Python, con le prestazioni di C.
Mojo ha l’obiettivo di colmare il divario tra ricerca e produzione, sfruttando la sintassi di Python, così come la programmazione a basso livello e la meta-programmazione in fase di compilazione.
Mojo è stato creato con l’obiettivo di fornire un modello di programmazione innovativo agli acceleratori nell’apprendimento automatico. Tuttavia, poiché le CPU attuali hanno anche tensori e altri acceleratori per l’IA, Modular ha deciso che Mojo dovrebbe supportare la programmazione a scopo generale e, dato che Python è ampiamente utilizzato nell’apprendimento automatico e altrove, abbracciarne il suo ecosistema.
L’adozione di Python ha semplificato anche gli sforzi di progettazione.
Infatti, con la maggior parte della sintassi già specificata, l’azienda ha potuto concentrarsi sulla creazione del modello di compilazione e sulla progettazione di funzionalità di programmazione specifiche.
Mojo è inteso come un’estensione di Python, nonché compatibile con i programmi Python esistenti.
Inoltre, supporta le funzionalità principali di Python, come async/await e la gestione degli errori.
Tuttavia, come riportato dallo stesso Modular, Mojo attualmente è un “work in progress”. Infatti, mancano alcune delle funzionalità di Python.
Ad esempio, Mojo non supporta ancora le classi.
Non possiamo escludere che, nei futuri aggiornamenti, Mojo raggiunga piena compatibilità con Python.
Gli obiettivi del linguaggio come membro della famiglia di Python includono:
  • Piena compatibilità con l’ecosistema di Python
  • Prestazioni prevedibili a basso livello e controllo a basso livello
  • La capacità di distribuire sottoinsiemi di codice agli acceleratori
  • Evitare la frammentazione dell’ecosistema

È possibile provare Mojo?

Si, è possibile usare Mojo.
La libreria standard, il compilatore e l’ambiente di esecuzione Mojo non sono ancora disponibili per lo sviluppo locale.
Tuttavia, Modular ha creato un ambiente di sviluppo ospitato per provare Mojo: il Mojo Playground.

Per accedere, basterà registrarsi inserendo i dati richiesti.

Inoltre, Modular, ha messo a disposizione una serie di documenti utili ad approfondire Mojo e il perché sia una potente estensione di Python.
A questo punto, non resta che provarlo!
Keywords Vocabulary
Mojo è un linguaggio di programmazione per gli sviluppatori di AI, che combina l’usabilità di Python e le prestazioni di C, C++ o CUDA. É uno strumento completo e versatile per sviluppare modelli generativi e moderne intelligenze artificiali.
Modular è una società specializzata in infrastrutture AI che ha dato vita a Mojo, un nuovo linguaggio di programmazione.
Python è un linguaggio di programmazione ad alto livello, noto per la sua sintassi semplice e leggibile, che favorisce la scrittura di codice chiaro e comprensibile. È orientato agli oggetti, il che significa che supporta la creazione e l’uso di oggetti, classi e metodi, consentendo di organizzare e strutturare il codice in modo modulare e riutilizzabile.
GPU (Graphics Processing Unit) è un componente hardware specializzato, progettato per accelerare e ottimizzare il rendering di immagini, video e animazioni in tempo reale. Le GPU sono caratterizzate da una struttura altamente parallela, che consente loro di elaborare e gestire simultaneamente un gran numero di calcoli.
Thread è un termine utilizzato per indicare una sequenza di istruzioni o un flusso di esecuzione all’interno di un processo. Può essere considerato come un “sotto-processo” autonomo all’interno di un programma più grande.
Kernel è il componente centrale di un sistema operativo. Il kernel agisce come un intermediario tra il software e l’hardware del computer, fornendo un’interfaccia per l’accesso alle risorse di sistema come la memoria, i dispositivi di input/output, il processore e le operazioni di rete.
MLIR è un framework flessibile per la rappresentazione intermedia multilivello che mira a semplificare e migliorare la compilazione dei programmi attraverso una rappresentazione modulare e componibile.
Async/Await sono due parole chiave utilizzate in JavaScript che abilitano la gestione di funzioni asincrone eseguite tramite un approccio sincrono.

Donatella Rinaldi

Writer & Blogger

Mojo: un linguaggio di programmazione innovativo
SHARE

Lascia un commento!

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *