Pergunta

Duplicate possíveis:
Por que nos preocupamos com os números de linha em tudo?

Estou curioso sobre o porquê das primeiras versões da linguagem de programação BASIC tinha linha de numeração como em:

42 PRINT "Hello world!"

Os editores de texto naquela época não tinha numeração de linha?

EDIT: Sim, eu sei que eles são usados ??para GOTOs, mas por quê? Quero dizer ter etiquetas era muito caro computacionalmente?

Foi útil?

Solução

Muitos microcomputadores teve um interpretador BASIC em ROM, que teria início na inicialização. O problema era que não havia nenhum editor de texto ou sistema de arquivos para falar. Você teve um prompt interativo para fazer tudo através. Se você quiser inserir uma linha de código, você acabou de digitar isso, começando com o número da linha. Seria inseri-lo no local correto em você código. por exemplo:

>10 print "hello"
>30 goto 10
>20 print "world"
>list
10 PRINT "hello"
20 PRINT "world"
30 GOTO 10
>

(Nesse exemplo> é o BASIC prompt)

Se você queria apagar uma linha, você deve digitar algo como ERASE 20. Alguns sistemas realmente extravagantes lhe deu um editor de linha (ou seja EDIT 10) E se você não planejar seus números de linha e correu para fora (como faço para inserir uma linha entre 10 e 11?) Alguns sistemas deu-lhe um comando RENUM que renumerar o seu código (e ajustar GOTOs e GOSUBs apropriadamente).

Diversão vezes!

Outras dicas

A numeração de linha BASIC original era realmente uma parte integrante da língua, e usado para fluxo de controle.

Os comandos Goto e GOSUB levaria a linha, e usá-lo para o fluxo de controle. Isso era comum, em seguida, (mesmo que seja desencorajado agora).

Eles foram usados ??como rótulos para GOTO e GOSUB

Como esta:

10 PRINT "HELLO WORLD"
20 GOTO 10

Não houve rótulos nomeado em algumas versões anteriores do BASIC

Eles também foram obrigados se você queria inserir uma linha entre 2 linhas existentes de código, porque nos primeiros dias, você não tinha editores de texto completo. Tudo tinha que ser digitado no interpretador "interativo".

Então, se você digitou:

15 PRINT "AND THE UNIVERSE"

O programa se tornaria:

10 PRINT "HELLO WORLD"
15 PRINT "AND THE UNIVERSE"
20 GOTO 10

Quando você correu para fora de números de linha, você pode executar uma ferramenta "renumeração" a numerar todas as linhas em seu programa, mas nos primeiros dias do Commodore 64 e outros computadores domésticos, nós nem sequer têm que, assim você teria que renumerar manualmente. É por isso que você teve que deixar lacunas de 10 ou mais nos números de linha, então você pode facilmente adicionar linhas no meio.

Se você quiser experimentar o intérprete Commodore 64, confira este C64 emulador escrito em Flash: http://codeazur.com.br/stuff/fc64_final/ (sem instalação requerida)

BASIC, os números de linha indicada sequência.

Além disso, muitos editores mais velhos não foram para arquivos, mas simplesmente linhas ( "editores de linha", por exemplo, ed, o editor padrão ). Numerando-os desta forma, você sabia qual linha você estava trabalhando.

De volta ao dia todas as línguas tinham números sequenciais, tudo estava em cartões perfurados. Havia uma linha por cartão. Baralhos de cartas composta seu programa.

Quando você deixou cair os cartões, você colocá-los em um classificador de cartão que usou esses números sequenciais.

E, claro, eles foram referenciados por construções de controle de fluxo.

Um simples google revela que Wikipedia tem a dizer sobre isso :

Os números de linha foram um elemento necessário de sintaxe em algumas linguagens de programação mais antigos, como GW-BASIC. [2] A principal razão para isto é que a maioria dos sistemas operacionais no momento faltava editores de texto interativos; uma vez que a interface do programador foi geralmente limitado a um editor de linha, os números de linha previsto um mecanismo pelo qual as linhas específicas do código-fonte pode ser referenciada para edição, e pelo qual o programador pode inserir uma nova linha a um ponto específico. Os números de linha também forneceu um meio conveniente de distinguir entre o código a ser inserido no programa e comandos a serem executados imediatamente quando digitado pelo usuário (que não têm números de linha).

