Γλώσσα προγραμματισμού σεναρίων

Μια **γλώσσα σεναρίων** (*scripting language*, *script language*) ή **γλώσσα επέκτασης** (*extension language*) είναι μια γλώσσα προγραμματισμού που επιτρέπει τον έλεγχο μιας ή περισσότερων εφαρμογών. Τα "σενάρια" ("scripts") είναι διακριτά από τον βασικό κώδικα της εφαρμογής, καθώς γράφονται συνήθως σε διαφορετική γλώσσα και συχνά δημιουργούνται ή τροποποιούνται από τον τελικό χρήστη. Τα σενάρια συνήθως διερμηνεύονται από τον πηγαίο κώδικα ή τον κώδικα byte (bytecode), ενώ η εφαρμογή συνήθως έχει ήδη πρώτα μεταγλωττιστεί σε κώδικα μηχανής.

Οι πρώτες γλώσσες σεναρίων συχνά αποκαλούνταν *γλώσσες δέσμης* (*batch languages*) ή *γλώσσες ελέγχου εργασιών* (*job control languages*). Αυτές οι πρώτες γλώσσες σεναρίων δημιουργήθηκαν για να συντομεύσουν την παραδοσιακή διαδικασία διόρθωση-μεταγλώττιση-σύνδεση-εκτέλεση.

## Ιστορία
Οι πρώτοι κεντρικοί υπολογιστές (τη δεκαετία του 1950) δεν είχαν δυνατότητες αλληλεπίδρασης αλλά λειτουργούσαν με επεξεργασία δεσμών. Η Job Control Language (JCL) της IBM είναι κλασική γλώσσα που χρησιμοποιήθηκε για τον έλεγχο της επεξεργασίας δεσμών.

Τα πρώτα αλληλεπιδραστικά κελύφη αναπτύχθηκαν κατά τη δεκαετία του 1960 για να γίνει δυνατός ο απομακρυσμένος χειρισμός των πρώτων συστημάτων χρονικού διαμερισμού (time-sharing), τα οποία χρησιμοποιούσαν σενάρια κελύφους για τον έλεγχο της εκτέλεσης των προγραμμάτων, σε ένα πρόγραμμα, το κέλυφος.

Γλώσσες όπως η Tcl και η Lua σχεδιάστηκαν ειδικά σαν γλώσσες σεναρίων γενικού σκοπού, οι οποίες να μπορούν να ενσωματωθούν σε οποιαδήποτε εφαρμογή. Άλλες γλώσσες όπως η Visual Basic for Applications (VBA) παρείχαν σημαντική ολοκλήρωση με τις δυνατότητες αυτοματοποίησης του συστήματος στο οποίο εκτελούνταν. Η ενσωμάτωση αυτών των γλωσσών σεναρίων γενικού σκοπού αντί της ανάπτυξης μιας νέας γλώσσας ανά εφαρμογή είχε προφανή πλεονεκτήματα, γλιτώνοντας τον προγραμματιστή της εφαρμογής από την ανάγκη να δημιουργεί από το μηδέν έναν νέο μεταφραστή για τη γλώσσα, ενώ ο χρήστης μπορούσε να χρησιμοποιήσει γνώσεις που είχε αποκτήσει σε άλλα περιβάλλοντα.

Υπάρχει λογισμικό που ενσωματώνει πολλές διαφορετικές γλώσσες προγραμματισμού. Οι σύγχρονοι περιηγητές Ιστού (web browsers) συνήθως περιλαμβάνουν μια γλώσσα για τη συγγραφή επεκτάσεων του ίδιου του περιηγητή και αρκετές πρότυπες γλώσσες για τον έλεγχό του, όπως η JavaScript (διάλεκτος της ECMAScript) ή η XUL.

## Τύποι γλωσσών σεναρίων
### Γλώσσες ελέγχου εργασιών και κελύφη

Ο έλεγχος εργασιών (job control) δημιουργησε μια μεγάλη κλάση γλωσσών σεναρίων, για την εκκίνηση και τον έλεγχο της συμπεριφοράς προγραμμάτων του συστήματος. (Σύμφωνα με αυτήν την έννοια, τα κελύφη γραμμής εντολών μπορούν να θεωρηθούν απόγονοι της γλώσσας προγραμματισμού JCL, ή Job Control Language, της IBM, που χρησιμοποιήθηκε ακριβώς για αυτόν τον σκοπό.) Πολλοί από τους διερμηνείς αυτών των γλωσσών παίζουν δεύτερο ρόλο και σαν διερμηνείς γραμμής εντολών όπως το κέλυφος Unix ή το `[[COMMAND.COM]]` του MS-DOS. Άλλες, όπως η AppleScript, προσφέρουν σύνταξη και εντολές που να μοιάζουν με Αγγλικά, για την κατασκευή σεναρίων. Σε συνδυασμό με τα πλαίσια του Cocoa του Mac OS X, ο χρήστης μπορεί να φτιάξει ολόκληρες εφαρμογές χρησιμοποιώντας μονο αντικείμενα AppleScript και Cocoa.

### Σενάρια GUI
Με την εμφάνιση των γραφικών διασυνδέσεων χρήστη (graphical user interfaces) αναπτύχθηκε ένα εξειδικευμένο είδος γλώσσας σεναρίων για τον έλεγχο του υπολογιστή. Γλώσσες αυτού του είδους αλληλεπιδρούν με τα ίδια γραφικά παράθυρα, μενού, ποντίκια και άλλα γραφικά αντικείμενα και τεχνολογίες που ελέγχει το σύστημα. Αυτό το επιτυγχάνουν προσομοιώνοντας τις ενέργειες ενός ανθρώπου-χρήστη και συνήθως χρησιμοποιούνται για τον αυτοματισμό ενεργειών του χρήστη ή για να ρυθμίσουν μια γνωστή κατάσταση. Όταν ο έλεγχος γίνεται μέσα από προσομοιωμένα πατήματα πλήκτρων ή κλικ του ποντικιού αυτές οι γλώσσες ονομάζονται "μακροεντολές" ("macros").

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

### Εξειδικευμένες γλώσσες εφαρμογών
Πολλές μεγάλες εφαρμογές περιέχουν μια δική τους γλώσσα σεναρίων, προσαρμοσμένη στις ανάγκες του χρήστη. Επίσης, πολλά συστήματα βιντεοπαιχνιδιών χρησιμοποιούν μια ειδική γλώσσα σεναρίων για την περιγραφή των προγραμματισμένων ενεργειών των χαρακτήρων που ελέγχονται από τον υπολογιστή (non-player characters, NPCs) και του περιβάλλοντος του παιχνιδιού. Οι γλώσσες αυτού του τύπου σχεδιάζονται για μια μόνο εφαρμογή και, αν και μπορεί να μοιάζουν με κάποια γλώσσα γενικού σκοπού (όπως η QuakeC του Quake, που σχεδιάστηκε με βάση την C), έχουν ειδικά χαρακτηριστικά που τις ξεχωρίζουν. Η Emacs Lisp, αν και πλήρης διάλεκτος της Lisp, περιέχει κάποια ειδικά χαρακτηριστικά για την επέκταση των λειτουργιών του διορθωτή Emacs. Μια ειδική γλώσσα σεναρίων μιας εφαρμογής μπορεί να θεωρηθεί ότι είναι μια γλώσσα προγραμματισμού ειδικού πεδίου (*domain-specific programming language*), η οποία εξειδικεύεται σε μια εφαρμογή.

