Γλώσσες Προγραμματισμού

Από Κοινότητα Ελεύθερου Λογισμικού ΕΜΠ
Μετάβαση σε: πλοήγηση, αναζήτηση


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

Για κάθε γλώσσα παρατίθενται, όπου είναι διαθέσιμες, πληροφορίες χρήσης της ανά σχολή.


Ποια να μάθω;

Ίσως αναρωτιέστε γιατί υπάρχει τόσο μεγάλη ποικιλία γλωσσών προγραμματισμού, δεδομένου μάλιστα ότι (σχεδόν) όλες είναι θεωρητικά ισοδύναμες. Η απάντηση είναι πολύ απλή, γιατί δεν υπάρχει μία και μόνο γλώσσα κατάλληλη για όλες τις δουλειές. Ενδεχομένως να μην έχει βρεθεί ακόμα, ενδεχομένως να μην υπάρξει ποτέ. Κάθε γλώσσα ενδείκνυται περισσότερο για ορισμένα είδη προγραμμάτων και λιγότερο για άλλα.

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

Μια προφανής απάντηση είναι την πιο γνωστή, τουλάχιστον αυτή που έχει μεγαλύτερη ζήτηση στην αγορά εργασίας. Μια λιγότερη προφανής απάντηση είναι ότι μια γλώσσα δεν είναι αρκετή. Η εκμάθηση μιας νέας γλώσσας προγραμματισμού (δεδομένου ότι είναι αρκούντως διαφορετική από αυτές που ήδη γνωρίζουμε), μπορεί να αλλάξει τελείως τον τρόπο με τον οποίο αντιμετωπίζουμε ορισμένα προβλήματα, και να ανοίξει νέους δρόμους και δυνατότητες, ακόμα και για τις γλώσσες που ήδη γνωρίζουμε.

Επιπλέον, οι περισσότερες γλώσσες ακολουθούν ή ενθαρρύνουν κάποιο συγκεκριμένο στυλ προγραμματισμού, με ποιο διαδεδομένα τον προστακτικό, τον αντικειμενοστρεφή και τον συναρτησιακό προγραμματισμό. Η επαφή με κάποιο διαφορετικό στυλ είναι πολλές φορές σημαντική για ένα προγραμματιστή.

Σε γενικές γραμμές, η επιλογή μια γλώσσας συνιστά κάποιο συμβιβασμό. Επιλέγουμε κάποια χαρακτηριστικά που θεωρούμε σημαντικά, και παραιτούμαστε από κάποια άλλα.

Για παράδειγμα, στη C έχουμε τη δυνατότητα να προγραμματίσουμε σε αρκετά χαμηλό επίπεδο, και να γράψουμε πολύ γρήγορο και αποδοτικό κώδικα. Για να χρησιμοποιήσουμε όμως μια συνηθισμένη δομή, όπως μια λίστα, ένα σύνολο ή ένα πίνακα κατακερματισμού, πρέπει να την κατασκευάσουμε από την αρχή. Έτσι η παραγωγικότητα μειώνεται σημαντικά.

Από την άλλη, σε μια γλώσσα πολύ υψηλού επιπέδου σαν την Python, τέτοιες δομές παρέχονται από τη γλώσσα, και η χρήση τους είναι απλούστατη. Το κέρδος που έχουμε στην παραγωγικότητα αντισταθμίζεται από μια απώλεια σε απόδοση, καθώς οι δομές αυτές είναι γενικής χρήσης, και μπορεί να μην είναι ακριβώς στα μέτρα μας. Επιπλέον η Python είναι κατά κανόνα πιο αργή από τη C, σε ένα σημαντικό ποσοστό περιπτώσεων.

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

