Mistral migrerede 40.000 linjer Fortran til C++
En europæisk energivirksomhed fik flyttet et fysikberegnet reservoirsimulator med et test-setup, der måler numerisk overensstemmelse før og efter.
Først et målebånd for tallene
Mistral hjalp en europæisk energivirksomhed med at flytte 40.000 linjer Fortran 77 over i C++. Koden var en fysiktung reservoirsimulator uden testsuite og uden samlet dokumentation.
Før et eneste AI-agent-oversættelsesforsøg blev sat i gang, byggede holdet det, de kalder et parity harness: en kontrol, der beviser, at begge kodetyper regner ens. Agenter blev bedt om at tilføje rutiner i Fortran-koden, som gemmer tilstandsbilleder, mens C++-testframeworken bruger de samme værdier som reference.
I et eksempel dumpede en indsat linje værdien 42.71834 for variablen RHOG, og den samme værdi blev kontrolpunkt for det oversatte C++-modul. Kriteriet var numerisk overensstemmelse i både slutresultater og en række kritiske mellemled, som virksomhedens reservoiringeniører udpegede.
Det gjorde lange agentkøringer tryggere, skriver Mistral, og netop dette bør være et af de første skridt i et moderniseringsprojekt.
- Fortran migreret til C++ i projektets første sprint
- 40.000 linjer
- Samlet omfang af den Fortran-baserede kodebase
- 300.000 linjer
- Agenter sat i gang til at dokumentere kaldetræet
- over 100
Over hundrede agenter skrev dokumentation
Projektets dokumentation lå spredt i gamle PDF-filer og i kommentarer dybt inde i Fortran-koden. Proceduralkode har en praktisk egenskab: hele programmet kan tegnes som ét træ af kaldende og kaldte rutiner.
Mistral parsede kodebasen med en egen parser og brugte Vibe CLI til at starte over hundrede agenter, der dokumenterede træet. De enkelte agenter kunne trække relevante PDF'er ind via dokumentbiblioteker og Mistral OCR.
Arbejdet gik nedefra i træet og opad: hver node skabte en underagent, der dokumenterede den og åbnede en pull request i det oprindelige repository. En reviewer-agent kørte på fast tidsplan, gennemgik nye pull requests og planlagte rettelser, når det var nødvendigt.
Fuld autonomi gav Fortran i C++-træk
Ved første forsøg fik hver Fortran-subroutine sin egen agent, der oversatte selvstændigt i en uge. Resultatet virkede, men COMMON-blocke blev globale struct'er ét til ét, og GOTO-styret kontrolflow stod urørt tilbage. Ifølge Mistral lignede det Fortran omskrevet med C++-syntax.
Andet forsøg gav agenterne struktur: planlægger, kodende, tester og kvalitetsgennemgående agent per modul. Kvaliteten steg mærkbart, men agenterne gik i stå ved svære fejl og havde ingen til at løse dem.
Løsningen blev et mellemting: en menneskelig operatør styrer en arbejdsgang af kodende, testende og gennemgående agenter modul for modul, med en menneskelig godkendelse af pull requests. Modulerne blev udpeget via træet som selvstændige dele på under cirka 10.000 Fortran-linjer.
Flere detaljer
- Fortran 77 blev standardiseret i 1977; variabelnavne er højest 6 tegn.
- Variabler typet efter første bogstav: stavefejl skaber stille en ny variabel.
- Tilstand lå i COMMON-blocke, global hukommelse delt på tværs af programmet.
- Integration med videnskabeligt beregningsframework PetSc krævede strukturel omskrivning.
Kilder:
Mistral AI →
Genfortalt i egne ord af AI-nyheder.com · Tjek altid originalkilden, før du handler på vigtige oplysninger.