Saya tertarik pada kompiler terverifikasi yang diformalkan dalam teori tipe Martin-Löf, yaitu Coq / Agda. Saat ini saya sudah menulis contoh mainan kecil. Dengan demikian saya dapat membuktikan bahwa optimasi saya benar. Misalnya penambahan dengan nol dapat dihilangkan, yaitu ekspresi seperti "x + 0".
Adakah optimasi yang sulit dilakukan dengan kompiler biasa, yang akan berfungsi sebagai contoh yang baik? Apakah mungkin untuk membuktikan sifat-sifat tertentu dari suatu program yang memungkinkan optimasi yang tidak mungkin dilakukan dengan kompiler biasa? (Yaitu tanpa inferensi yang dimungkinkan dengan teorema teorema)
Saya akan tertarik dengan ide atau contoh dan juga referensi tentang topik tersebut.
Pertanyaan terkait: Bukti kebenaran kompiler
sunting: Seperti yang dikatakan Tsuyoshi dengan baik di komentar: Saya mencari teknik optimasi yang sulit untuk diterapkan jika kompiler ditulis dalam (katakanlah) C tetapi lebih mudah untuk diterapkan jika kompiler ditulis dalam (katakanlah) Coq. Ketika Agda mengkompilasi ke C (melalui haskell) dimungkinkan untuk melakukan segala sesuatu yang mungkin dalam Agda juga dalam C. Mungkin satu-satunya manfaat pembalik teorema seperti Coq / Agda adalah bahwa kompiler dan optimisasi dapat diverifikasi.
sunting2: Seperti yang disarankan oleh Vijay DI tulis apa yang sudah saya baca sejauh ini. Saya terutama berfokus pada Xavier Leroy dan proyek CompCert di INRIA (ada kertas 80 halaman yang merupakan bacaan yang baik, saya pikir). Minat kedua adalah karya Anton Setzer pada program interaktif. Saya pikir itu mungkin karyanya dapat digunakan untuk membuktikan properti tentang program IO dan bisimulasi program IO. Terima kasih telah menyebut Sewell. Saya pernah mendengar ceramahnya "Kisah-kisah dari hutan" di ICFP dan mungkin membaca 2-3 makalahnya. Tetapi saya belum secara khusus melihat pekerjaannya dan rekan penulisnya.
Saya belum menemukan di mana harus memulai atau mencari makalah tentang mengoptimalkan kompiler; misal, optimasi mana yang menarik untuk dilihat dalam pengaturan kompiler terverifikasi.
Jawaban:
makalah ini oleh Yves Bertot, Benjamin Gr'egoire, dan Xavier Leroy membangun kompiler pengoptimalisasi untuk bahasa mirip-C yang murni berdasarkan pada spesifikasi Coq. beberapa teknologi ini tampaknya digunakan dalam kompiler C CompCert .
Pendekatan terstruktur untuk membuktikan optimisasi kompiler berdasarkan analisis aliran data
itu mempertimbangkan kebenaran dari dua optimisasi, propagasi konstan (CP) dan eliminasi subekspresi umum (CSE), bagian 4. optimisasi ini lebih maju daripada yang terkait dengan kompiler berbasis non-Coq (s) untuk bahasa yang sama. lihat misalnya grafik benchmark ini dibandingkan dengan gcc. (Kompilator berbasis Coq mungkin lebih lambat untuk dikompilasi meskipun ini jarang disebutkan!)
Namun pada akhir makalah mereka mencatat bahwa ada beberapa optimasi kompiler dalam kompiler nyata yang tidak dapat dimodelkan dalam kerangka kerja mereka.
peningkatan optimasi bukan satu-satunya unsur pertimbangan di sini, aspek lain adalah bahwa logika optimisasi kompiler dapat dikenakan cacat halus karena sifatnya yang kompleks. selama bertahun-tahun gcc telah ditemukan memiliki bug dalam berbagai rutinitas logika optimasinya. misalnya bug gcc?
sumber
Ini sama dengan memperluas typechecker untuk menyediakan beberapa properti program ke optimizer. Saya percaya Tsuyoshi Ito benar dan Anda mungkin sedikit salah kaprah tentang Coq. Ini adalah alat yang hebat untuk menyediakan kompiler bug-kurang, tetapi dalam kasus yang Anda jelaskan, itu tidak memberikan lebih banyak kekuatan untuk analisis statis.
Satu-satunya hal yang dapat saya pikirkan tentang memperkuat analisis statis dengan Coq, adalah melengkapi bahasa Anda dengan pernyataan yang mengandung beberapa bukti yang ditulis pengguna. - Jika kompiler itu sendiri akan diterjemahkan ke dalam bahasa termasuk bulu untuk pemeriksaan ketik dinamis, dan jika bukti yang ditulis pengguna akan dapat dikonversi ke fungsi, maka akan mungkin untuk menerapkan fungsi-fungsi tersebut sebagai properti prasyarat untuk beberapa subtipe atau optimisasi. - Ini memang, akan memberikan daya lebih kepada kompiler.
Namun, sejauh yang saya bisa lihat, ini akan lebih berguna untuk memperkuat subtyping. - Sulit membuat programmer mengetahui, properti apa di tempat apa yang akan membantu pengoptimal.
sumber