Ο ιδρυτής QEMU και FFmpeg δημοσιεύει το QuickJS JavaScript Engine

Ο Γάλλος μαθηματικός Fabrice Bellard, ο οποίος κάποτε ίδρυσε τα έργα QEMU και FFmpeg, και επίσης δημιούργησε τον ταχύτερο τύπο για τον υπολογισμό του pi και ανέπτυξε τη μορφή εικόνας BPG, δημοσίευσε την πρώτη έκδοση μιας νέας μηχανής JavaScript QuickJS. Ο κινητήρας είναι συμπαγής και επικεντρωμένος στην ενσωμάτωση σε άλλα συστήματα. Ο κώδικας του έργου είναι γραμμένος σε C και διανέμεται με την άδεια MIT. Διατίθεται επίσης ένα συγκρότημα της μηχανής που έχει μεταγλωττιστεί στο WebAssembly χρησιμοποιώντας το Emscripten και είναι κατάλληλο για εκτέλεση σε προγράμματα περιήγησης.

Υλοποίηση JavaScript υποστηρίζει την προδιαγραφή ES2019, συμπεριλαμβανομένων μονάδων, ασύγχρονων γεννητριών και διακομιστή μεσολάβησης. Τα μη τυπικά μαθηματικά υποστηρίζονται προαιρετικά. επεκτάσεις για JavaScript, όπως οι τύποι BigInt και BigFloat, καθώς και υπερφόρτωση χειριστή. Όσον αφορά την απόδοση, το QuickJS είναι σημαντικό ανώτερη από υπάρχοντα ανάλογα, για παράδειγμα, στη δοκιμή
Το bench-v8 είναι μπροστά από τον κινητήρα XS κατά 35% duktape περισσότερες από δύο φορές jerryscript τρεις φορές και MuJS επτά φορές.

Εκτός από τη βιβλιοθήκη για την ενσωμάτωση του κινητήρα σε εφαρμογές, το έργο προσφέρει επίσης τον διερμηνέα qjs, ο οποίος μπορεί να χρησιμοποιηθεί για την εκτέλεση κώδικα JavaScript από τη γραμμή εντολών. Επιπλέον, ο μεταγλωττιστής qjsc είναι διαθέσιμος, ικανός να δημιουργεί αυτόνομα εκτελέσιμα αρχεία που δεν απαιτούν εξωτερικές εξαρτήσεις.

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

  • Συμπαγές και εύκολο να ενσωματωθεί σε άλλα έργα. Ο κώδικας περιλαμβάνει μόνο μερικά αρχεία C που δεν απαιτούν εξωτερικές εξαρτήσεις για τη δημιουργία. Η μεταγλωττισμένη απλή εφαρμογή διαρκεί περίπου 190 KB.
  • Πολύ υψηλή απόδοση και χαμηλός χρόνος εκκίνησης. Η επιτυχία 56 χιλιάδων δοκιμών συμβατότητας ECMAScript διαρκεί περίπου 100 δευτερόλεπτα όταν εκτελείται σε έναν μόνο πυρήνα ενός τυπικού επιτραπέζιου υπολογιστή. Η προετοιμασία χρόνου εκτέλεσης διαρκεί λιγότερο από 300 μικροδευτερόλεπτα.
  • Σχεδόν πλήρης υποστήριξη για την προδιαγραφή ES2019 και πλήρης υποστήριξη για το Παράρτημα Β, το οποίο ορίζει στοιχεία για συμβατότητα με παλαιότερες εφαρμογές Ιστού.
  • Πλήρης επιτυχία όλων των δοκιμών από τη σουίτα δοκιμών ECMAScript.
  • Υποστήριξη για τη μεταγλώττιση κώδικα Javascript σε εκτελέσιμα αρχεία χωρίς εξωτερικές εξαρτήσεις.
  • Συλλέκτης απορριμμάτων με μέτρηση αναφοράς χωρίς κύκλο καθαρισμού, που επέτρεψε προβλέψιμη συμπεριφορά και μειωμένη κατανάλωση μνήμης.
  • Ένα σύνολο επεκτάσεων για μαθηματικούς υπολογισμούς στη γλώσσα JavaScript.
  • Ένα κέλυφος για την εκτέλεση κώδικα σε λειτουργία γραμμής εντολών που υποστηρίζει την επισήμανση κώδικα με βάση τα συμφραζόμενα.
  • Μια συμπαγής τυπική βιβλιοθήκη με δεσμεύσεις πάνω από τη βιβλιοθήκη C.

Το έργο αναπτύσσει επίσης τρεις συνοδευτικές C-βιβλιοθήκες που εμπλέκονται στο QuickJS και είναι κατάλληλες για ξεχωριστή εφαρμογή:

  • Το libregexp είναι μια γρήγορη υλοποίηση κανονικών εκφράσεων που είναι πλήρως συμβατή με την προδιαγραφή Javascript ES 2019.
  • libunicode - μια συμπαγής βιβλιοθήκη για εργασία με Unicode.
  • Το libbf είναι μια εφαρμογή αυθαίρετων πράξεων κινητής υποδιαστολής ακριβείας και υπερβατικών συναρτήσεων ακριβούς στρογγυλοποίησης.

Πηγή: opennet.ru

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