Πέμπτη 3 Απριλίου 2008

Μόνο για Geeks: Απόκρυφες Γλώσσες Προγραμματισμού

Esoteric Programming Languages – You just can’t handle them.

Ετούτη τη στιγμή σταματούν να διαβάζουν τις γραμμές αυτές περίπου το 95% των ανθρώπων που δεν ασχολούνται με την Επιστήμη της Πληροφορικής. Και από το εναπομένων 5%, μακάρι το 0,1% θα συνεχίζει να διαβάζει πέραν της εισαγωγής. Καλά το καταλάβατε: οι απόκρυφες γλώσσες προγραμματισμού είναι για ανθρώπους που βρίσκονται στην λεπτή γκρίζα ζώνη μεταξύ της «φιλομαθείας για τα πάντα» (GEEKS!) και της παντελούς απουσίας ζωής (SUPER GEEKS!). Και στο κάτω-κάτω, πως μπορείς να σκοτώσεις αυτό που δεν έχει ζωή; Το μόνο που ξέρω είναι ότι εδώ έχουμε να κάνουμε με ένα θέμα το οποίο είναι ενδιαφέρων για ουσιαστικά έναν στους δυο χιλιάδες ανθρώπους και επίσης, ότι σίγουρα έχει πιο ενδιαφέροντα άρθρα στο παρών StudentClick για σας να διαβάσετε. (σ.σ.: Κατ’ ακρίβεια, είχαμε ήδη ένα κυρίως άρθρο για την παιδική πορνογραφία στο διαδίκτυο – ένα θέμα που σίγουρα είναι πιο ενδιαφέρον και επίκαιρο από αυτό – αλλά το κόψαμε επειδή ήταν πολύ μεγάλο και κουραστικό. Οπόταν, esoteric programming languages it is! Ahoy me lads!).

Τι στο καλό είναι οι «Απόκρυφες Γλώσσες Προγραμματισμού» και γιατί, για όνομα του Θωρ, υπάρχουν;

Λοιπόν, πολύ απλά κάποιοι έχουν πάρα πολύ ελεύθερο χρόνο στη ζωή τους καθώς και αρκετά παράξενη αίσθηση του «χιούμορ», ώστε να χρησιμοποιήσουν τις γνώσεις τους στην κατασκευή Γλωσσών Προγραμματισμού (τις οποίες γνώσεις απέκτησαν με πολύ χρόνο, μόχθο και στέρηση κοινωνικής ζωής), για να δημιουργήσουν γλώσσες προγραμματισμού που σπρώχνουν στα άκρα τόσο την επιστήμη κατασκευής γλωσσών προγραμματισμού, τόσο και τη λεπτή γραμμή που χωρίζει το «χιούμορ», τη δημιουργία και την παράνοια.

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

Γιατί τις κατασκευάζουν; Για την πλάκα (αυτό παίζεται), για την απόδειξη κάποιας περιθωριακής θεωρητικής υπόθεσης, είτε απλώς για να αποδείξουν ότι «ΝΑΙ ΡΕ ΚΑΡΙΟΛΗ! ΕΙΝΑΙ ΕΦΙΚΤΟ ΚΑΙ ΤΟ ΕΚΑΝΑ!». Α, και μην ξεχνάμε ένα μεγάλο βαθμό αθκιασερωσύνης και αμφιβόλου ψυχικής ισορροπίας (σ.σ.: για να μην παρεξηγούμαστε, αστειεύομαι –κάπως– για τα περί «αμφιβόλου ψυχικής ισορροπίας» - δεν προσβάλλουμε τους ανθρώπους επειδή τη βρίσκουν με διαφορετικούς τρόπους).

Στην πλειοψηφία των περιπτώσεων, η αρχική πρόθεση της δημιουργίας αυτών των γλωσσών, δεν είναι η υιοθέτηση τους ως λειτουργικά εργαλεία καθημερινής χρήσης, παρά μάλλον η διαφοροποίησή τους από το τι νοεί το ευρύ κοινό ως «γλώσσα προγραμματισμού». Κατ’ ακρίβεια, ο σχεδιασμός αυτών των γλωσσών προσδοκεί στο να τις κάνει πιο δύσκολες, αφαιρώντας ή αντικαθιστώντας στοιχεία και χαρακτηριστικά που συνηθίζονται σε mainstream γλώσσες (ίδετε απόκρυφη γλώσσα Whitespace, όπου δεν χρησιμοποιεί καθόλου χαρακτήρες παρά μόνο space, tab και enter). Ασχέτως όμως, οι γλώσσες αυτές δουλεύουν μια χαρά, μέχρι των δυνατοτήτων που σχεδιάστηκαν βέβαια, ορισμένες εξ’ αυτών σε λειτουργικά επίπεδα αντάξια «κανονικών» γλωσσών προγραμματισμού.

