HEAL DSpace

Βελτιστοποίηση κλήσεων αναδρομής ουράς σε συναρτησιακές γλώσσες με πολλαπλά είδη αποτίμησης

Αποθετήριο DSpace/Manakin

Εμφάνιση απλής εγγραφής

dc.contributor.author Μπουγουλιάς, Παναγιώτης el
dc.contributor.author Bougoulias, Panagiotis en
dc.date.accessioned 2019-10-17T11:03:30Z
dc.date.available 2019-10-17T11:03:30Z
dc.identifier.uri https://dspace.lib.ntua.gr/xmlui/handle/123456789/49298
dc.identifier.uri http://dx.doi.org/10.26240/heal.ntua.16996
dc.rights Αναφορά Δημιουργού-Μη Εμπορική Χρήση-Όχι Παράγωγα Έργα 3.0 Ελλάδα *
dc.rights.uri http://creativecommons.org/licenses/by-nc-nd/3.0/gr/ *
dc.subject Βελτιστοποίηση κλήσης ουράς el
dc.subject Οκνηρή αποτίμηση el
dc.subject Στατική ανάλυση el
dc.subject Διερμηνέας el
dc.subject Tail call optimisation en
dc.subject Lazy evaluation en
dc.subject Static analysis en
dc.subject Interpreter en
dc.title Βελτιστοποίηση κλήσεων αναδρομής ουράς σε συναρτησιακές γλώσσες με πολλαπλά είδη αποτίμησης el
heal.type bachelorThesis
heal.classification Επιστήμη υπολογιστών el
heal.language el
heal.access free
heal.recordProvider ntua el
heal.publicationDate 2019-08-28
heal.abstract Οι συναρτησιακές γλώσσες προγραμματισμού είναι διάσημες για τη χρήση αναδρομής αντί για «βρόχους», κάτι που υπάρχει και χαρακτηρίζει τις προστακτικές γλώσσες προγραμματισμού. Ενώ η αναδρομή είναι καλύτερη από τους βρόχους σε ό,τι αφορά την καθαρότητα του κώδικα, καθώς είναι άμεσα συνδεδεμένη με το μαθηματικό ορισμό των συναρτήσεων, έχει ένα βασικό ελάττωμα το οποίο συνδέεται με τη χρήση της μνήμης για την εκτέλεση των προγραμμάτων. Το πρόβλημα αυτό είναι ότι ένας αλγόριθμος που χρησιμοποιεί σταθερό χώρο μνήμης για την εκτέλεση του σε μια προστακτική γλώσσα προγραμματισμού, μπορεί να χρησιμοποιήσει γραμμικό χώρο σε συναρτησιακή, εξαιτίας της αναδρομής. Η λύση αυτού του προβλήματος, που δόθηκε στη δεκαετία του ’70 για τη γλώσσα Scheme, ήταν η χρήση της βελτιστοποίησης κλήσεων ουράς, μια πολύ απλή αλλά, όπως αποδείχθηκε, πολύ αποτελε- σματική τεχνική για την εξάλειψη του παραπάνω προβλήματος. Εκτός από τη Scheme, η βελτιστοποί- ηση αυτή περιλαμβάνεται στις υλοποιήσεις των περισσότερων συναρτησιακών γλωσσών με αυστηρή σημασιολογία, όπως η SML/NJ και η OCaml, καθώς και σε υλοποιήσεις προστακτικών γλωσσών, όπως ο ”Clang” μεταγλωττιστής για τη C/C++, κάτι το οποίο φανερώνει την αξία της συγκεκριμένης βελτιστοποίησης για τη εξάλειψη του κόστους δέσμευσης μνήμης εξαιτίας της αναδρομής. Ο σκοπός αυτής της διπλωματικής διατριβής είναι να ενσωματώσει αυτή την ευρέως γνωστή βελτιστοποίηση μεταγλωττιστή (βελτιστοποίηση κλήσεων ουράς) για συναρτησιακές γλώσσες προ- γραμματισμού με αυστηρή αποτίμηση σε συναρτησιακή γλώσσα προγραμματισμού με πολλαπλά είδη αποτίμησης (κλήση κατά αξία, κλήση κατ’ όνομα και κλήση κατ’ ανάγκη). Συγκεκριμένα στην περί- πτωση της κλήσης κατ’ ανάγκης, οι τιμές που υπακούουν σε αυτή τη σημασιολογία ”δραπετεύουν” από τη εμβέλεια του ονόματος τους πιο εύκολα απ’ ότι στην κλήση κατ’ αξία, με αποτέλεσμα να είναι αρκετά πιο δύσκολο να βρεθούν οι κλήσεις ουράς. Προσθέτοντας επισημειώσεις αυστηρότητας στη γλώσσα, μπλέκοντας δηλαδή την αυστηρή με την οκνηρή σημασιολογία, με παρόμοιο τρόπο όπως τα BangPatterns της Haskell, πραγματοποιούμε μια στατική ανάλυση η οποία εντοπίζει τις βελτιστο- ποιήσιμες κλήσεις ουράς σε μια τέτοια γλώσσα. Στη συνέχεια, υλοποιούμε τη βελτιστοποιήση κατά το χρόνο εκτέλεσης. , μετασχηματίζοντας με κατάλληλο τρόπο το πλαίσιο που αντιπροσωπεύει την αντίστοιχη κλήση συνάρτησης. Με την υλοποίηση αυτή, από την εκτέλεση προγραμμάτων ως ανα- φορά, παρατηρούμε ότι η βελτιστοποίηση μας είτε βελτιώνει το χρόνο εκτέλεσης είτε δεν τον αλλάζει, με αρκετές περιπτώσεις να προσεγγίζουν το σταθερό χώρο μνήμης που προσφέρει η βελτιστοποίηση κλήσης ουράς στις συναρτησιακές γλώσσες προγραμματισμού με αυστηρή σημασιολογία. el
heal.abstract Functional programming languages favour recursion over loops while the latter are a key feature of imperative programming languages. Although recursion may be better than loops in terms of code purity, as it is directly linked to the mathematical definition of functions, it has a major flaw associated with the memory overhead to execute programs. This problem is that an algorithm uses a fixed memory space to run it in a imperative programming language, it can use linear space in a functional language because of recursion. The solution to this problem, given in the 1970s for the programming language Scheme, was tailcall optimisation, a very simple but, as it turned out, very effective in order to eliminate the above problem. In addition to Scheme, this optimisation is included in most implementations of functional programming languages with strict semantics, such as SML / NJ and OCaml, as well as in imperative programming languages, such as the ”Clang” compiler for C/C++, which demonstrates the value of this particular optimisation to eliminate memory overhead due to recursion. The purpose of this thesis is to integrate this well-known compiler optimisation (tail call optimisation) for strict functional programming languages in functional programming languages with multiple evaluation order choices (call-by-value, call-by-name and call-by-need). Specifically in the presence of call-by-need semantics, the program values under this semantics ”escape” their context more easily than in call-by-value, making tail-calls much more difficult to reveal. By adding strictness to the language, in the form of strictness annotations similar to Haskell’s BangPatterns, we are able to confront with the problem. We perform a static analysis, which spots the tail calls that are actually optimisable in such a language. Next, we optimise the tail calls retrieved by the analysis into the runtime system, in the form of an interpreter which allocates and measures frames, where we mutate the frame that represents the optimisable function call. Our results from the evaluation of microbenchmarks show that our technique either improves the runtime, or does not change it. Some microbenchmarks, though, approach the constant memory space in the same way as in strict functional programming languages. en
heal.advisorName Παπασπύρου, Νικόλαος el
heal.committeeMemberName Παγουρτζής, Αριστείδης el
heal.committeeMemberName Γκούμας, Γεώργιος el
heal.academicPublisher Εθνικό Μετσόβιο Πολυτεχνείο. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών el
heal.academicPublisherID ntua
heal.numberOfPages 102 σ.
heal.fullTextAvailability true


Αρχεία σε αυτό το τεκμήριο

Οι παρακάτω άδειες σχετίζονται με αυτό το τεκμήριο:

Αυτό το τεκμήριο εμφανίζεται στην ακόλουθη συλλογή(ές)

Εμφάνιση απλής εγγραφής

Αναφορά Δημιουργού-Μη Εμπορική Χρήση-Όχι Παράγωγα Έργα 3.0 Ελλάδα Εκτός από όπου ορίζεται κάτι διαφορετικό, αυτή η άδεια περιγράφεται ως Αναφορά Δημιουργού-Μη Εμπορική Χρήση-Όχι Παράγωγα Έργα 3.0 Ελλάδα