Les premières années du FORT

image

KDPV pris d'ici

introduction


FORT est un langage informatique simple et naturel. Il a reçu une distribution importante là où une efficacité élevée est nécessaire. Dans les années 60, il a suivi la voie du développement des universités aux entreprises en passant par les laboratoires. Il s'agit d'une histoire sur la façon dont un simple interprète a étendu ses capacités et est devenu un langage de programmation et un système d'exploitation à part entière.

Ce travail a été écrit pour une conférence sur l'histoire des langages de programmation - HOPL II. Elle a finalement été rejetée, probablement en raison de son style de présentation.

FORT s'est répandu dans les années 60 en Amérique - dans les universités, les affaires et les sciences, ainsi que dans d'autres langues développées. À cette époque, j'étais le seul programmeur dessus, jusqu'à la toute fin de cette période, il n'avait pas de nom. Tout ce qui est décrit ici est récupéré de la mémoire, de la documentation fragmentaire et des listes de programmes survivantes.

FORT dans son ensemble n'est guère original, mais c'est une combinaison unique de composants. Je suis reconnaissant aux personnes et organisations qui m'ont permis de le développer - souvent sans le savoir moi-même. Et je vous remercie de votre intérêt à vous faire lire à ce sujet.

FORT est un langage informatique simple et naturel. Aujourd'hui [1991 - env. trans.] Il est considéré comme un langage de programmation de classe mondiale. Le fait qu'il ait atteint un tel niveau sans le soutien de l'industrie, des universités ou du gouvernement est une conséquence de son efficacité, de sa fiabilité et de sa polyvalence. Le fort est une langue qui est choisie lorsque son efficacité est plus importante que la popularité des autres langues. C'est un cas fréquent dans des domaines pratiques tels que les systèmes de contrôle et de communication.

De nombreuses organisations FORT et de nombreuses petites entreprises proposent des systèmes, des applications et de la documentation. En Amérique du Nord, en Europe et en Asie, des conférences annuelles ont lieu. Le projet de norme ANSI [ANS 1991] sera présenté prochainement.

Aucun des livres sur le FORT ne décrit pleinement son «goût». Je pense que le meilleur est toujours le premier d'entre eux - «Starting Forth» de Leo Brodie [disponible, par exemple, ici - https://www.forth.com/starting-forth/ - env. trad.] .

Le FORT classique dont nous discutons fournit un soutien minimal suffisant au programmeur pour développer le langage le mieux adapté à son application. Il est destiné à un environnement tel qu'un poste de travail, y compris un clavier, un écran, un ordinateur et un lecteur de disque [à cette époque, les lecteurs de disque étaient souvent externes, donc l'auteur énumère simplement les composants d'un système informatique minimal - env. trad.] .

FORT est essentiellement un langage de texte sans contexte. Il vous permet de combiner des «mots», séparés par des espaces, pour construire de nouveaux «mots». Environ 150 de ces mots constituent un système qui fournit:

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

* Le code brodé est un moyen de compiler un programme dans lequel il s'agit d'un tableau d'appels de sous-programme, voir https://en.wikipedia.org/wiki/Threaded_code - env. perev.

Un tel système contient de 3 à 8 kilo-octets de code de programme compilé à partir de 10-20 pages de code source. Il peut facilement être développé par un seul programmeur, même sur un ordinateur aux ressources limitées.

Ce texte décrit nécessairement ma carrière; mais il a été conçu comme une «biographie» du FORT. Je vais discuter des fonctionnalités FORT énumérées ci-dessus et des noms des «mots» qui leur sont associés. La signification de nombreux «mots» est évidente. Certains nécessitent une description, et certains dépassent le cadre de ce travail.

La partie du dictionnaire de langue FORT à prendre en compte est indiquée ci-dessous:


     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


