Προγραμματισμός

Πώς να μετατρέψετε το Python σε JavaScript (και να επιστρέψετε ξανά)

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

Ίσως όχιτίποτα. Το JavaScript είναι μια αγαπημένη γλώσσα-στόχος για τα «transpilers» που μετατρέπουν μια γλώσσα προγραμματισμού σε άλλη (δείτε: TypeScript, Emscripten, Cheerp, Cor). Και η τεράστια παρακολούθηση και ο πλούτος των διαθέσιμων βιβλιοθηκών της Python το καθιστούν έναν εξαιρετικό υποψήφιο για μετατροπή, δηλαδή μεταγλώττιση, σε JavaScript.

Εδώ είναι τέσσερα τρέχοντα έργα για να κάνετε το Python χρήσιμο στον κόσμο της JavaScript. Ξεχωρίζει κανείς με τη δυνατότητα μετατροπής και στις δύο κατευθύνσεις.

Μπράιτον

Μία από τις υποσχέσεις που κάνει το WebAss Assembly είναι να μας επιτρέψει να χρησιμοποιήσουμε οποιαδήποτε γλώσσα επιλέγουμε να αναπτύξουμε για τον Ιστό, αν και αυτός παραμένει ένας μακρινός στόχος. Η φιλοσοφία πίσω από τον Brython, τουλάχιστον όσον αφορά την Python 3, είναι γιατί να περιμένετε;

Το Brython υλοποιεί μια έκδοση του Python 3 για προγραμματισμό ιστού από τον πελάτη μέσω μιας βιβλιοθήκης JavaScript που μιμείται όλες τις λέξεις-κλειδιά και τα περισσότερα από τα ενσωματωμένα για το Python 3. Τα σενάρια που γράφονται στο Python μπορούν να συμπεριληφθούν απευθείας σε μια ιστοσελίδα. Η Brython παρέχει διεπαφή Python υψηλού επιπέδου (τοπρόγραμμα περιήγησης πακέτο) για να αλληλεπιδράσετε με το DOM και το πρόγραμμα περιήγησης, δηλαδή για τον χειρισμό όλων των εργασιών που συνήθως εκτελούνται απευθείας σε JavaScript

Πολλά παραδείγματα ζωντανών κωδικών και μια συλλογή από μίνι-εφαρμογές δείχνουν πώς λειτουργεί όλα. Είναι ακόμη δυνατό να χρησιμοποιήσετε το Brython για να γράψετε μια εγγενή εφαρμογή Android στο Python. Η λειτουργικότητα Async είναι διαθέσιμη, αν και πρέπει να χρησιμοποιήσετε το Brython's ασύγχρονος ενότητα αντί για Python's ασύγχρονο.

Ο Brython δεν ξεφεύγει από τους περιορισμούς που επιβάλλονται στο JavaScript στο πρόγραμμα περιήγησης. Για παράδειγμα, δεν υπάρχει υποστήριξη για την αντιμετώπιση του τοπικού συστήματος αρχείων. Υπάρχει, ωστόσο, υποστήριξη για τη χρήση τοπικού χώρου αποθήκευσης HTML5, αν το μόνο που χρειάζεστε είναι κάποιος τρόπος να διατηρήσετε δεδομένα σε βάση ανά εφαρμογή.

JavaScripthon

Το JavaScripthon επικεντρώνεται αυστηρά στη μετάφραση του Python 3.5 και νεότερου κώδικα σε JavaScript, χωρίς να προσπαθεί να παρέχει πλήρη υποστήριξη στο πρόγραμμα περιήγησης σύμφωνα με έργα όπως το Brython. Εκπέμπει κώδικα ES6 για να ελαχιστοποιήσει την ανάγκη για πολυπληρώσεις από την πλευρά του προγράμματος περιήγησης και παίζει καλά με εργαλεία όπως το Webpack διατηρώντας τους χάρτες πηγής.

