Kompilatorer för statiskt maskinskrivna funktionella programmeringsspråk är ökända för att generera förvirrande typ felmeddelanden. När kompilatorn upptäcker ett typfel, rapporterar den vanligtvis programplatsen där typkontrollen misslyckades som felets källa. Eftersom andra felkällor inte ens beaktas, missar man ofta själva grundorsaken. Ett lämpligare tillvägagångssätt är att beakta alla möjliga felkällor och rapportera den mest användbara som omfattas av något användningskriterium. I vårt tidigare arbete visade vi att detta tillvägagångssätt kan formuleras som ett optimeringsproblem kopplat till satisfiability modulo-teorier (SMT). Denna formulering separerar rent den heuristiska karaktären av användbarhetskriterier från det underliggande sökproblemet. Tyvärr, algoritmer som söker efter en optimal felkälla kan inte direkt använda huvudtyper som är avgörande för att hantera exponentiellt tid komplexiteten i beslut problemet med polymorfa typkontroll. I den här artikeln presenterar vi en ny algoritm som effektivt hittar en optimal felkälla i ett givet otypat program. Vår algoritm använder en förbättrad SMT-kodning för att klara av den höga komplexiteten i polymorfisk maskinskrivning genom att iterativt utöka skrivbegränsningarna från vilka huvudtyper härleds. Algoritmen bevarar den rena separationen mellan heuristiken och själva sökningen. Vi har implementerat vår algoritm för OCaml. I vår experimentella utvärdering fann vi att algoritmen minskar körtiderna för optimal typfellokalisering från minuter till sekunder och skalar bättre än tidigare lokaliseringsalgoritmer.
Som ett programexempel, Pavlinovic et al. I REF föreslås ett tillvägagångssätt som tar hänsyn till alla möjliga kompileringsfelkällor för statiskt maskinskrivna funktionella programmeringsspråk och som rapporterar det mest användbara språket som omfattas av något användbarhetskriterium.
Practical SMT-based type error localization
{'venue': 'ICFP 2015', 'journal': None, 'mag_field_of_study': ['Computer Science']}