Γλώσσες Προγραμματισμού ΙΙ - Βιντεομάθημα

Νικόλαος Παπασπύρου, Κωστής Σαγώνας

Περιεχόμενο μαθήματος

Θέματα θεωρίας. Εξετάζεται σε βάθος το θεωρητικό υπόβαθρο των κυριότερων μοντέλων γλωσσών προγραμματισμού: προστακτικού, συναρτησιακού, λογικού, αντικειμενοστρεφούς και ταυτόχρονου προγραμματισμού. Θεωρία πεδίων και λ-λογισμός. Συστήματα τύπων. Σημασιολογία γλωσσών προγραμματισμού: λειτουργική, δηλωτική και αξιωματική.

Θέματα υλοποίησης. Εξετάζονται θέματα αποδοτικής υλοποίησης συναρτησιακών (ML και Haskell), λογικών (Prolog), και αντικειμενοστρεφών (π.χ. C++, Java και C#) γλωσσών προγραμματισμού. Αφηρημένες μηχανές και αλγόριθμοι αυτόματης διαχείρισης μνήμης. Θέματα υλοποίησης ταυτοχρονισμού και εξαιρέσεων. Γλώσσες σεναρίων (π.χ. Perl, Python, Ruby...).

Μαθησιακοί στόχοι

Εξοικείωση των σπουδαστών με τις γενικές αρχές του μαθήματος.

Προτεινόμενα συγγράμματα

  1. M. L. Scott, Πραγματολογία των γλωσσών προγραμματισμού, Εκδόσεις Κλειδάριθμος, 2009. Τίτλος πρωτοτύπου: Programming Language Pragmatics, 2nd edition, Morgan Kaufmann Publishers, 2006. 
  2. J. C. Mitchell, Concepts in Programming Languages, Cambridge University Press, 2003.
  3. A. W. Appel and M. Ginsburg, Modern Compiler Implementation in C, Cabridge University Press, 1998. Άλλες εκδόσεις του βιβλίου χρησιμοποιούν τις γλώσσες Java και ML.
  4. B. C. Pierce, Types and Programming Languages, MIT Press, 2002.

Βιβλιογραφία

Haskell

http://www.haskell.org/

  • [Huda00a] P. Hudak, The Haskell School of Expression: Learning Functional Programming through Multimedia, Cambridge University Press, 2000.
  • [Huda00b] P. Hudak, J. Peterson and J. Fasel, "A Gentle Introduction to Haskell", version 98, June 2000.
  • Available online from: http://www.haskell.org/tutorial/.
  • [Thom99] S. Thompson, Haskell: The Craft of Functional Programming, 2nd edition, Addison-Wesley, 1999.

OCaml

http://www.ocaml.org/

  • [Chai00] E. Chailloux, P. Manoury and B. Pagano, Developing Applications with Objective Caml, O' Reilly and Associates, 2000. Available online from: http://caml.inria.fr/oreilly-book/.
  • [Hick02] J. Hickey, Introduction to the Objective Caml Programming Language, course notes, 2002. Available online from:http://www.cs.caltech.edu/courses/cs134/cs134b/book.pdf.

Clean

http://www.cs.ru.nl/~clean/

Λάμβδα λογισμός και παρεμφερή συστήματα

  • [Bare92] H.P. Barendregt, "Lambda Calculi with Types", in Handbook of Logic in Computer Science, S. Abramsky, D.M. Gabbay and T.S.E. Maibaum, editors, vol. 2: Computational Structures, pp. 118-309, Oxford Science Publications, 1992.

Συστήματα τύπων

  • [Mitc90] J.C. Mitchell, "Type Systems for Programming Languages", in Handbook of Theoretical Computer Science, J. van Leeuwen, editor, vol. B: Formal Models and Semantics, ch. 8, pp. 365-458, Elsevier Science Publishers, 1990.
  • [Pier02] B. C. Pierce, Types and Programming Languages, MIT Press, 2002.
  • Τμήμα του βιβλίου (ps.gz, 460KB) διατίθεται online για εκπαιδευτικό σκοπό μόνο στους σπουδαστές του ΕΜΠ που παρακολουθούν το μάθημα.

Θεωρία πεδίων

  • [Gunt90] C.A. Gunter and D.S. Scott, "Semantic Domains", in Handbook of Theoretical Computer Science, J. van Leeuwen, editor, vol. B: Formal Models and Semantics, ch. 12, pp. 633-674, Elsevier Science Publishers, 1990.

Μέθοδοι διδασκαλίας

Διδασκαλία καθ' έδρας.

Μέθοδοι αξιολόγησης

Το μάθημα δε θα έχει τελική εξέταση. Ο τελικός βαθμός θα προκύψει από 11 συνολικά ασκήσεις (μία για κάθε διάλεξη του μαθήματος) οι οποίες θα ανακοινώνονται στην ιστοσελίδα του μαθήματος. Κάθε άσκηση βαθμολογείται με μία μονάδα και ο τελικός βαθμός προκύπτει από το άθροισμα των επιμέρους βαθμών των ασκήσεων. (Με άλλα λόγια υπάρχει μία μονάδα bonus.) Κάποιες από τις ασκήσεις θα είναι προγραμματιστικές, κάποιες θα εξετάζουν θέματα κατανόησης και εφαρμογής της θεωρίας των διαλέξεων, ενώ κάποιες άλλες μπορεί να αφορούν σε θέματα που απλώς αναφέρθηκαν με σύντομο τρόπο στη διάλεξη και απαιτούν κάποιο ψάξιμο στη βιβλιογραφία ή/και στο διαδίκτυο. Κάθε άσκηση θα έχει ημερομηνία παράδοσης η οποία θα τηρηθεί αυστηρά. Περισσότερες λεπτομέρειες σχετικές με τις ασκήσεις θα δίνονται μέσω της ιστοσελίδας του μαθήματος. Το Εργαστήριο Τεχνολογίας Λογισμικού (SoftLab) θα είναι διαθέσιμο στους σπουδαστές του μαθή- ματος που επιθυμούν να κάνουν τις ασκήσεις τους εκεί. Πέραν των ωρών γραφείου, οι διδάσκοντες θα είναι διαθέσιμοι κατόπιν επικοινωνίας (κατά προτίμηση ηλεκτρονικής).

Προαπαιτούμενα

Το μάθημα απευθύνεται σε σπουδαστές που έχουν περάσει το μάθημα των Γλωσσών Προγραμματισμού Ι και διαθέτουν εμπειρία στον προγραμματισμό ηλεκτρονικών υπολογιστών. Τα παραπάνω είναι προα- παιτούμενα. Χρήσιμο επίσης είναι να διαθέτουν βασικές γνώσεις μαθηματικής λογικής, αλγορίθμων και της δομής ενός μεταγλωττιστή (compiler).

Καλωσορίσατε στο μάθημα "Γλώσσες Προγραμματισμού ΙΙ".

Μέσα στα πλαίσια του μαθήματος εξετάζονται θέματα θεωρίας και υλοποίησης των γλωσσών προγραμματισμού. 

Θέματα θεωρίας. Εξετάζεται σε βάθος το θεωρητικό υπόβαθρο των κυριότερων μοντέλων γλωσσών προγραμματισμού: προστακτικού, συναρτησιακού, λογικού, αντικειμενοστρεφούς και ταυτόχρονου προγραμματισμού. Θεωρία πεδίων και λ-λογισμός. Συστήματα τύπων. Σημασιολογία γλωσσών προγραμματισμού: λειτουργική, δηλωτική και αξιωματική.

Θέματα υλοποίησης. Εξετάζονται θέματα αποδοτικής υλοποίησης συναρτησιακών (ML και Haskell), λογικών (Prolog), και αντικειμενοστρεφών (π.χ. C++, Java και C#) γλωσσών προγραμματισμού. Αφηρημένες μηχανές και αλγόριθμοι αυτόματης διαχείρισης μνήμης. Θέματα υλοποίησης ταυτοχρονισμού και εξαιρέσεων. Γλώσσες σεναρίων (π.χ. Perl, Python, Ruby...).

Διδάσκεται στη Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστώνστο Εθνικό Μετσόβιο Πολυτεχνείο.

Η σελίδα αυτή παρέχει το υλικό του μαθήματος σε αρχειακή μορφή. Σύγχρονες εκδόσεις του μαθήματος θα βρίσκονται στην επίσημη σελίδα του στη Σχολή Σ.Η.Μ.Μ.Υ.: Γλώσσες Προγραμματισμού ΙΙ.

Στον παρακάτω συνδεσμο μπορείτε να βρείτε την έκδοση του μαθήματος σε επιπεδο Α-: Γλώσσες Προγραμματισμού ΙΙ AOC.

Λέξεις Κλειδιά: Γλώσσες Προγραμματισμού ΙΙ, Βιντεομάθημα, Βίντεο, Νικόλαος Παπασπύρου, Κωστής Σαγώνας, ΣΗΜΜΥ, ΕΜΠ, Programming languages II, Videolectures, Video, Nikolaos Papaspyrou, Kostis Sagonas, ECE, NTUA, programming, imperative, functional, logic, object-oriented, concurrent, domain theory, lambda calculus, types, type systems, semantics, operational, denotational, axiomatic, implementation, functional, ML, Haskell, logic, Prolog, and object-oriented, C++, Java, C#, virtual machines, algorithms, automatic memory management. concurrency, exceptions, scripting languages, Perl, Python, Ruby, Ηλεκτρολόγοι Μηχανικοί, Μηχανικοι Υπολογιστών, Εθνικό Μετσόβιο Πολυτεχνείο, National Technical University of Athens, ανοικτά ακαδημαϊκα μαθήματα, ανοικτά ακαδημαϊκα μαθήματα ΕΜΠ, ocw, opencourses, academic open courses

Θεματικές Ενότητες

  • Ορισμοί, συναρτήσεις, εκφράσεις και τιμές
  • Αυστηρό σύστημα τύπων με αυτόματη εξαγωγή τύπων
  • Δηλώσεις νέων τύπων και αναδρομικές δομές δεδομένων
  • Συναρτήσεις υψηλής τάξης
  • Διαφάνεια αναφοράς
  • Κλάσεις τύπων (type classes)
  • Οκνηρή αποτίμηση
    • Παράδειγμα, γενίκευση αριθμών Fibonacci: genfib.hs
    • Παράδειγμα, κόσκινο του Ερατοσθένη: sieve.hs
    • Παράδειγμα, αρίθμηση σε διάσχιση κατά βάθος: dfn.hs
    • Quiz: μπορείτε να κάνετε το ίδιο για διάσχιση κατά πλάτος;
    • Παρενέργειες στη Haskell και μονάδες (monads)
  • Παραδείγματα σε OCaml
  • Εξαγωγή τύπων στην πράξη
  • Περιορισμοί και επίλυση
  • Εφαρμογή στο λ-λογισμό
  • Υλοποίηση συναρτήσεων μέσω closures
  • Απουσία παρενεργειών και αναθέσεων σε μεταβλητές
  • Inline expansion
  • Closure conversion
  • Αποδοτική υλοποίηση αναδρομής ουράς
  • Υλοποίηση και βελτιστοποίηση προγραμμάτων σε οκνηρές γλώσσες
    • Deforestation
    • Strictness analysis
  • Γλώσσες προγραμματισμού με άμεση και έμμεση δέσμευση και αποδέσμευση μνήμης
  • Ανακύκλωση μνήμης μέσω του αλγόριθμου mark-and-sweep
  • Ανακύκλωση μνήμης μέσω μετρήματος αναφορών (reference counting)
  • Ανακύκλωση μνήμης μέσω αντιγραφής &ndash ο αλγόριθμος του Cheney
  • Συλλογή σκουπιδιών σε γενεές (generational garbage collection)
  • Αυξητικοί, ταυτόχρονοι και συλλέκτες σκουπιδιών πραγματικού χρόνου (incremental, concurrent, and real-time garbage collection)
    • Μαρκάρισμα με τρία χρώματα (tricolor marking)
    • Φράγματα ανάγνωσης και γραφής (read and write barriers)
    • Ο αλγόριθμος του Baker
  • Συνεργασία του συλλέκτη σκουπιδιών με τον compiler
  • Σημασιολογία
  • Μια απλή γλώσσα δυαδικών συμβολοσειρών
  • Μια απλή προστακτική γλώσσα
    • Σημασιολογία αριθμητικών και λογικών εκφράσεων
    • Σημασιολογία εντολών
    • Μεταβλητές και αναθέσεις
    • Αόριστες επαναλήψεις, εντολή while
  • Θεωρία πεδίων
    • Ορισμοί
    • Κατασκευές πεδίων
    • Μονότονες και συνεχείς συναρτήσεις
    • Θεώρημα ελάχιστου σταθερού σημείου
  • Δηλωτική σημασιολογία (συνέχεια)
    • Μια απλή προστακτική γλώσσα (ξανά)
    • Σημασιολογία του λ-λογισμού
  • Εισαγωγή
  • Βασικοί τύποι
    • Σύνταξη
    • Λειτουργική σημασιολογία
    • Κανόνες τύπων
    • Ιδιότητες του συστήματος τύπων
  • Τύποι συναρτήσεων
  • Απλές επεκτάσεις
    • Ο τύπος μονάδας — Unit
    • Ακολουθιακή αποτίμηση
    • Απόδοση ονομάτων — δομή let
    • Ζεύγη
    • Αθροίσματα
    • Αναδρομή
      • Τελεστής fix
      • Δομή letrec
  • Αναφορές
  • Εξαιρέσεις
  • Υποτύποι
  • Αναδρομικοί τύποι
  • Πολυμορφισμός 2ης τάξης
  • Πολυμορφισμός υψηλής τάξης
  • Υπαρξιακοί τύποι
  • Εξαρτώμενοι τύποι
  • Διαμοιραζόμενα δεδομένα και συγχρονισμός
  • Ιδιότητες ασφάλειας και ζωτικότητας
  • Αμοιβαίος αποκλεισμός
  • Το πρόβλημα του παραγωγού-καταναλωτή
  • Το πρόβλημα των αναγνωστών-συγγραφέων
  • Δυσκολίες του παράλληλου προγραμματισμού
  • Ο νόμος του Amdahl
  • Εικονικές μηχανές
    • Ορισμός και παραδείγματα
    • Πλεονεκτήματα και μειονεκτήματα
    • Επιλογές σχεδιασμού και συστατικά των εικονικών μηχανών
    • Υλοποίηση των εικονικών μηχανών
  • Διερμηνείς
    • Μορφές διερμηνέων
    • Δομή των bytecode interpreters
    • Άμεσα και έμμεσα νηματικοί διερμηνείς (threaded code interpreters)
    • Συγχώνευση και εξειδίκευση εντολών
  • Τριάδες Hoare
  • Μια απλή προστακτική γλώσσα
  • Παραδείγμα: υπολογισμός παραγοντικού στο Frama-C
    • με επανάληψη: fact.c
    • με επανάληψη, ξεκινώντας από i=2: fact2.c
  • Παράδειγμα: έλεγχος πρώτου αριθμού (άσκηση 2009-10)
    • με επανάληψη, διαιρώντας με όλους τους προηγούμενους: prime.c
  • Παράδειγμα: υπολογισμός ακέραιας δύναμης (άσκηση 2008-09)
    • με διαδοχικό τετραγωνισμό: pow.c

Ανοικτό Ακαδ. Μάθημα

Ημερολόγιο

Ανακοινώσεις

  • - Δεν υπάρχουν ανακοινώσεις -