Υποστηρίζονται οι περισσότερες από τις κοινές λέξεις-κλειδιά και συμπεριφορές της Python, όπως ασύγχρονος και αναμένω, Python 3.6 f-string, και μέθοδοι και κληρονομικές κλάσεις Python. Μπορείτε επίσης να εισαγάγετε JavaScript ενσωματωμένα μέσω μιας ειδικής κλήσης λειτουργίας, εάν χρειαστεί να μεταβείτε απευθείας στο JavaScript.

Σημειώστε ότι οι τελευταίες δεσμεύσεις για το έργο JavaScripthon ήταν τον Μάιο του 2018, οπότε δεν έχει λάβει υποστήριξη για τις πιο πρόσφατες δυνατότητες της Python, όπως ο «χειριστής walrus». Όμως όποιος χρησιμοποιεί τις λειτουργίες Python 3.6 πρέπει να υποστηρίζεται καλά.

[Επίσης στις 24 βιβλιοθήκες Python για κάθε προγραμματιστή Python]

Τζιπ

Το όνομα Jiphy είναι συντομογραφία του "JavaScript in, Python out". Με άλλα λόγια, ο Jiphy μετατρέπεται και στις δύο κατευθύνσεις μεταξύ των δύο γλωσσών. Επιπλέον, ο κώδικας και από τις δύο γλώσσες μπορεί να αναμιχθεί πριν μετατραπεί σε οποιαδήποτε από τις γλώσσες στόχους.

Πριν μπείτε και ξεκινήσετε να μετατρέπετε όλο το OpenStack σε JavaScript, λάβετε υπόψη: Το Jiphy δεν αφορά την πλήρη μετατροπή βάσης κώδικα. Αντίθετα, η λειτουργία του είναι, όπως το θέτει το README, «να μειώσει την αλλαγή περιβάλλοντος που είναι απαραίτητο για έναν προγραμματιστή Python να γράψει κώδικα JavaScript και το αντίστροφο».

Το μεγαλύτερο μειονέκτημα για το Jiphy είναι ότι υποστηρίζει μόνο ένα υποσύνολο των λειτουργιών της Python. Ούτε τάξεις ούτε προεπιλεγμένα επιχειρήματα είναι διαθέσιμα, αν και υποστηρίζονται διακοσμητές και εξαιρέσεις. Πολλά από αυτά οφείλονται στο γεγονός ότι η Jiphy προσπαθεί για μια σχέση μεταξύ γραμμής μεταξύ του πηγαίου κώδικα και του κώδικα στόχου, αλλά οι προγραμματιστές της έχουν παρακολουθήσει τις νέες δυνατότητες στο ES6 για πιο προηγμένη υποστήριξη χαρακτηριστικών Python.

Λάβετε υπόψη ότι το έργο Jiphy δεν έχει ενημερωθεί από τα τέλη του 2017. Το Jiphy πρέπει να θεωρείται αυστηρά πειραματικό έως ότου συνεχιστεί η εργασία του.

JS2Py

Το JS2Py μετατρέπει τη JavaScript σε Python, όπως υποδηλώνει το όνομα, χρησιμοποιώντας μια μηχανή μετατροπής καθαρού Python. Έχει επίσημη υποστήριξη μόνο για ES5 αυτήν τη στιγμή, αν και υπάρχει πειραματική υποστήριξη ES6 για τους γενναίους και τολμηρούς.

Το JS2Py υποστηρίζει πολλή διαλειτουργικότητα μεταξύ Python και JavaScript. Μπορείτε να εισαγάγετε υπάρχουσες ενότητες Node.js στον κώδικα Python, μέσω ενός js2py.require μέθοδος. Οι μεταβλητές από την πλευρά JavaScript μπορούν να αξιολογηθούν από την πλευρά της Python, και τα αντικείμενα της Python μπορούν να χρησιμοποιηθούν και από τον κώδικα JavaScript.

Το JS2Py περιλαμβάνει επίσης μια εξαιρετικά πειραματική εικονική μηχανή που αξιολογεί τον κώδικα JavaScript από την Python, αλλά δεν συνιστάται ακόμη για χρήση στην παραγωγή.

