GoSuda

Linguaggio Moderno nell'Era dell'IA

By Rabbit Princess
views ...

Linguaggi Moderni

Un linguaggio moderno denota un linguaggio che offre maggiore produttività, stabilità, sicurezza e manutenibilità rispetto ai linguaggi del passato. Questi linguaggi adottano attivamente le tecniche e i concetti più recenti, fornendo agli sviluppatori strumenti di sviluppo più efficienti e sicuri. Esempi rappresentativi di linguaggi moderni includono Java, Rust, Python, TypeScript, che possiedono le seguenti caratteristiche.

1. Progettazione Orientata agli Oggetti (OOP)

La maggior parte dei linguaggi moderni è progettata basandosi sul concetto di programmazione orientata agli oggetti. L'OOP supporta principi come l'incapsulamento, l'ereditarietà e il polimorfismo, rendendo la struttura del programma chiara e flessibile attraverso la gestione di sistemi complessi suddivisi in oggetti di piccole unità. Questo è particolarmente efficace nel controllo dei costi di sviluppo e delle ore di lavoro durante lo sviluppo di software su larga scala, e nella riduzione dei problemi che possono sorgere durante la manutenzione.

2. Syntactic Sugar ed Espressioni

I linguaggi moderni offrono una varietà di syntactic sugar e grammatiche basate su espressioni per migliorare la leggibilità del codice e la produttività dello sviluppo. Funzionalità come operatori ternari, espressioni lambda e pattern matching riducono il boilerplate code, rendono il codice prevedibile e migliorano la produttività dello sviluppatore.

3. Sistema di Moduli

I linguaggi moderni consentono di gestire i programmi suddividendoli in più unità tramite un sistema di moduli. Ciò facilita il riutilizzo del codice e la gestione delle dipendenze, rendendo la manutenzione più agevole anche con l'aumentare delle dimensioni del progetto. Esempi tipici includono Maven/Gradle per Java, Cargo per Rust e npm/yarn per TypeScript.

4. Linguaggi Intermedi e Macchine Virtuali

I linguaggi moderni adottano linguaggi intermedi e macchine virtuali per la portabilità della piattaforma, l'ottimizzazione delle prestazioni e la sicurezza. Esempi rappresentativi includono JVM, LLVM, WASM e GraalVM.

Sviluppo nell'Era dell'AI e Limiti dei Linguaggi Moderni

I linguaggi moderni sono nati con il presupposto che la maggior parte del codice fosse scritta da esseri umani. Naturalmente, lo scopo dei linguaggi moderni è ridurre i compiti ripetitivi, aumentare la produttività e implementare efficacemente software di grandi dimensioni attraverso una struttura che consenta la collaborazione tra gli sviluppatori. Tuttavia, nell'era dell'AI, questo presupposto sta progressivamente crollando. Strumenti basati sull'AI come Copilot e Cody stanno automatizzando gran parte della scrittura del codice, e la quantità di codice che un singolo sviluppatore può produrre sta aumentando esponenzialmente. Di conseguenza, le caratteristiche dei linguaggi moderni che in passato erano considerate vantaggiose stanno gradualmente trasformandosi in obsoleti svantaggi.

Progettazione Orientata agli Oggetti

L'AI può analizzare rapidamente e con precisione una struttura in cui tutte le informazioni sono esplicitate all'interno di una singola funzione o modulo. Al contrario, all'aumentare del contesto, aumenta anche il campo di inferenza, riducendo la produttività e la precisione dell'AI. Il codice scritto in OOP distribuisce la logica su più oggetti piuttosto che gestirla in un unico luogo, il che, di conseguenza, richiede un maggiore contesto all'AI. Si consideri il codice seguente.

 1public class AnimalHandler {
 2    public void handle(Animal animal) {
 3        animal.speak();
 4    }
 5}
 6
 7public class Main {
 8    public static void main(String[] args) {
 9        AnimalHandler handler = new AnimalHandler();
10
11        Animal a1 = new Dog();
12        Animal a2 = new Cat();
13        Animal a3 = new Horse();
14
15        handler.handle(a1);
16        handler.handle(a2);
17        handler.handle(a3);
18    }
19}

