DedSec Project

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

v — συγκεντρωτικός οδηγός V Έννοια Η V είναι compiled γλώσσα συστημάτων με απλή σύνταξη και ρητό χειρισμό πολλών σφαλμάτων. Παράδειγμα πηγαίου κώδικα ή χρήσης Άσκηση με συγκεκριμένο στόχο…

V

Έννοια

Η V είναι compiled γλώσσα συστημάτων με απλή σύνταξη και ρητό χειρισμό πολλών σφαλμάτων.

Παράδειγμα πηγαίου κώδικα ή χρήσης

fn main() {
    nums := [1, 2, 3]
    println(nums.len)
}

Άσκηση με συγκεκριμένο στόχο

Υπολόγισε το μήκος array και δοκίμασε συνάρτηση που επιστρέφει optional με ρητό χειρισμό απουσίας.

Έλεγχος και διάγνωση

Οι εκδόσεις compiler μπορεί να αλλάζουν σύνταξη· κράτα συγκεκριμένο δοκιμασμένο toolchain.

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

V — Αναλυτικός οδηγός εξάσκησης

Πραγματικό αρχικό δείγμα

fn greet(name string) string { return 'Hello, ${name}!' }
fn main() { println(greet('Ada')) }

Περιβάλλον: v run hello.v.. Επιβεβαίωσε ότι έχεις το σωστό compiler, host ή simulator πριν θεωρήσεις την έξοδο αξιόπιστη. Για scripts με πρόσβαση σε προσωπικά αρχεία ή ρυθμίσεις, χρησιμοποίησε προσωρινά και read-only δεδομένα.

Συγκεκριμένος στόχος υλοποίησης

Όρισε struct με mutable πεδίο και parser που επιστρέφει error option/result. Δοκίμασε λάθος είσοδο και κανονικά immutable bindings.

Κρίσιμο λάθος που πρέπει να αναγνωρίζεις

Η σύνταξη V αλλάζει ανά έκδοση· έλεγξε v version, κυρίως option propagation και mut.

V — Διαδρομή ουσιαστικής εξάσκησης

Υλοποίηση χωρίς κρυφή προϋπόθεση

Στη γλώσσα V μπορείς να ορίσεις function που επιστρέφει option/result-like error και ο caller οφείλει να χειριστεί την αποτυχία. Μια μικρή συνάρτηση για ακέραιες λίστες αποτελεί καλό εργαστήριο ελέγχου πριν από indexing.

fn first_two(values []int) !int {
    if values.len < 2 {
        return error('need at least two numbers')
    }
    return values[0] + values[1]
}

fn main() {
    good := first_two([3, 5]) or { 0 }
    bad := first_two([3]) or { -1 }
    println(good)
    println(bad)
}

Η αναμενόμενη εκτύπωση είναι 8 και -1. Εδώ η τιμή -1 είναι η εσκεμμένη πολιτική του caller στο or block και όχι η πραγματική επιστρεφόμενη τιμή της first_two. Εξήγησε γιατί σε production ένα default value μπορεί να κρύψει σφάλματα και γιατί συχνά χρειάζεται ξεχωριστή error representation.

Έλεγχος τύπων και ορίων

Η σύνταξη []int υποδηλώνει δυναμικό array από int. Αφαίρεσε προσωρινά τον έλεγχο values.len και δοκίμασε index 1 σε array μήκους 1 μέσα σε ελεγχόμενο test. Η αποτυχία είναι ζήτημα precondition και όχι αποτέλεσμα του ότι η γλώσσα είναι «ανεπαρκώς typed». Κατέγραψε το diagnostic για τη συγκεκριμένη έκδοση V.

Βήματα άσκησης

Μετέτρεψε τη συνάρτηση σε average_first_two, αποφασίζοντας αν το αποτέλεσμα πρέπει να είναι float ή integer. Αν κρατήσεις integer και διαιρέσεις διά δύο, μπορεί να χαθεί το κλασματικό μέρος. Γράψε test για [2,3] και τεκμηρίωσε τι αποτέλεσμα θέλεις, όχι μόνο τι υπολόγισε η πρώτη υλοποίηση.

Εργασία αξιολόγησης

Πρόσθεσε cases για κενό array, δύο αρνητικές τιμές και πιθανή υπερχείλιση αν το άθροισμα ξεπερνά τα όρια του int. Διάβασε τις εγγυήσεις arithmetic από την έκδοση/compiler που χρησιμοποιείς. Μη γενικεύεις για overflow χωρίς έλεγχο build settings.

Κριτήρια

Παράδωσε V compiler version, παραγόμενο output, μία αποτυχημένη περίπτωση και διόρθωση που διατηρεί το error ώστε ο caller να επιλέξει πολιτική. Σημείωσε ότι οι κλήσεις είναι παραδείγματα προς επιβεβαίωση· δεν ισχυριζόμαστε εκτέλεση στον παρόντα έλεγχο.