Presentazione di MediaWiki Code2Code Search: ricerca semantica per trovare codice per somiglianza profonda

Translate this post
L'interfaccia utente in telugu di MediaWiki Code2Code Search
L’interfaccia utente in telugu di MediaWiki Code2Code Search

Hai mai provato a trovare una funzione specifica in un’estensione MediaWiki, ricordandone vagamente il funzionamento ma non il nome? Se sì, c’è un nuovo strumento che potrebbe venirti in aiuto. Si chiama MediaWiki Code2Code Search ed è un po’ diverso da quanto abbiamo finora. Esegue una ricerca semantica (immaginala come una «ricerca per significato, non solo per corrispondenza esatta»), per aiutarti a individuare frammenti di codice nei nostri repository e a rappresentarli come vettori matematici.

Si chiama “Code2Code” perché l’interrogazione avviene tramite un frammento di codice che cerca altri frammenti di codice: non è necessario scrivere una query in linguaggio naturale. S’incolla un frammento di codice che catturi un determinato comportamento, e lo strumento cerca di trovare codice simile nelle estensioni MediaWiki e nel core, anche se il linguaggio di programmazione, lo stile di codifica, i nomi delle variabili o la sintassi esatta sono diversi.

Questo post è quindi rivolto agli sviluppatori di estensioni MediaWiki, agli autori di accessori e a chiunque navighi nella nostra raccolta condivisa di codice. I possibili casi d’uso includono la manutenzione del codice, il tracciamento delle vulnerabilità e il rilevamento dei casi di plagio.

Quest’è l’idea. Ora guardiamo cosa succede dietro le quinte.

Demo: ricerca di un codice simile a un’implementazione ricorsiva del massimo comune divisore, in Python.

Ma cosa fa concretamente?

Flusso logico di MediaWiki Code2Code Search
L’indicizzazione offline (fasi 1’–4′) incontra la ricerca online (fasi 1–5).

Il MediaWiki Codesearch già esistente (che ha vinto il premio Coolest Tool Award 2019 ed è ancora ampiamente utilizzato – per buone ragioni!) è veloce e affidabile. Utilizza tecniche classiche di corrispondenza tra pattern per individuare le occorrenze in un testo. È come un paio di occhi molto precisi e veloci.
Per converso, il nuovo MediaWiki Code2Code Search cerca di capire il significato del codice, anche se non si digitano le parole o i simboli esatti. Trasforma i frammenti di codice in «embedding» – vettori matematici in uno spazio ad alta dimensione. Il codice simile è proiettato in posizioni limitrofe nello spazio vettoriale. L’animazione dello sfondo, con vortici di particelle colorate, è una rappresentazione artistica di questa trasformazione matematica: ogni punto rappresenta un embedding di codice, sebbene semplificato. I vettori vicini sono simili per significato, pur essendo distinti per origine.

Code2Code Search si avvale di un modello bi-encoder di Jina AI. Wikimedia Deutschland (WMDE) ha avuto un’esperienza positiva con Jina AI durante il progetto Wikidata Embedding, da cui ho tratto ispirazione. Da fine 2025, anche WMF sta sviluppando modelli di ricerca ibrida (e, a decorrere da marzo 2026, li sta sperimentando in alcune edizioni di Wikipedia), combinando la ricerca tradizionale basata su parole chiave col recupero basato su embedding semantici.

Ogni componente di MediaWiki Code2Code Search è open source. Lo strumento utilizza una strategia di recupero a singolo stadio: il modello bi-encoder di Jina AI (con 500 milioni di parametri) calcola offline le rappresentazioni vettoriali dei frammenti di codice; successivamente, lo stesso modello converte online la query in un vettore; l’indice vettoriale individua i frammenti di codice più rilevanti nell’intera base di codice indicizzata. Il modello opera all’interno dei limiti predefiniti di Toolforge e restituisce i risultati ordinati per similarità semantica.

Archiviare la base di codice di MediaWiki su Software Heritage

Soffioni di tarassaco
Come i semi del dente di leone, anche il codice sorgente può disperdersi e andare perduto. L’archiviazione gli fornisce radici sicure.

Come wikimediani, sappiamo bene che la conoscenza richiede un’attenta cura. Oltre al bisogno di reperire il codice, dobbiamo quindi garantirne la tracciabilità.

Ho archiviato oltre 2.400 repository di codice MediaWiki su Software Heritage (SWH). In quanto bene pubblico digitale sostenuto dall’UNESCO, SWH rispecchia l’impegno di Wikimedia per una conoscenza libera ed equa. Fornendo un modello di dati unificato tra le forge (GitLab, GitHub, Gerrit, Bitbucket), SWH offre gli SWHID, permalink intrinseci che garantiscono che una specifica riga di codice rimanga accessibile per sempre, anche se il repository originale è spostato o eliminato.

