La nostra posizione

L'intelligenza artificiale può scrivere il tuo codice C++.
La verifica, però, spetta a te.

E ogni giorno c'è sempre di più da controllare. Visual Assist si basa su un parser deterministico, uno strumento che non fa mai supposizioni. Chiedi dove si trova un simbolo e la risposta sarà sempre identica, su qualsiasi macchina.

Mappa schematica dettagliata di una grande codebase C++. Da un singolo nodo QUERY, un percorso verde si risolve in modo pulito in un unico punto finale etichettato SAME ANSWER, mentre diversi percorsi rossi si diramano verso punti finali differenti etichettati RUN 1, RUN 2, RUN 3.
La stessa domanda, mappata su un codice sorgente reale. Un percorso verde porta a un'unica risposta; i percorsi rossi si disperdono, producendo un risultato diverso a ogni esecuzione.

Gli strumenti di intelligenza artificiale si sono guadagnati il ​​loro posto

Non si tratta di una critica all'IA. La includiamo noi stessi. VA Intelligence esegue modelli locali all'interno di Visual Studio e l'IA, una volta richiamata e con ambito limitato, è davvero utile per leggere e modificare il codice C++.

È difficile biasimare chiunque si affidi a questi strumenti. Eliminano il lavoro da zero, spiegano rapidamente il codice sconosciuto e sono davvero utili per la prototipazione nelle fasi iniziali. La velocità è un vantaggio reale e il settore l'ha prezzata di conseguenza.

I problemi iniziano quando la velocità viene confusa con la certezza.

Come i due si incastrano

Entrambi, deliberatamente

Ecco il modello completo in una sola riga: l'IA elabora le bozze, il parser verifica, tu decidi. Si tratta di due compiti distinti e Visual Assist è progettato per svolgere la fase di verifica, affiancando qualsiasi IA tu già utilizzi.

L'IA di generazione è brava a Verifica Il parser è bravo a
Spiegazione di codici sconosciutiNavigazione esatta verso qualsiasi definizione
Redigere un piano di implementazioneScoperta completa dei riferimenti: ogni utilizzo viene conteggiato.
Soluzioni di prima passata e modelliRefactoring sicuro a livello di progetto.
Riassumendo cosa fa un bloccoComprensione deterministica: stessa risposta a ogni esecuzione
ONE WORK SESSION → MODEL invoked when you ask drafts drafts context context PARSER always on · your code's ground truth
Il parser esegue l'intera sessione; il modello appare solo quando lo si richiama, traendo il suo contesto da quella riga. Tu rimani l'ingegnere: nulla viene applicato automaticamente.
Certezza, definita

Cosa sa con certezza un parser

Visual Assist analizza il tuo codice C++ (simboli, ambiti, tipi) e lo mantiene aggiornato mentre digiti. Tutto ciò che segnala è un dato di fatto sul tuo codice in quel preciso momento, non una previsione.

Trova riferimenti

Ogni riferimento è stato conteggiato. Il totale è il totale, non un campione.

Rinominare

Esamina ogni riferimento, oppure ti dice che non può. Nulla sfugge silenziosamente.

Vai alla definizione

Si posiziona sulla definizione, anche in codice ricco di macro o in fase di modifica.

Uno concreto

Chiedi a un modello di trovare ogni utilizzo di MAX_PLAYERSe otterrai un elenco plausibile di cui non ti puoi fidare completamente, un elenco che potrebbe cambiare la prossima volta che lo chiedi. Visual Assist restituisce 746, su 69 file. Chiedi di nuovo domani e il risultato è sempre 746.

Visual Assist Trova riferimenti Risultati che mostrano 746 riferimenti in 69 file per il simbolo MAX_PLAYERS.
Trova i riferimenti a un simbolo in un codebase di gioco di oltre 700 file: 746 riferimenti in 69 file. Un conteggio completo, ogni volta.
Prova Visual Assist
Prova gratuita di 30 giorni · Nessuna carta di credito richiesta
Il motore

Dietro le quinte: il parser parallelo

Questa è la sezione in cui entriamo nei dettagli: il parser è la parte di Visual Assist di cui raramente parliamo apertamente, ed è ciò che rende possibile la certezza.

Parallelo + incrementale

VA esegue il proprio parser su tutti i core, rianalizzando il testo man mano che si digita. L'indice rimane aggiornato a ogni tasto premuto.

Progettato per l'analisi del codice

Non ha bisogno di compilare il tuo codice, solo di comprenderlo, quindi salta ciò che manda in tilt il compilatore e continua a risolvere i simboli nel codice frammentato che non si compila.

Un algoritmo, non un modello.

Nessun campionamento, nessuna temperatura. Lo stesso codice fornisce la stessa risposta, quindi è un dato di fatto verificabile, non una supposizione.

IntelliSense si basa su un'interfaccia di compilazione: precisa con codice pulito, ma fragile e lenta quando è disordinato. Visual Assist ha fatto la scommessa opposta anni fa: ecco perché gli sviluppatori lo usavano in Unreal Engine e nel codice shader prima che entrambi avessero un supporto ufficiale. L'intelligenza artificiale non ha cambiato questa scommessa. Ha alzato la posta in gioco.

È proprio su questo tipo di parser che si sta muovendo VA Intelligence: funzionalità più contestualizzate, con il parser che fornisce al modello una comprensione più completa del progetto.

Leggi la posizione dell'intelligence del Dipartimento per gli Affari dei Veterani (VA).