Για να γίνουμε πιο συγκεκριμένοι, αναφέρουμε τις δικές μας προτιμήσεις (ως ένα βαθμό υποκειμενικές).

  • Η C εξακολουθεί να είναι από τις πιο διαδεδομένες γλώσσες προγραμματισμού γενικής χρήσης, και φαίνεται σαν ένας κοινός παρονομαστής ανάμεσα στους περισσότερους προγραμματιστές· η καλή γνώση της κρίνεται απαραίτητη. Αν μη τι άλλο είναι χρήσιμη σε περίπτωση που χρειάζεται να μελετήσουμε τον κώδικα κάποιας εφαρμογής γραμμένη σε αυτή. Επιπλέον, η σύνταξη εξίσου διαδεδομένων γλωσσών όπως η C++, Java και C# είναι αρκετά όμοια.
  • Από τις τελευταίες η Java κατέχει σημαντικό μερίδιο στην αγορά εργασίας (κυρίως σε ότι αφορά δικτυακές και enterprise εφαρμογές), ενώ χάνει σιγά σιγά έδαφος από την C#. Η C++ είναι ακόμα πολύ δυνατή σε ορισμένους τομείς, ειδικά στο Game Development.
  • Πολύ ενδιαφέρουσες είναι και οι γλώσσες συναρτησιακού προγραμματισμού. Από αυτές, αρκετά μέλη της κοινότητας φαίνεται να ξεχωρίζουν την Haskell και την O'Caml. Οι γλώσσες αυτές τα τελευταία χρόνια έχουν αρχίσει να ξεφεύγουν από τον ακαδημαϊκό τομέα και να γίνονται περισσότερο mainstream.
  • Τέλος, πολύ χρήσιμη μπορεί να αποδειχτεί η γνώση μιας scripting γλώσσας υψηλού επιπέδου, σαν την Python, την Ruby ή την Perl. Είναι εξαιρετικά χρήσιμες για prototyping, εφαρμογές web αλλά και rapid application development. Επιπλέον μπορούν να αντικαταστήσουν το shell scripting σε ορισμένα administrative tasks, όπου απαιτείται μια περισσότερο δομημένη προσέγγιση.

Αν παραμένετε αναποφάσιστοι, υπάρχει και το κριτήριο της γενειάδας ;)>.

Γλώσσες γενικής χρήσης

Pascal

Η pascal είναι μια αρκετά παλιά γλώσσα, με κύριο στόχο την εκπαίδευση νέων προγραμματισμών, με έμφαση στον (τότε νέο) δομημένο προγραμματισμό. Πλέον δεν χρησιμοποιείται πολύ έξω από εκπαιδευτικούς κύκλους.

Ο GNU Pascal Compiler περιέχεται στη συλλογή μεταγλωττιστών GCC.

C

Άλλη μία γλώσσα με τις ρίζες τις στις αρχές του '70, που παραμένει αρκετά δημοφιλής ακόμα και σήμερα. Επιτρέπει αρκετά low level προγραμματισμό, και οι περισσότεροι compilers παράγουν γρήγορο κώδικα, και υποστηρίζουν πληθώρα βελτιστοποιήσεων. Αυτό την κάνει ιδανική για systems programming (π.χ. για τη συγγραφή του πυρήνα ενός λειτουργικού συστήματος), και για performance critical εφαρμογές.

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

Η συλλογή μεταγλωττιστών GCC[1] παρέχει τον πολύ καλό ελεύθερο μεταγλωττιστή gcc, που περιέχεται σχεδόν σε όλες τις διανομές GNU/Linux, αλλά και σε διανομές *BSD και το Mac OS X.

Σχολές
  • ΣΗΜΜΥ
    • Διδάσκεται στο 2ο εξάμηνο, στο μάθημα Προγραμματιστικές Τεχνικές.
    • Καλή γνώση της γλώσσας θεωρείται απαραίτητη για τα περισσότερα μαθήματα των ροών Υ και Λ, όπως
      • Λειτουργικά Συστήματα Υπολογιστών, Εργαστήριο Λειτουργικών Συστημάτων
      • Προηγμένα Θέματα Αρχιτεκτονικής Υπολογιστών
      • Συστήματα Παράλληλης Επεξεργαστίας
      • Γλώσσες Προγραμματισμού Ι
      • Αλγόριθμοι και Πολυπλοκότητα
      • Βάσεις Δεδομένων
      • Τεχνητή Νοημοσύνη
      • Μεταγλωττιστές
