Απολαύστε έναν μεταγλωττιστή ανοιχτού κώδικα από C/C++ σε WebAssembly και JavaScript

ευθυμία

Cheerp: Ένας μεταγλωττιστής C++ για τον Ιστό

Ανακοινώθηκε πρόσφατα Κυκλοφορία Cheerp 3.0, ένας μεταγλωττιστής που σας επιτρέπει να μεταγλωττίσετε οποιονδήποτε κώδικα C/C++ σε WebAssembly ή JavaScript. Ο νέος κλάδος είναι αξιοσημείωτος για τη μετακίνηση του μεταγλωττιστή και των συνοδευτικών βιβλιοθηκών για χρήση επιτρεπτικών αδειών χρήσης Apache 2.0 και LLVM, αντί για την πολιτική περιορισμένης άδειας που εφαρμόστηκε προηγουμένως, η οποία προσφέρει μια επιλογή άδειας GPLv2 για μη εμπορικά έργα και έναν κάτοχο άδειας για εμπορικά έργα.

Το Cheerp μπορεί να χρησιμοποιηθεί τόσο για τη μεταφορά υπαρχουσών εφαρμογών και βιβλιοθηκών C/C++ για εκτέλεση στο πρόγραμμα περιήγησης ή για τη δημιουργία εφαρμογών ιστού υψηλής απόδοσης και στοιχείων WebAssembly από την αρχή.

Έχει περάσει πάνω από ένας χρόνος από την προηγούμενη κυκλοφορία του Cheerp ( Cheerp 2.7 ) και αυτή η νέα έκδοση είναι γεμάτη με νέες δυνατότητες και βελτιστοποιήσεις που, για άλλη μια φορά, μεταφέρουν την τελευταία λέξη της τεχνολογίας στη χρήση της C++ ως γλώσσα προγραμματισμού για εφαρμογές Ιστού. και Παιχνίδια.

Το πιο σημαντικό, με αυτήν την έκδοση κάνουμε μια σημαντική αλλαγή στο μοντέλο αδειοδότησης της Cheerp. Από το Cheerp 3.0, όλα τα βασικά στοιχεία μεταγλωττιστή και οι βιβλιοθήκες έχουν πλέον επιτρεπτή άδεια χρήσης υπό την άδεια Apache 2.0/LLVM. Αυτό σηματοδοτεί μια ριζική απόκλιση από το προηγούμενο μοντέλο μας GPLv2/διπλής εμπορικής άδειας, επιτρέποντας στο Cheerp 3.0 να χρησιμοποιείται για οποιοδήποτε σκοπό, χωρίς περιορισμούς.

Σχετικά με το Cheerp

Το έργο σας επιτρέπει να συνδυάσετε κώδικα C/C++ και JavaScript σε μια εφαρμογή Ιστού με τη δυνατότητα πρόσβασης από κώδικα JavaScript σε λειτουργίες που αναπτύχθηκαν αρχικά σε C/C++ και από κώδικα C/C++ σε αντικείμενα JavaScript, βιβλιοθήκες JavaScript, Web API και όλες τις λειτουργίες DOM, καθώς και να σας επιτρέπει να δημιουργείτε μικτές εκδόσεις, μέρος του τον κώδικα που μεταγλωττίζεται σε JavaScript και τα μέρη στο WebAssembly. Υποστηρίζει έργα κατασκευής που χρησιμοποιούν τις τυπικές βιβλιοθήκες libc και libc++.

Σε σύγκριση με τον μεταγλωττιστή Emscripten, Cheerp δημιουργεί πιο βελτιστοποιημένο και συμπαγή ενδιάμεσο κώδικα WebAssembly (Κατά μέσο όρο, τα μεγέθη αρχείων που προκύπτουν είναι 7% μικρότερα.)

Εννοιολογικά, οι διαφορές συνοψίζονται στο γεγονός ότι Εγγραφείτε χρησιμοποιείται ως η μορφή αντικειμένου του WebAssembly και εκτελεί δέσμευση και βελτιστοποίηση στο στάδιο μετά την επεξεργασία του WebAssembly (wasm-opt). Το Cheerp χρησιμοποιεί bytecode LLVM ως ενδιάμεση αναπαράσταση για βιβλιοθήκες και αρχεία αντικειμένων, επιτρέποντας ευρύτερες βελτιστοποιήσεις σε όλο το έργο χρησιμοποιώντας μεταδεδομένα σε επίπεδο LLVM χωρίς την ανάγκη μετα-επεξεργασίας.

σχετικό άρθρο:
Emscripten 3.0, μια αλυσίδα εργαλείων δημιουργίας για WebAssembly με χρήση LLVM

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

Το Cheerp μπορεί επίσης να δημιουργήσει κώδικα JavaScript για να λειτουργεί δυναμικά με τη μνήμη. καλύπτεται από τον σκουπιδοσυλλέκτη. Συγκεκριμένα, αντί να μιμείται έναν παραδοσιακό χώρο διευθύνσεων με πληκτρολογημένους πίνακες, το Cheerp παρέχει μια απευθείας αντιστοίχιση από αντικείμενα C++ σε αντικείμενα JavaScript, η οποία μειώνει την κατανάλωση μνήμης επειδή ο συλλέκτης σκουπιδιών JavaScript έχει τη δυνατότητα να αφαιρεί αχρησιμοποίητα αντικείμενα. Για τη βελτίωση της απόδοσης, ο ενδιάμεσος κώδικας WebAssembly που δημιουργείται χρησιμοποιεί επεκτάσεις SIMD για να ενορχηστρώσει την παραλληλοποίηση των λειτουργιών δεδομένων.

Το Cheerp μπορεί να χρησιμοποιηθεί ως πλατφόρμα για τη δημιουργία ενσωματωμένων εφαρμογών ιστού πελάτη/διακομιστή σε C++. Στην τρέχουσα πρακτική, είναι σύνηθες να αναπτύσσεται ένα ξεχωριστό front-end που βασίζεται σε πρόγραμμα περιήγησης γραμμένο σε JavaScript και ένα ξεχωριστό back-end γραμμένο σε PHP, Python, Ruby ή JavaScript/Node.js.

Το Cheerp παρέχει τα μέσα για τη δημιουργία ολοκληρωμένων εφαρμογών ιστού C++ που υποστηρίζουν τόσο το backend όσο και το frontend σε μια ενιαία βάση κώδικα.

Κατά τη διαδικασία δημιουργίας, η πλευρά του διακομιστή μεταγλωττίζεται σε εγγενή κώδικα και η διεπαφή μετατρέπεται σε αναπαράσταση JavaScript. Ο εντοπισμός σφαλμάτων όλων των στοιχείων του έργου, συμπεριλαμβανομένων αυτών που έχουν μετατραπεί σε JavaScript, πραγματοποιείται χρησιμοποιώντας κείμενα πηγής C++ χρησιμοποιώντας την τεχνολογία Source Map.

Τέλος, αν ενδιαφέρεστε να μάθετε περισσότερα γι 'αυτό, μπορείτε να ελέγξετε τις λεπτομέρειες στο παρακάτω σύνδεσμο.

Ο κώδικας μεταγλωττιστή βασίζεται στις εξελίξεις LLVM και Clang και περιλαμβάνει πρόσθετες βελτιστοποιήσεις για τη βελτίωση της απόδοσης και τη μείωση του μεγέθους της μεταγλωττισμένης εξόδου.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: AB Internet Networks 2008 SL
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.