Die frühen Jahre des FORT

Bild

KDPV von hier genommen

Einführung


FORT ist eine einfache und natürliche Computersprache. Es hat eine bedeutende Verbreitung erhalten, wo eine hohe Effizienz benötigt wird. In den 60er Jahren ging er den Weg der Entwicklung von Universitäten über Unternehmen zu Labors. Dies ist eine Geschichte darüber, wie ein einfacher Interpreter seine Fähigkeiten erweiterte und zu einer vollwertigen Programmiersprache und einem Betriebssystem wurde.

Diese Arbeit wurde für eine Konferenz zur Geschichte der Programmiersprachen - HOPL II - geschrieben. Sie wurde letztendlich abgelehnt, wahrscheinlich aufgrund ihres Präsentationsstils.

FORT verbreitete sich in den sechziger Jahren in Amerika - an Universitäten, in Wirtschaft und Wissenschaft sowie in anderen entwickelten Sprachen. Zu dieser Zeit war ich der einzige Programmierer, der bis zum Ende dieser Zeit keinen Namen hatte. Alles, was hier beschrieben wird, wird aus dem Speicher, der fragmentarischen Dokumentation und den überlebenden Programmlisten wiederhergestellt.

FORT als Ganzes ist kaum originell, aber es ist eine einzigartige Kombination von Komponenten. Ich bin den Menschen und Organisationen dankbar, die es mir ermöglicht haben, es zu entwickeln - oft ohne es selbst zu wissen. Und ich danke Ihnen für Ihr Interesse, Sie dazu zu bringen, darüber zu lesen.

FORT ist eine einfache und natürliche Computersprache. Heute [1991 - ca. trans.] Es gilt als eine Programmiersprache von Weltklasse. Die Tatsache, dass er ohne die Unterstützung von Industrie, Universitäten oder Regierung ein solches Niveau erreicht hat, ist eine Folge seiner Effektivität, Zuverlässigkeit und Vielseitigkeit. Fort ist eine Sprache, die gewählt wird, wenn ihre Wirksamkeit wichtiger ist als die Popularität anderer Sprachen. Dies ist ein häufiger Fall in praktischen Bereichen wie Steuerungs- und Kommunikationssystemen.

Viele FORT-Organisationen und viele kleine Unternehmen bieten Systeme, Anwendungen und Dokumentationen an. In Nordamerika, Europa und Asien finden jährliche Konferenzen statt. Der Entwurf des ANSI-Standards [ANS 1991] wird in Kürze vorgestellt.