Links

Fortran

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

Η Fortran77 είναι η πιο διαδεδομένη έκδοση, αλλά το ενδιαφέρον γύρω από τη γλώσσα δεν έχει σταματήσει, και πρόσφατες εξελίξεις στη γλώσσα (Fortran90, 95 και Fortran 2003) έχουν προσθέσει μοντέρνα χαρακτηριστικά, όπως free form input (δεδομένη σχεδόν σε όλες τις γλώσσες υψηλού επιπέδου), αναδρομικές συναρτήσεις, εύκολη και αποδοτική διαχείριση πινάκων, οbject οrientation, κ.α.

Η συλλογή μεταγλωττιστών GCC περιέχει τον gfortran compiler, που με τη σειρά του βασίζεται στον g95. Υποστηρίζει Fortran77, Fortran95 και ένα μέρος της Fortran 2003.

Σχολές

C++

H C++ είναι κι αυτή μια απόγονος της C. Είναι μια γλώσσα general purpose programming η οποία χρησιμοποιεί προστακτικό στυλ προγραμματισμού και είναι αντικειμενοστραφής.

H c++ παράγει γρήγορο κώδικα ενώ παράλληλα προσφέρει πολλά abstractions (templates, overloaded functions/operators, classes, polymorhpism κλπ) τα οποία σχεδόν όλα υπολογίζονται στο compile time και έτσι δεν προσθέτουν καθυστερήσεις στο run time.

Παράλληλα με τη χρήση των references και των smart pointers αλλά και των βιβλιοθηκών της c++ φεύγει ένα μεγάλο κομμάτι της διαχείρησης μνήμης από τον προγραμματιστή.

Ακόμα, και λόγο της πολύ στενής σχέσης που έχει με τη C, κληρονομεί όλα τα καλά της στοιχεία καθώς και όσες βιβλιοθήκες έχουν γραφτεί γι αυτή.

Η Gnu Compiler Collection προσφέρει έναν καλό μεταγλωττιστή για τη C++ που υλοποιεί και το πιο πρόσφατο standard (c++11).

Java

C#

JavaScript

Python

Η Python είναι μια δυναμική γλώσσα προγραμματισμού, πολύ υψηλού επιπέδου. Κύριος στόχος της είναι η αυξημένη παραγωγικότητα του προγραμματιστή, και η αναγνωσιμότητα του κώδικα. Έχει ενσωματωμένες δομές δεδομένων όπως λίστες και πίνακες κατακερματισμού (που αποκαλεί dictionaries), και μια αρκετά μεγάλη βιβλιοθήκη, ακολουθώντας τη φιλοσοφία batteries included.

Δανείζεται στοιχεία από τον προστακτικό, αντικειμενοστρεφή αλλά και συναρτησιακό προγραμματισμό, χωρίς να επιβάλλει κάποιο συγκεκριμένο τρόπο προγραμματισμού (σε αντίθεση π.χ. με τη Java).

Τα χαρακτηριστικά της την καθιστούν καλή επιλογή για prototyping, αλλά και για πληθώρα εφαρμογών στις οποίες η απόδοση δεν είναι τόσο σημαντικός παράγοντας.

Σχολές
Links

Ruby

Perl

PHP

Η PHP είναι μια scripting γλώσσα υψηλού επιπέδου, που σχεδιάστηκε για τη δημιουργία δυναμικών ιστοσελίδων. Αν και έχει εξελιχθεί σε μια γλώσσα γενικής χρήσης, η κύρια δύναμη της παραμένει στο χώρο του web development. Πολλά από τα γνωστότερα προγράμματα online forum ή wiki είναι γραμμένα σε PHP, και ο συνδυασμός της με τον Apache web server και το σύστημα διαχείρισης βάσης δεδομένων mysql, είναι τόσο συχνός που αναφέρεται συχνά ως LAMP. Η σύνταξη της θυμίζει αρκετά αυτή της C, και είναι αρκετά απλή στην εκμάθηση, ακόμα και από αρχάριους προγραμματιστές. Αυτό, σε συνδυασμό με μερικές κακές επιλογές από τους σχεδιαστές της γλώσσας στο παρελθόν, έχει συντελέσει στο ομολογουμένως κακό ιστορικό ασφαλείας πολλών εφαρμογών γραμμένων σε PHP.