Le moment le plus excitant a été octobre 1957, lorsque Spoutnik a été lancé [Satellite Sputnik-1 - env. trad.] . J'étais étudiant en deuxième année au MIT et j'ai travaillé à temps partiel au SAO (Smithsonian Astrophysical Observatory, jusqu'à 16 syllabes, un cauchemar) à Harvard. L'observatoire était responsable du suivi optique des satellites - observations visuelles utilisant la lune [signifiant Project Moonwatch - https://en.wikipedia.org/wiki/Operation_Moonwatch - env. trad.] et caméras de poursuite par satellite [ caméras Baker-Noon - https://en.wikipedia.org/wiki/Schmidt_camera#Baker-Nunn - env. perev.]. Pris par surprise, ils ont engagé des étudiants pour déterminer les trajectoires sur les calculatrices de bureau Friden. John Gaustad m'a parlé de l'IBM EDPM 704 au MIT et m'a prêté son manuel FORTRAN II. En conséquence, mon premier programme, Ephemeris 4, m'a laissé sans emploi.

Maintenant, déjà dans le rôle d'un programmeur, j'ai travaillé avec George Veis pour appliquer sa méthode des moindres carrés pour déterminer les paramètres des orbites, les positions stationnaires et, finalement, pour déterminer la forme de la Terre. Bien sûr, ce «travail à temps partiel» a pris au moins 40 heures, et pourtant, oui, mon diplôme était couvert.

John McCarthy a enseigné un excellent cours LISP au MIT. Ce cours était mon introduction à la récursivité et à la merveilleuse variété de langages de programmation. Wil Baden a noté que LISP pour le calcul lambda est le même que FORT pour la notation postfixe Lukasewcleicz [notation de Lukashevich, également connue sous le nom de notation polonaise inversée - env. trad.] .

Le sous-marin était également pertinent, avec son étrange analyse de droite à gauche. Bien que je l'admire et imite ses opérateurs, je ne suis pas convaincu qu'ils constituent l'ensemble optimal.

La programmation dans les années 50 était plus difficile qu'elle ne l'est aujourd'hui. Mon code source a pris 2 cartes perforées. Pour les faire passer dans la voiture, j'ai dû bricoler, et je l'ai fait moi-même. L'assemblage a pris une demi-heure (tout comme en C), mais le temps limité de l'ordinateur ne signifiait qu'un seul lancement par jour, sauf, peut-être, pour le troisième quart de travail.

Et j'ai donc écrit un simple interprète qui lit les cartes avec des données d'entrée et contrôle le programme. Il contrôlait également l'informatique. Pour chacun des cinq paramètres de l'orbite, il y avait des équations empiriques pour prendre en compte la dérive atmosphérique et les écarts de la forme de la Terre par rapport à la sphère. De cette façon, j'ai pu composer diverses équations pour plusieurs satellites sans recompiler le programme.

Des facteurs tels que P2 (polynôme du deuxième degré) et S (sinus) ont participé à ces équations. La plupart du temps, l'informatique à virgule flottante 36 bits a pris le dessus, donc la surcharge était faible. La pile de données n'était pas nécessaire, mais je ne le savais probablement pas.

Et donc l'histoire de l'interprète FORT a commencé - à partir des mots

WORD  NUMBER  INTERPRET  ABORT


Ils n'ont pas encore été enregistrés avec des mots, car ils étaient des numéros d'opérateur.

INTERPRET utilise WORD pour lire les mots séparés par des espaces et NUMBER pour convertir les mots [nombres dans un enregistrement de texte - env. traduire.] sous forme binaire (dans ce cas, avec un point fixe). Une telle entrée au format libre était inhabituelle, mais plus efficace (plus petite et plus rapide) et plus fiable. L'entrée de style Fortran a été formatée en colonnes spécifiques et les fautes de frappe ont causé de nombreux retards.

Cet interpréteur a utilisé la construction IF ... ELSE IF codée en FORTRAN pour faire correspondre chaque caractère. Toute gestion des erreurs interrompait simplement l'exécution du programme. Alors, comme maintenant, le mot ABORTdemander à l'utilisateur quoi faire. Étant donné que les cartes d'entrée étaient numérotées dans l'ordre de lecture, vous pouviez savoir où était l'erreur.

Stanford, SLAC, 1961


En 1961, je suis venu à Stanford pour étudier les mathématiques. Bien que Stanford ait créé son propre département d'informatique, j'étais plus intéressé par l'informatique. J'ai été impressionné qu'ils puissent (oser?) Écrire leur propre compilateur ALGOL. Et pourtant - le destin m'a amené à l'ordinateur Burroughs B5500. J'ai de nouveau embauché pour travailler à temps partiel au SLAC (Stanford Linear Accelerator, 10 syllabes), écrire du code pour optimiser la rétention du faisceau dans un futur accélérateur d'électrons de trois kilomètres. Il s'agissait d'une application naturelle de la méthode des moindres carrés (dans laquelle j'avais de l'expérience) à l'espace des phases. Hal Butler était responsable de notre groupe et notre programme de TRANSPORT a été un succès.

Une autre application de la méthode des moindres carrés est le programme CURVE, écrit en 1964 sur ALGOL. Il s'agissait d'un programme universel de sélection de données non linéaire avec correction différentielle. Sa rigueur statistique a fourni une analyse détaillée de la cohérence du modèle et des données expérimentales.

Le format des données et les équations du modèle ont été interprétés et une pile a été utilisée pour faciliter les calculs. CURVE était un précurseur impressionnant de FORT. Pour donner l'opportunité de travailler non pas avec des équations simples, mais avec des modèles beaucoup plus élaborés, elle a introduit les mots suivants:

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


L'orthographe était légèrement différente:

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


Pour définir un mot d'entrée à six caractères (appelé ATOM par analogie avec LISP), l'interpréteur a utilisé IF ... ELSE IF . DUP , DROP et SWAP étaient des instructions machine; J'ai été surpris qu'ils soient écrits différemment. Le mot « : » (deux-points) a été tiré du format d'étiquette dans ALGOL, et a été «retourné» pour analyser de gauche à droite (pour empêcher l'interprète de détecter des mots non définis):

     ALGOL - LABEL:
     CURVE - : LABEL

En fait, les deux points marquaient la position dans la ligne d'entrée, qui devait être interprétée plus tard. L'interprétation a été arrêtée par le mot « ; "(point-virgule). Une version du côlon s'appelait DEFINE .

Opérateur d'enregistrement " ! "(Point d'exclamation) est apparu en rapport avec VARIABLE ; mais la lecture de « @ » était automatique. Veuillez noter - le code est devenu suffisamment compliqué pour exiger des commentaires. La condition de suffixe autrefois critiquée a commencé à partir d'ici:

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

