Γλώσσες Προγραμματισμού ΙΙ

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

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

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

Θέματα υλοποίησης. Εξετάζονται θέματα αποδοτικής υλοποίησης συναρτησιακών (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).

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

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

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

Λέξεις Κλειδιά: Γλώσσες Προγραμματισμού ΙΙ, Νικόλαος Παπασπύρου, Κωστής Σαγώνας, ΣΗΜΜΥ, ΕΜΠ, Programming languages II, 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

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

  • Τριάδες Hoare
  • Μια απλή προστακτική γλώσσα
  • Παραδείγμα: υπολογισμός παραγοντικού
    • με επανάληψη: fact.c
    • με επανάληψη, ξεκινώντας από i=2: fact2.c
  • Παράδειγμα: εύρεση δύο στοιχείων πίνακα με δοθέν άθροισμα
    • με αλγόριθμο Ο(n2): sumx2.c
  • (*) Παράδειγμα: υπολογισμός ακέραιας δύναμης (άσκηση 2008-09) στο Frama-C
    • με απλή επανάληψη: pow-simple.c
    • με διαδοχικό τετραγωνισμό: pow.c
  • (*) Παράδειγμα: έλεγχος πρώτου αριθμού (άσκηση 2009-10)
    • με επανάληψη, διαιρώντας με όλους τους προηγούμενους: prime.c
  • (*) Παράδειγμα: υπολογισμός μέγιστου κέρδους (άσκηση 2010-11)
  • Εισαγωγή στην Erlang
  • Όροι και τύποι δεδομένων της Erlang
  • List και bit string comprehensions
  • Εξαιρέσεις και χειρισμός τους
  • Το εργαλείο στατικής ανάλυσης Dialyzer
  • Unit testing με χρήση του εργαλείου EUnit
  • Property-based testing και PropEr
  • Διεργασίες και ταυτόχρονη εκτέλεση
  • Ανταλλαγή μηνυμάτων
  • Επιλεκτική λήψη μηνυμάτων
  • Αλλαγή κώδικα κατά τη διάρκεια της εκτέλεσης
  • Κατανεμημένη εκτέλεση προγραμμάτων
  • Παράλληλη εκτέλεση προγραμμάτων
  • Τεχνικές βελτίωσης της επίδοσης παράλληλης εκτέλεσης
  • Εισαγωγή
  • Βασικοί τύποι
    • Σύνταξη
    • Λειτουργική σημασιολογία
    • Κανόνες τύπων
    • Ιδιότητες του συστήματος τύπων
  • Τύποι συναρτήσεων
  • Απλές επεκτάσεις
    • Ο τύπος μονάδας — Unit
    • Ακολουθιακή αποτίμηση
    • Απόδοση ονομάτων — δομή let
    • Ζεύγη
    • Αθροίσματα
    • Αναδρομή
      • Τελεστής fix
      • Δομή letrec

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

Ημερολόγιο

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

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