Links

SML

O'Caml

Objective_Caml

Haskell

Η Haskell είναι μια υψηλού επιπέδου συναρτησιακή γλώσσα προγραμματισμού που πήρε το όνομά της από τον μαθηματικό και λογικό Haskell Curry του οποίου η θεωρία είναι μια από τις μαθηματικές βάσεις για τις συναρτησιακές γλώσσες προγραμματισμού. Είναι γενικής χρήσης αλλά κάποια χαρακτηριστικά της την κάνουν πιο βολική για κάποια προβλήματα.

Τα προγράμματα στις συναρτησιακές γλώσσες δεν περιγράφουν πως λύνεται ένα πρόβλημα (όπως οι διαδικασίες στις διαδικαστικές γλώσσες) αλλά το ίδιο το πρόβλημα με συστηματικό/μαθηματικό τρόπο. Με αυτό πετυχαίνουμε να αυξάνετε η παραγωγικότητα του προγραμματιστή και να μειώνονται σημαντικά τα σφάλματα και ο προγραμματιστικός χρόνος. Έτσι για ένα project έχουμε περισσότερο χρόνο για την σχεδίαση του. Επίσης έχουμε αμεσότερη απεικόνιση στο πρόγραμμα των ιδεών του προγραμματιστή και του πεδίου του προβλήματος και άρα οι γλώσσες αυτές είναι καλές για rapid prototyping. Επιπλέον η χρήση συναρτησιακών γλωσσών προγραμματισμού δίνει συνήθως μικρότερο, καθαρότερο και πιο ορθογώνιο κώδικα πράγμα που κάνει την συντήρησή του ευκολότερη υπόθεση. Είναι ευκολότερο για κάποιον που βλέπει το πρόγραμμα για πρώτη φορά να καταλάβει τι κάνει. Τέλος λόγο κάποιον "τεχνικών λεπτομερειών" επιτυγχάνουμε μεγαλύτερη αφαίρεση και άρα μεγαλύτερη επαναχρησιμοποίηση κώδικα.

Η Haskell έχει επίσης ιδιαίτερα χαρακτηριστικά σε σχέση με τις υπόλοιπες συναρτησιακές. Είναι "καθαρά συναρτησιακή" (purely functional) δηλαδή δεν υποστηρίζει "side-effects", χαρακτηριστικά που συναντάμε σε διαδικαστικές γλώσσες όπως οι δομές επανάληψης και η ανάθεση μεταβλητών. Με αυτόν τον τρόπο πετυχαίνουμε καλύτερες βελτιστοποιήσεις στον παραγόμενο κώδικα. Έχει οκνηρή αποτίμηση (lazy evaluation), δηλαδή δεν υπολογίζει κάτι εκτός και αν αυτό είναι απαραίτητο. Αυτό μας δίνει μεγαλύτερη δύναμη στο τι αλγορίθμους και δομές δεδομένων (πχ άπειρες) μπορούμε να γράψουμε σε αυτήν και επίσης αν κάποιοι υπολογισμοί δεν χρειάζονται δεν γίνονται τελικά καθόλου. Έχει ένα πολύ πλούσιο στατικό σύστημα τύπων που σου επιτρέπει να περιγράφεις το πεδίο του ενδιαφέροντος με μεγάλη ακρίβεια. Δεν είναι απαραίτητο όλοι οι τύποι των μεταβλητών και των συναρτήσεων να δίνονται από τον προγραμματιστή. Τους περισσότερους μπορεί να του εξάγει ο μεταγλωττιστής από το πρόγραμμα. Αλλά σε κάθε τιμή αντιστοιχίζεται ένα ακριβώς τύπος που είναι γνωστός κατά την μεταγλώττιση. Αυτό κάνει ευκολότερο τον εντοπισμό λαθών σε προτιμότερα στάδια του ελέγχου του προγράμματος.

