Η πρόκληση της απόδοσης στον συναρτησιακό προγραμματισμό

Παραδοσιακά, ο καθαρός συναρτησιακός προγραμματισμός αντιμετωπίζεται με επιφύλαξη σε ό,τι αφορά κρίσιμους τομείς υποδομών και υψηλής απόδοσης (high-throughput), όπου οι γλώσσες συστήματος όπως η C και η C++ κυριαρχούν. Ωστόσο, πρόσφατα εγχειρήματα δείχνουν ότι η ψαλίδα κλείνει εντυπωσιακά. Μετά την επιτυχία του Lean 4, το οποίο κατάφερε να ξεπεράσει αντίστοιχες υλοποιήσεις σε Rust, το ερώτημα παραμένει: πόσο κοντά μπορεί να φτάσει μια γλώσσα όπως το Roc στις επιδόσεις του βελτιστοποιημένου σε επίπεδο μετάλλου κώδικα C;

Η αρχιτεκτονική προσέγγιση του Roc

Το Roc σχεδιάστηκε εξ αρχής με γνώμονα την ταχύτητα εκτέλεσης και μεταγλώττισης, παρακάμπτοντας ορισμένα από τα θεωρητικά βάρη που συνοδεύουν τις ακαδημαϊκές γλώσσες/αποδείκτες θεωρημάτων (proof assistants). Αξιοποιώντας έναν ολοκαίνουργιο compiler και μακροχρόνιες βελτιστοποιήσεις, η ομάδα ανάπτυξης επικεντρώθηκε στο πακέτο roc-deflate για να αναμετρηθεί με το βιομηχανικό πρότυπο του libdeflate.

Αποτελέσματα συγκριτικής αξιολόγησης (benchmarking)

Χρησιμοποιώντας το κλασικό corpus Silesia για την επαλήθευση ταυτόσημων outputs, τα δεδομένα από 144 benchmarks αποκαλύπτουν μια ευχάριστη έκπληξη. Στη διάμεση περίπτωση (median case), το Roc έτρεξε μόλις 2.6% πιο αργά από το libdeflate στο M1 MacBook Pro και 8.9% πιο αργά σε μηχάνημα Linux με AMD Ryzen 9. Αποδεικνύεται έτσι ότι ο καθαρός συναρτησιακός προγραμματισμός μπορεί πλέον να σταθεί αξιοπρεπώς απέναντι σε χειροποίητες, χαμηλού επιπέδου υλοποιήσεις C.