S'il y avait une valeur non nulle en haut de la pile, elle était perçue comme une vraie valeur booléenne (true). ALORS a fourni une fin unique, dont le manque m'a toujours confondu dans ALGOL. Des expressions similaires ont été interprétées comme suit: IF a analysé l'entrée ELSE ou THEN . Le mot < introduit la convention selon laquelle une relation laisse une valeur booléenne sur la pile - 1 si vrai et 0 si faux. Les fonctions transcendantales sont, bien entendu, des appels à des routines de bibliothèque.

Sur du pain gratuit


J'ai quitté Stanford en 1965 pour devenir programmeur informatique indépendant à New York. Ce n'était pas inhabituel, et j'ai trouvé la programmation de travail dans FORTRAN, ALGOL, Jovial, PL / I et divers assembleurs. J'ai littéralement traîné avec mon paquet de cartes perforées et l'ai reprogrammé au besoin. Des mini-ordinateurs sont apparus, et avec eux - des terminaux. L'interprète était parfait pour l'entrée de téléscripteur et a rapidement acquis un code pour travailler avec la sortie. Nous avons donc trouvé les mots:

     KEY  EXPECT
     EMIT  CR  SPACE  SPACES  DIGIT  TYPE

EXPECT est une boucle qui appelle KEY pour lire les frappes. TYPE est une boucle qui appelle EMIT pour afficher un caractère.

