Defungsionalisasi adalah transformasi program yang mengubah program tingkat tinggi menjadi program tingkat pertama. Idenya adalah bahwa diberikan suatu program, hanya ada banyak lambda-abstraksi, sehingga Anda dapat mengganti setiap lambda dengan id, dan setiap aplikasi fungsi dengan panggilan ke prosedur yang berlaku yang bercabang pada id itu. Ini kadang - kadang digunakan dalam kompiler untuk bahasa fungsional, tetapi penerapannya dibatasi oleh fakta bahwa defungsionalisasi adalah transformasi seluruh program (Anda harus secara statis mengetahui semua fungsi dalam program), dan hanya kompiler seluruh program yang menggunakan Itu.
Namun, Pottier dan Gauthier telah diberikan algoritma defactalization diketik polimorfik menggunakan pengetikan yang lebih canggih yang melibatkan GADTs. Sekarang, mengingat penyandiannya, dimungkinkan untuk menambahkan case catch-all ke datatype lambda mereka yang bukan tag, tetapi yang berisi fungsi orde tinggi. Ini berarti bahwa itu harus dimungkinkan untuk menggunakan pengkodean mereka untuk melumpuhkan pada basis modul-demi-modul.
Adakah yang melakukan ini, dan arahkan saya ke kompiler menggunakan ide ini? (Kompilator Toy tidak apa-apa, dan sebenarnya lebih disukai.)
sumber