Επιδράσεις (Effects)
Κάντε τα side effects ρητά με `with IO`, `with Panic`, `with Async` και custom effects.
Επιδράσεις (Effects)
Το Sounio παρακολουθεί side effects στις υπογραφές συναρτήσεων μέσω μιας ρητής ρήτρας with ....
Pure vs Effectful
fn double(x: i32) -> i32 {
x * 2
}
fn greet() with IO {
println("Hello")
}
Built-in Effects (Συνηθισμένα)
IO: κονσόλα + filesystem + εξωτερικό I/OPanic: operations που μπορεί να trap/abort (π.χ. division by zero, out-of-bounds indexing)Async: async/await και concurrency primitivesAlloc: heap allocationMut: mutable state (όπου εφαρμόζεται)GPU: GPU kernels / device operations (feature-dependent)
Effect Errors
Αν καλέσετε μια effectful συνάρτηση από μια pure συνάρτηση, ο compiler θα εμφανίσει σφάλμα μέχρι να:
- προσθέσετε τα απαιτούμενα effects στην υπογραφή του caller, ή
- κάνετε refactor ώστε το effect να μείνει στο boundary (προτείνεται).
Spec vs Υλοποίηση
Ο στόχος της προδιαγραφής είναι “effects είναι ρητά παντού”. Κάποιες built-in λειτουργίες μπορεί σήμερα να αντιμετωπίζονται πιο χαλαρά από user-defined effectful συναρτήσεις, ανάλογα με compiler mode και feature flags.