ATLAS: Multi-View Code Representation Tool for C and C++ Source Programs
ATLAS is een open-source command-line tool die uitgelijnde abstracte syntaxisbomen, controleflowgrafieken en datastroomgrafieken genereert direct vanuit C- en C++-bronbestanden zonder dat een volledige build vereist is, waarbij multi-view representaties in JSON-, DOT- of PNG-formaten worden geproduceerd.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer
Stel je voor dat je een enorme, ingewikkelde Lego-kasteel hebt gebouwd van duizenden piepkleine steentjes. Je wilt begrijpen hoe het werkt, maar alleen naar het voltooide kasteel kijken is niet genoeg. Je hebt drie specifieke blauwdrukken nodig:
- De Vorm-blauwdruk: Hoe de steentjes op elkaar zijn gestapeld (Syntaxis).
- De Verkeers-blauwdruk: Hoe een persoon door de kamers en gangen zou lopen (Control Flow).
- De Voorraad-blauwdruk: Hoe materialen van de ene kamer naar de andere bewegen om dingen te bouwen (Data Flow).
Jarenlang moest je, als je een blauwdruk wilde voor een specifiek type kasteel (C en C++ code), eerst een enorme bouwploeg inhuren om het gebouw af te maken. Als er één steentje ontbrak (een ontbrekend bestand of header), stopte de ploeg en kreeg je helemaal geen blauwdrukken.
Maak kennis met ATLAS.
ATLAS is als een super slimme, directe scanner die er niet om geeft of het kasteel af is. Het kan een stapel losse steentjes, een half afgebouwde muur of een compleet kasteel scannen en direct alle drie de blauwdrukken voor je tekenen.
Hier is hoe het werkt, met behulp van eenvoudige analogieën:
1. De "Geen Bouwzone"-regel
De meeste tools zijn als strikte architecten die zeggen: "Ik kan de kaart niet tekenen totdat je het gebouw hebt voltooid en me de officiële vergunning hebt overhandigd." Als er één headerbestand (een klein instructieblad) ontbreekt, stoppen ze ermee.
ATLAS is anders. Het is als een detective die naar een half afgemaakte puzzel kan kijken en kan zeggen: "Ik heb de afbeelding op de doos niet nodig om te weten waar dit stukje thuishoort." Het kan code analyseren, zelfs als delen van het project ontbreken of als de code eigenlijk niet zou kunnen compileren. Het werkt direct op de ruwe brontekst.
2. Het "Universele ID-Tag"-systeem
Normaal gesproken, als je een Vorm-blauwdruk van de ene tool krijgt en een Verkeers-blauwdruk van een andere, gebruiken ze verschillende nummeringssystemen. Het is alsof de ene kaart "Kamer 101" gebruikt en de andere "De Blauwe Gang". Je kunt ze dan niet gemakkelijk met elkaar matchen.
ATLAS geeft elk stukje code een Universele ID-Tag.
- Een variabele genaamd
xkrijgt dezelfde ID in de Vorm-, Verkeers- en Voorraad-blauwdrukken. - Omdat ze allemaal deze tags delen, kun je de blauwdrukken combineren. Je kunt alleen naar het verkeer kijken, alleen naar de voorraadlijnen, of naar een gecombineerd beeld waarbij de verkeerslijnen rood zijn en de voorraadlijnen blauw, allemaal over dezelfde kaart heen gelegd.
3. De "Inzoomen en Filteren"-functie
Soms is een blauwdruk te rommelig om te lezen omdat er te veel kleine details in zitten (zoals elk enkel getal of een herhaalde variabelenaam).
ATLAS heeft drie "magische knoppen" (command-line flags) om het op te ruimen zonder de code opnieuw te scannen:
- Collapse (Inkrimpen): Als het woord "count" 50 keer voorkomt, voegt deze knop ze samen tot één grote node, zoals het groeperen van alle "keuken"-kamers tot één enkele "Keukenzone".
- Blacklist (Zwarte lijst): Je kunt ATLAS vertellen: "Laat me de getallen niet zien." Het verwijdert onmiddellijk alle numerieke steentjes uit de kaart, waardoor alleen de structuur overblijft.
- View Selection (Weergave selectie): Je kunt vragen om alleen de Verkeerskaart, of alleen de Voorraadkaart, of beide.
4. Hoe goed is het?
De auteurs hebben ATLAS getest op een enorme bibliotheek van open-source code (TheAlgorithms).
- Succespercentage: Het tekende een correcte "Verkeers-blauwdruk" (Control Flow Graph) voor 96,8% van de C-bestanden en 91,7% van de C++ bestanden.
- De "Kapotte" Bestanden: Zelfs voor bestanden die zo kapot waren dat ze niet gecompileerd konden worden door een normale computer, slaagde ATLAS er nog steeds in om de kaart correct te tekenen.
- Echt Wereldgebruik: Het wordt al gebruikt als de "ogen" voor een AI-systeem (SPARC) dat testgevallen voor code schrijft. Omdat ATLAS zo'n heldere kaart biedt van hoe de code beweegt, kan de AI betere tests schrijven dan voorheen mogelijk was.
5. Wat het (nog) niet kan
ATLAS is geweldig, maar het is geen magie. Het geeft toe dat het enkele blinde vlekken heeft:
- Het houdt "ghost pointers" (waarbij een pointer naar iets verborgen in het geheugen wijst) niet erg goed bij.
- Het heeft moeite met complexe C++ functies zoals geavanceerde templates of operator overloading.
- Het is nog niet getest op "megagrote" projecten (miljoenen regels code), alleen op kleinere tot middelgrote projecten.
De Kern van het Verhaal
ATLAS is een tool waarmee onderzoekers en ontwikkelaars het "skelet" van C en C++ code kunnen zien zonder eerst het hele lichaam te hoeven bouwen. Het brengt de structuur, de beweging en de datastroom samen in één verenigde kaart, wat het veel gemakkelijker maakt voor computers (en mensen) om software te begrijpen, te analyseren en te verbeteren. Het is gratis, open-source en wordt geleverd in een "Docker"-doos, wat betekent dat iedereen het kan draaien zonder een dozijn verschillende tools te installeren.
Verdrinkt u in papers in uw vakgebied?
Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.