Programatorii adevărați nu folosesc PASCAL

Programatorii construiesc astăzi aplicații distribuite și rețele neuronale artificiale. Folosesc programare reactivă funcțională, cadre web open source și medii fără server. Cu toate acestea, sindromul impostorului este real și programatorii încă se critică reciproc pentru că nu sunt „programatori adevărați”.

Am lucrat ca docent la Muzeul de Istorie a Calculatoarelor de ani de zile. Tropul unui „programator real” a existat de la începutul software-ului. Și o pot dovedi cu o poveste.

Povestea începe cu o scrisoare din 1983, Programatorii reali nu folosesc PASCAL, scris de Ed Post. Scrisoarea a fost publicată în Datamation și a discutat latura „macho” a programării. A acționat pe cei care îi disprețuiesc pe utilizatorii de limbă de nivel superior ca fiind nu „Programatori adevărați”.

Povestea lui Mel este un răspuns online la această scrisoare. A fost postat la Usenet pe 21 mai 1983 de către Ed Nather.

Mel și Ed au fost colegi la o companie de mașini de scris care s-a extins în construirea de computere. Succesul lor de izbucnire a fost LGP-30: A computer de memorie tambur cu o tastatură Flexowriter și un cititor de bandă de hârtie. (Imaginea antetului din acest articol este tabloul de bord al unui LGP-30.) Mel a fost desemnat să rescrie un program popular pentru computerul succesor, RPC-4000.

Port? Ce inseamna asta?

După ce Mel a părăsit compania, Ed a primit sarcina de a rescrie o parte din acest program. În poveste, el descoperă o buclă infinită în cod, care cumva nu împiedică funcționarea programului:

Poate că cel mai mare șoc al meu a venit când am găsit o buclă inocentă care nu avea niciun test în ea.
Fără test. Nici unul.
Simțul comun a spus că trebuie să fie o buclă închisă, în care programul să se învârtă, pentru totdeauna, la nesfârșit.
Totuși, controlul programului a trecut chiar prin el și în siguranță pe cealaltă parte.

Ed a descoperit că bucla închisă provoca o revărsare, care a rescris codul de instrucțiuni. Rezultatul revărsării a fost un a sari instrucțiune, mutarea controlului programului într-o locație de memorie diferită.

Este o poveste grozavă. Dar verifică?

Analiza codului criminalistic: se verifică povestea?

Primul nostru pas este să căutăm detalii tehnice despre aparatul pentru care a fost scris programul. În timp ce povestea face o mențiune extinsă asupra LGP-30, programul rulează de fapt pe un RPC-4000. (Amintiți-vă, trebuia rescris pentru această nouă mașină.)

Ambele mașini au folosit memoria tambur pentru stocarea programului. (Fapt distractiv: echivalentul dur al hard disk-ului dvs. modern a fost memoria tamburului, banda de hârtie, cartele perforate sau banda magnetică!) O singură linie de capete electromagnetice ar citi / scrie date în timp ce tamburul se învârtea cu o viteză constantă sub ele. Iată o referință vizuală:

Programatori macho memorie de tambur si o analiza criminalistica a
Diagrama de tambur de memorie. Sursă: Manual RPC-4000

Datele au fost stocate și recuperate din diferitele sectoare și piese ale tamburului. Pentru a afla mai multe despre formatul datelor, ne putem consulta manualul de programare RPC-4000, care archive.org a scanat și conservat online.

La pagina 20 a manualului, găsim următoarea diagramă de cuvinte de date:

1611018606 894 Programatori macho memorie de tambur si o analiza criminalistica a
Diagramele formatului Word RPC-4000

Cuvântul de comandă se împarte în:

  • 5 biți pentru comandă
  • 13 biți pentru localizarea piesei / sectorului operandului
  • 13 biți pentru pista / sectorul adresei următoarei comenzi

Bitul 31 este etichetă index care, atunci când este setat, a activat registrul index:

[The index register] a permis programatorului să scrie o buclă de program care utilizează o instrucțiune indexată în interior; de fiecare dată, numărul din registrul index a fost adăugat la adresa acelei instrucțiuni, deci s-ar referi la următoarea dată dintr-o serie.

Povestea menționează că „bitul index” este bitul care se află între adresă și codul de operație din cuvântul de instrucțiuni. ” Cu toate acestea, diagrama de mai sus arată că bitul de etichetă index este de fapt la bitul 31, trecut de comandă și adrese. Personal, fac acest lucru până la o amintire greșită a autorului în anii care au trecut de când a revizuit codul și când a fost înregistrată povestea.

Din fericire, acest lucru nu afectează aspectul de revărsare al poveștii. Deoarece cuvântul de instrucțiune a fost tras în memorie și incrementat, bitul index ar trebui încă setat pe pentru ca creșterea să revarsă Adresa următoare.

Pentru a recrea cuvintele de instrucțiuni în buclă, trebuie să știm mai multe despre modul în care a funcționat programul. Iată un citat din partea critică a poveștii:

Localizase datele la care lucra aproape de vârful memoriei –
cele mai mari locații pe care le-ar putea aborda instrucțiunile –
deci, după ce a fost tratată ultima dată de referință, creșterea adresei de instrucțiuni ar face ca aceasta să se revărseze.
Transportul va adăuga unul la codul de operație, schimbându-l la următorul din setul de instrucțiuni: o instrucțiune de salt.
Destul de sigur, următoarea instrucțiune a fost în locația zero a adresei, iar programul a continuat fericit.

Implementare ipotetică: „Arată-mi biții!”

Iată o instrucțiune potențială care ar putea fi instrucțiuni de salt la care se face referire în poveste:

1611018606 498 Programatori macho memorie de tambur si o analiza criminalistica a

Putem vedea că biții de comandă sunt 10111. Dacă Controlul filialei este dezactivat, „următoarea instrucțiune este cea specificată în câmpul Adresa următoare”. Deci, o situație ipotetică ar fi că, după revărsare, registrul (folosind țevi pentru a indica separări între câmpurile de biți) citește:

10111 | 0000000 | 0000000 | 0

Extrapolând înapoi, înainte de creștere și depășire, registrul ar fi citit:

10110 | 1111111 | 1111111 | 1

Un efect secundar interesant al lucrării prin această implementare este că instrucțiunile utilizate nu contează cu adevărat. Fiecare instrucțiune din RPC-4000 include adresa următoarei instrucțiuni. O depășire a bitului index în câmpul de adresă următor va avea ca rezultat un salt la adresa respectivă, indiferent de biții de comandă.

Epilog

1611018607 209 Programatori macho memorie de tambur si o analiza criminalistica a
Fotografie de grup din Librazette din august 1956

Mel Kaye (în picioare, în dreapta) a continuat să lucreze și, în cele din urmă, s-a retras. Un fan pe nume Anthony Cuozzo a postat în 2014 că a încercat să intre în contact cu Mel:

Am reușit în cele din urmă să iau legătura cu Mel, dar l-am speriat, din păcate. Aceasta este o poveste pentru o altă zi …: – / (sursă)

Din respect pentru confidențialitatea lui Mel, nu voi posta nicio informație personală și mă voi lipi de program și de poveste. Dacă cineva știe ce simte Mel despre faima lui pe internet, mi-ar plăcea să aud de la tine.

Nu am păstrat legătura cu Mel, așa că nu știu dacă a cedat vreodată în fața inundației schimbărilor care a spălat tehnicile de programare din acele zile îndepărtate. Îmi place să cred că nu. – Ed Nather

Alte surse:

Dave lucrează relații cu dezvoltatorii la IBM. Din anumite motive, IBM nu are un SDK pentru RPC-4000.