Saya sedang menulis pengoptimal untuk bahasa yang mirip dengan JavaScript, dan perlu memilih representasi kode perantara. Pilihan yang jelas / tipikal akhir-akhir ini adalah Static Single Assignment (SSA).
Namun, Implementasi Kompiler Modern di C juga membahas bentuk perantara fungsional, yang pada dasarnya berarti akan berfungsi murni untuk representasi perantara (murni dalam hal hanya variabel lokal, tumpukan data masih bisa berubah, dan bukan CPS, hanya let
blok sederhana dan panggilan ekor) dan memiliki beberapa keunggulan dalam hal lebih mudah untuk dipikirkan.
Agaknya itu bukan no-brainer atau semua orang sudah akan menggunakan representasi seperti itu, jadi pertanyaan saya adalah, apa kerugiannya bentuk perantara fungsional dibandingkan dengan SSA?
sumber
Jawaban:
SSA sangat bagus untuk menghilangkan kode mati, propagasi konstan, spesialisasi parsial dan semacamnya. Jika hal-hal semacam ini tidak ada di menu Anda, Anda dapat melewati SSA dan menggunakan representasi yang lebih santai untuk lintasan analisis yang lebih sederhana
sumber