Certo. Prima che accadessero le cose Altair / MITS / SWTPC / Kim / Sinclair / Pet / RadioScrap / OSI / Apple, c'era una deliziosa piccola macchina conosciuta come IBM 5100 . Aveva BASIC in ROM , una grande unità a cassetta (o due), 8 KB di memoria. uno schermo a 24 righe e una stampante, il tutto per un misero USD 10.000 - un ordine di grandezza più economico rispetto al tipico mini. Originariamente costruito per gli scienziati ( APL in ROM era anche un'opzione), ma poi alcuni tipi di contabilità l'hanno scoperto , e ha iniziato una mania: ogni piccola impresa ne voleva uno. Con software personalizzato, ovviamente. Il 5110 ha seguito quello, con le unità a nastro sostituite da 8 "floppy.
Qualunque software commerciale? Galoons .
Puoi dire la contabilità generale, la busta paga, i conti da pagare, i conti creditori, il controllo dell'inventario e la fatturazione? Sono stato lì, fatto - in BASIC. Bollette, inventario di auto nuove e usate, ritiro di camion della spazzatura e pianificazione della consegna delle bevande? Sì - BASIC. Vuoi monitorare minerale di ferro dalle miniere ai treni sulle navi ... BASIC. Tutto quello che non era stato sollevato era probabilmente finito in BASIC. Commercialmente, intendo. (Poiché RPG II non conta; -).
Come si è aggirato il limite?
Bene, la prima cosa che hai fatto è stata inviare il cliente a IBM per avere più memoria, perché chi potrebbe scrivere qualcosa di serio in 8 KB? Hai semplicemente avuto per avere 16. E due unità nastro, se possibile, perché la teoria degli automi a parte, unire l'ordinamento su un singolo nastro è, beh, un po 'lento.
Oh, mi dispiace - intendevi le limitazioni di BASIC.
Bene, dovevi gestire le tue risorse con molta attenzione - cose come numeri di riga - perché non volevi esaurirli; il vero dolore nel dietro di dover rinumerare un'intera sezione, e digitare tutto di nuovo, senza perdere accidentalmente una linea o due di codice.
Nah - sto solo scherzando. In realtà non abbiamo avuto questo problema fino a quando micro - er, i computer di casa si sono presentati, con un interprete BASIC che non poteva rinumerare da solo.
Abbiamo anche usato la modularità - dove hai chiamato un nuovo programma, lo hai eseguito fino a quando non si è chiuso e tornato al programma chiamante. Un gosub su steroidi (perché hai più memoria da usare), ma molto più lento (perché ci è voluto un po 'perché la macchina trovasse il programma sul nastro e lo caricasse, quindi riavvolge e trova il programma originale e lo carica indietro...). Molto simile a un fork ed exec, ma senza fork, solo migliore perché l'intero spazio di memoria era condiviso.
Anche l'uso rigoroso delle convenzioni ha aiutato - sai, come "DEVI sempre indirizzare un GOSUB su una riga di commento che dice cosa fa questa routine, e DOVREBBE fare lo stesso per un GOTO quando possibile. Roba del genere. e programmazione strutturata , un po 'più tardi - "per convenzione" di nuovo.
Alcuni sono persino andati un po 'all'estremo: OAOO , YAGNI , TSTTCPW , abbinamento, refactor senza pietà, quel genere di cose. Non con quei nomi, ovviamente. (Vedi anche: Ecclesiastes; -)
I giorni di gloria.