Attraverso questa collaborazione, contribuiamo a preservare il software come bene pubblico trasparente e inclusivo. Per saperne di più sulla visione di SWH, puoi leggere il mio post di febbraio su Diff riguardo al decennale presso l’UNESCO.

UI poliglotta: perché l’interfaccia parla telugu, italiano e francese

Ma parliamo del frontend! Quando aprirai lo strumento, la prima cosa che noterai è l’interfaccia utente (UI). Perché parla telugu, italiano, francese (e altre 13 lingue indiane)? E va bene, fammi raccontare una storia.

Come mai l’italiano? Beh, è la mia lingua madre. Ma c’è una curiosità più profonda. Nel XV secolo, l’esploratore veneziano Nicolò de’ Conti notò che le parole in telugu terminano spesso con vocali, proprio come in italiano. Così, chiamò il telugu “l’italiano d’Oriente”. Quindi (forse!) l’italiano è il “telugu d’Occidente”.

Settore 14 della mappa di Fra Mauro, 1459
La mappa veneziana del XV secolo, ispirata alle esplorazioni di Nicolò de’ Conti (col sud in alto!), descrive le meraviglie dell’Asia meridionale: Taprobana (Sri Lanka), Bangala (Bengala), Odișa (Odisha) e le isole Andamane.

Proprio come le mappe medioevali (come quella di Fra Mauro, a Venezia) univano mondi lontani sulla stessa pergamena, questo strumento cerca di avvicinare gli sviluppatori al di là delle barriere linguistiche naturali e di quelle di programmazione.

(I colori dell’interfaccia sono pura geometria vettoriale; non hanno nulla a che vedere coll’Italia e l’India, però…)

Il francese è un omaggio alla città natale dell’archivio SWH: Parigi.

Quindi, l’interfaccia è tradotta perché lo sviluppo del codice dovrebbe riflettere la diversità delle nostre comunità software e non richiedere la padronanza dell’inglese.

Provalo e condividi le tue impressioni.

Provalo: https://code2codesearch.toolforge.org/

Consulta anche la pagina su MediaWiki. Lo strumento è stato appena rilasciato; indicizza oltre 1.100.000 frammenti di codice provenienti da oltre 83.000 file sorgente, distribuiti in più di 2.400 repository. L’indice si basa su FAISS, una libreria di Facebook Research (ora Meta); per ogni singolo risultato, i permalink del codice sono forniti tramite Software Heritage (SWH).

C’è sempre margine di miglioramento. Un limite principale è che l’indice non riceve aggiornamenti dinamici quando nuove versioni del codice vengono committate nei repository originali; nella versione attuale, MediaWiki Code2Code Search indicizza le versioni del codice nei rami main come si presentavano all’inizio di aprile 2026. Inoltre, alcuni linguaggi di programmazione rari potrebbero non essere supportati; quelli attualmente in uso sono Python, C++, C, PHP, JavaScript, TypeScript, Lua, Go, Java e Rust.

Se lo provi e trovi qualcosa di strano, di brillante o entrambe le cose, contattami! Apri una segnalazione nel repository GitHub, lascia un messaggio sulla mia pagina di discussione utente su Meta-Wiki, oppure rispondi a questo post nella sezione commenti di Diff. Prova a cercare una funzione che hai scritto, diciamo, sei mesi fa e di cui hai dimenticato il nome. Incolla un frammento di 5 righe. Poi dimmi: hai trovato quello che cercavi? Mi farebbe piacere sentire altri wikimediani, in particolare tecnici, che lavorano su progetti in lingue indiane, o chiunque abbia mai faticato a trovare il pezzo di codice giusto. Alcuni membri della comunità tecnica indiana stanno suggerendo una transizione verso una UI Codex, più semplice e accessibile, al posto dell’attuale stack Three.js + React dall’aspetto moderno: se ne può discutere!

In questo progetto, ho contribuito in parte durante il mio orario lavorativo nella mia veste di ricercatore presso la Scuola Superiore Sant’Anna di Pisa; in tale veste sono finanziato dall’Alfred P. Sloan Foundation col grant #G-2025-25193 (sloan.org). Ringrazio i miei colleghi di Pisa e tutti i wikimediani nei gruppi Telegram come Indic Wikimedia technical forum, Wikidata Help, Wikimedia Hackathon e Comunità tecnica Wikimedia in Italiano per le discussioni e gli spunti d’ispirazione su questo progetto.

Il nuovo MediaWiki Code2Code Search integra il Codesearch esistente senza sostituirlo. Il vecchio Codesearch è ancora lì ed è ottimo. Ma se hai mai desiderato capire cosa il codice faccia, non solo come appare, prova a fare una ricerca.
Lo strumento è attivo. Il codice è completamente aperto (rilasciato con licenza Apache 2.0). E i punti vettoriali ti stanno aspettando.

Can you help us translate this article?

In order for this article to reach as many people as possible we would like your help. Can you translate this article to get the message out?