Σε αντίθεση με γλώσσες σαν την C, η Haskell είναι πολύ πιο αυστηρή στο τι μπορείς να κάνεις με τα δεδομένα (πχ. δεν μπορείς να προσθέσεις σε έναν χαρακτήρα έναν ακέραιο) και κάθε τιμή μέσα στην γλώσσα είναι έγκυρη (δεν υπάρχει NULL) πράγμα που οδηγεί σε λιγότερα σφάλματα. Επίσης έχει αυτόματη διαχείριση μνήμης και άρα δεν κουράζει το προγραμματιστή με επιπλέον κώδικα για διαχείριση μνήμης. Τέλος το σύστημα των module της Haskell μας δίνει την δυνατότητα να ξεχωρίζουμε την διεπαφή από την υλοποίηση των δόμων μας και έτσι πετυχαίνουμε μεγαλύτερη επαναχρησιμοποίηση κώδικα. Αυτό σε συνδυασμό με τα type classes μας δίνει ένα ισχυρό εργαλείο που μπορεί να πετύχει τα ίδια αποτελέσματα με αυτά μιας αντικειμενοστραφής γλώσσας.

Όλα αυτά τα καλούδια έρχονται με ένα τίμημα. Το συναρτησιακό μοντέλο προγραμματισμού έχει διαφορετική φιλοσοφία, την οποία χρειάζεται χρόνο για να συνηθίσει κάποιος που ξέρει μια από τις προστακτικές γλώσσες. Επίσης πολλά χαρακτηριστικά της γλώσσας είναι αρκετά περίπλοκα και σύνθετα για κάποιον που τα βλέπει για πρώτη φορά. Στα μειονεκτήματα τις γλώσσας μπορούμε να προσθέσουμε το ότι είναι δύσκολο πολλές φορές να αποφανθούμε για την απόδοση των προγραμμάτων μας και σε ότι αφορά την ταχύτητα αλλά και την χρήση της μνήμης. Τέλος, αν και η Haskell είναι αρκετά πιο γρήγορη από αρκετές γλώσσες υψηλού επιπέδου, δεν παύει να έχει το μειονέκτημα ότι δεν μπορεί να είναι πιο γρήγορη από ένα καλογραμμένο πρόγραμμα σε μια χαμηλού επιπέδου γλώσσα όπως η C ή η assembly. Είναι όμως πολύ συγκεκριμένες οι περιπτώσεις που χρειάζεται τόσο μεγάλη προσοχή στην απόδοση πράγμα που κάνει την Haskell μια πραγματικά γενικής χρήσης γλώσσα.

Αν και στο παρελθόν η Haskell είχε περισσότερο ακαδημαϊκό και ερευνητικό ενδιαφέρον τώρα πια είναι μια πλήρης γλώσσα με πολύ καλές υλοποιήσεις και υποστήριξη από πολλές βιβλιοθήκες και προγράμματα. Έχει πολλές και ενδιαφέρουσες επεκτάσεις καθώς πολλές νέες ιδέες δοκιμάζονται πάνω σε αυτήν. Έχει μια αυξάνουσα κοινότητα χρηστών και όλο και περισσότερες εταιρίες και projects γράφουν μέρος του λογισμικού τους σε αυτήν.

Σχολές
Links

Lisp

Erlang

Prolog

Assembly

Ο όρος assembly δεν αναφέρεται σε μια συγκεκριμένη γλώσσα, αλλά σε μια οικογένεια γλωσσών, αφού κάθε αρχιτεκτονική επεξεργαστή ορίζει και την αντίστοιχη γλώσσα assembly για τον προγραμματισμό της. Επί της ουσίας, μια γλώσσα Assembly είναι το σύνολο εντολών που υποστηρίζει μια αρχιτεκτονική επεξεργαστή, σε μορφή κατανοητή από άνθρωπο. Για να μεταφραστεί σε μορφή κατανοητή από τον υπολογιστή (binary), χρησιμοποιείται ένας κατάλληλος Assembler.

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