No C64, não havia sequer um editor real (built-in pelo menos). Para editar uma parte do programa, você faria algo como LIST 100-200, e então você só seria capaz de editar as linhas que foram atualmente exibidos na tela (sem rolagem para cima!)

Eles estavam etiquetas para declarações, para que você possa GOTO o número da linha. O número de declarações não necessariamente tem que coincidir com os números de linha físicos no arquivo.

Os números de linha foram usadas no fluxo de controle. Havia sub-rotinas não nomeados. Você tinha que usar GOSUB 60, por exemplo, para chamar a sub-rotina começando na linha 60.


Em sua atualização, nem todas as línguas tinham rótulos, mas todas as línguas tinham números de linha ao mesmo tempo. Ao mesmo tempo, tudo era cartões perfurados. BASIC foi uma das primeiras línguas interativos, onde você realmente pode digitar algo e ter uma resposta imediatamente. Os números de linha ainda estavam a tecnologia atual.

Etiquetas são uma despesa extra. Você tem que manter o controle da correlação entre a etiqueta simbólica e o código ou dados a que se refere. Mas se cada linha tem um número de linha (e se todas as transferências de demonstrações de fluxo de controle sempre se referem ao início de uma linha), então você não precisa de uma tabela de símbolos separada.

Além disso, mantenha em mente que interpretadores BASIC originais não precisa de uma tabela de símbolos para as variáveis: Havia 26 variáveis ??nomeadas A-Z. Alguns eram sofisticados e teve An-Zn. Alguns tem muito extravagante e acrescentou uma distinção entre string, inteiro e ponto flutuante, acrescentando "$" ou "%" após a variável. Mas foi necessária nenhuma tabela de símbolos.

IIRC, números de linha foram utilizados principalmente como rótulos para instruções GOTO e GOSUB, já que em alguns sabores (a maioria?) De BASIC não havia nenhuma maneira para rotular uma seção do código.

Eles também foram usados ??pelo editor - ou seja, você disse:

edit 100

para editar linha 100.

Como outros apontaram, estes números de linha foram usados ??como parte de sub-rotinas.

É claro que há uma razão para que isso não é feito mais. Imagine se você diz GOTO 20 na linha 10, e depois perceber que você precisa escrever mais 10 linhas de código após a linha 10. De repente, você está quebrando-se contra 20 assim que você quer necessidade de mudar a sua rotina mais longe ( números mais altos) e alterar o seu valor GOTO, ou você precisa escrever um outro sub-rotina que salta mais longe no código.

Em outras palavras, tornou-se um pesadelo de código espaguete verdade e não é divertido de se manter.

Ele foi inscrito no na linha de comando em muitos casos (ou era, na minha antiga Commodore 64) de modo que não pode sempre ter sido um editor de texto, ou se houve, foi muito básico.

Além disso, você precisa fazer GOTOs e similares, bem como linhas de inserção entre outros.

ou seja:

10 PRINT "HELLO"
20 GOTO 10
15 PRINT " WORLD"

onde ele iria na lógica 10 15 20

Alguns editores só tinha um modo "Substituir" e nenhum modo "insert". Isso fez com que a edição do código existente extremamente dolorosa. Ao adicionar esse recurso de número de linha, você poderia, contudo, corrigir o código existente de qualquer lugar dentro do arquivo:

100 PRINT "Broken Code"
200 PRINT "Foobar"
...
101 patch the broken code
102 patch more broken code

Porque os números de linha não têm de ser encomendados dentro do arquivo.

Os números de linha eram uma parte da linguagem, em alguns muito cedo, mesmo o sistema operacional era apenas estas linhas simples. Tudo o que tinha era uma linha de cada vez para manipular. Tente escrever um sistema de contabilidade usando 1-4k arquivos de programa e segmentando-o por tamanho para fazer outras coisas. Para editar você usou os números de linha para dizer o que você estava editando. Então, se você entrou como:

10 PRINT "howdy"
20 GOTO 10
10 PRINT "WOOPS"
15 PRINT "MORE WOOPS"
20
RUN

Você deseja obter:

WOOPS
MORE WHOOPS

O vazio 20 seriam effectivly excluir essa linha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top