Κυκλοφορία της γλώσσας προγραμματισμού Lua 5.4

Μετά από πέντε χρόνια ανάπτυξης διαθέσιμος απελευθέρωση Lua 5.4, μια γρήγορη και συμπαγής γλώσσα προγραμματισμού δέσμης ενεργειών που χρησιμοποιείται ευρέως ως ενσωματωμένη γλώσσα (για παράδειγμα, για καθορισμό παραμέτρων ή επεκτάσεις εγγραφής). Ο κωδικός διερμηνέα Lua είναι γραμμένος σε C και διανέμονται από υπό την άδεια του MIT.

Ο Lua συνδυάζει μια απλή διαδικαστική σύνταξη με ισχυρές δυνατότητες περιγραφής δεδομένων μέσω της χρήσης συσχετιστικών πινάκων και επεκτάσιμης σημασιολογίας της γλώσσας. Ο Lua χρησιμοποιεί δυναμική πληκτρολόγηση, μετατρέποντας δομές γλώσσας σε bytecode που εκτελείται πάνω από μια εικονική μηχανή που βασίζεται σε μητρώο με αυτόματη συλλογή σκουπιδιών. Ο ίδιος ο διερμηνέας έχει σχεδιαστεί ως μια βιβλιοθήκη που μπορεί εύκολα να ενσωματωθεί σε έργα στις γλώσσες C και C++.

Ο κύριος καινοτομίες:

  • Εφαρμόστηκε νέος τρόπος λειτουργίας του απορριμματοσυλλέκτη - “γενεάς», το οποίο συμπλήρωνε την προηγουμένως διαθέσιμη λειτουργία σταδιακής συλλογής σκουπιδιών. Η νέα λειτουργία περιλαμβάνει τη συχνότερη εκτέλεση μιας συντομευμένης ανίχνευσης, καλύπτοντας μόνο αντικείμενα που δημιουργήθηκαν πρόσφατα. Η πλήρης διέλευση όλων των αντικειμένων εκτελείται μόνο εάν, μετά από μια σύντομη διέλευση, δεν ήταν δυνατό να επιτευχθεί η επιθυμητή κατανάλωση μνήμης. Αυτή η προσέγγιση σάς επιτρέπει να επιτύχετε υψηλότερη απόδοση και να μειώσετε την κατανάλωση μνήμης κατά την αποθήκευση μεγάλου αριθμού αντικειμένων που ζουν για μικρό χρονικό διάστημα.
  • Προστέθηκε η δυνατότητα ορισμού σταθερών μεταβλητών που ορίζονται με το χαρακτηριστικό "const". Τέτοιες μεταβλητές μπορούν να εκχωρηθούν μόνο μία φορά και, αφού αρχικοποιηθούν, δεν μπορούν να αλλάξουν.
  • Προστέθηκε υποστήριξη για μεταβλητές "προς-κλείσιμο", οι οποίες εκχωρούνται χρησιμοποιώντας το χαρακτηριστικό "close" και μοιάζουν με σταθερές τοπικές μεταβλητές (με το χαρακτηριστικό const), που διαφέρουν από αυτές στο ότι η τιμή είναι κλειστή (καλείται η μέθοδος "__close") κάθε φορά που φεύγει από το πεδίο εφαρμογής, για παράδειγμα, μετά την κανονική ολοκλήρωση του μπλοκ, μετάβαση χρησιμοποιώντας break/goto/return ή έξοδος όταν παρουσιαστεί σφάλμα.
  • Πληκτρολογήστε "δεδομένα χρήστη", το οποίο παρέχει τη δυνατότητα αποθήκευσης οποιωνδήποτε δεδομένων C σε μεταβλητές Lua (αντιπροσωπεύει ένα μπλοκ δεδομένων στη μνήμη ή περιέχει έναν δείκτη C), μπορεί τώρα να περιέχει πολλές τιμές (έχουν πολλούς μεταπίνακες).
  • Παρουσιάζεται μια νέα υλοποίηση της συνάρτησης για τη δημιουργία ψευδοτυχαίων αριθμών - math.random.
  • Προστέθηκε ένα σύστημα προειδοποιήσεων που καθορίζονται χρησιμοποιώντας την έκφραση προειδοποιώ και, σε αντίθεση με τα σφάλματα, δεν επηρεάζουν την περαιτέρω εκτέλεση του προγράμματος.
  • Προστέθηκαν πληροφορίες εντοπισμού σφαλμάτων σχετικά με ορίσματα συναρτήσεων και τιμές επιστροφής.
  • Μια νέα σημασιολογία έχει προταθεί για την απαρίθμηση ακεραίων σε βρόχους "for". Ο αριθμός των επαναλήψεων υπολογίζεται πριν από την έναρξη του βρόχου, γεγονός που αποφεύγει την υπερχείλιση και τον βρόχο μεταβλητών. Εάν η αρχική τιμή είναι μεγαλύτερη από την οριακή τιμή, εμφανίζεται ένα σφάλμα.
  • Σε λειτουργία 'συμβολοσειρά.gmatchΠρόσθεσε ένα νέο προαιρετικό όρισμα 'init', το οποίο καθορίζει σε ποια θέση θα ξεκινήσει η αναζήτηση (από προεπιλογή, από 1 χαρακτήρα).
  • Προστέθηκαν νέες δυνατότητες 'lua_resetthread' (επαναφέρει το νήμα, διαγράφει ολόκληρη τη στοίβα κλήσεων και κλείνει όλες τις μεταβλητές "προς κλείσιμο") και "κορουτίνα.κλείνω' (κλείνει την κορουτίνα και όλες τις σχετικές μεταβλητές "προς κλείσιμο").
  • Οι συναρτήσεις για τη μετατροπή συμβολοσειρών σε αριθμούς έχουν μετακινηθεί στη βιβλιοθήκη "string".
  • Οι κλήσεις προς τη λειτουργία εκχώρησης μνήμης μπορεί τώρα να αποτύχουν εάν μειωθεί το μέγεθος του μπλοκ μνήμης.
  • Σε λειτουργία 'συμβολοσειρά.μορφήΠρόσθεσε υποστήριξη για τον νέο προσδιοριστή μορφής '%p' (ο δείκτης επιστράφηκε από το lua_topointer).
  • Η βιβλιοθήκη utf8 παρέχει υποστήριξη κωδικούς χαρακτήρων με αριθμούς μέχρι 2^31.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο