Do tego co mówisz — by kompilator poprawiał źle napisany kod — jeszcze nam daleko. I niekoniecznie jest to potrzebne.
Właśnie niekoniecznie chodziło mi o źle napisany kod. Bardziej o kod deklaratywny, jak np Prolog. Nie znam się jakoś dobrze na Prologu, ale umożliwia on np zapisanie jakichś warunków, a potem uzyskanie odpowiedzi na nie. Problem w tym, że Prolog stosuje zwykły brute-force z back-trackingiem, zamiast sztucznej inteligencji czy czegoś w tym stylu.
Można pisać kod np:
posortowany(X) = dla każdego i od 0 do |X| - 2: X(i) < X(i + 1)
permutacje(X) = zbiór{dla każdego x z X dołącz: x + permutacje(X - x)}
sortuj(X) = wybierz zbiór z permutacje(X) aby spełniał relację posortowany
I mamy już funkcję sortuj(X). Można to zastosować bezpośrednio i generować wszystkie permutacje, ale chodzi mi właśnie o to, aby tutaj kompilator znalazł lepszą metodę niż generowanie permutacji wprost.
Słyszałem kiedyś taką historię o Prologu (albo innym języku, nie pamiętam już, ale to chyba był Prolog), w której miał być on receptą na wszelakie bolączki związane z programowaniem. Ludzie mieli właśnie nadzieję, że uda się napisać kompilator, który będzie znajdował optymalne rozwiązania dla postawionych deklaratywnie problemów. Niestety nie udało się. Generalnie (wg mnie) napisanie takiego kompilatora jest równoważne ze opracowaniem sztucznej inteligencji, a jeżeli ją opracujemy to raczej szybko prześcignie naszą :)