Μετά από δύο χρόνια ανάπτυξης, στις 29 Ιουνίου, μια νέα έκδοση της γλώσσας προγραμματισμού Lua, 5.4, κυκλοφόρησε αθόρυβα και αθόρυβα.

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

Η προηγούμενη έκδοση (5.3.5) κυκλοφόρησε στις 10 Ιουλίου 2018.

Βασικές αλλαγές στη νέα έκδοση

  • σκουπιδοσυλλέκτης νέας γενιάς. Στη συνάρτηση collectgarbage, οι παράμετροι setpause και setstepmul έχουν καταργηθεί και προτείνεται η αυξητική παράμετρος.

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

  • η νέα υλοποίηση του math.random χρησιμοποιεί τον αλγόριθμο xoshiro256** αντί του παρεχόμενου libc και αρχικοποιεί τη γεννήτρια με έναν τυχαίο αριθμό.

  • σταθερές μεταβλητές?

  • Οι μεταβλητές "to-be-closed" είναι τοπικές σταθερές για τις οποίες εκτελείται η μέθοδος __close κατά την έξοδο από το πεδίο εφαρμογής.

  • νέα συνάρτηση lua_resetthread - διαγράφει τη στοίβα και κλείνει όλες τις "κλειστές" μεταβλητές.

  • νέα συνάρτηση coroutine.close - κλείνει την καθορισμένη κορουτίνα και όλες τις «κλειστές» μεταβλητές της.

  • Τα δεδομένα χρήστη μπορούν να περιέχουν ένα σύνολο τιμών στις οποίες έχει πρόσβαση το ευρετήριο. Έχουν εισαχθεί νέες λειτουργίες για να δουλέψουν μαζί τους: lua_newuserdatauv, lua_setiuservalue και lua_getiuservalue.

  • Διατίθενται πληροφορίες εντοπισμού σφαλμάτων σχετικά με τις παραμέτρους και τις τιμές επιστροφής των συναρτήσεων.

  • Εάν ένας ακέραιος δείκτης χρησιμοποιείται σε έναν βρόχο for και συμβεί υπερχείλιση, ο βρόχος τελειώνει.

  • ένα προαιρετικό όρισμα έχει προστεθεί στη συνάρτηση string.gmatch, προσδιορίζοντας τη μετατόπιση από την αρχή της συμβολοσειράς για αναζήτηση αντιστοιχιών.

  • Οι συναρτήσεις για σιωπηρή μετατροπή συμβολοσειρών σε αριθμούς έχουν μετακινηθεί στη βιβλιοθήκη συμβολοσειρών και η συμπεριφορά τους έχει αλλάξει. Για παράδειγμα, το αποτέλεσμα της πράξης "1" + "2" είναι τώρα ένας ακέραιος και όχι ένας αριθμός κινητής υποδιαστολής.

  • στη λειτουργία εκχώρησης μνήμης, ενδέχεται να προκύψει σφάλμα κατά τη μείωση ενός μπλοκ μνήμης.

  • νέος χαρακτήρας μορφοποίησης στη συνάρτηση string.format - %p (για δείκτες).

  • η βιβλιοθήκη utf8 δέχεται κωδικούς χαρακτήρων έως 2³¹ (εάν ορίζεται ειδική σημαία, χωρίς αυτήν επιτρέπονται μόνο κωδικοί έως 0x10FFFF και δεν επιτρέπονται υποκατάστατα).

  • Οι σταθερές ακέραιων αριθμών εκτός του εύρους τιμών μετατρέπονται σε κυμαινόμενους αριθμούς (προηγουμένως είχε γίνει αποκοπή bit).

  • η __lt metamethod δεν χρησιμοποιείται πλέον για την εξομοίωση της __le metamethod. Εάν είναι απαραίτητο, η metamethod __le πρέπει να προσδιορίζεται ρητά.

  • μια ετικέτα για μια δήλωση goto δεν μπορεί να δημιουργηθεί εάν μια ετικέτα με το ίδιο όνομα υπάρχει ήδη στο τρέχον εύρος (ακόμη κι αν έχει οριστεί στο εξωτερικό πεδίο εφαρμογής).

  • Η μεταμέθοδος __gc μπορεί να είναι κάτι περισσότερο από μια απλή συνάρτηση. Εάν μια προσπάθεια κλήσης μιας μεθόδου αποτύχει, θα εκτυπωθεί μια προειδοποίηση.

  • η συνάρτηση εκτύπωσης δεν καλεί tostring για κάθε όρισμα, αλλά χρησιμοποιεί τις δικές της εσωτερικές μετατροπές.

  • η συνάρτηση io.lines επιστρέφει ένα σύνολο τεσσάρων τιμών αντί για μία· για να προσομοιώσετε την παλιά συμπεριφορά, περικλείστε την κλήση σε παρένθεση εάν τη μεταβιβάζετε ως παράμετρο σε μια άλλη κλήση συνάρτησης.

Πηγή: linux.org.ru

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