Interesują mnie sprawdzone kompilatory sformalizowane w teorii typów Martina-Löfa, tj. Coq / Agda. W tej chwili napisałem przykład małej zabawki. Dzięki temu mogę udowodnić, że moje optymalizacje są prawidłowe. Na przykład można wyeliminować dodawanie zerowe, tzn. Wyrażenia takie jak „x + 0”.
Czy istnieją optymalizacje, które są trudne do przeprowadzenia przy użyciu zwykłego kompilatora, który byłby dobrym przykładem? Czy można udowodnić pewne właściwości programu, które pozwalają na optymalizacje, których nie można wykonać za pomocą zwykłego kompilatora? (tj. bez wnioskowania, które jest możliwe przy twierdzeniu twierdzenia)
Byłbym zainteresowany pomysłami lub przykładami, a także referencjami na ten temat.
Powiązane pytanie: Dowody poprawności kompilatora
edit: Jak ładnie ujął to Tsuyoshi w komentarzach: Szukam technik optymalizacji, które są trudne do wdrożenia, jeśli kompilator jest napisany w (powiedzmy) C, ale łatwiejsze do wdrożenia, jeśli kompilator jest napisany w (powiedzmy) Coq. Gdy Agda kompiluje się do C (przez haskell), możliwe jest robienie wszystkiego, co jest możliwe w Agdzie również w C. Prawdopodobnie jedyną korzyścią z twierdzeń takich jak Coq / Agda jest to, że można zweryfikować kompilator i optymalizacje.
edit2: Zgodnie z sugestią Vijay DI napisz, co przeczytałem do tej pory. Skoncentrowałem się głównie na Xavier Leroy i projekcie CompCert w INRIA (wydaje mi się, że 80-stronicowy artykuł to dobra lektura). Drugim zainteresowaniem były prace Antona Setzera nad programami interaktywnymi. Pomyślałem, że być może jego praca mogłaby zostać wykorzystana do udowodnienia właściwości programów IO i bisimulacji programów IO. Dzięki za wzmiankę o Sewell. Słyszałem jego przemówienie „Opowieści z dżungli” w ICFP i przeczytałem może 2-3 jego artykuły. Ale nie spojrzałem konkretnie na jego prace i prace jego współautorów.
Nie dowiedziałem się jeszcze, od czego zacząć, ani szukać artykułów na temat optymalizacji kompilatorów; np. które optymalizacje byłyby interesujące w kontekście zweryfikowanego kompilatora.