RapydScript

Το RapydScript υπόσχεται "Pythonic JavaScript που δεν είναι απορροφητικό." Το έργο είναι παρόμοιο με το CoffeeScript στο ότι απορροφά κώδικα γραμμένο σε μια εναλλακτική γλώσσα - σε αυτήν την περίπτωση, μια γεύση του Python - και δημιουργεί JavaScript που μπορεί να εκτελεστεί οπουδήποτε είναι.

Έτσι, το RapydScript παρέχει το καλύτερο και των δύο κόσμων, φέρνοντας την καθαρή σύνταξη της Python σε δυνατότητες JavaScript όπως ανώνυμες λειτουργίες, χειρισμό DOM και τη δυνατότητα αξιοποίησης βιβλιοθηκών JavaScript όπως το jQuery ή τον πυρήνα του Node.js. Αυτό είναι σωστό. Μπορείτε να χρησιμοποιήσετε κώδικα που δημιουργείται από Rapydscript για να οδηγήσετε ιστοσελίδες ή εφαρμογές Node.

Ένα άλλο βολικό χαρακτηριστικό του RapydScrypt: Προσφέρει ονοματολογίες Python και JavaScript για συγκεκριμένες λειτουργίες όταν είναι δυνατόν. Για παράδειγμα, το $ Το ειδικό σύμβολο που χρησιμοποιείται από το jQuery λειτουργεί ως έχει στο RapydScript και οι πίνακες μπορούν να υποστηρίξουν και τα δύο .Σπρώξτε (JavaScript) και .προσαρτώ (Python) μεθόδους.

Κρυπτογραφήστε

Εάν ακούσετε το όνομα Transcrypt και πιστεύετε ότι το TypeScript, δεν είστε μακριά από το σημάδι. Το Transcrypt ακολουθεί την ίδια βασική ιδέα - μεταφέρει το Python σε JavaScript. Προσπαθεί επίσης να διατηρήσει, όπου είναι δυνατόν, τη δομή και τα ιδιώματα του αρχικού κώδικα Python, συμπεριλαμβανομένων κατασκευών όπως lambda και πολλαπλών κληρονομιών σε όλες τις τάξεις.

Επιπλέον, μπορούν να δημιουργηθούν χάρτες πηγής για τον μεταφερόμενο κώδικα που επιστρέφει στο αρχικό Python, έτσι οι προγραμματιστές μπορούν να εντοπίσουν σφάλματα χρησιμοποιώντας αυτόν τον κώδικα αντί για το JavaScript που δημιουργήθηκε. Σύμφωνα με την τεκμηρίωση, το Transcrypt επιτελεί αυτές τις εργασίες με τη μονάδα Abstract Syntax Tree του CPython, η οποία επιτρέπει την πρόσβαση μέσω προγραμματισμού στον τρόπο με τον οποίο η Python αναλύει τον δικό της κώδικα.

Ένα από τα μεγαλύτερα πλεονεκτήματα της Transcrypt είναι η αυτόματη πρόσβαση στο Πρότυπο αντικειμένου εγγράφου (DOM) της JavaScript. Εάν προσπαθείτε να αποκτήσετε πρόσβασηdocument.getElementById στην Python, για παράδειγμα, ο κωδικός που έχει μετατραπεί θα χρησιμοποιήσει τον πραγματικόdocument.getElementById σε JavaScript.

Ένα συσχετιζόμενο έργο, και ένα ακόμα σε μεγάλο βαθμό, είναι το Numscrypt, το οποίο μεταφέρει τη βιβλιοθήκη μαθηματικών και στατιστικών στοιχείων NumPy σε JavaScript. Μέχρι στιγμής, το Numscrypt παρέχει μόνο ένα υποσύνολο των δυνατοτήτων του NumPy, αν και αυτά τα χαρακτηριστικά (π.χ. matrix math) είναι από τα πιο συχνά χρησιμοποιούμενα. Ωστόσο, το Numscrypt δεν έχει ενημερωθεί από το 2018.