Pravi programeri ne koriste PASCAL
Programeri danas grade distribuirane aplikacije i umjetne neuronske mreže. Koriste funkcionalno reaktivno programiranje, mrežne okvire otvorenog koda i okruženja bez poslužitelja. Ipak, sindrom varalice je stvaran, a programeri još uvijek kritiziraju jedni druge da nisu "pravi programeri".
Godinama sam radio kao docent u Muzeju povijesti računala. Snaga "pravog programera" postoji od početka softvera. A to mogu dokazati pričom.
Priča započinje pismom iz 1983. godine, Pravi programeri ne koriste PASCAL, koji je napisao Ed Post. Pismo je objavljeno u Datamationu i govori o "macho" strani programiranja. Potreban je onima koji omalovažavaju korisnike jezika više razine kao da nisu "pravi programeri".
Priča o Melu mrežni je odgovor na to pismo. Na Usenet ju je objavio 21. svibnja 1983. Ed Nather.
Mel i Ed bili su kolege u tvrtki za pisaće strojeve koja se razgranala u izgradnju računala. Njihov uspjeh bio je LGP-30: bubnjevno memorijsko računalo s Flexowriter tipkovnicom i čitačem papirnate vrpce. (Slika zaglavlja u ovom članku je nadzorna ploča LGP-30.) Mel je dobila zadatak da prepiše popularni program za računalo nasljednika, RPC-4000.
Luka? Što to znači?Nakon što je Mel napustila tvrtku, Ed je dobio zadatak da prepiše dio ovog programa. U priči otkriva beskonačnu petlju u kodu, što nekako ne sprječava program da funkcionira:
Možda je moj najveći šok nastao kad sam pronašao nevinu petlju u kojoj nije bilo testa.Nema testa. Nijedna.
Zdravi razum rekao je da to mora biti zatvorena petlja, gdje će program kružiti, zauvijek, beskrajno.
Kontrola programa prošla je kroz nju, međutim, i sigurno s druge strane.
Ed je otkrio da zatvorena petlja uzrokuje preljev, koji je prepisao kôd upute. Ishod preljeva bila je uputa za skok , premještajući kontrolu nad programom na drugo memorijsko mjesto.
To je sjajna priča. Ali provjerava li?
Analiza forenzičkog koda: Provjerava li priču?
Naš prvi korak je traženje tehničkih detalja o stroju za koji je program napisan. Iako se u priči opsežno spominje LGP-30, program se zapravo izvodio na RPC-4000. (Zapamtite, za ovaj novi stroj trebalo ga je prepisati.)
Oba stroja koristila su memoriju bubnja za pohranu programa. (Zabavna činjenica: grubi ekvivalent vašeg modernog tvrdog diska bila je memorija bubnja, papirna traka, bušilice ili magnetska traka!) Jedna linija elektromagnetskih glava čitala bi / upisivala podatke dok se bubanj vrtio konstantnom brzinom ispod njih. Evo vizualne reference:

Podaci su pohranjeni i preuzimani iz različitih sektora i tragova bubnja. Da bismo saznali više o formatu podataka, možemo potražiti priručnik za programiranje RPC-4000, koji je archive.org skenirao i sačuvao na mreži.
Na stranici 20 priručnika nalazimo sljedeći dijagram riječi podataka:

Riječ naredbe raščlanjuje se na:
- 5 bitova za naredbu
- 13 bita za mjesto staze / sektora operanda
- 13 bitova za trag / sektor adrese sljedeće naredbe
Bit 31 je indeksna oznaka koja je, kada je postavljena, aktivirala indeksni registar:
[Indeksni registar] omogućio je programeru da napiše programsku petlju koja je unutra koristila indeksirane upute; svaki put je na adresu te upute dodan broj u indeksnom registru, tako da se odnosi na sljedeći datum u nizu.U priči se spominje da je "indeksni bit" " bit koji se nalazio između adrese i operacijskog koda u riječi s uputama ". Ipak, gornji dijagram pokazuje da je bit oznake indeksa zapravo na bitu 31, iza naredbe i adresa. Osobno, to krečem do pogrešnog prisjećanja autora u godinama između pregledavanja koda i snimanja priče.
Srećom, to ne utječe na aspekt prelijevanja priče. Budući da je nastava riječ je se povukao u memoriju i poveća indeks malo bi i dalje trebaju biti postavljena na , kako za povećanje do prelijevanja Next adresa .
Da bismo ponovno stvorili riječi s uputama u petlji, moramo znati više o tome kako je program funkcionirao. Evo citata iz kritičnog dijela priče:
Locirao je podatke na kojima je radio pri vrhu memorije -najveća mjesta na koja bi se upute mogle obratiti -
pa bi, nakon obrade zadnjeg datuma, povećanjem adrese naredbe došlo do prelijevanja.
Prijenos će dodati operacijskom kodu jedan, mijenjajući ga u sljedeći u skupu uputa: naredbu skoka.
Svakako, sljedeća programska uputa bila je na adresi nula i program je sretno krenuo svojim putem.
Hipotetička primjena: "Pokaži mi dijelove!"
Evo potencijalne upute koja može biti uputa za skok navedena u priči:

Vidimo da su naredbeni bitovi 10111 . Ako je isključenje kontrole grana isključeno, "sljedeća je uputa navedena u polju Sljedeća adresa." Dakle, jedna od hipotetičkih situacija bila bi da nakon preljeva registar (pomoću cijevi za označavanje razdvajanja između bitnih polja) glasi:
10111 | 0000000 | 0000000 | 0
Ekstrapolirajući natrag, prije povećanja i preljeva, registar bi glasio:
10110 | 1111111 | 1111111 | 1
Jedna zanimljiva nuspojava rada s ovom implementacijom jest da upotrijebljene upute zapravo nisu važne. Svaka uputa u RPC-4000 uključuje adresu sljedeće upute. Preljev u indeksnom bitu u sljedeće polje adrese rezultirat će skokom na tu adresu bez obzira na naredbene bitove.
Epilog

Mel Kaye (na slici stoji, kraj desnice) nastavila je raditi i na kraju se povukla. Obožavatelj po imenu Anthony Cuozzo objavio je 2014. da je pokušao stupiti u kontakt s Mel:
Na kraju sam uspio stupiti u kontakt s Melom, ali sam ga, nažalost, prestrašio. To je priča za neki drugi dan ...: - / (izvor)Iz poštovanja Meline privatnosti, neću objavljivati nikakve osobne podatke i držati se programa i priče. Ako netko zna kako se Mel osjeća prema svojoj internetskoj slavi, volio bih čuti vaše mišljenje.
Nisam održavao kontakt s Melom, pa ne znam je li ikad popustio pred poplavom promjena koja je isprala tehnike programiranja od tih davno prohujalih dana. Volim misliti da nije. - Ed NatherDaljnji izvori:
- Stranica Wikipedije o Priči o Melu
- Melin priručnik za igru RPC-4000 blackjack
- Istina nikada ne smeta dobroj priči Jana Howarda Brunvanda
Dave radi na poslovima odnosa s programerima u IBM-u. Iz nekog razloga, IBM nema SDK za RPC-4000.