Βιβλιοθήκη (υπολογιστές): Διαφορά μεταξύ των αναθεωρήσεων

Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
JAnDbot (συζήτηση | συνεισφορές)
μ Ρομπότ: Τροποποίηση: fi:Kirjasto (tietotekniikka)
μΧωρίς σύνοψη επεξεργασίας
Γραμμή 15:
Οι βιβλιοθήκες μπορούν να είναι ''στατικές'' ή ''δυναμικές'', καθώς και ''κοινόχρηστες'' ή μη. Όταν ένα πρόγραμμα καλεί υποπρογράμματα από στατικές βιβλιοθήκες, ο συνδέτης (ο οποίος συμβουλεύεται κατάλληλα αρχεία ρυθμίσεων ή το ΛΣ για να βρει τις βιβλιοθήκες) ενσωματώνει πραγματικά τον αντικειμενικό τους κώδικα στο εκτελέσιμο που παράγει και επανατοποθετεί κατάλληλα τις διευθύνσεις μνήμης σε [[χρόνος σύνδεσης|χρόνο σύνδεσης]]. Αντίθετα, οι δυναμικές βιβλιοθήκες ενσωματώνονται και επανατοποθετούνται στον τελικό κώδικα απευθείας στη μνήμη και ενώ το πρόγραμμα εκτελείται, με αποτέλεσμα τα εκτελέσιμα αρχεία να έχουν σαφώς μικρότερο μέγεθος (αφού περιέχουν απλώς οδηγίες προς έναν συνδέτη [[χρόνος εκτέλεσης|χρόνου εκτέλεσης]], παρεχόμενου από το ΛΣ, αντί για τον ίδιο τον αντικειμενικό κώδικα των καλούμενων υποπρογραμμάτων βιβλιοθήκης), αλλά να απαιτείται η μόνιμη παρουσία του αντικειμενικού αρχείου της βιβλιοθήκης στο σύστημα αρχείων προκειμένου να είναι δυνατή η εκτέλεση του προγράμματος. Επίσης οι δυναμικές βιβλιοθήκες μπορούν να είναι κοινόχρηστες, δηλαδή να υπάρχει μόνο ένα αντίγραφό τους το οποίο διαμοιράζεται σε πολλαπλές διεργασίες που τις χρησιμοποιούν ταυτόχρονα. Η κοινοχρησία μπορεί να συμβαίνει είτε μόνο στον δίσκο (να υπάρχει δηλαδή ένα μόνο αντικειμενικό αρχείο της βιβλιοθήκης), όπως συμβαίνει με τα αρχεία με επέκταση «.dll» στα Windows, είτε και στη μνήμη (να φορτώνεται μόνο μία φορά η βιβλιοθήκη στη μνήμη RAM και όσα προγράμματα τη χρησιμοποιούν να απεικονίζουν το τμήμα μνήμης που καταλαμβάνει στον ιδιωτικό, εικονικό τους χώρο διευθύνσεων), όπως συμβαίνει με τα αρχεία με επέκταση «.so» στο Unix. Επειδή το μορφότυπο αρχείου των βιβλιοθηκών είναι ίδιο με των αυτόνομων εκτελέσιμων και αντικειμενικών αρχείων, ακόμα κι ένα εκτελέσιμο μπορεί να χρησιμοποιηθεί ως κοινόχρηστη βιβλιοθήκη, αρκεί να περιέχει έναν πίνακα συμβόλων για χρήση από τον συνδέτη χρόνου εκτέλεσης, με πληροφορίες για τις συναρτήσεις και τις δομές δεδομένων που εξάγει.
 
