Προγραμματιστές Macho, μνήμη τυμπάνου και ιατροδικαστική ανάλυση του κώδικα μηχανής της δεκαετίας του 1960

Οι πραγματικοί προγραμματιστές δεν χρησιμοποιούν το PASCAL

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

Δούλευα ως ντοκιμαντέρ στο Μουσείο Ιστορίας Υπολογιστών για χρόνια. Το σκορ ενός «πραγματικού προγραμματιστή» υπάρχει από την αρχή του λογισμικού. Και μπορώ να το αποδείξω με μια ιστορία.

Η ιστορία ξεκινά με μια επιστολή του 1983, Real Programmers Don't Use PASCAL, που γράφτηκε από τον Ed Post. Η επιστολή δημοσιεύτηκε στο Datamation και συζήτησε την «macho» πλευρά του προγραμματισμού. Είναι ραμμένο εκείνους που δυσφημούν στους χρήστες τη γλώσσα υψηλότερου επιπέδου, όπως δεν «πραγματική προγραμματιστές.»

Η ιστορία του Mel είναι μια διαδικτυακή απάντηση σε αυτό το γράμμα. Ταχυδρομήθηκε στο Usenet στις 21 Μαΐου 1983 από τον Ed Nather.

Οι Mel και Ed ήταν συνάδελφοι σε μια εταιρεία γραφομηχανών που είχαν διακλαδώσει την κατασκευή υπολογιστών. Η επιτυχία τους ήταν το LGP-30: ένας τύμπανος με μνήμη υπολογιστή με πληκτρολόγιο Flexowriter και συσκευή ανάγνωσης χαρτιού. (Η εικόνα κεφαλίδας σε αυτό το άρθρο είναι ο πίνακας ελέγχου ενός LGP-30.) Ο Mel ανατέθηκε να ξαναγράψει ένα δημοφιλές πρόγραμμα για τον διάδοχο υπολογιστή, το RPC-4000.

Λιμάνι? Τι σημαίνει αυτό?

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

Ίσως το μεγαλύτερο σοκ μου ήρθε όταν βρήκα έναν αθώο βρόχο που δεν είχε καμία δοκιμή σε αυτό.

Χωρίς δοκιμή. Κανένας.

Η κοινή λογική είπε ότι έπρεπε να είναι ένας κλειστός βρόχος, όπου το πρόγραμμα θα κυλιόταν, για πάντα, ατελείωτα.

Ο έλεγχος του προγράμματος πέρασε μέσα από αυτό, ωστόσο, και με ασφάλεια από την άλλη πλευρά.

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

Είναι μια υπέροχη ιστορία. Αλλά το ελέγχει;

Ανάλυση κώδικα εγκληματολογίας: Ελέγχει η ιστορία;

Το πρώτο μας βήμα είναι να αναζητήσουμε τεχνικές λεπτομέρειες του μηχανήματος για το οποίο γράφτηκε το πρόγραμμα. Ενώ η ιστορία κάνει εκτενή αναφορά στο LGP-30, το πρόγραμμα έτρεχε πραγματικά σε RPC-4000. (Θυμηθείτε, έπρεπε να ξαναγραφεί για αυτό το νέο μηχάνημα.)

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

Τα δεδομένα αποθηκεύτηκαν και ανακτήθηκαν από τους διάφορους τομείς και κομμάτια του τυμπάνου. Για να μάθετε περισσότερα σχετικά με τη μορφή των δεδομένων, μπορούμε να συμβουλευτούμε το εγχειρίδιο προγραμματισμού RPC-4000, το οποίο το archive.org έχει σαρώσει και διατηρήσει στο διαδίκτυο.

Στη σελίδα 20 του εγχειριδίου, βρίσκουμε το ακόλουθο διάγραμμα λέξεων δεδομένων:

Η λέξη εντολής κατανέμεται σε:

  • 5 bits για την εντολή
  • 13 bits για τη θέση κομματιού / τομέα του τελεστή
  • 13 bit για το κομμάτι / τομέα της διεύθυνσης της επόμενης εντολής

