Saya memulai penelitian bibliografi pribadi tentang algoritme pemeriksaan-jenis dan ingin beberapa kiat. Apa saja algoritma pengecekan tipe, strategi dan teknik umum yang paling umum digunakan?
Saya khususnya tertarik pada algoritma pemeriksaan tipe kompleks yang diimplementasikan dalam bahasa yang diketik sangat dikenal statis seperti, misalnya, C ++, Java 5+, Scala atau yang lainnya. Yaitu, algoritma pengecekan tipe yang tidak terlalu sederhana karena pengetikan yang sangat sederhana dari bahasa yang mendasarinya (seperti Java 1.4 dan di bawah).
Saya sendiri tidak tertarik pada bahasa X, Y, atau Z tertentu. Saya tertarik pada algoritma pengecekan tipe terlepas dari bahasa yang mereka targetkan. Jika Anda memberikan jawaban seperti "bahasa L yang belum pernah Anda dengar yang diketik dengan kuat dan pengetikannya kompleks memiliki algoritma pengecekan tipe yang melakukan A, B dan C dengan memeriksa X dan Y menggunakan algoritma Z", atau "the strategi X dan Y digunakan untuk Scala dan varian Z dari A yang digunakan untuk C # keren karena fitur R, S dan T yang bekerja dengan cara itu ", maka jawabannya bagus.
sumber
Jawaban:
Sebagian besar penelitian sebenarnya tidak mempublikasikan algoritme pengecekan tipe untuk bahasa pemrograman full blown. Anda akan menemukan beberapa formalisasi dari sebagian besar sistem tipe untuk bahasa pemrograman penuh, seperti pekerjaan yang dilakukan oleh Drossopoulou dan Eisenbach untuk Java atau karya Nipkov et al pada C ++ . Namun, lebih sering, Anda hanya akan menemukan sistem tipe untuk beberapa bagian inti dari bahasa (Featherweight Java adalah salah satu contoh) atau untuk konsep inti bahasa seperti pendekatan inferensi tipe lokal dari scala .
Dalam konferensi seperti POPL dan ICFP Anda akan menemukan banyak algoritma pengecekan tipe untuk jenis tertentu dari sistem tipe, dan pendekatan baru seperti pengecekan bidirectional dan tridirectional .
Secara lebih umum, Anda mungkin perlu tahu tentang algoritma Damas-Milner , inferensi tipe lokal, bidirectional dan tridirectional type checking, dan berkembang dari sana, dengan mengikuti referensi di makalah dan dengan menggunakan Google Cendekia untuk menemukan makalah yang mengutip ini dan membangunnya pendekatan yang dijelaskan. Juga, seperti yang disarankan di atas, konferensi seperti POPL, ICPF, ESOP dan bahkan ECOOP dan OOPSLA akan memiliki makalah yang relevan dengan pencarian Anda.
sumber
Alat dasar adalah Tata Bahasa Atribut . Anda mungkin tidak akan dapat melakukan setiap hal jahat yang dapat Anda bayangkan bersama mereka, tetapi mereka adalah titik awal yang baik.
Pada dasarnya, Anda dapat berjalan di atas pohon sintaksis abstrak program top-down dan / atau bottom-up dan memberikan informasi sekitar. Jadi, misalnya, Anda bisa meneruskan informasi tipe cakupan global (misalnya kelas dan anggotanya) ke bawah dan menentukan jenis ekspresi secara rekursif, yaitu bottom-up, meneruskan tipe yang dihasilkan ke atas.
Temukan beberapa penjelasan dan contoh dalam slide di sini (Bab 5).
sumber