### Φυλλομετρητές Ιστού
Οι φυλλομετρητές Ιστού (Web browsers) είναι εφαρμογές που εμφανίζουν ιστοσελίδες και μπορούν να εκτελέσουν σενάρια για να αλλάξουν την εμφάνιση ή την συμπεριφορά των ιστοσελίδων αυτών (για παράδειγμα, να αλλάξουν το περιεχόμενο ανάλογα με τον χρήστη που το βλέπει). Έχουν αναπτυχθεί αρκετές ειδικές γλώσσες ελέγχου φυλλομετρητών, όπως η JavaScript, η VBScript της Microsoft (που λειτουργεί μόνο στον Internet Explorer), η XUL του εγχειρήματος Mozilla (που λειτουργεί μόνο στον Firefox) και η XSLT, μια γλώσσα παρουσίασης που μετατρέπει περιεχόμενο XML σε κάποια νέα μορφή. Όταν χρησιμοποιούνται τεχνικές που συνδυάζουν την XML και τα σενάρια JavaScript για να βελτιωθεί η εμπειρία του χρήστη και η απόκριση μιας ιστοσελίδας, η πρακτική ονομάζεται AJAX. Τα σενάρια στην πλευρά του πελάτη (client-side scripts) στέλνονται από τον διακομιστή στον υπολογιστή του πελάτη. Παράδειγμα σεναρίου στην πλευρά του πελάτη είναι μια ιστοσελίδα που περιέχει ένα κουμπί, το οποίο, όταν πατηθεί από τον χρήστη, εμφανίζει ένα παράθυρο με κάποιο μήνυμα μέσω JavaScript.

### Γλώσσες επεξεργασίας κειμένου
Η επεξεργασία εγγραφών κειμένου είναι από τις παλαιότερες χρήσεις των γλωσσών σεναρίων. Τα σενάρια που γράφονται για τα εργαλεία του Unix AWK, sed και grep αυτοματοποιούν εργασίες που έχουν να κάνουν με ρυθμίσεις με μορφή κειμένου και με αρχεία καταγραφών (log files). Σημαντικό ρόλο παίζουν οι κανονικές εκφράσεις, που είναι μια τυπική γλώσσα που περιγράφει τη λεξιλογική δομή του κειμένου, και η οποία χρησιμοποιείται από όλα αυτά τα εργαλεία.

Η Perl σχεδιάστηκε αρχικά για να αντιμετωπιστούν περιορισμοί σε αυτά τα εργαλεία και έχει καταλήξει να είναι μια από τις πιο ευρέως χρησιμοποιούμενες γλώσσες κοινού σκοπού.

### Δυναμικές γλώσσες γενικού σκοπού
:*Δείτε επίσης:* Δυναμική γλώσσα προγραμματισμού
Κάποιες γλώσσες, όπως η Perl, άρχισαν σαν γλώσσες σεναρίων αλλά στη συνέχεια αναπτύχθηκαν σε γλώσσες προγραμματισμούς για ευρύτερους σκοπούς. Άλλες παρόμοιες γλώσσες &ndash; συχνά διερμηνευμένες, με αυτόματη διαχείριση μνήμης ή με δυναμικά χαρακτηριστικά &ndash; έχουν περιγραφεί σαν "γλώσσες σεναρίων", λόγω των ομοιοτήτων τους, ακόμα και αν χρησιμοποιούνται συχνότερα για την ανάπτυξη εφαρμογών. Συνήθως αυτές οι γλώσσες *δεν* αποκαλούνται "γλώσσες σεναρίων" από τους ίδιους τους χρήστες τους.

### Γλώσσες επέκτασης και ενσωματωμένες γλώσσες
Αρκετές γλώσσες έχουν σχεδιαστεί έτσι ώστε να μπορούν να αντικαταστήσουν τις γλώσσες σεναρίων που είναι εξειδικευμένες για κάποια εφαρμογή, προσφέροντας ενσωμάτωση στο πρόγραμμα της εφαρμογής. Ο προγραμματιστής της εφαρμογής (που χρησιμοποιεί C ή κάποια άλλη γλώσσα χαμηλού επιπέδου ή προγραμματισμού συστημάτων) προσθέτει "σημεία αγκίστρωσης" ("hooks"), όπου η γλώσσα σεναρίων μπορεί να ελέγξει την εφαρμογή. Οι γλώσσες αυτές έχουν τον ίδιο σκοπό με τις εξειδικευμένες γλώσσες επέκτασης εφαρμογών αλλά ο χρήστης έχει το πλεονέκτημα να μπορεί να μεταφέρει κάποιες από τις γνώσεις του ανάμεσα στις εφαρμογές.

