Os primeiros anos do FORT

imagem

KDPV retirado daqui

Introdução


FORT é uma linguagem de computador simples e natural. Recebeu uma distribuição significativa onde é necessária alta eficiência. Nos anos 60, ele seguiu o caminho do desenvolvimento das universidades, passando pelos negócios até os laboratórios. Esta é uma história sobre como um simples intérprete expandiu seus recursos e foi capaz de se tornar uma linguagem de programação e um sistema operacional completos.

Este trabalho foi escrito para uma conferência sobre a história das linguagens de programação - HOPL II. Ela foi finalmente rejeitada, provavelmente devido ao seu estilo de apresentação.

O FORT se espalhou nos anos sessenta na América - em universidades, negócios e ciência, juntamente com outros idiomas desenvolvidos. Naquela época, eu era o único programador, até o final desse período não tinha nome. Tudo o que é descrito aqui é recuperado da memória, documentação fragmentada e listagens de programas sobreviventes.

O FORT como um todo dificilmente é original, mas é uma combinação única de componentes. Sou grato às pessoas e organizações que me permitiram desenvolvê-lo - muitas vezes sem eu mesmo saber. E agradeço seu interesse em fazer você ler sobre isso.

FORT é uma linguagem de computador simples e natural. Hoje [1991 - aprox. trans.] É considerada uma linguagem de programação de classe mundial. O fato de ele ter atingido esse nível sem o apoio da indústria, universidades ou governo é uma conseqüência de sua eficácia, confiabilidade e versatilidade. Fort é um idioma escolhido quando sua eficácia é mais importante que a popularidade de outros idiomas. Este é um caso frequente em áreas práticas, como sistemas de controle e comunicação.

Muitas organizações FORT e muitas pequenas empresas oferecem sistemas, aplicativos e documentação. Na América do Norte, Europa e Ásia, são realizadas conferências anuais. O rascunho da norma ANSI [ANS 1991] será apresentado em breve.

Nenhum dos livros sobre o FORT descreve completamente seu "gosto". Eu acho que o melhor ainda é o primeiro deles - “Starting Forth” de Leo Brodie [disponível, por exemplo, aqui - https://www.forth.com/starting-forth/ - aprox. transl.] .

O FORT clássico que estamos discutindo fornece suporte mínimo suficiente para o programador desenvolver a linguagem melhor para sua aplicação. Ele é destinado a um ambiente como uma estação de trabalho, incluindo teclado, monitor, computador e unidade de disco [naqueles dias as unidades de disco costumavam ser externas, de modo que o autor simplesmente lista os componentes de um sistema de computador mínimo - aprox. transl.] .

O FORT é essencialmente uma linguagem de texto sem contexto. Permite combinar "palavras", separadas por espaços, para construir novas "palavras". Cerca de 150 dessas palavras compõem um sistema que fornece:

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

* O código bordado é uma maneira de compilar um programa no qual é uma matriz de chamadas de subprograma, consulte https://en.wikipedia.org/wiki/Threaded_code - aprox. perev.

Esse sistema contém de 3 a 8 kilobytes de código de programa compilado de 10 a 20 páginas do código-fonte. Ele pode ser facilmente desenvolvido por um programador, mesmo em um computador com recursos limitados.

Este texto descreve necessariamente minha carreira; mas ele foi concebido como uma "biografia" do FORT. Discutirei os recursos do FORT listados acima e os nomes das "palavras" associadas a eles. Os significados de muitas "palavras" são óbvios. Alguns exigem uma descrição e outros vão além do escopo deste trabalho.

A parte do dicionário de idiomas FORT a ser considerada está listada abaixo:


     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


O momento mais emocionante foi outubro de 1957, quando o Sputnik foi lançado [satélite Sputnik-1 - aprox. transl.] . Eu era estudante do segundo ano no MIT e trabalhava meio período no SAO (Smithsonian Astrophysical Observatory, até 16 sílabas, um pesadelo) em Harvard. O observatório foi responsável pelo rastreamento óptico dos satélites - observações visuais usando a lua [significando Projeto Moonwatch - https://en.wikipedia.org/wiki/Operation_Moonwatch - aprox. transl.] e câmeras de rastreamento por satélite [ câmeras Baker-Noon - https://en.wikipedia.org/wiki/Schmidt_camera#Baker-Nunn - aprox. perev.]. Apanhados de surpresa, eles contrataram estudantes para descobrir trajetórias nas calculadoras de mesa Friden. John Gaustad me contou sobre o IBM EDPM 704 no MIT e me emprestou seu manual do FORTRAN II. Como resultado, meu primeiro programa, o Ephemeris 4, me deixou sem emprego.

Agora, já no papel de programador, trabalhei com George Veis na aplicação de seu método dos mínimos quadrados para determinar os parâmetros de órbitas, posições estacionárias e, como resultado, determinar a forma da Terra. Obviamente, esse "trabalho de meio período" levou pelo menos 40 horas e, no entanto, sim, meu diploma foi coberto.

John McCarthy ministrou um excelente curso LISP no MIT. Este curso foi minha introdução à recursão e à maravilhosa variedade de linguagens de programação. Wil Baden observou que LISP para cálculo lambda é o mesmo que FORT para a notação pós-fixada Lukasewcleicz [ notação de Lukashevich , também conhecida como notação polonesa reversa - aprox. transl.] .

O submarino também foi relevante, com sua estranha análise da direita para a esquerda. Embora eu o admire e imite seus operadores, não estou convencido de que eles constituam o conjunto ideal.

A programação nos anos cinquenta era mais dura do que é hoje. Meu código fonte pegou dois cartões perfurados. Para levá-los através do carro, eu tive que mexer, e basicamente eu mesmo fiz. A assembléia levou meia hora (como em C), mas o tempo limitado do computador significava apenas um lançamento por dia, exceto, talvez, pelo terceiro turno.

Por isso, escrevi um intérprete simples que lê cartões com dados de entrada e controla o programa. Ele também controlava a computação. Para cada um dos cinco parâmetros da órbita, havia equações empíricas para levar em consideração a deriva atmosférica e os desvios da forma da Terra da esfera. Dessa maneira, eu poderia compor várias equações para vários satélites sem recompilar o programa.

Fatores como P2 (polinômio de segundo grau) e S (seno) participaram dessas equações. Na maioria das vezes, a computação de ponto flutuante de 36 bits era necessária, então a sobrecarga era baixa. A pilha de dados não era necessária, mas eu provavelmente não sabia disso.

E assim a história do intérprete FORT começou - a partir das palavras

WORD  NUMBER  INTERPRET  ABORT


Eles ainda não foram gravados em palavras, porque eram números de operador.

INTERPRET usa WORD para ler palavras separadas por espaços e NUMBER para converter palavras [números em um registro de texto - aprox. translate.] em formato binário (neste caso, com um ponto fixo). Essa entrada em formato livre era incomum, mas mais eficiente (menor e mais rápido) e mais confiável. A entrada no estilo Fortran foi formatada em colunas específicas e os erros de digitação causaram vários atrasos.

Esse intérprete usou a construção IF ... ELSE IF codificada em FORTRAN para corresponder a cada caractere. Todo o tratamento de erros estava simplesmente interrompendo a execução do programa. Então, como agora, a palavra ABORTperguntando ao usuário o que fazer. Como os cartões de entrada foram numerados na ordem de leitura, você pode descobrir onde estava o erro.

Stanford, SLAC, 1961


Em 1961, vim para Stanford para estudar matemática. Embora Stanford tenha criado seu próprio departamento de ciência da computação, eu estava mais interessado em computação. Fiquei impressionado que eles pudessem (ousam?) Escrever seu próprio compilador ALGOL. E, no entanto, o destino me levou ao computador Burroughs B5500. Novamente, fui contratado para trabalhar em meio período no SLAC (Stanford Linear Accelerator, 10 sílabas), escrever código para otimizar a retenção de feixes em um futuro acelerador de elétrons de três quilômetros. Essa foi uma aplicação natural do método dos mínimos quadrados (no qual eu tinha experiência) para transformar o espaço em fase. Hal Butler foi responsável por nosso grupo e nosso programa TRANSPORT foi um sucesso.

Outra aplicação do método dos mínimos quadrados foi o programa CURVE, escrito em 1964 no ALGOL. Era um programa universal para seleção de dados não lineares com correção diferencial. Seu rigor estatístico forneceu uma análise detalhada da consistência do modelo e dos dados experimentais.

O formato dos dados e as equações do modelo foram interpretados e uma pilha foi usada para facilitar os cálculos. CURVE foi um impressionante precursor do FORT. Para oferecer a oportunidade de trabalhar não com equações simples, mas com modelos muito mais elaborados, ela introduziu as seguintes palavras:

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


A ortografia era um pouco diferente:

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


Para definir uma palavra de entrada de seis caracteres (chamada ATOM por analogia com LISP), o intérprete usou IF ... ELSE IF . DUP , DROP e SWAP foram instruções da máquina; Fiquei surpreso que eles foram escritos de forma diferente. A palavra “ : ” (dois pontos) foi retirada do formato de etiqueta no ALGOL e foi “invertida” para analisar da esquerda para a direita (para impedir que o intérprete detecte palavras indefinidas):

     ALGOL - LABEL:
     CURVE - : LABEL

De fato, os dois pontos marcaram a posição na linha de entrada, que deveria ser interpretada mais tarde. A interpretação foi interrompida pela palavra “ ; "(ponto e vírgula). Uma versão do cólon foi chamada DEFINE .

Operador de gravação " ! "(Ponto de exclamação) apareceu em conexão com VARIABLE ; mas ler " @ " era automático. Observe - o código se tornou complicado o suficiente para exigir comentários. A condição de postfix uma vez criticada começou a partir daqui:

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

Se houvesse um valor diferente de zero na parte superior da pilha, ele seria percebido como um valor verdadeiro booleano (verdadeiro). ENTÃO proporcionou um final único, cuja ausência sempre me confundiu no ALGOL. Expressões semelhantes foram interpretadas da seguinte maneira: SE varreu a entrada para ELSE ou THEN . A palavra < introduziu a convenção de que uma relação deixa um valor booleano na pilha - 1 se verdadeiro e 0 se falso. É claro que funções transcendentais são chamadas para rotinas de biblioteca.

No pão grátis


Deixei Stanford em 1965 para me tornar um programador freelancer em Nova York. Isso não era incomum, e eu encontrei programação de trabalho em FORTRAN, ALGOL, Jovial, PL / I e várias montadoras. Eu literalmente arrastei o meu pacote de cartões perfurados e reprogramei-o conforme necessário. Mini-computadores apareceu, e com eles - terminais. O intérprete era perfeito para entrada de teletipo e logo adquiriu código para trabalhar com saída. Então encontramos as palavras:

     KEY  EXPECT
     EMIT  CR  SPACE  SPACES  DIGIT  TYPE

EXPECT é um loop que chama KEY para ler as teclas digitadas. TYPE é um loop que chama EMIT para exibir um caractere.

Com o advento do teletipo, chegou a hora das fitas perfuradas e dos programas mais desconfortáveis ​​que você pode imaginar - exigindo muitas horas de edição, perfuração, carregamento, montagem, montagem, impressão, download, teste e depois novamente. Lembro-me de um domingo terrível em um arranha-céu em Manhattan, quando não consegui encontrar fita adesiva (nada mais ajudou), e xinguei que "deve haver um caminho melhor".

Fiz um trabalho decente para Bob Davis na Realtime Systems, Inc (RSI). Estudei minuciosamente o 5500 MCP - o suficiente para suportar seu serviço de compartilhamento de tempo (trabalhando com terminais remotos), e também escrevi um tradutor do FORTRAN para o ALGOL e utilitários de edição de arquivos. O tradutor me mostrou o valor dos espaços entre as palavras que o FORTRAN não exige.

O intérprete ainda distinguia apenas as palavras dos 6 primeiros caracteres (já que a palavra de dados no Burroughs B5500 era de 48 bits). As palavras LISTA EDIT INICIAR NOVAMENTE SAIR apareceram .

As palavras COMEÇAR ... NOVAMENTE foram escritas como INICIAR ... REPETIR e serviram como "colchetes" para os comandos de edição T TIPO I INSERIR D EXCLUIR E ENCONTRARposteriormente usado no editor NRAO.

A palavra FIELD foi usada no estilo Forth DBMS do Mohasco. Daí uma das características da FORT. A regra é que o FORT confirme cada linha de entrada adicionando OK quando a interpretação estiver concluída. Isso pode ser problemático, pois quando a entrada termina com um caractere CR, um espaço deve ser exibido, depois OK e CR por último. No RSI, OK, eu me encontrei na próxima linha, mas mesmo assim transmiti uma confirmação amigável por meio de uma linha de comunicação assustadora [piada de um autor com base no fato de que naqueles anos o trabalho de computadores com linhas de comunicação era incomum; para o leitor moderno, a piada já perdeu sua relevância e soa, pelo menos, estranho - aprox. transl.] :

     56 INSERT ALGOL IS VERY ADAPTABLE
     OK


Essa notação postfix sugere o uso de uma pilha de dados, mas sua profundidade suficiente é apenas uma.

Mohasco, 1968


Em 1968, comecei a trabalhar como programador na empresa comercial Mohasco Industries, Inc em Amsterdã, Nova York. Era uma grande empresa que produz artigos para o lar - tapetes e móveis. Eu trabalhei com Geoff Leach no RSI, e ele me convenceu a transferi-lo para a parte norte do estado. Acabei de me casar e em Amsterdã havia uma atmosfera maravilhosa de uma cidade pequena, contrastando com Nova York.

Reescrevi meu código no COBOL e descobri o que é realmente o software comercial. Bob Raiko foi responsável pelo processamento de dados corporativos e me deu dois projetos relacionados.

Ele alugou um minicomputador IBM 1130 com uma tela gráfica 2250. O objetivo era verificar se a computação gráfica poderia ajudar a criar tapetes padronizados. A resposta foi "não posso ajudar sem suporte de cores" e a opção 1130 não estava mais disponível.

Naquela época, eu tinha o mais recente minicomputador: processador de 16 bits, 8K de RAM, unidade de disco (a primeira na minha vida), teclado, impressora, leitor de cartões e perfurador, compilador FORTRAN. O leitor e o punch foram uma opção de backup no caso de uma falha no disco. Portei novamente meu intérprete (de volta ao FORTRAN) e adicionei o assembler para trabalhar com o 2250.

O sistema foi incrível. Ela podia desenhar imagens tridimensionais animadas quando a IBM mal conseguia desenhar imagens planas estáticas. Como esse foi o meu primeiro gráfico em tempo real, escrevi o código para o Spacewar, o primeiro videogame. Também reescrevi meu programa de xadrez FORT, originalmente escrito em ALGOL, e fiquei muito impressionado com o quão mais fácil se tornou.

O arquivo que contém o intérprete foi chamado FORTH, o que significava o software da quarta (próxima) geração, QUARTA. Mas o nome teve que ser encurtado, pois o sistema operacional limitou os nomes dos arquivos a 5 caracteres.

Esse ambiente de programação para o 2250 era muito superior ao FORTRAN, então eu ampliei o cross assembler 2250 para o compilador 1130. Havia muitas novas palavras:

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


A ortografia deles ainda era diferente [do padrão para FORT - aprox. transl.] :

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


Esta foi a única aplicação que eu já encontrei para um símbolo de centavo.

O contador e o limite do loop foram armazenados na pilha de dados. DO e CONTINUE surgiu graças ao FORTRAN.

O BLOCK controlou o número de buffers para minimizar os acessos ao disco. LOAD leu o código fonte de um bloco de 1024 bytes de tamanho. O tamanho de 1024 bytes foi escolhido com base no tamanho do bloco no disco e foi bem-sucedido. A palavra UPDATE permitiu marcar um bloco na memória e depois liberá-lo no disco quando você precisar liberar o buffer (ou pela palavra FLUSH ). Ele implementa um tipo de memória virtual e é chamado implicitamente durante operações de gravação.

A palavra BASEPermitido trabalhar com números octais, hexadecimais e decimais. A palavra CONTEXTO foi a primeira dica de dicionários e serviu para separar as palavras do editor. A palavra STATE define os modos de compilação e interpretação. Durante a compilação, o número de caracteres e os três primeiros caracteres da palavra foram compilados [compilados no identificador - aprox. transl.] para interpretação posterior. Curiosamente, as palavras poderiam ser interrompidas por caracteres especiais - mas isso logo foi abandonado. O operador de leitura ( @ ) tinha muitas opções, pois a leitura de variáveis, matrizes e o disco precisava ser distinguida. DUMP permitiu cavar na memória para depuração.

Mas o mais importante, agora havia um dicionário. O código do intérprete agora pegou um nome e o procurou em uma lista vinculada. A palavra CREATE criou uma entrada de vocabulário clássico:

   *       
   *     3  *
   *  ,   
   *  

* Os identificadores FORT são compactados em 32 bits no formato: 1 byte - o número de caracteres da palavra, os 3 bytes restantes - os 3 primeiros caracteres da palavra (hussardos, fique em silêncio!) - aprox. perev.

O campo de código foi uma inovação importante - assim que a palavra foi encontrada, apenas uma transição indireta permaneceu da sobrecarga do intérprete. Aprendi sobre o significado do número de caracteres na distinção de palavras dos desenvolvedores de compiladores em Stanford.

A palavra CODE criou uma classe importante de palavras. Seu campo de parâmetro continha instruções da máquina. Assim, agora era possível criar qualquer palavra dentro das capacidades de um computador. A palavra " ; CODE " definiu o código a ser executado para uma nova classe de palavras e introduziu o que agora é chamado de objetos.

PalavraSMUDGE evitou recursão durante a interpretação das definições. Devido à exibição do dicionário em ordem, desde as definições mais recentes até as mais antigas, a recursão indesejada era comum.

Finalmente, uma pilha de retorno apareceu. Antes disso, as definições não podiam ser aninhadas ou precisavam armazenar o endereço de retorno na pilha de dados. Em suma, foi um período de grandes inovações no desenvolvimento (intermitente) do forte.

Geoff Leach e eu escrevemos o primeiro artigo sobre o FORT (na forma de um relatório interno do Mohasco) em 1970. Ela não perdeu relevância hoje.

Em 1970, Bob encomendou o Univac 1108. Era um projeto ambicioso para apoiar uma rede de linhas dedicada a um sistema de entrada de pedidos. Escrevi um gerador de relatórios no FORT, mas tinha certeza de que poderia escrever um código para inserir pedidos. Para aumentar a confiança no FORT, eu o portava para 5500 (como um programa separado!). Mas o software corporativo era COBOL. Surpreendentemente, foi alcançado um compromisso configurando o sistema FORT para 1108, para que ele interagisse com os módulos COBOL para processamento de transações.

Lembro-me muito bem da viagem a Schenectady naquele inverno para passar o terceiro turno em 1107. Não havia piso nem janela no meu quarto, e esse era um exercício noturno de sobrevivência. Mas o sistema acabou sendo incrivelmente bem-sucedido e impressionou até a Univac (a Les Sharp estava envolvida na integração com o projeto). O critério decisivo foi o tempo de resposta, mas eu também estava determinado a manter o projeto em uma forma adequada para manutenção (ou seja, para mantê-lo pequeno e simples). Infelizmente, a crise econômica obrigou a administração a cancelar 1108. Ainda acho que foi uma decisão ruim. Eu fui o primeiro a renunciar.

Fort para 1108 teria que ser escrito em assembler. Ele armazenou em buffer as mensagens de entrada e saída e distribuiu o processador entre as tarefas que processam cada linha. Aqui você tem o sistema operacional clássico. Mas ele também poderia analisar as linhas de entrada e executar (com a palavra PERFORM ) os módulos COBOL correspondentes. Ele monitorou os buffers do tambor de memória e estava envolvido na embalagem e desempacotamento de registros. As palavras

     BUFFER  PREV  OLDEST
     TASK  ACTIVATE  GET  RELEASE


apareceu naquele momento.

O BUFFER não leu o disco se soubesse que o bloco solicitado está vazio. PREV e OLDEST são variáveis ​​de sistema que possibilitam implementar o gerenciamento de buffer com base no “menos usado”. O TASK definiu a tarefa no momento da inicialização e o ACTIVATE a executou quando necessário. GET e RELEASE controlaram recursos compartilhados (tambor de memória, impressora). PAUSE é a palavra pela qual a tarefa libera o processador. Foi incluído em todas as operações de E / S e era invisível para o código da transação. Possibilitou um algoritmo de escalonamento cíclico simples que evita o bloqueio.

Após a declaração[provavelmente sobre demissão - aprox. trans.] Escrevi um poema raivoso e um livro que nunca foi publicado. Descreveu como programar no FORT e incentivou a simplicidade e a inovação. Também descreve a técnica do código costurado indireto, mas pela primeira vez foi implementado no NRAO.

Eu trabalhei no conceito de metalinguagem - uma linguagem que fala de uma língua. Fort agora podia interpretar o assembler que o compilador montou, que compilou o intérprete. No final, decidi que a terminologia não funcionava, mas o termo "metacompilação" para recompilar o FORT em si ainda estava em uso.

NRAO, 1971


George Conant me ofereceu uma posição no NRAO (National Radio Astronomy Observatory, 22 sílabas). Eu o conhecia no CAO e ele gostava do Ephemeris 4. Nos mudamos para Charlottesville, Virginia e passamos o verão em Tucson, Arizona, quando o radiotelescópio Kitt Peak estava disponível para manutenção.

O projeto envolveu a programação do minicomputador Honeywell 316 para controlar um novo banco de filtros para um radiotelescópio de 36 polegadas de ondas milimétricas. Ele tinha uma fita magnética de nove faixas e um terminal de tubos Tektronix com uma "memória" [provavelmente se referindo a tubos de pós-brilho ou potencioscópios - aprox. perev.]. George me deu total liberdade no desenvolvimento do sistema, mas não ficou satisfeito com o resultado. No NRAO, todo mundo usava o FORTRAN, e agora eu aparecia com o meu FORT. Ele estava certo que os padrões da organização deveriam fornecer uma linguagem de programação comum. Agora, outros programadores também querem seus próprios idiomas.

Seja como for, escrevi o código FORT no assembler no mainframe IBM 360/50. Depois recompilei-o sob 316. Depois compilei-o nativamente para 316 (embora eu tivesse um terminal 360, o tempo de resposta foi terrível). Depois que o sistema ficou disponível, ficou fácil. Havia dois modos de observação: todas as frequências e linhas espectrais. As linhas espectrais eram mais interessantes, porque eu podia exibir os espectros enquanto coletava os dados e suavizar as formas das linhas usando o método dos mínimos quadrados.

Em Tucson, onde Ned Conklin liderou, o sistema foi bem recebido. Essa foi outra etapa na redução da quantidade de dados imediatamente após a coleta. Os astrônomos começaram a usá-lo para detectar e mapear moléculas interestelares, assim que isso se tornou uma área de pesquisa da moda.

Bess Rather foi contratada para apoiar o observatório. Primeiro, ela teve que estudar o sistema FORT, depois explicar e documentá-lo com o mínimo de ajuda da minha parte. No ano seguinte, reprogramei o DDP-116 para otimizar a indicação do telescópio. Então, Bess e eu substituímos o DDP-116 e o ​​Honeywell 316 pelo DEC PDP-11.

Essa substituição tornou-se possível devido ao desenvolvimento de código costurado indireto. Esse foi um desenvolvimento natural do meu trabalho no Mohasco, embora eu tenha aprendido mais tarde que o DEC usava código costurado direto em um de seus compiladores. Em vez de compilar toda a definição toda vez, o compilador simplesmente pegou o endereço de cada palavra usada no dicionário. Essa melhoria de desempenho para cada link requer apenas dois bytes, e o intérprete pode executar o código muito mais rapidamente. No DEC PDP-11, esse intérprete era essencialmente uma macro de duas palavras:

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


Agora o FORT foi concluído. E eu sabia disso. Eu poderia escrever código mais rápido e era mais eficiente e confiável. Além disso, era portátil. Continuei reprogramando o DDP-116, que se concentra em apontar o telescópio Green Bank de 300 polegadas, e o HP mini, que começou com uma radioastronomia básica muito longa (VLBI). George me deu o ModComp e eu programei a transformada de Fourier para interferometria e busca por pulsar (em conjuntos de dados de 64K). Eu até demonstrei que a multiplicação complexa do IBM 360 no FORT era 20% mais rápida que no montador.

O NRAO apreciou o que escrevi. Eles tinham um acordo com uma empresa de consultoria para identificar tecnologias colaterais. A questão do patenteamento da FORT já é discutida há algum tempo. Porém, como as patentes de software eram contraditórias e poderiam ser resolvidas com o envolvimento da Suprema Corte, a NRAO se recusou a lidar com esse problema. Como resultado, os direitos autorais voltaram para mim. Eu não acho que as idéias devam ser patenteadas. Olhando para trás, deve-se concordar que a única chance do FORT é permanecer em domínio público. E lá ele floresceu.

O código costurado alterou as palavras estruturais (como DO LOOP IF THEN ). Eles obtiveram uma implementação elegante com endereços na pilha de dados em tempo de compilação.

Agora, cada implementação do forte tinha montador para a arquitetura de seu computador. Ele usou opcodes na notação postfix e gerou endereços na pilha de dados, com palavras estruturadas do tipo FORT para ramificação. Os mnemônicos de assembler foram definidos como classes de palavras usando ; CODE . Foi possível codificar tudo isso em um dia.

Operadores aritméticos incomuns também provaram seu valor.

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


M * é a multiplicação usual de hardware de dois números de 16 bits em um produto de 32 bits (argumentos, é claro, na pilha de dados). É seguido por * / com divisão para implementar aritmética fracionária. / MOD retorna o quociente e o restante e é ideal para localizar entradas em um arquivo. SQRT retorna um resultado de 16 bits de um argumento de 32 bits. O SIN.COS retorna imediatamente seno e cosseno, o que é útil para vetores e aritmética complexa (FFT). ATAN é a operação inversa e não possui ambiguidades no quadrante. EXP e LOG são calculados na base 2.

Nessas funções, foi utilizada a aritmética de ponto fixo - 14 ou 30 bits à direita do ponto binário para trigonometria, 10 para logaritmos. Isso se tornou uma marca registrada da FORT, pois essa aritmética é mais simples, mais rápida e mais precisa do que o ponto flutuante. Mas, se necessário, você pode implementar facilmente hardware e software com um ponto flutuante.

Aplaudo o trabalho inestimável de Hart, que compilou tabelas de aproximações de funções com precisão diferente. Eles liberaram os programadores de aplicativos das limitações das bibliotecas existentes.

A palavra FAZ> apareceu (foi escrita como ; :) . Ele definiu uma classe de palavras (como ; CODE), estabelecendo que a definição deve ser interpretada quando se refere a uma palavra. Foi difícil de implementar, mas acabou sendo especialmente útil para definir códigos de operação.

No entanto, não consegui convencer Charlottesville de que a FORT combina com eles. Eu não tinha permissão para programar o VLA. Em qualquer grupo de programadores, 25% amam Fort e 25% odeiam. As disputas são difíceis e o compromisso raramente é alcançado. Como resultado, os primeiros 25% uniram forças e criaram a Forth, Inc. Mas isso é outra história.

Moralidade


A história do FORT tem uma certa moral: um jovem programador persistente luta contra a indiferença para descobrir a Verdade e salvar seus camaradas sofredores. Está ficando melhor: assista à Forth, Inc. ir contra a IBM no sistema bancário francês.

Eu sei que o FORT ainda é a melhor linguagem de programação. Estou satisfeito com seu sucesso, especialmente no campo ultraconservador da inteligência artificial [recordação, 1991 - aprox. transl.] .

Minha preocupação é que aquelas pessoas que não deveriam apreciar como o FORT incorpore sua própria descrição da linguagem de programação ideal.

Mas ainda estou pesquisando sem licença. O FORT levou a uma arquitetura que promete uma incrível combinação de hardware e software. Bem como outro novo ambiente de programação.

All Articles