Ανοιχτός κώδικας για το Luau, μια παραλλαγή ελέγχου τύπου της γλώσσας Lua

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

Το Luau επεκτείνει το Lua με δυνατότητες ελέγχου τύπων και μερικές νέες συντακτικές κατασκευές όπως τα κυριολεκτικά συμβολοσειρών. Η γλώσσα είναι συμβατή με το Lua 5.1 και εν μέρει με νεότερες εκδόσεις. Το Lua Runtime API υποστηρίζεται, επιτρέποντάς σας να χρησιμοποιείτε το Luau με υπάρχοντα κώδικα και δεσμεύσεις. Ο χρόνος εκτέλεσης της γλώσσας βασίζεται σε έναν πολύ επεξεργασμένο κώδικα Lua runtime 5.1, αλλά ο διερμηνέας έχει ξαναγραφτεί πλήρως. Κατά την ανάπτυξη, χρησιμοποιήθηκαν ορισμένες νέες τεχνικές βελτιστοποίησης για την επίτευξη υψηλότερης απόδοσης σε σύγκριση με τον Lua.

Το έργο αναπτύχθηκε από τη Roblox και χρησιμοποιείται στον κώδικα της πλατφόρμας παιχνιδιών, των παιχνιδιών και των εφαρμογών χρηστών αυτής της εταιρείας, συμπεριλαμβανομένου του επεξεργαστή Roblox Studio. Αρχικά, το Luau αναπτύχθηκε κεκλεισμένων των θυρών, αλλά τελικά αποφασίστηκε να μεταφερθεί στην κατηγορία των ανοιχτών έργων για περαιτέρω κοινή ανάπτυξη με τη συμμετοχή της κοινότητας.

Κύρια χαρακτηριστικά γνωρίσματα:

  • Σταδιακή πληκτρολόγηση, καταλαμβάνοντας μια ενδιάμεση θέση μεταξύ δυναμικής και στατικής πληκτρολόγησης. Το Luau σάς επιτρέπει να χρησιμοποιείτε στατική πληκτρολόγηση όπως απαιτείται, καθορίζοντας πληροφορίες τύπου μέσω ειδικών σχολιασμών. Παρέχονται οι ενσωματωμένοι τύποι "οποιοδήποτε", "μηδενικό", "boolean", "number", "string" και "thread". Ταυτόχρονα, διατηρείται η δυνατότητα χρήσης δυναμικής πληκτρολόγησης χωρίς να ορίζεται ρητά ο τύπος των μεταβλητών και των συναρτήσεων. συνάρτηση foo(x: αριθμός, y: συμβολοσειρά): boolean local k: string = y:rep(x) return k == "a" τέλος
  • Υποστήριξη για κυριολεκτικά συμβολοσειρών (όπως στο Lua 5.3) όπως "\0x**" (δεκαεξαδικός αριθμός), "\u{**}" (χαρακτήρας Unicode) και "\z" (τέλος γραμμής), καθώς και δυνατότητα οπτικοποίησης της μορφοποίησης αριθμών (μπορείτε να γράψετε 1_000_000 αντί για 1000000), κυριολεκτικά για δεκαεξαδικούς (0x...) και δυαδικούς αριθμούς (0b......).
  • Υποστήριξη για την έκφραση "συνέχεια", συμπληρώνοντας την υπάρχουσα λέξη-κλειδί "διάλειμμα", για μετάβαση σε μια νέα επανάληψη βρόχου.
  • Υποστήριξη για τελεστές σύνθετης ανάθεσης (+=, -=, *=, /=, %=, ^=, ..=).
  • Υποστήριξη για τη χρήση μπλοκ υπό όρους "if-then-else" με τη μορφή εκφράσεων που επιστρέφουν την τιμή που υπολογίστηκε κατά την εκτέλεση του μπλοκ. Μπορείτε να καθορίσετε έναν αυθαίρετο αριθμό παραστάσεων otherif σε ένα μπλοκ. local maxValue = αν a > b τότε a other b τοπικό πρόσημο = αν x < 0 τότε -1 elseif x > 0 τότε 1 other 0
  • Η παρουσία μιας λειτουργίας απομόνωσης (sandbox), η οποία σας επιτρέπει να εκτελείτε αναξιόπιστο κώδικα. Αυτή η δυνατότητα μπορεί να χρησιμοποιηθεί για την οργάνωση της εκκίνησης δίπλα-δίπλα του δικού σας κώδικα και του κώδικα που έχει γραφτεί από άλλον προγραμματιστή, για παράδειγμα, βιβλιοθήκες τρίτων για την ασφάλεια των οποίων δεν μπορεί να εγγυηθεί.
  • Ένας περιορισμός της τυπικής βιβλιοθήκης από την οποία έχουν αφαιρεθεί λειτουργίες που θα μπορούσαν να δημιουργήσουν προβλήματα ασφαλείας. Για παράδειγμα, οι βιβλιοθήκες "io" (πρόσβαση σε αρχεία και διεργασίες εκκίνησης), "package" (πρόσβαση σε αρχεία και φόρτωση λειτουργικών μονάδων), "os" (συναρτήσεις για πρόσβαση σε αρχεία και αλλαγή μεταβλητών περιβάλλοντος), "debug" (μη ασφαλής λειτουργία με μνήμη) , "dofile" και "loadfile" (πρόσβαση FS).
  • Παροχή εργαλείων για ανάλυση στατικού κώδικα, εντοπισμός σφαλμάτων (linter) και έλεγχος σωστής χρήσης τύπων.
  • Διαθέτετε αναλυτή υψηλής απόδοσης, διερμηνέα bytecode και μεταγλωττιστή. Το Luau δεν υποστηρίζει ακόμη τη συλλογή JIT, αλλά υποστηρίζεται ότι ο διερμηνέας Luau είναι αρκετά συγκρίσιμος σε απόδοση με το LuaJIT σε ορισμένες περιπτώσεις.

Πηγή: opennet.ru

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