Η επικράτηση των πολυπύρηνων αρχιτεκτονικών στο σύγχρονο υπολογιστικό γίγνεσθαι επανάφερε το συναρτησιακό προγραμματισμό στο προσκήνιο ως το προφανές πλαίσιο απλοποίησης και αφαίρεσης. Υπάρχουσες συναρτησιακές γλώσσες, όπως η Erlang και η Haskell, υπέστησαν μετατροπές ή επεκτάθηκαν προς εκμετάλλευση του παράλληλου υλικού, ενώ νέες, όπως η F#, η Scala και η Clojure, δημιουργήθηκαν προς διαχείριση της πολυπλοκότητας σε δημοφιλείς εικονικές μηχανές.
Οι εν λόγω γλώσσες προσφέρουν ένα ευρύ φάσμα χαρακτηριστικών που σχετίζονται με τον ταυτοχρονισμό και την παραλληλία, ωστόσο μια συστηματική παρουσίαση και σύγκριση αυτών απουσιάζει από τη σύγχρονη βιβλιογραφία. Η συνεισφορά μας συνίσταται σε μια συγκριτική
μελέτη των γλωσσών Erlang, F# και Scala ως προς την εκφραστικότητα, την ευκολία χρήσης, την επίδοση και την κλιμακωσιμότητα. Συγκεκριμένα, αξιολογούμε τα μέσα που παρέχουν οι γλώσσες αυτές για παράλληλο μετασχηματισμό συλλογών στοιχείων, ταυτοχρονισμό
βασιζόμενο σε futures και το μοντέλο των actors, κάνοντας χρήση τους σε υλοποιήσεις που επιλύουν ένα απλό υπολογιστικό πρόβλημα ονόματι Orbit. Η μελέτη μας καταλήγει στα ακόλουθα βασικά συμπεράσματα για τις γλώσσες που εξετάζουμε ως προς τον ταυτοχρονισμό
και την παραλληλία: η Erlang αποτελεί μια ώριμη λύση με καλή κλιμακωσιμότητα αλλά χαμηλές επιδόσεις σε αριθμητικούς υπολογισμούς, η F# παρέχει σταθερή βάση για την αντιμετώπιση των εξεταζόμενων ζητημάτων αλλά κλιμακώνει μέτρια, ενώ η Scala, παρά τα προβλήματα
που ανακύπτουν από τον επί του παρόντος γρήγορο ρυθμό εξέλιξής της, συνδυάζει πλήθος σχετικών χαρακτηριστικών με πολύ καλές επιδόσεις και κλιμακωσιμότητα.
In the contemporary reign of multicore computing, functional programming has regained attention as the obvious paradigm to simplify and abstract. Existing functional languages, like Erlang and Haskell, have been modified or extended to exploit parallel hardware, while
new ones, like F#, Scala and Clojure, have been created to tackle complexity on popular virtual machines.
These languages offer a vast range of features that are related to concurrency and parallelism, yet current literature lacks a systematic demonstration and comparison of those offerings. Our contribution is a comparative investigation of Erlang, F# and Scala in terms
of expressiveness, ease-of-use, performance and scalability. In particular we evaluate their language constructs that facilitate parallel collection transformations, future-based concurrency and the actor model, by employing them in implementations that solve a simple
computational problem named Orbit. Our study reaches the following conclusions for the examined languages regarding concurrency and parallelism: Erlang is a mature solution with good scalability but low performance in arithmetic computations; F# provides a solid
base for handling the examined matters, yet with medium scaling; and Scala, despite the problems that arise from its currently agile evolution pace, combines numerous related features with good performance and scalability.