Nel codice sopra, l'AI deve ripetere la seguente inferenza per sapere quale azione verrà effettivamente eseguita dal metodo speak():

  1. Di quale classe concreta è istanza l'oggetto animal?
  2. Dove è definito il metodo speak() sovrascritto in quella classe?
  3. Dove sono le definizioni delle classi Dog e Cat, e qual è il loro comportamento interno?
  4. Esiste la possibilità che le classi Dog e Cat vengano sovrascritte da altre classi?

Queste informazioni non sono aggregate in un unico file o funzione, ma possono essere comprese solo seguendo le relazioni tra i file di classe e la struttura di ereditarietà. Inoltre, elementi che vengono determinati a runtime, come la reflection o il dynamic loading, sono come una black box per l'AI, rendendo l'analisi praticamente impossibile.

Syntactic Sugar ed Espressioni

L'AI preferisce azioni esplicite a quelle implicite e predilige la combinazione di strutture semplici per creare un'unica soluzione piuttosto che l'utilizzo di strutture complesse. Al contrario, il syntactic sugar consente una varietà di espressioni, ma le loro operazioni interne sono spesso identiche o simili. L'AI deve apprendere il significato di queste diverse espressioni individualmente e potrebbe trovare difficile determinare la priorità di quale sintassi raccomandare in situazioni specifiche.

Linguaggi Intermedi e Macchine Virtuali

L'AI apprende principalmente dal codice sorgente. Il linguaggio intermedio (bytecode), invece, perde il significato di nomi di variabili e altri elementi durante il processo di compilazione e deve essere reinterpretato dalla macchina virtuale in fase di esecuzione. Questo è un compito molto difficile da comprendere o convertire per l'AI. Ad esempio, la conversione da TypeScript a Go è possibile per l'AI, ma la conversione del bytecode del V8 engine in bytecode JVM o in linguaggio macchina è praticamente impossibile.

Il Vero Linguaggio Moderno nell'Era dell'AI

Attraverso quanto esposto, possiamo constatare che le caratteristiche dei linguaggi moderni sono in realtà elementi obsoleti e non adatti all'era dell'AI. Quale linguaggio, allora, potrebbe essere il più adatto a fungere da linguaggio moderno nell'era dell'AI? Un indizio può essere trovato negli elementi che i linguaggi moderni del passato escludevano. Un linguaggio moderno nell'era dell'AI dovrebbe:

  1. Avere una sintassi esplicita e un flusso naturale.
  2. Abbandonare le eccessive strutture OOP per adottare una struttura piatta e semplice.
  3. Creare diverse funzionalità con un numero limitato di parole chiave di base, piuttosto che con syntactic sugar o pattern impliciti superflui.
  4. Avere un sistema di build semplice e prevedibile, non complesso.

Il linguaggio che meglio si adatta a questi criteri è Golang. Il linguaggio Go è stato progettato per implementare la maggior parte delle funzionalità pratiche con un minimo di parole chiave essenziali e una combinazione sintattica semplice, escludendo rigorosamente astrazioni inutili e comportamenti impliciti. Questa struttura è vantaggiosa non solo per gli sviluppatori umani, ma anche per l'AI nell'interpretazione e generazione del codice.

Le caratteristiche di Go, che mirano a una struttura prevedibile e piatta, un flusso esplicito e una sintassi coerente, si adattano meglio a un ambiente di sviluppo in cui l'AI partecipa attivamente, a differenza dei linguaggi moderni esistenti progettati per gli sviluppatori umani. In questo senso, la filosofia di progettazione conservatrice di Go, che un tempo era considerata obsoleta, diventa la scelta più avanzata nell'era dell'AI.