Η διάδοση του [[αντικειμενοστρεφής προγραμματισμός|αντικειμενοστρεφούς προγραμματισμού]] στις αρχές της [[Δεκαετία 1990|δεκαετίας του 1990]] έκανε επιτακτική την ανάγκη προτυποποίησης ενός μορφοτύπου αντικειμενικών αρχείων βιβλιοθηκών που δεν θα περιείχαν μεμονωμένες [[δομή δεδομένων|δομές δεδομένων]] και διαδικασίες, αλλά [[Κλάση (υπολογιστές)|κλάσεις]]. Η κληρονομικότητα όμως, έμφυτο και ισχυρό χαρακτηριστικό της αντικειμενοστρέφειας, δυσχέραινε αυτήν την προσπάθεια, αφού για να οριστεί μία ''μέθοδος'' (η αντικειμενοστραφήςαντικειμενοστρεφής «εκδοχή» της διαδικασίας) δεν επαρκεί το πλήρες αναγνωριστικό της και το σημείο εισόδου του κώδικά της, αλλά χρειάζεται και μια λίστα των κλάσεων από τις οποίες κληρονομείται. Παράλληλα την ίδια στιγμή είχαν γίνει δημοφιλή τα [[κατανεμημένη επεξεργασία|κατανεμημένα συστήματα]] λογισμικού, τα οποία επέτρεπαν σε ένα πρόγραμμα να εκτελεί διαφανώς κλήσεις σε απομακρυσμένες διαδικασίες, ο κώδικας των οποίων ήταν τοποθετημένος σε κάποιον άλλον κόμβο ενός [[δίκτυο υπολογιστών|δικτύου υπολογιστών]]. Οι ενδιαφερόμενες εταιρίες, λοιπόν, περί το 1995, προτυποποίησαν διάφορα μορφότυπα αντικειμενικών αρχείων βιβλιοθηκών κλάσεων, οι μέθοδοι των οποίων μπορούσαν να εκτελεστούν σε διαφορετικά ΛΣ και να προσπελαστούν από διάφορες γλώσσες προγραμματισμού. Συνήθως οι βιβλιοθήκες αυτές διατίθονταν σε δύο εκδόσεις: μία απλή και μία κατανεμημένη, η οποία λειτουργούσε ως [[ενδιάμεσο λογισμικό]] και υποστήριζε απομακρυσμένη πρόσβαση και κλήση μεθόδων.
 
Με το πέρασμα του χρόνου το μόνο που επιβίωσε από αυτά τα πρότυπα είναι το COM της [[Microsoft]] (με το DCOM να είναι η κατανεμημένη εκδοχή του). Εξαίρεση αποτέλεσε ο προγραμματιστικός κόσμος της [[Java]] ο οποίος ακολούθησε τη δική του οδό, αφού τα προγράμματα και οι βιβλιοθήκες της Java δεν μεταγλωττίζονται σε εγγενή κώδικα μηχανής αλλά σε έναν ενδιάμεσο, κοινό για όλες τις [[αρχιτεκτονική υπολογιστών|αρχιτεκτονικές υπολογιστών]], [[bytecode]], ο οποίος για να τρέξει [[διερμηνέας (πληροφορική)|διερμηνεύεται]] σε χρόνο εκτέλεσης από μία ''Εικονική Μηχανή Java'', ένα περιβάλλον εκτέλεσης που τοποθετείται πάνω από το ΛΣ. Στην Java κάθε κλάση μεταγλωττίζεται σε ένα αρχείο με επέκταση «.class», αντίστοιχο του αντικειμενικού αρχείου, το οποίο περιέχει bytecode, ενώ ένα αυτόνομο πρόγραμμα είναι απλώς μία κλάση που περιέχει μία μέθοδο με όνομα <code>main()</code> ως σημείο εισόδου. Ο συνδέτης και ο φορτωτής αποτελούν τμήματα της Εικονικής Μηχανής Java και καλούνται αυτόματα και δυναμικά όταν επίκειται εκτέλεση ενός αρχείου .class. Μία συλλογή αρχείων .class που δεν περιέχουν μεθόδους <code>main()</code>, ουσιαστικά δηλαδή μία βιβλιοθήκη κλάσεων, μπορεί να συνενωθεί σε ένα συμπιεσμένο αρχείο «.jar», το οποίο δεν είναι παρά ένα ανεξάρτητο αρχιτεκτονικής μορφότυπο μεταγλωττισμένων (σε bytecode) βιβλιοθηκών κλάσεων.