DedSec Project

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

nim — συγκεντρωτικός οδηγός Nim Μοντέλο λειτουργίας Η Nim μεταγλωττίζει typed κώδικα σε native backends με εσοχές και διαφορετική σημασιολογία value/reference types. Παράδειγμα Δοκίμασέ το…

Nim

Μοντέλο λειτουργίας

Η Nim μεταγλωττίζει typed κώδικα σε native backends με εσοχές και διαφορετική σημασιολογία value/reference types.

Παράδειγμα

let nums = @[1, 2, 3]
echo nums.len

Δοκίμασέ το με νόημα

Μέτρησε μήκος sequence και σύγκρινε immutable let με mutable var.

Σφάλμα που πρέπει να ξεχωρίσεις

Οι επιλογές ownership/memory management εξαρτώνται από έκδοση και mode compiler.

Για να κρίνεις την άσκηση, κατέγραψε την αρχική είσοδο, την πρόβλεψη και την παρατήρηση σε πραγματικό, συμβατό περιβάλλον Nim. Δώσε ξεχωριστό παράδειγμα όπου αλλάζει μόνο μία μεταβλητή ή ένα όρισμα. Αν εργάζεσαι χωρίς την αναγκαία εφαρμογή, μελέτησε τη σύνταξη ως παράδειγμα και μην παρουσιάζεις το κείμενο ως εκτελεσμένο test.

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

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

proc greet(name: string): string =
  "Hello, " & name & "!"
echo greet("Ada")

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

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

Όρισε typed seq, parse Option[int] και proc με result type. Σύγκρινε value semantics με ref object sharing.

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

Nim backends και memory modes διαφέρουν· C compiler error μπορεί να προέρχεται από generated backend.

Nim — Παραδείγματα πραγματικού κώδικα

Εκτέλεση των παραδειγμάτων

Τα παραδείγματα είναι μικρά και αυτοτελή. Χρησιμοποίησε τη σχετική εγκατεστημένη γλώσσα. Ενδεικτικά: nim c -r {file}. Μη συγχέεις τα ονόματα αρχείων με αυτόματη εγκατάσταση. Δούλεψε σε δοκιμαστικό φάκελο.

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

Μικρή συνάρτηση με ξεκάθαρο συμβόλαιο

Η Nim χρησιμοποιεί σύνταξη που θυμίζει Python αλλά μεταγλωττίζεται και ελέγχει στατικά τύπους. Το openArray[int] είναι παράμετρος που δέχεται arrays και sequences χωρίς να απαιτεί να αντιγράψεις όλο το περιεχόμενο για κάθε κλήση.

proc sumPositive(values: openArray[int]): int =
  for value in values:
    if value > 0:
      result += value

echo sumPositive([4, -2, 7])
echo sumPositive(newSeq[int]())

Η αναμενόμενη έξοδος είναι 11 και 0. Στη Nim το result είναι μεταβλητή επιστροφής που αρχικοποιείται στην προεπιλεγμένη τιμή του τύπου. Μην συγχέεις αυτή τη δυνατότητα με μεταβλητές άλλων γλωσσών που απαιτούν ρητή δήλωση return σε κάθε διαδρομή.

Διαφορές seq και array

Ένα array[T] έχει στατικό μέγεθος, ενώ το seq[T] έχει δυναμικό μήκος. Φτιάξε seq, πρόσθεσε τιμή με add και παρατήρησε την αλλαγή len. Αν κατασκευάσεις slice, επιθεώρησε προσεκτικά αν πρόκειται για νέο sequence ή view σύμφωνα με την ακριβή API που χρησιμοποιείς. Μην υποθέτεις αυτομάτως τις συμβάσεις άλλης γλώσσας με παρόμοια σύνταξη.

Έλεγχος λαθών

Τροποποίησε τη συνάρτηση ώστε να προσθέτει μόνο μη αρνητικά int με πολιτική overflow. Σε συγκεκριμένα build modes ο overflow check μπορεί να συμπεριφέρεται διαφορετικά. Κατέγραψε αν χρησιμοποιείς checked arithmetic ή αν επιτρέπεις wrap, και γιατί οι αποφάσεις επηρεάζουν υπολογισμό χρημάτων ή μετρητών.

Χρόνος ζωής και memory management

Οι Nim εκδόσεις έχουν διαφορετικά memory management modes, συμπεριλαμβανομένων ARC/ORC. Μην προτείνεις γενική συμπεριφορά GC χωρίς να γνωρίζεις ποια επιλογή έχει γίνει. Για strings και mutable references γράψε παράδειγμα aliasing και διαχώρισε την αλλαγή ονόματος από τη μεταβολή δεδομένων.

Παραδοτέο

Τρέξε τα cases για κενή συλλογή, μόνο αρνητικά και μεγάλα θετικά ints, σημειώνοντας compiler version, switches και πραγματικές εκτυπώσεις. Εξήγησε ακριβώς πώς το openArray περιορίζει τη συνάρτηση ως προς τύπο και τι δεν εγγυάται ως προς την ιδιοκτησία.