Avec l'avènement du télétype, il est temps pour la bande perforée et les programmes les plus inconfortables que vous puissiez imaginer - nécessitant de nombreuses heures d'édition, de perforation, de chargement, d'assemblage, d'impression, de téléchargement, de test, puis à nouveau. Je me souviens d'un dimanche terrible dans un gratte-ciel à Manhattan, où je ne pouvais pas trouver de ruban adhésif (rien d'autre n'a aidé), et maudit qu '"il doit y avoir une meilleure façon".

J'ai fait un travail décent pour Bob Davis chez Realtime Systems, Inc (RSI). J'ai étudié à fond le 5500 MCP - suffisamment pour prendre en charge son service de partage de temps (en travaillant avec des terminaux distants), et j'ai également écrit un traducteur de FORTRAN vers ALGOL et des utilitaires d'édition de fichiers. Le traducteur m'a montré la valeur des espaces entre les mots que FORTRAN n'exige pas.

L'interprète ne distinguait toujours les mots que par les 6 premiers caractères (puisque le mot de données dans le Burroughs B5500 était de 48 bits). Les mots LIST EDIT BEGIN AGAIN EXIT sont apparus .

Les mots BEGIN ... AGAIN ont été écrits comme START ... REPEAT et ont servi de «crochets» pour les commandes d'édition T TYPE I INSERT D DELETE F FINDplus tard utilisé dans l'éditeur NRAO.