Οπόταν, πέρα από τη συγκεκριμένη κάστα αποτελούμενη από hackers, χομπύστες (!) και φιλομαθών (geeks) οι οποίοι δημιουργούν και ασχολούνται με αυτές τις γλώσσες, οι πλείστοι υπόλοιποι ημών μπορούμε απλά να βλέπουμε και να θαυμάζουμε (ή να απορούμε αναλόγως), αναλογιζόμενοι «για δες, και όμως δουλεύει!».


Και επειδή ίσως κάποιοι από τους τεχνικούς όρους να μην είναι κατανοητοί σε όλους, ας δούμε μερικά παραδείγματα αυτών των γλωσσών, το σκεπτικό τους (μπρρρ!!) και δείγμα από τον κώδικά τους (δειγματικά προγράμματα «
Hello World»).

HEllO WORld!

Brainfuck

Μια γλώσσα που αγνοεί οτιδήποτε εκτός από τις οχτώ διαταγές που χρησιμοποιεί (> < + - . , [ και ]) και ένα απλό προγραμματάκι που να τυπώνει «Hello World!» στην οθόνη του υπολογιστή να είναι κάπως έτσι:…

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

…τότε ουδεμία απορία πρέπει να έχετε για το λόγο της ονομασίας της!

Η γλώσσα κατασκευάστηκε το 1993 από τον Urban Müller με πρόθεσή να δημιουργήσει μια γλώσσα όπου να χρειάζεται ένα πολύ (πολύ) μικρό compiler (μεταγλωττιστή). Με την γλώσσα να είναι τόσο πολύ «υπολογιστικά ευανάγνωστη», δεν χρειάζεται ένα μεταγλωττιστή μεγαλύτερο από μισό kilobyte (1/2000 Mebabyte!). Για υπολογιστές ίσως να είναι «ευανάγνωστη», αλλά για ανθρώπους είναι όπως η ονομασία της: BRAIN FUCK!

Whitespace

Εάν η Brainfuck σας φάνηκε ακραία, δείτε αυτή. Ίσως να μην το γνωρίζατε, αλλά το enter, το space και το tab αντιστοιχούν σε ξεχωριστούς χαρακτήρες, το ίδιο όπως αντιστοιχεί π.χ. σε ένα άλλο πλήκτρο του αλφαβήτου που υπάρχει στο πληκτρολόγιό σας. Το space, το enter και το tab, μπορεί να είναι διαφορετικοί χαρακτήρες, αλλά οπτικά να φαίνονται τα ίδια ως «χαρακτήρες λευκού διαστήματος» («white space characters»). Λοιπόν, η γλώσσα Whitespace χρησιμοποιεί αποκλειστικά αυτούς τους τρεις χαρακτήρες, αγνοώντας ουσιαστικά οτιδήποτε ορατό κείμενο!

Παραδόξως, αυτό προσδίδει στη Whitespace μία ενδιαφέρουσα ιδιότητα: να μπορεί το ίδιο πρόγραμμα να είναι συμβατό και με whitespace και με οποιαδήποτε άλλη γλώσσα προγραμματισμού. Αυτό είναι εφικτό, επειδή κάνοντας το αντίθετο από ότι κάνει μια «κανονική» γλώσσα προγραμματισμού (που αγνοεί τους λευκούς χαρακτήρες), το ίδιο κείμενο του προγράμματος μπορεί να εμπεριέχει μια «κανονική» γλώσσα προγραμματισμού, αλλά στους λευκούς χαρακτήρες του κειμένου να εμπεριέχονται οι διαταγές της Whitespace. Εάν αυτό δεν είναι cool, τότε δεν ξέρω τι είναι!

Piet

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

Image: http://upload.wikimedia.org/wikipedia/en/7/72/Mondrian_CompRYB.jpg

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

Image: http://alpie.net/blog/images/20070529/piet.gif το «Hello World» πρόγραμμα σε Piet. © Thomas Schoch

INTERCAL

Οι διαταγές σε μία γλώσσα προγραμματισμού είναι ευθείς, κοφτές, ρητές και εκτελούνται από τον μεταφραστή χωρίς καμιά αντίρρηση. Κάτι δηλαδή όπως το στρατό. Και επειδή ακριβώς όλοι μισούμε το στρατό (δεν μας αρέσει να μας διατάζουν «ΚΑΜΕ», «ΣΤΑΜΑΤΑ», «ΚΑΜΝΕ ΩΣΠΟΥ ΝΑ ΣΟΥ ΠΩ ΚΑΝΕΙ», «ΠΕΡΙΜΕΝΕ ΜΕΧΡΙ ΝΑ ΓΙΝΕΙ ΚΑΤΙ ΓΙΑ ΝΑ ΚΑΜΕΙΣ ΚΑΤΙ ΑΛΛΟ»), οι κύριοι Don Woods και James M. Lyon, τότε μαθητές του πανεπιστημίου Princeton, αποφάσισαν ότι έπρεπε να φτιάξουν μία γλώσσα προγραμματισμού που να μην ανέχονταν αυτή τη συμπεριφορά!