Keines der Bücher über das FORT beschreibt seinen „Geschmack“ vollständig. Ich denke, dass das Beste immer noch das erste von ihnen ist - "Starting Forth" von Leo Brodie [zum Beispiel hier verfügbar - https://www.forth.com/starting-forth/ - ca. übersetzt.] .

Das klassische FORT, über das wir sprechen, bietet dem Programmierer nur eine minimale ausreichende Unterstützung, um die Sprache zu entwickeln, die für seine Anwendung am besten geeignet ist. Es ist für eine Umgebung wie eine Workstation vorgesehen, einschließlich Tastatur, Display, Computer und Laufwerk [in jenen Tagen waren Festplattenlaufwerke häufig extern, sodass der Autor einfach die Komponenten eines minimalen Computersystems auflistet - ca. übersetzt.] .

FORT ist im Wesentlichen eine kontextfreie Textsprache. Sie können damit durch Leerzeichen getrennte „Wörter“ kombinieren, um neue „Wörter“ zu erstellen. Ungefähr 150 dieser Wörter bilden ein System, das Folgendes bietet:

         SAO  1958  
        SLAC  1961   
         RSI  1966    ,   , 
     Mohasco  1968  ,  , ,  ,
                    
        NRAO  1971   *,    

* Gestickter Code ist eine Möglichkeit, ein Programm zu kompilieren, in dem es sich um eine Reihe von Unterprogrammaufrufen handelt. Siehe https://en.wikipedia.org/wiki/Threaded_code - Ca. perev.

Ein solches System enthält 3 bis 8 Kilobyte Programmcode, der aus 10 bis 20 Seiten Quellcode zusammengestellt wurde. Es kann problemlos von einem Programmierer entwickelt werden, selbst auf einem Computer mit begrenzten Ressourcen.

Dieser Text beschreibt notwendigerweise meine Karriere; aber er wurde als "Biographie" des FORT konzipiert. Ich werde die oben aufgeführten FORT-Funktionen und die Namen der damit verbundenen „Wörter“ diskutieren. Die Bedeutung vieler „Wörter“ liegt auf der Hand. Einige erfordern eine Beschreibung, andere gehen über den Rahmen dieser Arbeit hinaus.

Der zu berücksichtigende Teil des FORT-Sprachwörterbuchs ist nachstehend aufgeführt:


     WORD  NUMBER  INTERPRET  ABORT
     HASH  FIND  '  FORGET
     BASE  OCTAL  DECIMAL  HEX
     LOAD  EXIT  EXECUTE  (
 (  )
     KEY  EXPECT
     EMIT  CR  SPACE  SPACES  DIGIT  TYPE  DUMP
 
     DUP  DROP  SWAP  OVER
     +  -  *  /  MOD  NEGATE
     ABS  MAX  MIN
     AND  OR  XOR  NOT
     0<  0=  =
     @  !  +!  C@  C!
     SQRT  SIN.COS  ATAN  EXP  LOG
 
     :  ;  PUSH  POP  I
 (   )
     BLOCK  UPDATE  FLUSH  BUFFER  PREV  OLDEST

     CREATE  ALLOT  ,  SMUDGE
     VARIABLE  CONSTANT
     [  ]  LITERAL  ."  COMPILE
     BEGIN  UNTIL  AGAIN  WHILE  REPEAT
     DO  LOOP  +LOOP  IF  ELSE  THEN


MIT, SAO, 1958


Die aufregendste Zeit war im Oktober 1957, als Sputnik gestartet wurde [Sputnik-1-Satellit - ca. übersetzt.] . Ich war ein Student im zweiten Jahr am MIT und arbeitete Teilzeit bei SAO (Smithsonian Astrophysical Observatory, bis zu 16 Silben, ein Albtraum) in Harvard. Das Observatorium war für die optische Verfolgung von Satelliten verantwortlich - visuelle Beobachtungen mit dem Mond [dh Projekt Moonwatch - https://en.wikipedia.org/wiki/Operation_Moonwatch - ca. transl.] und Satelliten-Tracking-Kameras [Baker-Noon-Kameras - https://en.wikipedia.org/wiki/Schmidt_camera#Baker-Nunn - ca. perev.]. Überrascht stellten sie Studenten ein, um Flugbahnen auf Friden-Desktop-Taschenrechnern herauszufinden. John Gaustad erzählte mir vom IBM EDPM 704 am MIT und lieh mir sein FORTRAN II-Handbuch. Mein erstes Programm, Ephemeriden 4, ließ mich arbeitslos.

Jetzt, bereits als Programmierer, arbeitete ich mit George Veis zusammen, um seine Methode der kleinsten Quadrate anzuwenden, um die Parameter von Umlaufbahnen, stationären Positionen und letztendlich die Form der Erde zu bestimmen. Natürlich dauerte dieser „Teilzeitjob“ mindestens 40 Stunden, und dennoch war mein Diplom abgedeckt.

John McCarthy unterrichtete am MIT einen ausgezeichneten LISP-Kurs. Dieser Kurs war meine Einführung in die Rekursion und die wunderbare Vielfalt der Programmiersprachen. Wil Baden bemerkte, dass LISP für Lambda-Kalkül dasselbe ist wie FORT für die Postfix-Notation Lukasewcleicz [Lukashevichs Notation, auch als umgekehrte polnische Notation bekannt - ca. übersetzt.] .

Das U-Boot war auch relevant, mit seiner seltsamen Analyse von rechts nach links. Obwohl ich ihn bewundere und seine Bediener imitiere, bin ich nicht davon überzeugt, dass sie das optimale Set bilden.

Die Programmierung in den fünfziger Jahren war härter als heute. Mein Quellcode nahm 2 Lochkarten auf. Um sie durch das Auto zu bringen, musste ich basteln, und im Grunde habe ich es selbst gemacht. Die Montage dauerte eine halbe Stunde (genau wie in C), aber eine begrenzte Computerzeit bedeutete nur einen Start pro Tag, außer vielleicht für die dritte Schicht.

Und so schrieb ich einen einfachen Interpreter, der Karten mit Eingabedaten liest und das Programm steuert. Er kontrollierte auch das Rechnen. Für jeden der fünf Parameter der Umlaufbahn gab es empirische Gleichungen zur Berücksichtigung der atmosphärischen Drift und Abweichungen der Erdform von der Kugel. Auf diese Weise konnte ich verschiedene Gleichungen für mehrere Satelliten erstellen, ohne das Programm neu zu kompilieren.

Faktoren wie P2 (Polynom zweiten Grades) und S (Sinus) waren an diesen Gleichungen beteiligt. Die meiste Zeit wurde 36-Bit-Gleitkomma-Computing in Anspruch genommen, sodass der Overhead gering war. Der Datenstapel wurde nicht benötigt, aber ich wusste wahrscheinlich nichts davon.

Und so begann die Geschichte des FORT-Dolmetschers - aus den Worten

WORD  NUMBER  INTERPRET  ABORT


Sie wurden noch nicht in Worten aufgezeichnet, da es sich um Betreibernummern handelte.

INTERPRET verwendet WORD , um durch Leerzeichen getrennte Wörter zu lesen, und NUMBER , um Wörter [Zahlen in einem Textdatensatz - ca. übersetzen.] in binärer Form (in diesem Fall mit einem festen Punkt). Eine solche Eingabe im freien Format war ungewöhnlich, aber effizienter (kleiner und schneller) und zuverlässiger. Eingaben im Fortran-Stil wurden in bestimmte Spalten formatiert, und Tippfehler verursachten zahlreiche Verzögerungen.

Dieser Interpreter verwendete das in FORTRAN codierte IF ... ELSE IF-Konstrukt, um jedem Zeichen zu entsprechen. Die gesamte Fehlerbehandlung unterbrach lediglich die Ausführung des Programms. Damals wie heute das Wort ABORTFragen Sie den Benutzer, was zu tun ist. Da die Eingabekarten in der Lesereihenfolge nummeriert waren, konnten Sie herausfinden, wo der Fehler lag.

Stanford, SLAC, 1961


1961 kam ich nach Stanford, um Mathematik zu studieren. Obwohl Stanford seine eigene Informatikabteilung gründete, interessierte ich mich mehr für Computer. Ich war beeindruckt, dass sie (es wagen?) Ihren eigenen ALGOL-Compiler schreiben konnten. Und doch brachte mich das Schicksal zum Burroughs B5500-Computer. Ich stellte mich erneut ein, um Teilzeit bei SLAC (Stanford Linear Accelerator, 10 Silben) zu arbeiten und Code zu schreiben, um die Strahlretention in einem zukünftigen drei Kilometer langen Elektronenbeschleuniger zu optimieren. Es war eine natürliche Anwendung der Methode der kleinsten Quadrate (in der ich Erfahrung hatte) auf den Phasenraum. Hal Butler war für unsere Gruppe verantwortlich und unser TRANSPORT-Programm war ein Erfolg.

Eine weitere Anwendung der Methode der kleinsten Quadrate war das CURVE-Programm, das 1964 auf ALGOL geschrieben wurde. Es war ein universelles Programm zur nichtlinearen Datenauswahl mit Differentialkorrektur. Die statistische Genauigkeit lieferte eine detaillierte Analyse der Konsistenz des Modells und der experimentellen Daten.

Das Datenformat und die Modellgleichungen wurden interpretiert und ein Stapel wurde verwendet, um Berechnungen zu erleichtern. CURVE war ein beeindruckender Vorläufer von FORT. Um die Möglichkeit zu bieten, nicht mit einfachen Gleichungen, sondern mit viel ausgefeilteren Modellen zu arbeiten, führte sie die folgenden Wörter ein:

     +  -  *  NEGATE
     IF  ELSE  THEN  <
     DUP  DROP  SWAP
     :  ;  VARIABLE  !  (
     SIN  ATAN  EXP  LOG


Die Schreibweise war etwas anders:

     NEGATE  -    MINUS
       DROP  -    ;
       SWAP  -    .
          !  -    <
   VARIABLE  -    DECLARE
          ;  -    END
     ( ...)  -    COMMENT ...;


Um ein sechsstelliges Eingabewort zu definieren (analog zu LISP ATOM genannt), verwendete der Interpreter IF ... ELSE IF . DUP , DROP und SWAP waren Maschinenanweisungen; Ich war überrascht, dass sie anders geschrieben waren. Das Wort " : " (Doppelpunkt) wurde aus dem Etikettenformat in ALGOL übernommen und "gespiegelt", um von links nach rechts zu analysieren (um zu verhindern, dass der Interpreter undefinierte Wörter erkennt):

     ALGOL - LABEL:
     CURVE - : LABEL

Tatsächlich markierte der Doppelpunkt die Position in der Eingabezeile, die später interpretiert werden sollte. Die Interpretation wurde durch das Wort „ ; " (Semikolon). Eine Version des Doppelpunkts hieß DEFINE .

Plattenbetreiber " ! "(Ausrufezeichen) erschien im Zusammenhang mit VARIABLE ; Das Lesen von „ @ “ erfolgte jedoch automatisch. Bitte beachten Sie, dass der Code so kompliziert geworden ist, dass Kommentare erforderlich sind. Die einst kritisierte Postfix-Bedingung begann von hier aus:

     ALGOL - IF expression THEN true ELSE false
     CURVE - stack IF true ELSE false THEN

Wenn sich oben im Stapel ein Wert ungleich Null befand, wurde dieser als boolescher wahrer Wert (wahr) wahrgenommen. DANN lieferte es ein einzigartiges Ende, dessen Abwesenheit mich in ALGOL immer verwirrte. Ähnliche Ausdrücke wurden wie folgt interpretiert: IF suchte die Eingabe nach ELSE oder THEN ab . Das Wort < führte die Konvention ein, dass eine Beziehung einen booleschen Wert auf dem Stapel hinterlässt - 1, wenn wahr, und 0, wenn falsch. Transzendentale Funktionen sind natürlich Aufrufe von Bibliotheksroutinen.

Auf freiem Brot


Ich verließ Stanford 1965, um freiberuflicher Computerprogrammierer in New York zu werden. Dies war nicht ungewöhnlich und ich fand Arbeitsprogrammierung in FORTRAN, ALGOL, Jovial, PL / I und verschiedenen Assemblern. Ich schleppte mich buchstäblich mit meinem Lochkartenpaket herum und programmierte es nach Bedarf neu. Mini-Computer erschienen und mit ihnen - Terminals. Der Interpreter war perfekt für die Teletyp-Eingabe und erwarb bald Code für die Arbeit mit der Ausgabe. Also fanden wir die Worte:

     KEY  EXPECT
     EMIT  CR  SPACE  SPACES  DIGIT  TYPE

EXPECT ist eine Schleife, die KEY aufruft , um Tastenanschläge zu lesen. TYPE ist eine Schleife, die EMIT aufruft , um ein Zeichen anzuzeigen.

Mit dem Aufkommen des Teletyps ist es Zeit für Lochstreifen und die unangenehmsten Programme, die Sie sich vorstellen können - viele Stunden Bearbeiten, Stanzen, Laden, Zusammenstellen, Drucken, Herunterladen, Testen und dann wieder. Ich erinnere mich an einen schrecklichen Sonntag in einem Wolkenkratzer in Manhattan, als ich kein Klebeband finden konnte (nichts anderes half) und verfluchte, dass "es einen besseren Weg geben muss".

Ich habe einen guten Job für Bob Davis bei Realtime Systems, Inc (RSI) gemacht. Ich habe 5500 MCP gründlich studiert - genug, um den Time-Sharing-Service (Arbeiten mit Remote-Terminals) zu unterstützen, und habe auch einen Übersetzer von FORTRAN nach ALGOL und Dienstprogramme zur Dateibearbeitung geschrieben. Der Übersetzer zeigte mir den Wert von Leerzeichen zwischen Wörtern, die FORTRAN nicht benötigt.

Der Interpreter unterschied Wörter immer noch nur durch die ersten 6 Zeichen (da das Datenwort im Burroughs B5500 48 Bit war). Die Wörter LIST EDIT BEGIN AGAIN EXIT erschienen .

Die Wörter BEGIN ... AGAIN wurden als START ... REPEAT geschrieben und dienten als "Klammern" für die Bearbeitungsbefehle T TYP I INSERT D DELETE F FINDspäter im NRAO-Editor verwendet.

Das Wort FIELD wurde in Mohascos Forth DBMS-Stil verwendet. Daher eines der Markenzeichen von FORT. Die Regel ist, dass das FORT jede Eingabezeile durch Hinzufügen von OK bestätigt, wenn die Interpretation abgeschlossen ist. Dies kann problematisch sein, da, wenn die Eingabe mit einem CR-Zeichen endet, ein Leerzeichen angezeigt werden sollte, dann OK und CR zuletzt. In RSI, OK, befand ich mich in der nächsten Zeile, gab aber dennoch eine freundliche Bestätigung über eine erschreckende Kommunikationsleitung ab [ein Witz des Autors, der darauf beruhte, dass in jenen Jahren die Arbeit von Computern mit Kommunikationsleitungen ungewöhnlich war; Für den modernen Leser hat der Witz bereits seine Relevanz verloren und klingt zumindest seltsam - ca. übersetzt.] :

     56 INSERT ALGOL IS VERY ADAPTABLE
     OK


Diese Postfix-Notation schlägt die Verwendung eines Datenstapels vor, seine ausreichende Tiefe beträgt jedoch nur eine.

Mohasco, 1968


1968 arbeitete ich als Programmierer bei der Handelsfirma Mohasco Industries, Inc in Amsterdam, New York. Es war ein großes Unternehmen, das Haushaltswaren herstellte - Teppiche und Möbel. Ich habe mit Geoff Leach bei RSI zusammengearbeitet und er hat mich überzeugt, ihn in den nördlichen Teil des Bundesstaates zu verlegen. Ich habe gerade geheiratet und in Amsterdam herrschte eine wundervolle Atmosphäre einer kleinen Stadt im Gegensatz zu New York.

Ich habe meinen Code auf COBOL umgeschrieben und herausgefunden, was Business-Software wirklich ist. Bob Raiko war für die Verarbeitung von Unternehmensdaten verantwortlich und gab mir zwei verwandte Projekte.

Er mietete einen IBM 1130-Mini-Computer mit einem 2250-Grafikdisplay. Ziel war es, herauszufinden, ob Computergrafiken zur Erstellung gemusterter Teppiche beitragen können. Die Antwort lautete "Kann ohne Farbunterstützung nicht helfen", und die Option 1130 war nicht mehr verfügbar.

Zu dieser Zeit hatte ich den neuesten Minicomputer: 16-Bit-Prozessor, 8 KB RAM, Festplattenlaufwerk (das erste in meinem Leben), Tastatur, Drucker, Kartenleser und Locher, FORTRAN-Compiler. Der Reader und der Punch waren eine Sicherungsoption für den Fall eines Festplattenausfalls. Ich habe meinen Interpreter erneut portiert (zurück zu FORTRAN) und Cross-Assembler hinzugefügt, um mit 2250 zu arbeiten.

Das System war fantastisch. Sie konnte animierte dreidimensionale Bilder zeichnen, während IBM kaum statische flache Bilder zeichnen konnte. Da dies meine erste Echtzeitgrafik war, schrieb ich den Code für Spacewar, das allererste Videospiel. Ich habe auch mein FORT-Schachprogramm umgeschrieben, das ursprünglich in ALGOL geschrieben wurde, und war sehr beeindruckt, wie viel einfacher es wurde.

Die Datei mit dem Interpreter hieß FORTH, was die Software der vierten (nächsten) Generation, VIERTE, bedeutete. Der Name musste jedoch gekürzt werden, da das Betriebssystem die Dateinamen auf 5 Zeichen beschränkte.

Diese Programmierumgebung für den 2250 war FORTRAN weit überlegen, daher habe ich den 2250 Cross Assembler auf den 1130 Compiler erweitert. Es gab viele neue Wörter:

     DO  LOOP  UNTIL
     BLOCK  LOAD  UPDATE  FLUSH
     BASE  CONTEXT  STATE  INTERPRET  DUMP
     CREATE  CODE  ;CODE  CONSTANT  SMUDGE
     @  OVER  AND  OR  NOT  0=  0< 


Ihre Schreibweise war immer noch anders [vom Standard für FORT - ca. übersetzt.] :

      LOOP     CONTINUE
     UNTIL -      END
     BLOCK -      GET
      LOAD -      READ
      TYPE -      SEND
 INTERPRET -      QUERY
    CREATE -      ENTER
      CODE -       


Dies war die einzige Anwendung, die ich jemals für ein Cent-Symbol gefunden habe.

Der Zähler und die Schleifengrenze wurden im Datenstapel gespeichert. DO und CONTINUE sind dank FORTRAN entstanden.

BLOCK kontrollierte die Anzahl der Puffer, um den Zugriff auf die Festplatte zu minimieren. LOAD liest den Quellcode aus einem Block mit einer Größe von 1024 Bytes. Die Größe von 1024 Bytes wurde basierend auf der Größe des Blocks auf der Festplatte ausgewählt und war erfolgreich. Mit dem Wort UPDATE konnten Sie einen Block im Speicher markieren und später auf die Festplatte leeren, wenn Sie den Puffer freigeben müssen (oder mit dem Wort FLUSH ). Es implementiert eine Art virtuellen Speicher und wird während Schreibvorgängen implizit aufgerufen.

Das Wort BASEDarf mit Oktal-, Hexadezimal- und Dezimalzahlen arbeiten. Das Wort CONTEXT war der erste Hinweis auf Wörterbücher und diente dazu, die Wörter des Herausgebers zu trennen. Das Wort STATE setzt Kompilierungs- und Interpretationsmodi. Während der Kompilierung wurden die Anzahl der Zeichen und die ersten 3 Zeichen des Wortes kompiliert [in Kennung kompiliert - ca. transl.] zur späteren Interpretation. Seltsamerweise konnten Wörter durch Sonderzeichen unterbrochen werden - aber dies wurde bald aufgegeben. Der Leseoperator ( @ ) hatte viele Optionen, da das Lesen von Variablen, Arrays und der Festplatte unterschieden werden musste. DUMP darf zum Debuggen in den Speicher graben.

Vor allem aber gab es jetzt ein Wörterbuch. Der Interpreter-Code nahm nun einen Namen an und suchte ihn in einer verknüpften Liste. Das Wort CREATE hat einen klassischen Wortschatzeintrag erstellt:

   *       
   *     3  *
   *  ,   
   *  

* FORT-Bezeichner sind in 32 Bit in der folgenden Form gepackt: 1 Byte - die Anzahl der Zeichen im Wort, die restlichen 3 Bytes - die ersten 3 Zeichen des Wortes (Husaren, sei still!) - ca. perev.

Das Codefeld war eine wichtige Neuerung - sobald das Wort gefunden wurde, blieb nur ein indirekter Übergang vom Interpreter-Overhead übrig. Ich habe die Bedeutung der Anzahl der Zeichen bei der Unterscheidung von Wörtern von Compiler-Entwicklern in Stanford kennengelernt.

Das Wort CODE hat eine wichtige Wortklasse geschaffen. Das Parameterfeld enthielt Maschinenanweisungen. So war es nun möglich, jedes Wort innerhalb der Fähigkeiten eines Computers zu erstellen. Das Wort " ; CODE " definierte den Code, der für die neue Wortklasse ausgeführt werden sollte, und führte sogenannte Objekte ein.

WortSMUDGE vermied eine Rekursion bei der Interpretation von Definitionen. Aufgrund der Anzeige des Wörterbuchs in der Reihenfolge von den neuesten Definitionen bis zu den ältesten war eine unerwünschte Rekursion häufig.

Schließlich erschien ein Rückgabestapel. Zuvor konnten die Definitionen nicht verschachtelt werden oder mussten die Rücksprungadresse im Datenstapel speichern. Alles in allem war es eine Zeit großer Innovationen in der (zeitweiligen) Entwicklung des Forts.

Geoff Leach und ich haben 1970 den ersten Artikel über das FORT (in Form eines internen Mohasco-Berichts) geschrieben. Sie hat heute nicht an Relevanz verloren.

1970 bestellte Bob den Univac 1108. Es war ein ehrgeiziges Projekt, ein Standleitungsnetz für ein Auftragserfassungssystem zu unterstützen. Ich habe einen Berichtsgenerator für FORT geschrieben, war mir aber sicher, dass ich einen Code für die Eingabe von Bestellungen schreiben kann. Um das Vertrauen in das FORT zu erhöhen, habe ich es auf 5500 portiert (als separates Programm!). Aber die Unternehmenssoftware war COBOL. Überraschenderweise wurde ein Kompromiss erzielt, indem das FORT-System auf 1108 gesetzt wurde, so dass es mit COBOL-Modulen für die Transaktionsverarbeitung interagierte.

Ich erinnere mich sehr gut an die Reise nach Schenectady in diesem Winter, um mir in der dritten Schicht um 1107 Zeit zu nehmen. In meinem Zimmer gab es keinen Boden und kein Fenster, und dies war eine nächtliche Überlebensübung. Das System erwies sich jedoch als unglaublich erfolgreich und beeindruckte sogar Univac (Les Sharp war an der Integration in das Projekt beteiligt). Das entscheidende Kriterium war die Reaktionszeit, aber ich war auch entschlossen, das Projekt in einer für die Wartung geeigneten Form zu halten (dh es klein und einfach zu halten). Leider zwang der wirtschaftliche Abschwung das Management, 1108 abzusagen. Ich denke immer noch, dass es eine schlechte Entscheidung war. Ich war der erste, der zurücktrat.

Fort für 1108 müsste in Assembler geschrieben werden. Es pufferte Eingabe- und Ausgabenachrichten und verteilte den Prozessor auf Aufgaben, die jede Zeile verarbeiteten. Hier haben Sie das klassische Betriebssystem. Er könnte aber auch die Eingabezeilen analysieren und (mit dem Wort PERFORM ) die entsprechenden COBOL-Module ausführen . Er überwachte die Puffer der Speichertrommel und war am Packen und Auspacken von Aufzeichnungen beteiligt. Die Wörter

     BUFFER  PREV  OLDEST
     TASK  ACTIVATE  GET  RELEASE


erschien gerade dann.

BUFFER hat die Festplatte nicht gelesen, wenn bekannt war, dass der angeforderte Block leer ist. PREV und OLDEST sind Systemvariablen, die es ermöglichen, die Pufferverwaltung auf der Basis der am wenigsten verwendeten zu implementieren. TASK hat die Aufgabe beim Booten definiert und ACTIVATE hat sie bei Bedarf ausgeführt. GET und RELEASE kontrollierten gemeinsam genutzte Ressourcen (Speichertrommel, Drucker). PAUSE ist das Wort, mit dem die Aufgabe den Prozessor freigibt . Es war in allen E / A-Vorgängen enthalten und für den Transaktionscode unsichtbar. Es ermöglichte einen einfachen zyklischen Planungsalgorithmus, der das Blockieren vermeidet.

Nach der Aussage[wahrscheinlich über Entlassung - ca. trans.] Ich schrieb ein wütendes Gedicht und ein Buch, das nie veröffentlicht wurde. Es wurde beschrieben, wie FORT programmiert werden kann, und es wurden Einfachheit und Innovation gefördert. Es beschreibt auch die Technik des indirekten genähten Codes, wurde jedoch zum ersten Mal in NRAO implementiert.

Ich habe am Konzept der Metasprache gearbeitet - einer Sprache, die von einer Sprache spricht. Fort konnte nun den Assembler interpretieren, den der Compiler zusammengestellt hatte und der den Interpreter kompilierte. Am Ende entschied ich, dass die Terminologie nicht funktionierte, aber der Begriff „Metakompilierung“ zum Neukompilieren des FORT selbst wurde immer noch verwendet.

NRAO, 1971


George Conant bot mir eine Stelle im NRAO (National Radio Astronomy Observatory, 22 Silben) an. Ich kannte ihn bei CAO und er mochte Ephemeriden 4. Wir zogen nach Charlottesville, Virginia, und verbrachten den Sommer in Tucson, Arizona, als das Kitt Peak-Radioteleskop für Wartungsarbeiten zur Verfügung stand.

Das Projekt umfasste die Programmierung des Honeywell 316-Minicomputers zur Steuerung einer neuen Filterbank für ein 36-Zoll-Millimeterwellen-Radioteleskop. Er hatte ein neunspuriges Band und einen Tektronix-Röhrenanschluss mit einem „Speicher“ [wahrscheinlich bezogen auf Nachleuchtröhren oder Potentioskope - ca. perev.]. George gab mir völlige Freiheit bei der Entwicklung des Systems, aber er war mit dem Ergebnis nicht zufrieden. In NRAO benutzten alle FORTRAN, und jetzt erschien ich mit meinem FORT. Er hatte Recht, dass Organisationsstandards eine gemeinsame Programmiersprache vorsehen sollten. Andere Programmierer wollen jetzt auch ihre eigenen Sprachen.

Wie dem auch sei, ich habe den FORT-Code in Assembler auf dem IBM 360/50-Mainframe geschrieben. Dann habe ich es unter 316 neu kompiliert. Dann habe ich es nativ auf 316 kompiliert (obwohl ich ein 360-Terminal hatte, war die Antwortzeit schrecklich). Sobald das System verfügbar war, war es einfach. Es gab zwei Beobachtungsmodi: Allfrequenz- und Spektrallinien. Die Spektrallinien waren am interessantesten, da ich die Spektren beim Sammeln der Daten anzeigen und die Formen der Linien mit der Methode der kleinsten Quadrate glätten konnte.

In Tucson, wo Ned Conklin leitete, wurde das System gut aufgenommen. Dies war ein weiterer Schritt, um die Datenmenge sofort nach der Erfassung zu reduzieren. Astronomen begannen damit, interstellare Moleküle zu erkennen und abzubilden, sobald dies zu einem modischen Forschungsgebiet wurde.

Bess Rather wurde engagiert, um das Observatorium zu unterstützen. Zuerst musste sie das FORT-System studieren und es dann mit minimaler Hilfe meinerseits erklären und dokumentieren. Im folgenden Jahr habe ich den DDP-116 neu programmiert, um die Teleskopausrichtung zu optimieren. Dann ersetzten Bess und ich den DDP-116 und Honeywell 316 durch den DEC PDP-11.

Ein solcher Ersatz wurde durch die Entwicklung von indirekt genähtem Code möglich. Dies war eine natürliche Entwicklung meiner Arbeit bei Mohasco, obwohl ich später erfuhr, dass DEC in einem seiner Compiler direkt genähten Code verwendete. Anstatt jedes Mal die gesamte Definition zu kompilieren, nahm der Compiler einfach die Adresse jedes verwendeten Wortes aus dem Wörterbuch. Diese Leistungsverbesserung für jede Verbindung erforderte nur zwei Bytes, und der Interpreter konnte den Code viel schneller ausführen. Auf DEC PDP-11 war dieser Interpreter im Wesentlichen ein Zwei-Wort-Makro:

: NEXT IP )+ W MOV W )+ ) JMP ;


Jetzt ist das FORT abgeschlossen. Und das wusste ich. Ich konnte Code schneller schreiben und er war effizienter und zuverlässiger. Darüber hinaus war es tragbar. Ich programmierte den DDP-116 weiter, der sich auf das 300-Zoll-Green-Bank-Teleskop konzentriert, und den HP mini, der mit einer sehr langen Basis-Radioastronomie (VLBI) begann. George gab mir ModComp und ich programmierte die Fourier-Transformation für Interferometrie und Pulsarsuche (auf 64K-Datensätzen). Ich habe sogar gezeigt, dass die komplexe Multiplikation mit IBM 360 in FORT 20% schneller ist als in Assembler.

Die NRAO wusste zu schätzen, was ich geschrieben habe. Sie hatten eine Vereinbarung mit einem Beratungsunternehmen zur Identifizierung von Sicherheitentechnologien. Das Problem der FORT-Patentierung wird seit geraumer Zeit diskutiert. Da Softwarepatente jedoch widersprüchlich waren und unter Einbeziehung des Obersten Gerichtshofs gelöst werden konnten, weigerte sich die NRAO, sich mit diesem Problem zu befassen. Infolgedessen kehrten die Urheberrechte zu mir zurück. Ich denke nicht, dass Ideen patentiert werden sollten. Rückblickend sollte man zustimmen, dass die einzige Chance von FORT darin besteht, gemeinfrei zu bleiben. Und dort blühte er.

Der genähte Code hat strukturelle Wörter geändert (z. B. DO LOOP IF THEN ). Sie haben eine elegante Implementierung mit Adressen im Datenstapel zur Kompilierungszeit.

Jetzt hatte jede Implementierung des Forts einen Assembler für die Architektur seines Computers. Er verwendete Opcodes in Postfix-Notation und generierte Adressen im Datenstapel mit FORT-ähnlichen strukturierten Wörtern zum Verzweigen. Assembler-Mnemoniken wurden als Wortklassen mit CODE definiert . Es war möglich, dies alles an einem Tag zu kodieren.

Auch ungewöhnliche Rechenoperatoren haben sich bewährt.

M*  */  /MOD  SQRT  SIN.COS  ATAN  EXP  LOG


M * ist die übliche Hardwaremultiplikation von zwei 16-Bit-Zahlen zu einem 32-Bit-Produkt (Argumente natürlich im Datenstapel). Es folgt * / mit Division, um die Brucharithmetik zu implementieren. / MOD gibt sowohl den Quotienten als auch den Rest zurück und ist ideal zum Suchen von Einträgen in einer Datei. SQRT gibt ein 16-Bit-Ergebnis aus einem 32-Bit-Argument zurück. SIN.COS gibt sofort sowohl Sinus als auch Cosinus zurück, was für Vektor- und komplexe Arithmetik (FFT) nützlich ist. ATAN ist die inverse Operation und weist keine Quadrantenmehrdeutigkeiten auf. EXP und LOG werden in Basis 2 berechnet.

In diesen Funktionen wurde eine Festkomma-Arithmetik verwendet - 14 oder 30 Bit rechts vom Binärpunkt für die Trigonometrie, 10 für Logarithmen. Dies ist zu einem Markenzeichen von FORT geworden, da eine solche Arithmetik einfacher, schneller und genauer als Gleitkomma ist. Bei Bedarf können Sie jedoch problemlos Hardware und Software mit einem Gleitkomma implementieren.

Ich begrüße die unschätzbare Arbeit von Hart, der Tabellen mit Approximationen von Funktionen mit unterschiedlicher Genauigkeit zusammengestellt hat. Sie befreiten Anwendungsprogrammierer von den Einschränkungen bestehender Bibliotheken.

Das Wort DOES> erschien (es wurde geschrieben als ; :) . Es definierte eine Klasse von Wörtern (wie ; CODE), wobei festgelegt wird, dass die Definition interpretiert werden sollte, wenn auf ein Wort Bezug genommen wird. Die Implementierung war schwierig, erwies sich jedoch als besonders nützlich für die Definition von Operationscodes.

Ich konnte Charlottesville jedoch nicht davon überzeugen, dass FORT zu ihnen passt. Ich durfte VLA nicht programmieren. In jeder Gruppe von Programmierern lieben 25% Fort und 25% hassen es. Streitigkeiten sind hart und Kompromisse werden selten erzielt. Infolgedessen schlossen sich die ersten 25% zusammen und gründeten Forth, Inc. Aber das ist eine andere Geschichte.

Moral


Die Geschichte von FORT hat eine gewisse Moral: Ein hartnäckiger junger Programmierer kämpft gegen Gleichgültigkeit, um die Wahrheit zu entdecken und seine leidenden Kameraden zu retten. Es wird besser: Beobachten Sie, wie Forth, Inc. im französischen Bankensystem gegen IBM antritt.

Ich weiß, dass FORT immer noch die beste Programmiersprache ist. Ich freue mich über seinen Erfolg, insbesondere auf dem ultra-konservativen Gebiet der künstlichen Intelligenz [Rückruf, 1991 - ca. übersetzt.] .

Ich mache mir Sorgen, dass diejenigen, die nicht verstehen sollten, wie das FORT ihre eigene Beschreibung der idealen Programmiersprache verkörpert.

Aber ich recherchiere immer noch ohne Lizenz. FORT hat zu einer Architektur geführt, die eine erstaunliche Kombination von Hardware und Software verspricht. Sowie eine weitere neue Programmierumgebung.

All Articles