Le mot FIELD a été utilisé dans le style FMS DBMS de Mohasco. D'où l'une des caractéristiques de FORT. La règle est que le FORT confirme chaque ligne d'entrée en ajoutant OK lorsque l'interprétation est terminée. Cela peut être gênant, car lorsque l'entrée se termine par un caractère CR, un espace doit être affiché, puis OK et CR en dernier. Dans RSI, OK, je me suis retrouvé sur la ligne suivante, mais j'ai néanmoins transmis une confirmation amicale via une ligne de communication effrayante [une blague d'auteur basée sur le fait que, dans ces années, le travail des ordinateurs avec des lignes de communication était inhabituel; pour le lecteur moderne, la blague a déjà perdu sa pertinence et sonne, au moins, étrange - env. trad.] :

     56 INSERT ALGOL IS VERY ADAPTABLE
     OK


Cette notation postfixe suggère l'utilisation d'une pile de données, mais sa profondeur suffisante n'en est qu'une.

Mohasco, 1968


En 1968, je suis venu travailler en tant que programmeur dans la société commerciale Mohasco Industries, Inc à Amsterdam, New York. C'était une grande entreprise produisant des articles pour la maison - des tapis et des meubles. J'ai travaillé avec Geoff Leach à RSI, et il m'a convaincu de le déplacer dans la partie nord de l'État. Je viens de me marier et à Amsterdam, il y avait une atmosphère merveilleuse dans une petite ville, contrastant avec New York.

J'ai réécrit mon code sur COBOL et j'ai découvert ce qu'est vraiment un logiciel d'entreprise. Bob Raiko était responsable du traitement des données d'entreprise et m'a donné deux projets connexes.

Il a loué un mini-ordinateur IBM 1130 avec écran graphique 2250. Le but était de voir si l'infographie pouvait aider à créer des tapis à motifs. La réponse était «ne peut pas aider sans prise en charge des couleurs» et l'option 1130 n'était plus disponible.

À cette époque, j'avais le dernier mini-ordinateur: processeur 16 bits, 8 Ko de RAM, lecteur de disque (le premier de ma vie), clavier, imprimante, lecteur de cartes et perforateur, compilateur FORTRAN. Le lecteur et le poinçon étaient une option de sauvegarde en cas de défaillance du disque. J'ai à nouveau porté mon interprète (retour à FORTRAN) et ajouté le cross-assembler pour travailler avec 2250.

Le système était génial. Elle pouvait dessiner des images animées en trois dimensions alors qu'IBM pouvait à peine dessiner des images fixes statiques. Comme il s'agissait de mes premiers graphiques en temps réel, j'ai écrit le code de Spacewar, le tout premier jeu vidéo. J'ai également réécrit mon programme d'échecs FORT, écrit à l'origine en ALGOL, et j'ai été très impressionné par la facilité avec laquelle il est devenu.

Le fichier contenant l'interpréteur s'appelait FORTH, ce qui signifiait la quatrième (prochaine) génération de logiciel, FOURTH. Mais le nom a dû être raccourci, car le système d'exploitation limitait les noms de fichier à 5 caractères.

Cet environnement de programmation pour le 2250 était de loin supérieur à FORTRAN, j'ai donc étendu l'assembleur croisé 2250 au compilateur 1130. Il y avait beaucoup de nouveaux mots:

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


Leur orthographe était toujours différente [de la norme pour FORT - env. trad.] :

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


C'était la seule application que j'ai jamais trouvée pour un symbole de centime.

Le compteur et la limite de boucle ont été stockés dans la pile de données. DO et CONTINUE ont vu le jour grâce à FORTRAN.

BLOCK contrôlait le nombre de tampons pour minimiser les accès aux disques. LOAD lit le code source à partir d'un bloc de 1024 octets. La taille de 1024 octets a été choisie en fonction de la taille du bloc sur le disque et a réussi. Le mot UPDATE vous a permis de marquer un bloc en mémoire et de le vider plus tard sur le disque lorsque vous avez besoin de libérer le tampon (ou par le mot FLUSH ). Il implémente une sorte de mémoire virtuelle et est implicitement appelé lors des opérations d'écriture.

Le mot BASEAutorisé à travailler avec des nombres octaux, hexadécimaux et décimaux. Le mot CONTEXT a été le premier indice de dictionnaires et a servi à séparer les mots de l'éditeur. Le mot ÉTAT définit les modes de compilation et d'interprétation. Lors de la compilation, le nombre de caractères et les 3 premiers caractères du mot ont été compilés [compilé en identifiant - env. trad.] pour interprétation ultérieure. Curieusement, les mots pouvaient être interrompus par des caractères spéciaux - mais cela a été rapidement abandonné. L'opérateur de lecture ( @ ) avait de nombreuses options, car la lecture à partir de variables, de tableaux et du disque devait être distinguée. DUMP autorisé à creuser dans la mémoire pour le débogage.

Mais surtout, il y avait maintenant un dictionnaire. Le code interprète a maintenant pris un nom et l'a recherché dans une liste chaînée. Le mot CREATE a créé une entrée de vocabulaire classique:

   *       
   *     3  *
   *  ,   
   *  

* Les identifiants FORT sont emballés en 32 bits sous la forme: 1 octet - le nombre de caractères du mot, les 3 octets restants - les 3 premiers caractères du mot (hussards, tais-toi!) - env. perev.

Le champ de code a été une innovation importante - dès que le mot a été trouvé, une seule transition indirecte est restée de la surcharge de l'interprète. J'ai appris la signification du nombre de caractères en distinguant les mots des développeurs de compilateurs à Stanford.

Le mot CODE a créé une importante classe de mots. Son champ de paramètres contenait des instructions machine. Ainsi, il était désormais possible de créer n'importe quel mot dans les capacités d'un ordinateur. Le mot " ; CODE " définissait le code qui devait être exécuté pour la nouvelle classe de mots et introduisait ce qu'on appelle maintenant des objets.

MotSMUDGE a évité la récursivité lors de l'interprétation des définitions. En raison de l'affichage du dictionnaire dans l'ordre des définitions les plus récentes aux plus anciennes, la récursion indésirable était courante.

Enfin, une pile de retour est apparue. Auparavant, les définitions ne pouvaient pas être imbriquées ou devaient stocker l'adresse de retour dans la pile de données. Dans l'ensemble, ce fut une période de grande innovation dans le développement (intermittent) du Fort.

Geoff Leach et moi avons écrit le premier article sur le FORT (sous la forme d'un rapport interne de Mohasco) en 1970. Elle n'a pas perdu sa pertinence aujourd'hui.

En 1970, Bob a commandé l'Univac 1108. C'était un projet ambitieux de soutenir un réseau de lignes dédié pour un système de saisie des commandes. J'ai écrit un générateur de rapports dans FORT, mais j'étais sûr de pouvoir écrire un code pour saisir des commandes. Pour accroître la confiance dans le FORT, je l'ai porté à 5500 (en tant que programme séparé!). Mais le logiciel d'entreprise était COBOL. Étonnamment, un compromis a été atteint en définissant le système FORT sur 1108 afin qu'il interagisse avec les modules COBOL pour le traitement des transactions.

Je me souviens très bien du voyage à Schenectady cet hiver pour prendre le temps du troisième quart à 1107. Il n'y avait pas de sol et de fenêtre dans ma chambre, et c'était un exercice de survie nocturne. Mais le système s'est avéré incroyablement réussi et a impressionné même Univac (Les Sharp a été impliqué dans l'intégration avec le projet). Le critère décisif était le temps de réponse, mais j'étais également déterminé à maintenir le projet sous une forme adaptée à la maintenance (c'est-à-dire à le garder petit et simple). Hélas, le ralentissement économique a contraint la direction à annuler 1108. Je pense toujours que c'était une mauvaise décision. J'ai été le premier à démissionner.