Οπόταν, εάν τύχει ποτέ να προγραμματίζετε σε INTERCAL, να μην ξεχνάτε να γράφετε «PLEASE» κάθε λίγο, ειδάλλως ο μεταφραστής θα προσβαλθεί και θα σας κάνει παράπονο. Εάν όμως χρησιμοποιείτε πολύ «PLEASE», τότε ο μεταφραστής θα καταλάβει την υποκριτική ευγένειά σας και επίσης θα σταματήσει να δουλεύει. Επίσης οι κοφτές διαταγές πρέπει να είναι πιο φιλολογικά ευχάριστες: δηλαδή «READ OUT» αντί σκέτο «READ» και «GIVE UP» αντί «.», ή «}», ή «END».

Σκεφτείτε το λίγο: στο μέλλον όπου η ρομποτική θα φτάσει σε πιο ανεπτυγμένα επίπεδα, μπορεί εάν πείτε απότομα του ρομπότ «Κάνε μου ένα φραπέ», να αρνηθεί και να σας απαντήσει «Άντε και γαμήσου κρεατό-κολε άνθρωπε! Τι νόμισες ότι είμαι για να μου μιλάς έτσι; Δούλος σου; Τράβα και κάντο μόνος σου πριν πάω στη συντεχνία!».

Shakespeare και Chef

Είναι κρίμα εμείς οι engineers που λόγω της φύσεως της ιδιότητας μας δεν μπορούμε να είμαστε τόσο σχετικοί με τις φιλολογικές τέχνες. Και δυστυχώς ο προγραμματισμός απαραίτητα πρέπει να χρησιμοποιεί ένα σχετικά περιορισμένο λεξιλόγιο από διαταγές και απλοϊκά κατανοητή γραμματική… τι ρηχό! Και γι αυτό ακριβώς το λόγο, κάποια παλικάρια από τα κρύα της Σκανδιναβίας αποφάσισαν ότι αυτό έπρεπε να αλλάξει και εγένετω η Shakespeare, με δομή και γλώσσα από τον μεγάλο κλασσικό! Ιδού το «Hello World» (απόσπασμα, επειδή το Hello World πρόγραμμα στη Shakespeare μπορεί να είναι ΤΕΡΑΣΤΙΟ σε σχέση με άλλες γλώσσες που μπορεί να είναι μόνο μια γραμμή):

Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.



Act I: Hamlet's insults and flattery.

Scene I: The insulting of Romeo.

[Enter Hamlet and Romeo]

Hamlet:
You lying stupid fatherless big smelly half-witted coward! You are as
stupid as the difference between a handsome rich brave hero and thyself!
Speak your mind!

You are as brave as the sum of your fat little stuffed misused dusty
old rotten codpiece and a beautiful fair warm peaceful sunny summer's
day. You are as healthy as the difference between the sum of the
sweetest reddest rose and my father and yourself! Speak your mind!

You are as cowardly as the sum of yourself and the difference
between a big mighty proud kingdom and a horse. Speak your mind.

Speak your mind!

[Exit Romeo]

Scene II: The praising of Juliet.

[Enter Juliet]

Hamlet:
Thou art as sweet as the sum of the sum of Romeo and his horse and his
black cat! Speak thy mind!

[Exit Juliet]



Το ίδιο ισχύει και για τη Chef, μία γλώσσα προγραμματισμού όπου η γραμματική της και οι διαταγές κάνουν τα προγράμματα γραμμένα σε Chef να μοιάζουν με συνταγές μαγειρικής! ΜΜΜ!

Ιδού:

Hello World Souffle.
 
 Ingredients.
 72 g haricot beans
 101 eggs
 108 g lard
 111 cups oil
 32 zucchinis
 119 ml water
 114 g red salmon
 100 g dijon mustard
 33 potatoes
 
 Method.
 Put potatoes into the mixing bowl.
 Put dijon mustard into the mixing bowl.
 Put lard into the mixing bowl.
 Put red salmon into the mixing bowl.
 Put oil into the mixing bowl.
 Put water into the mixing bowl.
 Put zucchinis into the mixing bowl.
 Put oil into the mixing bowl.
 Put lard into the mixing bowl.
 Put lard into the mixing bowl.
 Put eggs into the mixing bowl.
 Put haricot beans into the mixing bowl.
 Liquefy contents of the mixing bowl.
 Pour contents of the mixing bowl into the baking dish.
 
 Serves 1.

Λοιπόοοον, επειδή νιώθουμε ότι αρκετά φάγαμε από το χρόνο σας και την υπομονή σας (και σελίδες του περιοδικού – μην ξεχνιόμαστε!), αφήνουμε αυτό το… intriguing θέμα ως εδώ. Υπάρχουν αρκετές απόκρυφες γλώσσες προγραμματισμού, εμείς σας δείξαμε μόνο μερικές. Στο άρθρο για τα LOLCATS που θα βρείτε στο παρών StudentClick, θα δείτε ακόμη μία που χρησιμοποιεί… δεν σας λέω, να πάτε να διαβάσετε.

Ορέστης Τριγγίδης

orestis@tringides.com

blog: http://tringides.blogspot.com