Οι περισσότεροι μεταγλωττιστές γλωσσών υψηλού επιπέδου, παράγουν Assembly, που με τη σειρά της τροφοδοτείται σε έναν Assembler, για να παραχθεί τελικά binary.

Σήμερα χρησιμοποιούνται κυρίως για μικρά αλλά performance critical κομμάτια εφαρμογών, αλλά και για τη συγγραφή προγραμμάτων για embedded συστήματα, τα οποία έχουν περιορισμένους πόρους, και επιπλέον συχνά δεν διατίθεται μεταγλωττιστής γλωσσών υψηλότερου επιπέδου για την αρχιτεκτονική τους.

Σχολές

Γλώσσες domain specific

SQL

VHDL

Scripting

Shell

AWK

sed

Γλώσσες markup

SGML

http://en.wikipedia.org/wiki/SGML

HTML

XML

TeX

Σύστημα μορφοποίησης κειμένου, που μεταξύ άλλων είναι και Turing complete!

ASCIIDOC

http://www.methods.co.nz/asciidoc/

reStructuredText

http://docutils.sourceforge.net/rst.html

DocBook

roff

Καλύτερα να το αποφεύγετε, αφού μπορεί πλέον να παραχθεί από docbook.

Γλωσσάρι

  • Γλώσσα χαμηλού/υψηλού επιπέδου:
    Ο όρος δεν αναφέρεται στην ποιότητα της γλώσσας ή της υλοποίησης της, αλλά στο πόσο κοντά είναι στο hardware, δηλ. πόσο μεγάλο μέρος της υλοποίησης του επεξεργαστή και του συστήματος αποκαλύπτει στο χρήστη. Αρχικά ο όρος γλώσσα υψηλού επιπέδου χρησιμοποιήθηκε για της πρώτες γλώσσες δομημένου προγραμματισμού, τις λεγόμενες γλώσσες 3ης γενιάς. Οι περισσότερες από αυτές όμως θεωρούνται μάλλον χαμηλού επιπέδου, με τα σημερινά δεδομένα.
  • Portability (Μεταφερσιμότητα):
    Ο όρος αναφέρεται στο κατά πόσο ένα πρόγραμμα μπορεί να μεταφερθεί και να εκτελεστεί σε ένα διαφορετικό περιβάλλον (π.χ. λειτουργικό σύστημα ή αρχιτεκτονική επεξεργαστή), χωρίς αλλαγές. Συνήθως όσο πιο υψηλού επιπέδου είναι μια γλώσσα, τόσο περισσότερο απομονωμένη είναι από το περιβάλλον στο οποίο εκτελείται, και τα προγράμματα που γράφονται σε αυτήν είναι πιο μεταφέρσιμα, φτάνει ο μεταγλωττιστής ή διερμηνέας της γλώσσας να υποστηρίζει το περιβάλλον που στοχεύουμε. Για παράδειγμα, η Assembly δεν είναι μεταφέρσιμη από αρχιτεκτονική σε αρχιτεκτονική (εκτός ίσως από συγγενής ή συμβατές αρχιτεκτονικές, π.χ. x86). Αντίθετα προγράμματα σε C είναι κατά κανόνα μεταφέρσιμα από αρχιτεκτονική σε αρχιτεκτονική, αλλά όχι τόσο από λειτουργικό σύστημα σε σύστημα, ενώ προγράμματα σε Python ή Java, ξεπερνούν και αυτό τον περιορισμό αρκετά εύκολα.

Αναφορές

  1. Ο όρος GCC (κεφαλαία) αναφέρεται στη συλλογή μεταγλωττιστών GNU Compiler Collection. Ο όρος gcc (πεζά) στον GNU C Compiler, που αποτελεί μέρος της.