Συναρτησιακός Προγραμματισμός με Αντικειμενοστραφή Χαρακτηριστικά: η Περίπτωση της Γλώσσας F# Σημειώσεις Σεμιναριακής Παρουσίασης Ιζαμπώ Καράλη
Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθηματικές) συναρτήσεις
Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθηματικές) συναρτήσεις Οι συναρτήσεις εφαρμόζονται σε μαθηματικές μεταβλητές (ανατίθεται μια τιμή άπαξ) (immutable)
Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθηματικές) συναρτήσεις Οι συναρτήσεις εφαρμόζονται σε μαθηματικές μεταβλητές (ανατίθεται μια τιμή άπαξ) (immutable) Μαθηματικό υπολογιστικό μοντέλο: λ-λογισμός (Alonzo Church, δεκαετία του 30)
Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθηματικές) συναρτήσεις Οι συναρτήσεις εφαρμόζονται σε μαθηματικές μεταβλητές (ανατίθεται μια τιμή άπαξ) (immutable) Μαθηματικό υπολογιστικό μοντέλο: λ-λογισμός (Alonzo Church, δεκαετία του 30) LISP: Πρώτη γλώσσα συναρτησιακού προγραμματισμού (σχεδιασμός: John McCarthy, υλοποίηση: Steve Russell, 1958)
Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθηματικές) συναρτήσεις Οι συναρτήσεις εφαρμόζονται σε μαθηματικές μεταβλητές (ανατίθεται μια τιμή άπαξ) (immutable) Μαθηματικό υπολογιστικό μοντέλο: λ-λογισμός (Alonzo Church, δεκαετία του 30) LISP: Πρώτη γλώσσα συναρτησιακού προγραμματισμού (σχεδιασμός: John McCarthy, υλοποίηση: Steve Russell, 1958) Είδος δηλωτικού (declarative) προγραμματισμού (Simon Peyton Jones: being rather than doing )
Συναρτησιακός Προγραμματισμός: γενικά (ΙΙ) Πρόγραμμα συναρτησιακού προγραμματισμού: μια μαθηματική έκφραση και δέσμευση ονομάτων με τιμές Εκτέλεση προγράμματος συναρτησιακού προγραμματισμού: αποτίμηση της έκφρασης και εκτύπωση αποτελέσματος
Γιατί να χρησιμοποιήσουμε Συναρτησιακό Προγραμματισμό σταδιακή και στοιχειοποιημένη ανάπτυξη προγράμματος μαθηματική επαλήθευση της ορθότητας του προγράμματος μας εύκολη παραλληλοποίηση λόγω της ανεξαρτησίας των μεταβλητών
Γλώσσες Συναρτησιακού Προγραμματισμού Καθαρός Συναρτησιακός Προγραμματισμός: Hope (Edinburgh University, δεκαετία του 70), Miranda (David Turner, 1985), Haskell (Teamwork in University of Glasgow, 1990, βασίζεται στον Glasgow Haskell Compiler (Simon Peyton Jones, Simon Marlow) ) κ.α. Συναρτησιακός Προγραματισμός με χαρακτηριστικά προστακτικού και αντικειμενοστραφούς προγραμματισμού: Python (Guido van Rossum, 1991), F# (Don Syme, Microsoft Research, Cambridge, 2005) κ.α.
Γλώσσες Συναρτησιακού Προγραμματισμού και η F# F#: επιρροές από OCaml (INRIA, 1996), C# Don Syme: Μια πιο απλή γλώσσα προγραμματισμού για το.net από την C# και Strongly typed Python for.net Don Syme: Nice integration between C# and F#: code presentation in C# and implement core algorithms or core data processing in F#
Γενικά Χαρακτηριστικά της F# immutable values (με δυνατότητα προσδιορισμού mutable καθώς και παροχή mutable δομών δεδομένων) type inference στις συναρτήσεις (αλλά μπορεί κάποιος να δώσει και type constraints) strict γλώσσα (αλλά μπορεί κάποιος να δηλώσει κάποια έκφραση να αποτιμηθεί σαν lazy) Υποστήριξη high order συναρτήσεων Σύνθεση συναρτήσεων αλλά και piping à la Unix Υποστήριξη γλωσσικών δομών για προστακτικό (imperative) προγραμματισμό Πληθώρα δομών δεδομένων λ-expressions χώροι ονομάτων και στοιχεία
Αντικειμενοστραφή Χαρακτηριστικά της F# Δυνατότητα ορισμού κλάσεων αρχικοποίηση διαβαθμίσεις ορατότητας κληρονομικότητα interfaces αφηρημένες κλάσεις Προτείνεται η χρήση structures για απλούς τύπους που δεν συμμετέχουν σε κληρονομικότητα (με pass by value semantics)
Γενικό σχόλιο: Γενικά, προτείνεται η χρήση discriminated unions και ο ορισμός συναρτήσεων που ορίζονται πάνω σε αυτές παρά η χρήση ιεραρχίας OOP, διότι ταιριάζει καλύτερα στον συναρτησιακό προγραμματισμό εκτός κι αν πρόκειται για επέκταση κάποιου C# προγράμματος
Αναφορές F# Reference (https://docs.microsoft.com/en-us/dotnet /articles/fsharp/language-reference/) Tour of F# (https://docs.microsoft.com/en-us/dotnet /articles/fsharp/tour) F# for fun and profit (https://fsharpforfunandprofit.com/) Don Syme Answering Questions on F#, C#, Haskell and Scala : InfoQ Interview with Don Syme by Sadek Drobi (2009) (https://www.infoq.com/interviews/f-sharp-don-syme) Σημειώσεις διαλέξεων Συναρτησιακού Προγραμματισμού από τον Simon Peyton Jones (UCL, 1988)