Διαφήμιση
Αυτή τη στιγμή συζητάτε αν θα χρησιμοποιήσετε τη java για την επόμενη εφαρμογή σας ή θα χρησιμοποιήσετε μητρική εργαλεία και πλαίσια; Θα θέλατε να μάθετε ποια πλεονεκτήματα παρέχει η java πάνω από τον εγγενή προγραμματισμό μιας εφαρμογής; Διαβάστε παρακάτω για να μάθετε!
Τι είναι μια εγγενής εφαρμογή;
Μια εγγενής εφαρμογή είναι ένα πρόγραμμα γραμμένο ειδικά για ένα λειτουργικό σύστημα (OS), και ενδεχομένως για το συγκεκριμένο υλικό που εκτελεί το λειτουργικό σύστημα. Συντάσσεται συνήθως σε γλώσσα όπως η C / C ++. Ο πηγαίος κώδικας C / C ++ μεταγλωττίζεται σε μια φόρμα αντικειμένου χρησιμοποιώντας έναν μεταγλωττιστή, ο οποίος στη συνέχεια συναρμολογείται σε ένα εκτελέσιμο αρχείο συνδέοντας τις απαιτούμενες βιβλιοθήκες. Ένα πρόγραμμα που έχει δημιουργηθεί με αυτόν τον τρόπο θα λειτουργεί με το συγκεκριμένο υλικό και το λειτουργικό σύστημα για το οποίο είναι κατασκευασμένο, αλλά μπορεί να μην λειτουργεί σωστά σε άλλα συστήματα.
Γιατί δεν είναι φορητές οι εγγενείς εφαρμογές;
Ένας μεταγλωττιστής για μια γλώσσα όπως το C / C ++ μεταφράζει τις δηλώσεις κώδικα πηγής στη γλώσσα μηχανής για την στοχευμένη CPU. Όταν επιχειρείτε να εκτελέσετε αυτόν τον κώδικα σε διαφορετική CPU, το πρόγραμμα ενδέχεται να μην λειτουργεί σωστά (ή να μην λειτουργεί καθόλου), καθώς οι οδηγίες γλώσσας μηχανής στον επεξεργασμένο κώδικα ενδέχεται να μην υποστηρίζονται από αυτήν την CPU.
Επιπλέον, το νέο λειτουργικό σύστημα ενδέχεται να διαφέρει από το αρχικό και ίσως δεν αναγνωρίζει το αρχείο του προγράμματος ως εκτελέσιμο αρχείο. Αυτό οφείλεται σε διαφορετικές μορφές αρχείων που χρησιμοποιούνται για εκτελέσιμα σε διάφορα λειτουργικά συστήματα (όπως Windows, Linux, MacOS κ.λπ.).
Η φορητότητα είναι ένα τόσο μεγάλο ζήτημα με τις εγγενείς εφαρμογές που απλώς αναβαθμίζουν τον μεταγλωττιστή στην επόμενη έκδοση ενδέχεται να προκαλέσουν αλλαγές σπάσιμο. Ο κώδικας μπορεί να χρειαστεί να διορθωθεί για να λειτουργήσει με τον νεότερο μεταγλωττιστή. Ως εκ τούτου, splattering τον πηγαίο κώδικα με αυτό που είναι γνωστό ως ifdef οι δηλώσεις για την απομόνωση των εναλλακτικών λύσεων που αφορούν το υλικό, το OS ή τον μεταγλωττιστή είναι κοινές.
Το παρακάτω είναι ένα απόσπασμα μικρού κώδικα από Βιβλιοθήκη συμπίεσης BZLib η οποία απεικονίζει τη χρήση του ifdefs για να απομονώσει τις ιδιαιτερότητες της πλατφόρμας:
#ifdef _WIN32. # περιλαμβάνω # ifdef small / * windows.h ορίστε μικρό σε char * / # undef small. # τέλος εαν. # ifdef BZ_EXPORT. # ορίστε BZ_API (func) WINAPI func. # ορίστε BZ_EXTERN εξωτερικά. # else / * εισαγωγή δυναμικών παραθύρων dll * / # ορίστε BZ_API (func) (WINAPI * func) # define BZ_EXTERN. # τέλος εαν. #αλλού. # ορίστε BZ_API (func) func. # ορίστε BZ_EXTERN εξωτερικά. #τέλος εαν.
Φορητότητα πηγαίου κώδικα μεταξύ των λειτουργικών συστημάτων
Αυτή η κατάσταση μπορεί να μετριαστεί σε κάποιο βαθμό με την ανασυγκρότηση του πηγαίου κώδικα C / C ++ στη νέα CPU. Ωστόσο, το λειτουργικό σύστημα για τη νέα CPU μπορεί να είναι διαφορετικό. Και ο πηγαίος κώδικας δεν μπορεί να μεταγλωττιστεί χωρίς αλλαγές, μεγάλες ή δευτερεύουσες. Ακόμα και μικρές αλλαγές στις εκδόσεις του λειτουργικού συστήματος ενδέχεται να απαιτούν κάποιες αλλαγές πηγαίου κώδικα.
Και όταν εξετάζετε διαφορετικά λειτουργικά συστήματα όπως τα Windows και το Linux / UNIX, η φορητότητα είναι ολοκαίνουριο παιχνίδι με μπάλα. Εκτός αν χρησιμοποιείτε μια εργαλειοθήκη ή ένα πλαίσιο που σας απομονώνει πλήρως από το λειτουργικό σύστημα, η φορητότητα του πηγαίου κώδικα είναι αδύνατη. Αυτό οφείλεται στο γεγονός ότι η διεπαφή του λειτουργικού συστήματος είναι τελείως διαφορετική μεταξύ αυτών των συστημάτων. Αν εσείς, στις πιο απομακρυσμένες γωνίες του κώδικα σας, χρησιμοποιήσετε απευθείας όλα τα πρωτότυπα του λειτουργικού συστήματος, τότε ο κωδικός σας δεν θα είναι φορητός σε αυτά τα διαφορετικά λειτουργικά συστήματα.
Πώς είναι διαφορετική η Java;
Σε αυτό το σενάριο η java παραδίδει ένα νέο πρότυπο, έναν νέο τρόπο κατασκευής λογισμικού. Όταν προγραμματίζετε στο java, στοχεύετε a εικονική μηχανή. Μια τέτοια μηχανή υπάρχει ως έννοια και η γλώσσα java παρέχει διεπαφές για προγραμματισμό σε σχέση με αυτό το μηχάνημα. Για παράδειγμα, μπορείτε να αναζητήσετε την ποσότητα διαθέσιμης μνήμης, τον αριθμό CPU, τις διεπαφές δικτύου κ.λπ. της εικονικής μηχανής.
Πώς κατασκευάζονται οι εφαρμογές Java;
Η γλώσσα java παρέχει έναν μεταγλωττιστή Java που μεταφράζει τον πηγαίο κώδικα στον αντικειμενικό κώδικα. Στη συνέχεια, ο κώδικας αντικειμένου εκτελείται από το java virtual machine, το οποίο είναι ξεχωριστό πρόγραμμα από τον μεταγλωττιστή. Το λειτουργικό σύστημα, με τη σειρά του, βλέπει την εικονική μηχανή java σαν ένα άλλο πρόγραμμα που εκτελείται σε αυτό το λειτουργικό σύστημα.
Το βάρος της φορητότητας μετατοπίστηκε τώρα από τον προγραμματιστή εφαρμογών στον πωλητή εικονικής μηχανής Java. Ο προγραμματιστής εφαρμογών γράφει το λογισμικό χρησιμοποιώντας τα πρωτόγονα της γλώσσας java και της java η εικονική μηχανή είναι υπεύθυνη για τη μετάφραση αυτών των αρχέγονων στοιχείων στο λειτουργικό σύστημα υποδοχής εγκαταστάσεις. Όταν βγαίνει μια νέα έκδοση του λειτουργικού συστήματος, είναι ευθύνη του πωλητή να ενημερώσει την εικονική μηχανή java έτσι ώστε να λειτουργεί σωστά στο νέο λειτουργικό σύστημα.
Ποια είναι τα πλεονεκτήματα της εικονικής μηχανής Java;
Όπως αναφέρθηκε προηγουμένως, η εικονική μηχανή java παρέχει μια εικονική προβολή του λειτουργικού συστήματος και του υλικού στον προγραμματιστή εφαρμογών. Αυτή η εικονική προβολή έχει τη μορφή διαφόρων διεπαφών και μεθόδων και χρησιμεύει για την απομόνωση του προγραμματιστή εφαρμογών από τις διαφορές στο λειτουργικό σύστημα κεντρικού υπολογιστή και στο υποκείμενο υλικό. Έτσι, ο προγραμματιστής εφαρμογών μπορεί να έχει πρόσβαση σε εγκαταστάσεις όπως Windowing Toolkit, Networking, 3D γραφικά, πολλαπλές επεξεργαστές κ.λπ. χωρίς να χρειαστεί να καταφύγουμε σε κλήσεις χαμηλού επιπέδου που καταλήγουν να καταστήσουν το πρόγραμμα μη φορητό.
Ένα πρόγραμμα Java είναι γραμμένο και συντάσσεται χρησιμοποιώντας τον μεταγλωττιστή java. Ο προκύπτων κώδικας αντικειμένου (ονομάζεται byte κώδικα) μπορούν να μεταφερθούν σε ένα διαφορετικό λειτουργικό σύστημα κεντρικού υπολογιστή που λειτουργεί με διαφορετικό υλικό και θα πρέπει να λειτουργεί χωρίς προβλήματα.
JIT Compiler
Η εικονική μηχανή java χρησιμοποιεί a Μεταγλωττιστής JIT για τη βελτιστοποίηση του κώδικα byte ειδικά για τη CPU προορισμού. Το JIT σημαίνει Πάνω στην ώρα και αναφέρεται στις βελτιστοποιήσεις χρόνου εκτέλεσης που εφαρμόζει η JVM στον κώδικα byte για να το κάνει να λειτουργεί καλύτερα στην τρέχουσα CPU.
Ένα άλλο πλεονέκτημα της χρήσης της Java Virtual Machine είναι ότι μπορεί να εφαρμόσει διαφορετικές βελτιστοποιήσεις για διαφορετικές περιπτώσεις χρήσης, όλες με τον ίδιο κώδικα byte. Για παράδειγμα, το Oracle JVM παρέχει δύο επιλογές για την εκτέλεση του κώδικα byte: μια λειτουργία διακομιστή και μια λειτουργία πελάτη. Η λειτουργία διακομιστή βελτιστοποιεί τα προγράμματα διακομιστή που διαρκούν, ενώ η λειτουργία JVM του πελάτη βελτιστοποιείται για γρήγορους χρόνους απόκρισης, καθώς είναι πιθανό να χρησιμοποιηθεί σε διαδραστική λειτουργία.
Συνοψίζοντας, δημιουργείται μια εγγενής εφαρμογή για ένα συγκεκριμένο υλικό και λειτουργικό σύστημα. Μια εφαρμογή java, από την άλλη πλευρά, ακολουθεί ένα a Κατασκευάστηκε μία φορά σε λειτουργία οπουδήποτε φιλοσοφία, έχοντας μια JVM να εκτελέσει τις οδηγίες κώδικα byte compiled. Ενώ οι εγγενείς εφαρμογές έχουν παραδοσιακά θεωρηθεί ως πιο αποδοτικές από τις εφαρμογές java, ίσως δεν είναι πάντα αληθές λόγω της χρήσης ενός JIT μεταγλωττιστή από την JVM.
Έχετε αναπτύξει μια εγγενή εφαρμογή και έπρεπε να αλλάξει σε java λόγω φορητότητας; Ή αντίστροφα λόγω προβλημάτων απόδοσης; Ενημερώστε μας στα σχόλια παρακάτω.
Image Credit: Profit_Image μέσω του Shutterstock.com