Le fort pour 1108 devrait être écrit en assembleur. Il a mis en mémoire tampon les messages d'entrée et de sortie et réparti le processeur entre les tâches traitant chaque ligne. Ici, vous avez le système d'exploitation classique. Mais il pourrait également analyser les lignes d'entrée et exécuter (avec le mot PERFORM ) les modules COBOL correspondants. Il surveillait les tampons du tambour de mémoire et était impliqué dans l'emballage et le déballage des enregistrements. Les mots

     BUFFER  PREV  OLDEST
     TASK  ACTIVATE  GET  RELEASE


est apparu à ce moment-là.

BUFFER n'a pas lu le disque s'il était connu que le bloc demandé est vide. PREV et OLDEST sont des variables système qui permettent de mettre en œuvre la gestion de la mémoire tampon sur la base du «moins utilisé». TASK a défini la tâche au démarrage et ACTIVATE l'a exécutée en cas de besoin. GET et RELEASE contrôlent les ressources partagées (tambour de mémoire, imprimante). PAUSE est le mot par lequel la tâche libère le processeur. Il était inclus dans toutes les opérations d'E / S et était invisible pour le code de transaction. Il a rendu possible un algorithme de planification cyclique simple qui évite le blocage.

Après la déclaration[probablement sur le licenciement - env. trans.] J'ai écrit un poème en colère et un livre qui n'a jamais été publié. Il a décrit comment programmer dans FORT et a encouragé la simplicité et l'innovation. Il décrit également la technique du code cousu indirect, mais pour la première fois, il a été mis en œuvre dans NRAO.

J'ai travaillé sur le concept de métalangage - une langue qui parle d'une langue. Fort pouvait désormais interpréter l'assembleur que le compilateur assemblait, ce qui compilait l'interpréteur. Finalement, j'ai décidé que la terminologie ne fonctionnait pas, mais le terme «métacompilation» pour recompiler le FORT lui-même était toujours utilisé.

