Η βάση κώδικα Ruby υιοθετεί τον νέο μεταγλωττιστή JIT ZJIT

Ένας νέος μεταγλωττιστής JIT, ο ZJIT, έχει προστεθεί στη βάση κώδικα υλοποίησης αναφοράς της γλώσσας Ruby και τοποθετείται ως η επόμενη γενιά του Ruby JIT. Το ZJIT θα συμπεριληφθεί στην επόμενη μεγάλη έκδοση της Ruby 3.5, όπου θα είναι διαθέσιμο ως επιλογή παράλληλα με τον μεταγλωττιστή YJIT JIT, και ενδέχεται να το αντικαταστήσει στην Ruby 3.6. Όπως και το YJIT, ο νέος μεταγλωττιστής JIT είναι γραμμένος σε Rust. Και οι δύο μεταγλωττιστές JIT δημιουργήθηκαν από μια ομάδα προγραμματιστών στο Shopify ως μέρος μιας πρωτοβουλίας για τη βελτίωση της απόδοσης των προγραμμάτων Ruby που χρησιμοποιούν το πλαίσιο Rails και καλούν πολλές μεθόδους.

Σε αντίθεση με το YJIT, ο νέος μεταγλωττιστής JIT δεν μεταφράζει τον bytecode της εικονικής μηχανής YARV σε μια ενδιάμεση αναπαράσταση χαμηλού επιπέδου (ουσιαστικά σχεδόν απευθείας σε κώδικα μηχανής), αλλά μετασχηματίζει τον bytecode σε μια ενδιάμεση αναπαράσταση υψηλού επιπέδου SSA (Static Single Assignment), στην οποία μπορούν να υλοποιηθούν πρόσθετες φάσεις βελτιστοποίησης και η βελτιστοποίηση μπορεί να πραγματοποιηθεί με γνώμονα μεγάλα μπλοκ κώδικα, αντί να βασίζεται μόνο σε τρέχουσες λειτουργίες.

Το ZJIT εκτελεί τη μεταγλώττιση μιας ολόκληρης μεθόδου κάθε φορά, ενώ το YJIT μπορεί να χειριστεί μόνο τη μεταγλώττιση βασικών μπλοκ. Για τη δημιουργία προφίλ τύπων, το ZJIT εφαρμόζει μια κλασική αρχιτεκτονική JIT που χρησιμοποιεί τα συσσωρευμένα ιστορικά δεδομένα τύπων του διερμηνέα αντί για την τεχνική Lazy Basic Block Versioning (LBBV) που χρησιμοποιείται στο YJIT.

Η χρήση ενός IR υψηλού επιπέδου θα λύσει τα προβλήματα επεκτασιμότητας που αντιμετωπίζει το YJIT, θα θέσει τα θεμέλια για μελλοντική εφαρμογή της μεταγλώττισης JIT πολλαπλών επιπέδων, θα επιτρέψει προηγμένες βελτιστοποιήσεις (όπως πιο επιθετική ενσωματωμένη ανάπτυξη) και θα διευκολύνει την προσαρμογή του JIT σε διαφορετικές πλατφόρμες. Η επιστροφή σε ένα παραδοσιακό μοντέλο δημιουργίας προφίλ τύπων θα αφαιρέσει την πολυπλοκότητα από τον κώδικα και θα επιτρέψει σε νέους συνεισφέροντες να συμμετάσχουν (η χρήση του LBBV από το YJIT είχε ως αποτέλεσμα το έργο να είναι ασαφές για άλλους συνεισφέροντες και να αναπτύσσεται μόνο από υπαλλήλους του Shopify).

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο