Emacs

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση
GNU Emacs
Emacs logo
GNU Emacs 23.3.1
GNU Emacs 23.3.1.png
Δημιουργός Richard Stallman, GNU Project
Πρώτη έκδοση 1976
Τύπος Διορθωτής κειμένου
Λειτουργικό Cross-platform, GNU
Γραμμένο σε C, Emacs Lisp
Διαθέσιμο σε Αγγλική
Άδεια χρήσης GNU GPLv3
Ιστοσελίδα http://www.gnu.org/software/emacs

Ο Emacs ([ˈiːmæks], «ίμαξ») είναι μια οικογένεια διορθωτών κειμένου, με κύριο χαρακτηριστικό τους την επεκτασιμότητα. Η ανάπτυξή του άρχισε στα μέσα της δεκαετίας του 1970 και συνεχίζεται μέχρι σήμερα. Ο Emacs έχει πάνω από 2,000 ενσωματωμένες εντολές και επιτρέπει στον χρήστη να τις συνδυάσει δημιουργώντας μακροεντολές (macros) για να αυτοματοποιήσει εργασίες, χρησιμοποιώντας συνήθως την Emacs Lisp, μια έκδοση της Lisp, η οποία παρέχει προχωρημένες δυνατότητες επέκτασης του διορθωτή.

Ο EMACS αρχκά ήταν ένα σύνολο από μακροεντολές διορθωτή (Editor MACroS) του διορθωτή κειμένου TECO. Γράφτηκε το 1976 από τον Ρίτσαρντ Στόλμαν και στα αρχικά στάδια της ανάπτυξης συμμετείχε ο Γκάι Στιλ[1][2][3][4] Η ανάπτυξή του επηρρεάστηκε από ιδέες του TECMAC και του TMACS, δύο διορθωτών για μακροεντολές του TECO που είχαν γραφτεί από τον Στιλ, τον Ντέιβ Μουν, τον Ρίτσαρντ Γκρινμπλατ, τον Τσαρλς Φράνκστον και άλλους.[5]

Στον κόσμο του Unix ο Emacs είναι το ένα μισό του παραδοσιακού "πόλεμου των διορθωτών" (editor wars), με το άλλο μισό να είναι ο διορθωτής vi. Στην Αγγλική Γλώσσα ο πληθυντικός της λέξης "emacs" συχνά συναντάται ως emacsen, κατ'αναλογία με τα boxen και VAXen.[6]

Η πιο δημοφιλής έκδοση του Emacs, η οποία και έχει τις περισσότερες εκδόσεις για διαφορετικές πλατφόρμες, είναι ο GNU Emacs, που δημιουργήθηκε από τον Στολμαν για το Εγχείρημα GNU.[7] Μια άλλη διαδεδομένη έκδοση του διορθωτή είναι ο XEmacs, ο οποίος προέκυψε σαν διακλάδωση του κώδικα της κανονικής έκδοσης (fork) του GNU Emacs το 1991. Ο XEmacs είναι σε σημαντικό βαθμό συμβατός με τον GNU Emacs και επίσης χρησιμοποιεί την Emacs Lisp.

Ιστορία[Επεξεργασία | επεξεργασία κώδικα]

