\documentclass[a4paper, 12pt] {article} \usepackage{ucs} \usepackage[utf8x]{inputenc} \usepackage[english,greek]{babel} \usepackage[dvips]{graphicx} \newcommand {\eng}[1] {\textlatin{#1}} \begin{document} \begin{flushleft} \includegraphics{emp3} Εθνικό Μετσόβιο Πολυτεχνείο \newline Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών \end{flushleft} \centering{\underline{\LARGE{Άσκηση 3: Συστήματα Τύπων - \eng{Sexy Types}}}} \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline \newline Σπύρος Α. Χατζηχριστοδούλου \newline 03104617 \newpage \begin{flushleft} Πρώτα θα εξετάσουμε την γλώσσα \eng{C}. Τα διάφορα στοιχεία της γλώσσας που ζητείται να εξετάσουμε είναι: \newline \newline 1. Αναφορές (\eng{references}) ή δείκτες ή μεταβλητές που επιδέχονται ανάθεση: \newline Η \eng{C} ως καθαρή γλώσσα που υλοποιεί το μοντέλο προστακτικού προγραμματισμού, έχει κατ'αρχάς μεταβλητές που επιδέχονται ανάθεση. Για παράδειγμα, μπορούμε να γράψουμε κάτι σαν \begin{quote} \eng{int a = 5;} \end{quote} το οποίο σημαίνει ότι δημιουργούμε μια μεταβλητή τύπου "\eng{int}" και της αναθέτουμε την τιμή 5. Επίσης, στην \eng{C} υπάρχουν αναφορές με τη μορφή των δεικτών, δηλαδή μπορούμε να δημιουργήσουμε δείκτες σε μεταβλητές, σε δομές (\eng{strucs - unions}), ακόμα και σε συναρτήσεις. Για παράδειγμα, μπορούμε να γράψουμε κάτι σαν \begin{quote} \eng{int * a;} \end{quote} για να ορίσουμε ένα δείκτη σε ακέραιο, ή κάτι σαν \begin{quote} \eng{int * compare(int a, int b)} \end{quote} για να ορίσουμε ένα δείκτη σε συνάρτηση. \newline \newline 2. Εξαιρέσεις (\eng{exceptions}): \newline Η \eng{C} δεν υποστηρίζει το χειρισμό εξαιρέσεων. Όταν μια εξαίρεση συμβή (π.χ. διαίρεση με το 0), ο μεταγλωττιστής βγάζει ένα \eng{warning} ότι γίνεται διαίρεση με το 0, και τρέχοντας το πρόγραμμα βγάζει μήνυμα "\eng{floating point exception}". \newline \newline 3. Υποτύποι (\eng{subtyping}): \newline Η \eng{C} δεν υποστηρίζει υποτύπους. Δηλαδή, όταν μια συνάρτηση περιμένει σαν ορίσματα παραμέτρους τύπου \textbf{α} και της περάσουμε παράμετρους τύπου \textbf{α'}, ακόμα και αν ο \textbf{α'} είναι υποτύπος του \textbf{α} (δηλαδή ένα περιορισμένο σύνολο του \textbf{α}), η συνάρτηση θα βγάλει σφάλμα ότι ο τύπος της παραμέτρου που προσπαθούμε να περάσουμε δεν είναι ο αναμενόμενος. \newline \newline 4. Αναδρομικοί τύποι (\eng{recursive types}): \newline Η \eng{C} δεν υποστηρίζει ούτε αναδρομικούς τύπους. Μπορεί να υλοποιήσει κάποιους όμως, χρησιμοποιώντας κατάλληλες δομές δεδομένων. Για παράδειγμα, μια λίστα από φυσικούς αριθμούς δεν μπορεί να υλοποιηθεί με αναδρομικό ορισμό (μια κενή λίστα είναι λίστα - προσθέτοντας στοιχεία σε μια λίστα παραμένει λίστα), αλλά με χρήση κατάλληλης δομής, που αποτελείται απόένα πεδίο στο οποίο βρίσκεται ο αριθμός και ένα πεδίο το οποίο περιέχει ένα δείκτη στον επόμενο αριθμό. Φυσικά έτσι χάνεται τελείως ο αναδρομικός χαρακτήρας της λίστας (που θέσαμε εδώ για παράδειγμα), αλλά είναι σίγουρα καλύτερο από το τίποτα. \newline \newline 5. Πολυμορφισμός 2ης τάξης(\eng{F}) \end{flushleft} \end{document}