DedSec Project

koka — συγκεντρωτικός οδηγός — DedSec Project

koka — συγκεντρωτικός οδηγός Koka Τι προσφέρει η γλώσσα Η Koka παρακολουθεί τα υπολογιστικά effects στους τύπους συναρτήσεων. Η δυνατότητα αποτυχίας ή I/O δεν αποκρύπτεται από τον τύπο…

Koka

Τι προσφέρει η γλώσσα

Η Koka παρακολουθεί τα υπολογιστικά effects στους τύπους συναρτήσεων. Η δυνατότητα αποτυχίας ή I/O δεν αποκρύπτεται από τον τύπο.

Μικρό παράδειγμα προς μελέτη

// Conceptual effect signature:
// parse : string -> <exn> int

Σχεδίασε parser θετικών ακεραίων. Ξεχώρισε τις κανονικές επιστροφές από αποτυχίες και σημείωσε ποιοι callers χειρίζονται το effect.

Τι να επαληθεύσεις

Κατάγραψε την πραγματική έκδοση εργαλείου, τις απαιτούμενες εξαρτήσεις και την έξοδο σε δοκιμαστικά δεδομένα για τη Koka. Πρόβλεψε το αποτέλεσμα πριν το ελέγξεις και διατήρησε την αρχική και τη διορθωμένη εκδοχή ώστε να φαίνεται η αιτιώδης διαφορά. Μην αποκαλείς ένα απόσπασμα εκτελεσμένο αν δεν έχεις το κατάλληλο περιβάλλον.

Παγίδα ειδική για το θέμα

Το effect typing δεν είναι ένα try/catch γύρω από κάθε κλήση· έλεγξε τη σύνταξη με την έκδοση compiler που χρησιμοποιείς.

Εργαστήριο εξάσκησης: Koka

Επιβεβαίωσε το αρχικό πρόγραμμα

Το 00_starter.kk περιέχει fun main() και println("Hello, Koka!"). Η παρατηρήσιμη συμπεριφορά είναι εκτύπωση, όχι αριθμητική επιστροφή. Εκτέλεσε το αρχικό με συμβατή έκδοση Koka και σημείωσε την έξοδο και τον αριθμό έκδοσης. Οι εντολές εκτέλεσης και οι βιβλιοθήκες αλλάζουν μεταξύ εκδόσεων· εδώ περιγράφεται άσκηση, όχι επιβεβαιωμένη δοκιμή.

Καθαρή συνάρτηση και συνάρτηση με επίδραση

Σε προσωρινό αντίγραφο γράψε:

fun double(n : int) : int
  n + n

fun main()
  println(double(3))

Αναμένεται να εμφανιστεί 6. Η double υπολογίζει ακέραιο χωρίς εκτύπωση, ενώ η main προκαλεί ορατή επίδραση στην κονσόλα. Το σύστημα effect types της Koka παρακολουθεί αυτές τις διαφορές στον τύπο των συναρτήσεων. Η απουσία println σε έναν ορισμό από μόνη της δεν αποδεικνύει ότι κάθε συνάρτηση που καλεί είναι καθαρή.

Δοκιμή ελέγχου τύπων

Κράτησε τη δήλωση επιστροφής : int, αλλά αντικατάστησε το n + n με τη συμβολοσειρά "six". Αποθήκευσε το πραγματικό μήνυμα του μεταγλωττιστή και επανάφερε τον αριθμητικό κώδικα. Στη συνέχεια κάλεσε τη double με κείμενο αντί ακέραιο. Πρόκειται για δύο διαφορετικές ασυμφωνίες: τύπος αποτελέσματος και τύπος παραμέτρου. Δεν χρειάζεται καμία επικίνδυνη ενέργεια ή εξωτερική υπηρεσία.

Παρατήρηση του effect

Μετέφερε σκόπιμα τη println σε βοηθητική συνάρτηση και σύγκρινε τον τύπο επίδρασης που εμφανίζει ο μεταγλωττιστής με αυτόν της καθαρής double. Οι ενδείξεις total και console περιγράφουν δυνατές συμπεριφορές, όχι μετρήσεις ταχύτητας. Απόφυγε να απομνημονεύεις τη μορφοποίηση της διάγνωσης χωρίς να έχεις την ίδια έκδοση.

Αυτοτελής άσκηση

Υλοποίησε fun triple(n : int) : int και εμφάνισε αποτέλεσμα για μηδέν, αρνητική και θετική τιμή. Γράψε πρώτα τις προβλέψεις. Πρόσθεσε μία κακότυπη κλήση και εξήγησε ποια έκφραση απορρίφθηκε. Κατάγραψε την έκδοση Koka, γιατί η γλώσσα εξελίσσεται. Αναφορά: https://koka-lang.github.io/koka/doc/book.html