Η JavaScript ξεκίνησε, και σε μεγάλο βαθμό εξακολουθεί, να είναι γλώσσα συγγραφής σεναρίων μέσα σε φυλλομετρητές αλλά η δημιουργία προτύπου της γλώσσας (ECMAScript) την έκανε δημοφιλή σαν γλώσσα γενικού σκοπού που μπορεί να ενσωματωθεί. Ειδικότερα η υλοποίηση του εγχειρήματος Mozilla (SpiderMonkey) ενσωματώνεται σε πολλά περιβάλλοντα, όπως το Yahoo! Widget Engine. Άλλες εφαρμογές που ενσωματώνουν υλοποιήσεις της ECMAScript είναι τα προϊόντα της Adobe, Adobe Flash (ActionScript) και Adobe Acrobat (για σενάρια σε αρχεία PDF).

Η Tcl δημιουργήθηκε σαν γλώσσα επέκτασης αλλά χρησιμοποιείται πια πιο συχνά όπως η Python, η Perl και η Ruby.

Υπάρχουν πολύπλοκες εφαρμογές, που βασίζονται στις εργασίες (tasks), οι οποίες μπορεί να ενσωματώνουν και να δίνουν στον χρήστη μια γλώσσα προγραμματισμού για περισσότερες δυνατότητες ελέγχου και λειτουργίες μέσω μιας διεπαφής χρήστη (η οποία μπορεί να είναι και αυτή πολύπλοκη). Για παράδειγμα, τα εργαλεία δημιουργίας 3D του Autodesk Maya ενσωματώνουν τη γλώσσα σεναρίων MEL, ενώ το Blender χρησιμοποιεί για τον ίδιο σκοπό την Python.

Άλλοι τύποι εφαρμογών που χρειάζονται έναν τρόπο να προστίθενται γρήγορα νέα χαρακτηριστικά ή να είναι γρηγορότερος ο κύκλος τροποποίηση-εκτέλεση του κώδικα (όπως οι μηχανές παιχνιδιών) χρησιμοποιούν επίσης κάποια ενσωματωμένη γλώσσα. Κατά τη διάρκεια της ανάπτυξης, αυτό διευκολύνει τη γρήγορη δημιουργία και τροποποίηση χαρακτηριστικών, χωρίς ο χρήστης να πρέπει να γνωρίζει τις εσωτερικές λειτουργίες της εφαρμογής ή να πρέπει να την μεταγλωττίζει πάλι μετά από κάθε αλλαγή (κάτι που μπορεί να είναι χρονοβόρο). Για αυτόν τον σκοπό, χρησιμοποιούνται πολλές γλώσσες σεναρίων, από τις πιο γνωστές Lua και Python, σε λιγότερο γνωστές όπως η AngelScript και η Squirrel.

## Ανάλυση αγοράς
Σύμφωνα με μια έρευνα σε παγκόσμιο επίπεδο της Evans Data το 2008 http://www.cio.com/article/446829/PHP_JavaScript_Ruby_Perl_Python_and_Tcl_Today_The_State_of_the_Scripting_Universe?contentId=446829&slug=& , η πιο διαδεδομένη γλώσσα σεναρίων είναι η JavaScript και ακολουθεί η PHP. Η Perl είναι η τρίτη πιο διαδεδομένη γλώσσα σεναρίων, αλλά είναι πολύ πιο διαδεδομένη στη Βόρεια Αμερική.

## Δείτε επίσης
* Διερμηνευμένη γλώσσα
* Shebang (Unix)
* Κέλυφος (υπολογιστές)
* Προγραμματισμός συστημάτων
* Web template languages

## Παραπομπές


## Εξωτερικοί σύνδεσμοι
* Patterns for Scripted Applications 
* Are Scripting Languages Any Good? A Validation of Perl, Python, Rexx, and Tcl against C, C++, and Java (PDF) — μελέτη του 2003 
* Scripting on the Java platform — JavaWorld 
* "Programming is Hard - Let's Go Scripting" by Larry Wall - μεταγραφή του λόγου State of the Onion στην ιστοσελίδα Perl.com.


Σεναριων