DedSec Project

Γλωσσάρι: προαιρετικοί τύποι, overflow και packages — DedSec Project

Γλωσσάρι: προαιρετικοί τύποι, overflow και packages Optional Ακριβής σημασία API που διακρίνει παρουσία από απουσία. Rust Option<T , TypeScript optional fields και Python T None εκφράζουν…

Optional

Ακριβής σημασία

API που διακρίνει παρουσία από απουσία. Rust Option<T>, TypeScript optional fields και Python T|None εκφράζουν παρόμοια έννοια με διαφορετικό runtime.

Πείραμα αναφοράς

def first(items: list[int]) -> int | None:
    return items[0] if items else None
assert first([]) is None
assert first([0])==0

Διερεύνηση ορίου

Αντικατάστησε None με tagged found/missing result και σύγκρινε caller όταν το έγκυρο αποτέλεσμα είναι 0.

Ανεξάρτητος έλεγχος

Για Προαιρετική τιμή, γράψε την αναμενόμενη έξοδο πριν από εκτέλεση. Άλλαξε μία σημαντική παραδοχή και βρες αν το πρόβλημα ανήκει σε caller, implementation ή περιβάλλον.

Το μηδέν είναι τιμή, όχι missing argument

Δήλωσε την απουσία ρητά. Το truthiness συγχωνεύει μηδέν με None και μπορεί να αλλάξει τη σημασία των δεδομένων.

def remaining(capacity, limit=None):
    if capacity < 0 or (limit is not None and limit < 0):
        raise ValueError("negative")
    return capacity if limit is None else min(capacity, limit)
assert remaining(7) == 7
assert remaining(7, 0) == 0
assert remaining(7, 3) == 3

Αντικατάστησε τον έλεγχο None με falsy-value check για να αναπαράγεις bug στο μηδενικό όριο. Tagged Result είναι καλύτερο όταν missing, invalid και present διαφέρουν. Optional annotations δεν επικυρώνουν εξωτερικό JSON.

Overflow

Ακριβής σημασία

Αποτέλεσμα εκτός εύρους αριθμητικού τύπου. Μια γλώσσα μπορεί να κάνει trap, wrap ή reject. Οι Python integers διαφέρουν από unsigned 8-bit registers.

Πείραμα αναφοράς

def add_u8(a,b):
    if not (0<=a<=255 and 0<=b<=255): raise ValueError()
    if a > 255-b: raise OverflowError()
    return a+b
assert add_u8(255,0)==255

Διερεύνηση ορίου

Δοκίμασε add_u8(250,6) και σύγκρινε error με wrapping counter. Εξήγησε τον κίνδυνο overflow σε χρηματικά ποσά.

Ανεξάρτητος έλεγχος

Για Υπερχείλιση, γράψε την αναμενόμενη έξοδο πριν από εκτέλεση. Άλλαξε μία σημαντική παραδοχή και βρες αν το πρόβλημα ανήκει σε caller, implementation ή περιβάλλον.

Έλεγξε το fixed-width όριο πριν από serialization

Οι Python integers είναι arbitrary precision αλλά ένα binary unsigned byte φτάνει έως 255. Ο έλεγχος πρέπει να ακολουθεί τον τύπο προορισμού.

def add_u8(a, b):
    if any(type(v) is not int or not 0 <= v <= 255 for v in (a,b)):
        raise ValueError("unsigned byte expected")
    if a > 255-b:
        raise OverflowError("byte overflow")
    return a+b
assert add_u8(200, 55) == 255
try:
    add_u8(200, 56)
except OverflowError: pass
else: raise AssertionError("invalid result accepted")

Σύγκρινε απόρριψη με modulo-256 wrapping. Το wrapping μπορεί να επιτρέπεται σε protocol αλλά είναι επικίνδυνο για μεγέθη και οικονομικά δεδομένα. Το C signed overflow είναι undefined behavior.

Package manager

Ακριβής σημασία

Resolver και installer dependencies. Η εμπιστοσύνη αφορά registries, lockfiles, version constraints, hooks εγκατάστασης και platform compatibility.

Πείραμα αναφοράς

python -m pip --version
python -m pip list --format=columns

Διερεύνηση ορίου

Σε προσωρινό virtual environment εγκατάστησε έμπιστο pinned package, δες resolved version και σύγκρινε με unpinned requirement.

Ανεξάρτητος έλεγχος

Για Διαχειριστής πακέτων, γράψε την αναμενόμενη έξοδο πριν από εκτέλεση. Άλλαξε μία σημαντική παραδοχή και βρες αν το πρόβλημα ανήκει σε caller, implementation ή περιβάλλον.