l'altro percorso

Plausibile non è verificato

Un modello fornisce il codice più probabile. Probabile non è sinonimo di corretto, e in C++ è proprio in questo divario che si annidano gli errori. Eccone uno che crea problemi ai team reali:

// Nel codice sorgente sono presenti due overload:
void log( const std::string& message);
void log( bool ok);

// L'IA scrive questo. Lo compila. Lo distribuiamo?
log( "connessione persa" );

// Una stringa letterale è un const char* e
// const char* -> bool ha la precedenza su const char* -> std::string.
// Quindi questa chiamata chiama log(bool). Hai appena registrato `true`.
Un vero e proprio tranello nella risoluzione del sovraccarico. La chiamata sembra ovviamente corretta, compila senza problemi, ma esegue la funzione sbagliata. Andando alla definizione si accede al sovraccarico che viene effettivamente risolto, permettendo di individuarlo con un clic.

Il sovraccarico sbagliato

Compila senza problemi. Chiama la funzione che non intendevi chiamare.

I mondi cattivi

Sembra a posto in fase di revisione. Presenta delle incongruenze in fase di produzione.

Il cast silenzioso

Si compila senza preavviso. Corrompe lo stato alle 2 del mattino.

In parole semplici

Un LLM è un ottimo indovino. Sa esattamente cosa serve per una prima bozza e cosa non serve per una versione prossima alla consegna.

Leggi: cosa è reale, cosa è solo clamore e dove si colloca il C++

Prove a sostegno

Il lavoro di verifica sta crescendo

L'intelligenza artificiale non ha eliminato il lavoro di qualità. Lo ha spostato a valle , su chiunque legga le differenze, e di questo lavoro ce n'è decisamente di più.

≈ 20%
più velocemente — si aspettavano
misurato ↓
≈ 19%
più lento — cosa è successo

Nello studio randomizzato condotto da METR nel 2025, gli sviluppatori esperti che utilizzavano l'IA su codice che conoscevano bene hanno completato le attività il 19% più lentamente rispetto a quando non la utilizzavano, pur credendo di essere stati più veloci. Il tempo impiegato era dovuto alla revisione, alla correzione e alla richiesta di informazioni aggiuntive. La conclusione non è che "l'IA è lenta", ma che la verifica è un'attività reale e in continua evoluzione.

Fonte: METR.org — RCT, 16 sviluppatori, 246 attività

Recensire significa principalmente rispondere con certezza a domande semplici:

  • Chi richiama questa funzione?
  • Questo simbolo viene ancora utilizzato da qualche parte?
  • Cosa riguarda concretamente questo cambiamento?

Questi strumenti forniscono risposte precise. Più codice generato si analizza, più la revisione si basa su strumenti che non fanno supposizioni.

L'intera proposta: chiedi di nuovo.

Applica Visual Assist al tuo progetto più grande e poni la stessa domanda per due giorni di seguito. Otterrai sempre la stessa risposta. Garantito.

Prova Visual Assist
Prova gratuita di 30 giorni · Nessuna carta di credito richiesta
Oltre 1,5 milioni di installazioni sul Visual Studio Marketplace

Domande frequenti

Questa pagina è contraria all'intelligenza artificiale?

No. Sviluppiamo funzionalità di intelligenza artificiale e ci aspettiamo che tu continui a usare l'assistente che preferisci. La questione è più specifica: la generazione e la verifica sono compiti diversi e la verifica richiede uno strumento che fornisca sempre la stessa risposta.

Visual Assist sostituisce Copilot?

No, e non ci prova nemmeno. VA e Copilot funzionano in parallelo in Visual Studio. Copilot crea le bozze; il parser di VA è quello con cui si confronta la bozza.

Cosa significa esattamente "deterministico" in questo contesto?

Dato lo stesso codice, il parser produce lo stesso modello di esso — stessi riferimenti, definizioni e ambito di ridenominazione — a ogni esecuzione, su ogni macchina, a ogni sessione. Nessun campionamento, nessuna variazione, nessuna differenza.

Qual è un esempio di un modello di intelligenza artificiale che commette un errore nel codice C++?

Tra gli errori più comuni: scegliere l'overload sbagliato quando ce ne sono diversi che corrispondono (una stringa letterale che preferisce boolun altro tipo std::stringè un classico), suggerire un membro o un'API che non esiste su quel tipo, gestire in modo errato la proprietà degli smart pointer in modo che qualcosa venga liberato due volte o mai, e "aggiornare" una chiamata a una firma da una versione diversa della libreria. Ognuno di questi errori può sembrare perfettamente ragionevole nel diff.

Se il codice viene compilato, non va bene?

No. In C++ una compilazione pulita indica che la sintassi è valida, non che il comportamento sia corretto. Errori come use-after-free, riferimenti pendenti, overflow di interi e semplici errori di logica vengono tutti compilati senza problemi e si manifestano a runtime, spesso solo sotto carico. Compilare non è corretto.

Non posso semplicemente chiedere all'IA di trovare tutti gli utilizzi di un simbolo?

È possibile, ma non si avrà la certezza che l'elenco sia completo. Un modello restituisce un insieme plausibile e potrebbe non rilevare gli utilizzi in macro, modelli o file non analizzati, e potrebbe restituire un insieme diverso la volta successiva. Un parser, invece, analizza l'intero set di traduzioni e fornisce il conteggio completo, sempre lo stesso a ogni esecuzione.