Το bit 31 είναι η ετικέτα ευρετηρίου η οποία, όταν οριστεί, ενεργοποίησε τον καταχωρητή ευρετηρίου:

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

Η ιστορία αναφέρει ότι το "bit index" είναι " το bit που βρίσκεται μεταξύ της διεύθυνσης και του κωδικού λειτουργίας στη λέξη εντολής ". Ωστόσο, το παραπάνω διάγραμμα δείχνει ότι το bit της ετικέτας ευρετηρίου είναι στην πραγματικότητα στο bit 31, μετά την εντολή και τις διευθύνσεις. Προσωπικά, το γράφω αυτό σε μια εσφαλμένη ανάμνηση από τον συγγραφέα στα χρόνια μεταξύ του όταν εξέτασε τον κώδικα και του πότε η ιστορία καταγράφηκε.

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

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

Είχε εντοπίσει τα δεδομένα στα οποία εργαζόταν κοντά στην κορυφή της μνήμης -

τις μεγαλύτερες τοποθεσίες που θα μπορούσαν να απευθυνθούν οι οδηγίες -

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

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

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

Υποθετική εφαρμογή: "Δείξε μου τα κομμάτια!"

Εδώ είναι μια πιθανή οδηγία που μπορεί να είναι η εντολή άλματος που αναφέρεται στην ιστορία:

Μπορούμε να δούμε ότι τα bit εντολών είναι 10111 . Εάν το Branch Control είναι απενεργοποιημένο, "η επόμενη οδηγία είναι αυτή που καθορίζεται στο πεδίο Next-address." Έτσι, μια υποθετική κατάσταση θα ήταν ότι, μετά την υπερχείλιση, ο καταχωρητής (χρησιμοποιώντας σωλήνες για να υποδηλώσει διαχωρισμούς μεταξύ bitfields) διάβαζε:

10111 | 0000000 | 0000000 | 0

Επέκταση πίσω, πριν από την αύξηση και υπερχείλιση, το μητρώο θα είχε διαβάσει:

10110 | 1111111 | 1111111 | 1

Μια ενδιαφέρουσα παρενέργεια της εργασίας μέσω αυτής της εφαρμογής είναι ότι οι οδηγίες που χρησιμοποιούνται δεν έχουν σημασία. Κάθε εντολή στο RPC-4000 περιλαμβάνει τη διεύθυνση της επόμενης εντολής. Μια υπερχείλιση στο bit ευρετηρίου στο επόμενο πεδίο διεύθυνσης θα έχει ως αποτέλεσμα μια μετάβαση σε αυτήν τη διεύθυνση ανεξάρτητα από τα bit εντολών.

Επίλογος

Ο Mel Kaye (που απεικονίζεται όρθιος, δεξιά) συνέχισε να εργάζεται και τελικά αποσύρθηκε. Ένας θαυμαστής με το όνομα Anthony Cuozzo δημοσίευσε το 2014 ότι προσπάθησε να έρθει σε επαφή με τον Mel:

Τελικά κατάφερα να έρθω σε επαφή με τον Mel, αλλά τον φοβόμουν, δυστυχώς. Αυτή είναι μια ιστορία για μια άλλη μέρα…: - / (πηγή)

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

Δεν έχω μείνει σε επαφή με τον Mel, οπότε δεν ξέρω αν παραδόθηκε ποτέ στην πλημμύρα της αλλαγής που έχει ξεπλύνει τις τεχνικές προγραμματισμού από εκείνες τις παλιές μέρες. Μου αρέσει να πιστεύω ότι δεν το έκανε. - Ed Nather

Περαιτέρω πηγές:

  • Η σελίδα της Wikipedia στην ιστορία του Mel
  • Εγχειρίδιο Mel για το παιχνίδι blackjack RPC-4000
  • Η αλήθεια δεν παίρνει ποτέ εμπόδιο σε μια καλή ιστορία του Jan Howard Brunvand

Η Dave συνεργάζεται με προγραμματιστές στις IBM. Για κάποιο λόγο, η IBM δεν διαθέτει SDK για το RPC-4000.