Saya mencoba untuk lebih memahami apa yang diperlukan untuk kompiler untuk dapat membuat pilihan cerdas tentang konkurensi atas nama programmer. Saya menyadari bahwa ada banyak aspek sulit dari masalah ini misalnya:
- Memastikan bahwa tidak ada kondisi balapan
Memastikan bahwa kode yang akan dijalankan secara bersamaan tidak akan memiliki efek samping yang berdampak pada makna semantik dari kode tersebut
Memutuskan apakah overhead dari pemintalan threads bermanfaat mengingat tingkat paralelisme yang tersedia dalam kode
Pemahaman saya adalah bahwa dua representasi perantara utama yang digunakan dalam kompiler modern adalah penugasan tunggal statis untuk bahasa berorientasi prosedural dan berorientasi objek dan kelanjutan lewat gaya untuk bahasa fungsional. Alasan tentang masalah apa pun yang tercantum di atas tampaknya sulit menggunakan bentuk peralihan ini. Bahkan bahasa yang seharusnya secara teori memiliki peluang terbaik pada paralelisasi otomatis (bahasa fungsional murni seperti Haskell dengan jaminan tidak ada efek samping) telah membuat kemajuan terbatas di bagian depan ini.
Jadi pertanyaan saya sebenarnya adalah representasi perantara apa yang telah digunakan untuk mencoba dan mengatasi masalah ini? Apakah ada representasi lain yang telah digunakan dalam penelitian akademik yang saya tidak sadari yang lebih cocok untuk tugas ini? Apakah masalah ini yang secara mendasar harus diselesaikan oleh ujung depan kompiler dengan memanipulasi pohon sintaksis abstrak sebelum kompilasi mencapai representasi perantara?