NRAO, 1971


George Conant m'a proposé un poste au NRAO (National Radio Astronomy Observatory, 22 syllabes). Je le connaissais au CAO et il aimait Ephemeris 4. Nous avons déménagé à Charlottesville, en Virginie, et passé l'été à Tucson, en Arizona, lorsque le radiotélescope Kitt Peak était disponible pour l'entretien.

Le projet consistait à programmer le mini-ordinateur Honeywell 316 pour contrôler une nouvelle banque de filtres pour un radiotélescope à ondes millimétriques de 36 pouces. Il avait une bande à neuf pistes et un terminal de tube Tektronix avec une «mémoire» [se référant probablement à des tubes rémanents ou à des potentioscopes - env. perev.]. George m'a donné toute liberté pour développer le système, mais il n'était pas satisfait du résultat. Dans NRAO, tout le monde utilisait FORTRAN, et maintenant je suis apparu avec mon FORT. Il avait raison de dire que les normes d'organisation devraient prévoir un langage de programmation commun. D'autres programmeurs veulent désormais également leurs propres langages.

Quoi qu'il en soit, j'ai écrit le code FORT en assembleur sur le mainframe IBM 360/50. Ensuite, je l'ai recompilé sous 316. Ensuite, je l'ai compilé nativement en 316 (même si j'avais un terminal 360, le temps de réponse était terrible). Une fois que le système est devenu disponible, c'était facile. Il y avait deux modes d'observation: toutes les fréquences et les raies spectrales. Les raies spectrales étaient les plus intéressantes, car je pouvais afficher les spectres au fur et à mesure que je collectais les données et lisser les formes des raies en utilisant la méthode des moindres carrés.

À Tucson, où Ned Conklin dirigeait, le système a été bien accueilli. C'était une autre étape dans la réduction immédiate de la quantité de données lors de leur collecte. Les astronomes ont commencé à l'utiliser pour détecter et cartographier les molécules interstellaires, dès que cela est devenu un domaine de recherche à la mode.

Bess Rather a été embauché pour soutenir l'observatoire. Elle a d'abord dû étudier le système FORT, puis l'expliquer et le documenter avec un minimum d'aide de ma part. L'année suivante, j'ai reprogrammé le DDP-116 pour optimiser le pointage du télescope. Bess et moi avons ensuite remplacé le DDP-116 et Honeywell 316 par le DEC PDP-11.

Un tel remplacement est devenu possible grâce au développement d'un code cousu indirect. C'était un développement naturel de mon travail chez Mohasco, bien que j'ai appris plus tard que DEC utilisait du code cousu directement dans l'un de ses compilateurs. Au lieu de compiler la définition entière à chaque fois, le compilateur a simplement pris l'adresse de chaque mot utilisé dans le dictionnaire. Cette amélioration des performances pour chaque lien ne nécessitait que deux octets, et l'interpréteur pouvait exécuter le code beaucoup plus rapidement. Sur DEC PDP-11, cet interprète était essentiellement une macro de deux mots:

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


Maintenant, le FORT est terminé. Et je le savais. Je pouvais écrire du code plus rapidement et c'était plus efficace et plus fiable. De plus, il était portable. J'ai continué à reprogrammer le DDP-116, qui se concentre sur le pointage du télescope de 300 pouces Green Bank, et le HP mini, qui a commencé avec une très longue radioastronomie de base (VLBI). George m'a donné ModComp, et j'ai programmé la transformée de Fourier pour l'interférométrie et la recherche pulsar (sur des ensembles de données 64K). J'ai même démontré que la multiplication complexe par IBM 360 dans FORT était 20% plus rapide que dans l'assembleur.

Le NRAO a apprécié ce que j'ai écrit. Ils avaient un accord avec une firme de consultants pour identifier les technologies collatérales. La question du brevetage FORT est discutée depuis un certain temps. Mais comme les brevets logiciels étaient contradictoires et pouvaient être résolus avec la participation de la Cour suprême, l'ARNO a refusé de traiter cette question. En conséquence, les droits d'auteur m'ont été restitués. Je ne pense pas que les idées doivent être brevetées. Avec le recul, il faut convenir que la seule chance pour FORT est de rester dans le domaine public. Et là, il a prospéré.

Le code cousu a changé les mots structurels (tels que DO LOOP IF THEN ). Ils ont obtenu une implémentation élégante avec des adresses dans la pile de données au moment de la compilation.

Désormais, chaque implémentation du fort avait assembleur pour l'architecture de son ordinateur. Il a utilisé des opcodes en notation postfixe et a généré des adresses dans la pile de données, avec des mots structurés de type FORT pour la ramification. Les mnémoniques des assembleurs ont été définis comme des classes de mots utilisant ; CODE . Il était possible de coder tout cela en une seule journée.

Les opérateurs arithmétiques inhabituels ont également fait leurs preuves.

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


M * est la multiplication matérielle habituelle de deux nombres 16 bits en un produit 32 bits (arguments, bien sûr, dans la pile de données). Il est suivi de * / avec division pour implémenter l'arithmétique fractionnaire. / MOD renvoie à la fois le quotient et le reste, et est idéal pour rechercher des entrées dans un fichier. SQRT renvoie un résultat 16 bits à partir d'un argument 32 bits. SIN.COS renvoie immédiatement à la fois le sinus et le cosinus, ce qui est utile pour l'arithmétique vectorielle et complexe (FFT). ATAN est l'opération inverse et n'a aucune ambiguïté de quadrant. EXP et LOG sont calculés en base 2.

Dans ces fonctions, l'arithmétique à virgule fixe a été utilisée - 14 ou 30 bits à droite du point binaire pour la trigonométrie, 10 pour les logarithmes. C'est devenu une caractéristique de FORT, car une telle arithmétique est plus simple, plus rapide et plus précise que la virgule flottante. Mais si nécessaire, vous pouvez facilement implémenter du matériel et des logiciels en virgule flottante.

J'applaudis le travail inestimable de Hart, qui a compilé des tableaux d'approximations de fonctions avec une précision différente. Ils ont libéré les programmeurs d'applications des limitations des bibliothèques existantes.

Le mot EST> apparu (il était écrit comme ; :) . Il a défini une classe de mots (comme ; CODE), établissant que la définition doit être interprétée lorsqu'elle se réfère à un mot. Il était difficile à mettre en œuvre, mais il s'est avéré particulièrement utile pour définir les codes d'opération.

Cependant, je n'ai pas réussi à convaincre Charlottesville que FORT leur convient. Je n'étais pas autorisé à programmer VLA. Dans n'importe quel groupe de programmeurs, 25% aiment Fort et 25% le détestent. Les différends sont difficiles et les compromis sont rarement atteints. En conséquence, les premiers 25% ont uni leurs forces et créé Forth, Inc. Mais c'est une autre histoire.

Moralité


L'histoire de FORT a une certaine moralité: un jeune programmeur persistant lutte contre l'indifférence afin de découvrir la Vérité et de sauver ses camarades souffrants. Ça va mieux: regardez Forth, Inc. affronter IBM dans le système bancaire français.

Je sais que FORT est toujours le meilleur langage de programmation. Je suis satisfait de son succès, en particulier dans le domaine ultra-conservateur de l'intelligence artificielle [rappel, 1991 - env. trad.] .

Ce qui m'inquiète, c'est que ces gens qui ne devraient pas apprécier comment le FORT incarne leur propre description du langage de programmation idéal.

Mais je fais toujours des recherches sans licence. FORT a conduit à une architecture qui promet une étonnante combinaison de matériel et de logiciel. Ainsi qu'un autre nouvel environnement de programmation.

All Articles