Η ανάπτυξη του Emacs άρχισε στο MIT AI Lab τη δεκαετία του 1970. Πριν εμφανιστεί ο Emacs, το Incompatible Timesharing System (ITS), το οποίο ήταν το λειτουργικό σύστημα των υπολογιστών PDP-6 και PDP-10 του εργαστηρίου είχε έναν δικό του διορθωτή γραμμής (line editor), τον Tape Editor and Corrector (TECO) (αργότερα γνωστό και ως Text Editor and Corrector, όπου ‘tape' σήμαινε την χάρτινη ταινία που χρησιμοποιούσαν οι χρήστες τότε). Σε αντίθεση με τους σύγχρονους διορθωτές κειμένου, ο TECO είχε διαφορετικές καταστάσεις εισόδου, ανάλογα με το αν ο χρήστης ήθελε να προσθέσει κείμενο, να αλλάξει υπάρχον κείμενο, ή να εμφανίσει το έγγραφο στο οποίο εργαζόταν. Όταν ο χρήστης πληκτρολογούσε κάποιον χαρακτήρα στον TECO, αυτός ο χαρακτήρας δεν γινόταν μέρος του εγγράφου αλλά ο χρήστης έπρεπε να γράψει εντολές στη γλώσσα του TECO ώστε να εισαχθούν οι απαιτούμενοι χαρακτηρες ενώ μέχρι τότε το αλλαγμένο κείμενο δεν εμφανιζόταν στην οθόνη. Η συμπεριφορά αυτή του διορθωτή μοιάζει με τη συμπεριφορά του προγράμματος ed.

Ο Ρίτσαρντ Στόλμαν επισκέφτηκε το Stanford AI Lab το 1972 ή το 1974 και είδε τον διορθωτή "E" του εργαστηρίου, ο οποίος είχε γραφτεί από τον Φρεντ Ράιτ.[8] Εντυπωσιάστηκε από τη συμπεριφορά WYSIWYG (What You See Is What You Get - «Ό,τι βλέπεις, παίρνεις»), η οποία αποτελεί τον κανόνα στους σύγχρονους διορθωτές κειμένου. Γύρισε στο MIT, όπου ο Καρλ Μίκελσον, ένας προγραμματιστής του AI Lab, είχε προσθέσει μια συνδυασμένη κατάσταση εμφάνισης-διόρθωσης στον TECO με το όνομα "Control-R", η οποία επέτρεπε στην οθόνη να ανανεώνεται κάθε φορά που ο χρήστης πατούσε κάποιο πλήκτρο. Ο Στόλμαν υλοποίησε πάλι αυτήν τη λειτουργία, πιο αποδοτικά, και στη συνέχεια πρόσθεσε μακροεντολές στην κατάσταση εμφάνισης-διόρθωσης του TECO, επιτρέποντας στον χρήστη να χρησιμοποιεί οποιονδήποτε συνδυασμό πλήκτρων ήθελε για να τρέξει εντολές του TECO.[4]

Ο διορθωτής E είχε ένα χαρακτηριστικό που έλειπε από τον TECO: διόρθωση σε οποιαδήποτε (τυχαία) θέση. Επειδή η αρχική υλοποίηση του TECO προοριζόταν για διόρθωση με χρήση χάρτινης ταινίας στον PDP-1, ο διορθωτής ήταν ακολουθιακός. Διορθώσεις μπορούσαν να γίνουν μόνο σε μια σελίδα κάθε φορά, ακολουθώντας τη σειρά των σελίδων στο αρχείο. Για να έχει διόρθωση σε οποιαδήποτε θέση και ο Emacs, ο Στόλμαν αποφάσισε να μην υιοθετήσει τον τρόπο που ο E κρατούσε το αρχείο για τυχαία πρόσβαση στον δίσκο, αλλά έκανε μετατροπές στον TECO ώστε να μπορεί να χειρίζεται μεγάλα κείμενα στη μνήμη πιο αποδοτικά, και στη συνέχεια άλλαξε τη μέθοδο με την οποία ο διορθωτής χειριζόταν τα αρχεία ώστε να διαβάζει, διορθώνει και γράφει ολόκληρο το αρχείο σαν έναν χώρο μνήμης (buffer). Αυτή η προσέγγιση ακολουθείται από σχεδόν όλους τους σύγχρονους διορθωτές κειμένου.

Η νέα έκδοση του TECO γρήγορα έγινε δημοφιλής στο AI Lab και σύντομα μαζεύτηκαν πολλές νέες μακροεντολές, των οποίων τα ονόματα συχνά έληγαν σε "MAC" ή "MACS" (από τη λέξη "macro"). Δύο χρόνια αργότερα, ο Γκάι Στιλ ανέλαβε να συγκεντρώσει όλες αυτές τις διαφορετικές μακροεντολές σε ένα σύνολο. Ο Στιλ και ο Στόλμαν συνεργάστηκαν και ο δεύτερος τελείωσε την υλοποίηση, η οποία υποστήριζε την επέκταση και την τεκμηρίωση αυτού του νέου συνόλου μακροεντολών.[4] Το σύστημα που προέκυψε ονομάστηκε EMACS, από τη φράση "Editing MACroS" («μακροεντολές διόρθωσης»). Μια άλλη άποψη είναι ότι EMACS σήμαινε "E with MACroS" («E με μακροεντολές»). Ο Στόλμαν έχει πει ότι επέλεξε το όνομα Emacs γιατί εκείνη την περίοδο το <E> δεν χρησιμοποιούνταν ως συντομογραφία στο ITS.[9]

Σύμφωνα με τον Στόλμαν, το πρώτο λειτουργικό σύστημα EMACS εμφανίστηκε στο τέλος του 1976.[10]

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

Ο αρχικός Emacs, όπως και ο TECO, έτρεχε μόνο στη σειρά υπολογιστών PDP. Είχες τόσες διαφορές σε σχέση με τον TECO που θεωρούνταν ξεχωριστός διορθωτής. Σύντομα έγινε το βασικό πρόγραμμα διόρθωσης κειμένου στο ITS. Η υλοποίησή του μεταφέρθηκε επίσης από τον Μάικλ Μακμάον, από το ITS στα λειτουργικά συστήματα Tenex και TOPS-20, αλλά τον πρώτο καιρό όχι στο Unix. Άλλα άτομα που συνεισέφεραν στις πρώτες εκδόσεις του Emacs ήταν ο Kent Pitman, ο Earl Killian και ο Eugene Ciccarelli. Μέχρι το 1979 ο Emacs ήταν ο πιο δημοφιλής διορθωτής στα εργαστήρια τεχνητής νοημοσύνης και επιστήμης υπολογιστών του MIT.[11]

Άλλες πρώιμες υλοποιήσεις[Επεξεργασία | επεξεργασία κώδικα]

Κάποιοι προγραμματιστές έγραψαν διορθωτές που έμοιαζαν στον Emacs τα χρόνια που ακολούθησαν, για άλλα υπολογιστικά συστήματα, για παράδειγμα ο EINE ("EINE Is Not EMACS") και ο ZWEI ("ZWEI Was EINE Initially") γράφτηκαν από τον Μάικλ Μακμάχον και τον Ντάνιελ Βάινραϊμπ για τη μηχανή Lisp (Lisp machine). Ο EINE του Βάινραϊμπ ήταν ο πρώτος Emacs που γράφτηκε σε Lisp. Ο Sine ("Sine Is Not Eine")[12] γράφτηκε από τον Όουεν Θίοντορ Άντερσον. Το 1978, ο Μπέρναρντ Γκρίνμπεργκ έγραψε τον Multics Emacs σχεδόν εξολοκλήρου σε Multics Lisp στο Cambridge Information Systems Lab της Honeywell, ενώ ο Ρίτσαρντ Σόλι με τον Μπάρι Μάργκολιν ανέλαβαν στη συνέχεια τη συντήρηση του κώδικα (ο πρώτος ανέπτυξε και τον διορθωτή NILE που έμοιαζε με τον Emacs, για το NIL Project). Πολλές εκδόσεις του Emacs, όπως ο GNU Emacs, στη συνέχεια υιοθέτησαν τη Lisp σαν γλώσσα επέκτασης.

Ο Τζέιμς Γκόσλινγκ (ο οποίος αργότερα εφηύρε το NeWS και τη γλώσσα προγραμματισμού Java) έγραψε τον πρώτο διορθωτή τύπου Emacs που έτρεχε στο Unix, τον Gosling Emacs, το 1981. Τον έγραψε σε C και για γλώσσα επέκτασης χρησιμοποίησε μια γλώσσα της οποίας η σύνταξη έμοιαζε με Lisp, την Mocklisp. Ο διορθωτής ήταν ιδιόκτητο λογισμικό το 1984.

GNU Emacs[Επεξεργασία | επεξεργασία κώδικα]

Το 1984 ο Στόλμαν άρχισε να δουλεύει πάνω στον GNU Emacs ώστε να δημιουργήσει ένα ισοδύναμο ελεύθερο λογισμικό του Gosling Emacs. Αρχικά βασίστηκε στον Gosling Emacs, αλλά αντικατέστησε τον διερμηνέα της Mocklisp με έναν διερμηνέα για κανονική Lisp, κάτι που οδήγησε σε αλλαγή σχεδόν ολόκληρου του πηγαίου κώδικα. Το αποτέλεσμα ήταν το πρώτο πρόγραμμα του νέου τότε Εγχειρήματος GNU. Ο GNU Emacs είναι γραμμένος σε C και παρέχει την Emacs Lisp (που είναι υλοποιημένη σε C) σαν γλώσσα επέκτασης. Η έκδοση 13, η πρώτη έκδοση για το κοινό, κυκλοφόρησε στις 20 Μαρτίου του 1985. Η πρώτη έκδοση ευρείας κυκλοφορίας του GNU Emacs ήταν η 15.34, η οποία εμφανίστηκε προς το τέλος του 1985. Εκδόσεις με αριθμούς από 2 έως 12 δεν υπήρξαν ποτέ. Οι προηγούμενες εκδόσεις του GNU Emacs είχαν αρίθμηση της μορφής "1.x.x", αλλά κάποια στιγμή μετά την έκδοση 1.12 πάρθηκε η απόφαση να παραλείπεται το "1", επειδή θεωρούνταν ότι ο κύριος αριθμός έκδοσης δε θα άλλαζε ποτέ.[εκκρεμεί παραπομπή]

Ο GNU Emacs αργότερα μεταφέρθηκε στο Unix. Επειδή είχε περισσότερα χαρακτηριστικά σε σχέση με τον Gosling Emacs, και ειδικότερα μια πλήρη έκδοση της Lisp σαν γλώσσα επέκτασης, γρήγορα αντικατέστησε τον Gosling Emacs και έγινε ο ντε φάκτο διορθωτής τύπου Emacs στο Unix. Μια τρύπα ασφάλειας στο υποσύστημα ηλεκτρονικού ταχυδρομείου του GNU Emacs χρησιμοποιήθηκε από τον Μάρκους Ες στις ηλεκτρονικές επιθέσεις του το 1986 για να αποκτήσει πρόσβαση υπερχρήστη σε υπολογιστικά συστήματα που έτρεχαν Unix.[13]

Μέχρι το 1999, η ανάπτυξη του GNU Emacs ακολουθούσε ένα σχετικά κλειστό μοντέλο, σε σημείο που να θεωρείται παράδειγμα του στυλ ανάπτυξης «καθεδρικός» στο βιβλίο Ο Καθεδρικός και το Παζάρι (The Cathedral and the Bazaar). Το εγχείρημα αργότερα απέκτησε μια δημόσια λίστα ηλεκτρονικού ταχυδρομείου για θέματα ανάπτυξης και ανώνυμη πρόσβαση CVS. Η ανάπτυξη γινόταν σε έναν μόνο χώρο (trunk) του CVS μέχρι το 2008, ενώ σήμερα χρησιμποιείται το κατανεμημένο σύστημα ελέγχου εκδόσεων Bazaar.

Ο Ρίτσαρντ Στόλμαν παρέμεινε συντηρητής του GNU Emacs στο μεγαλύτερο διάστημα της ανάπτυξης του προγράμματος, αλλά με αρκετά διαλείμματα. Το τελευταίο άρχισε το 2008 και διαρκεί μέχρι σήμερα, με τη συντήρηση να έχει ανατεθεί στον Στέφαν Μονιέ και τον Τσονγκ Γιντόνγκ.[14]

XEmacs[Επεξεργασία | επεξεργασία κώδικα]

Από το 1991, ο Τζέιμι Ζοΐνσκι και άλλοι προγραμματιστές στην Lucid Inc. ανέπτυξαν τον Lucid Emacs, με βάση μια παλιά έκδοση άλφα της έκδοσης 19 του GNU Emacs. Οι δύο πηγαίοι κώδικες σύντομα απέκλιναν και οι δύο ξεχωριστές ομάδες ανάπτυξης σταμάτησαν να προσπαθούν να τις ενώσουν σε ένα πρόγραμμα.[15] Αυτή ήταν μια από τις πιο γνωστές πρώτες διακλαδώσεις (fork) ενός προγράμματος ελεύθερου λογισμικού. Ο Lucid Emacs στη συνέχεια μετονομάστηκε σε XEmacs και παραμένει η δεύτερη πιο δημοφιλής έκδοση του Emacs, μετά τον GNU Emacs.

Άλλες εκδόσεις και κλώνοι[Επεξεργασία | επεξεργασία κώδικα]

Έχουν κυκλοφορήσει αρκετές παραλλαγές του GNU Emacs, όπως η Ιαπωνική έκδοση για MS Windows (Meadow),[16] η έκδοση του XEmacs από τον Steve Youngs (SXEmacs),[17] και μια έκδοση που ενσωματώνεται στη διεπαφή χρήστη του Apple Macintosh (Aquamacs).

Υπάρχουν πολλοί κλώνοι του Emacs, οι οποίοι δεν βασίζονται σε κώδικα του GNU Emacs. Πολλοί κλώνοι δημιουργήθηκαν επειδή ο GNU Emacs αρχικά απαιτούσε χώρο διευθύνσεων 32-bit και τουλάχιστον 1 MiB μνήμης RAM. Αυτό σήμαινε ότι υπήρχε χώρος για μικρότερες υλοποιήσεις, σε μια εποχή που οι υπολογιστές με αυτά τα χαρακτηριστικά ήταν ακριβοί. Κάποιοι από τους πιο γνωστούς κλώνους είναι ο MicroEMACS, ο mg (αρχικά MicroGNUEmacs και αργότερα mg2a), ο οποίος σήμερα εγκαθίσταται εξορισμού στο OpenBSD, ο NotGNU,[18] ο JOVE (Jonathan's Own Version of Emacs), ο Perfect Writer για το CP/M,[19] ο Freemacs για το DOS, ο MINCE (MINCE Is Not Complete Emacs) για CP/M και DOS, ο Zile (Zile Is Lossy Emacs),[20] ο Climacs (βασισμένος σε Common Lisp),ο QEmacs,[21], ο Epsilon ,[22] (εκδόσεις για DOS, Windows, GNU/Linux, FreeBSD, Mac OS X και O/S 2), ο EmACT και ο PceEmacs, ο διορθωτής της SWI-Prolog.

Διορθωτές που έχουν υποστήριξη για κατάσταση Emacs είναι ο Yi (βασισμένος σε Haskell), ο Joe's Own Editor και ο JED.

Δείτε επίσης[Επεξεργασία | επεξεργασία κώδικα]

Σημειώσεις[Επεξεργασία | επεξεργασία κώδικα]

Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]

  1. Bernard S. Greenberg. «Multics Emacs: The History, Design and Implementation». http://www.multicians.org/mepap.html#secii. 
  2. «GNU Emacs FAQ». http://www.gnu.org/software/emacs/emacs-faq.html#Origin-of-the-term-Emacs. 
  3. Jamie Zawinski. «Emacs Timeline». http://www.jwz.org/doc/emacs-timeline.html. 
  4. 4,0 4,1 4,2 Adrienne G. Thompson. «MACSimizing TECO». http://www.codeartnow.com/hacker-art-1/macsimizing-teco. 
  5. «A history of Emacs». XEmacs Internals Manual. 2006-12-11. http://www.xemacs.org/Documentation/21.5/html/internals_3.html. Ανακτήθηκε στις 2007-08-22. 
  6. «VAXen». Catb.org. http://www.catb.org/~esr/jargon/html/V/VAXen.html. Ανακτήθηκε στις 2009-11-08. 
  7. Allombert, Bill. «Debian Popularity Contest». Editors report. Debian. http://popcon.debian.org/main/editors/by_vote. Ανακτήθηκε στις 22 November 2011. 
  8. Arhur Samuel (1980-03). «Essential E». ftp://reports.stanford.edu/pub/cstr/reports/cs/tr/80/796/CS-TR-80-796.pdf. Ανακτήθηκε στις 2011-08-01. 
  9. Richard M., Stallman. «The EMACS Full-Screen Editor». http://www.lysator.liu.se/history/garb/txt/87-1-emacs.txt. Ανακτήθηκε στις 2007-09-14. 
  10. 10,0 10,1 Stallman, Richard (March 26, 1981). EMACS: The Extensible, Customizable, Self-Documenting, Display Editor (Technical report AI Memo 519a) [1]. MIT AI Lab. Ανακτήθηκε την 2011-01-07.
  11. Leigh Klotz (2007-08-29). "email quoted in "Be Careful What You Joke About"". The New York Times. http://pogue.blogs.nytimes.com/2007/08/29/be-careful-what-you-joke-about/. Ανακτήθηκε στις 2010-05-01. 
  12. Owen Theodore Anderson (1979-01). «The Design and Implementation of a Display-Oriented Editor Writing System». http://dspace.mit.edu/bitstream/handle/1721.1/16038/07332831.pdf?sequence=1. Ανακτήθηκε στις 2012-09-09. 
  13. Stoll, Clifford (1988). "Stalking the wily hacker". Communications of the ACM 31 (5): 484–497. doi:10.1145/42411.42412 
  14. «Re: Looking for a new Emacs maintainer or team». gnu.org Mailing List. http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg02140.html. Ανακτήθηκε στις 2008-02-23. ; δείτε επίσης: "Stallman on handing over GNU Emacs, its future and the importance of nomenclature"
  15. Stephen J., Turnbull. «XEmacs vs. GNU Emacs». http://www.xemacs.org/About/XEmacsVsGNUemacs.html. Ανακτήθηκε στις 2012-10-02. 
  16. FrontPage - Meadow Wiki
  17. «SXEmacs Website». Sxemacs.org. 2009-10-11. http://www.sxemacs.org. Ανακτήθηκε στις 2009-11-08. 
  18. «NotGNU Emacs Editor (Author's Official Download Site)». Notgnu.org. 2004-01-15. http://www.notgnu.org/. Ανακτήθηκε στις 2009-11-08. 
  19. TextEditors Wiki
  20. «Zile home page». http://www.gnu.org/software/zile/. 
  21. «QEmacs Homepage». Fabrice.bellard.free.fr. http://bellard.org/qemacs/. Ανακτήθηκε στις 2009-11-08. 
  22. «Lugaru Software Homepage». http://www.lugaru.com/. 

Εξωτερικοί σύνδεσμοι[Επεξεργασία | επεξεργασία κώδικα]

Wikiquote logo
Στα Βικιφθέγματα υπάρχει υλικό σχετικό με το λήμμα:
Commons logo
Τα Wikimedia Commons έχουν πολυμέσα σχετικά με το θέμα
Στο λήμμα αυτό έχει ενσωματωθεί κείμενο από το λήμμα Emacs της Αγγλικής Βικιπαίδειας, η οποία διανέμεται υπό την GNU FDL και την CC-BY-SA 3.0. (ιστορικό/συντάκτες).