Por que as declarações em muitas linguagens de programação são encerradas por ponto e vírgula?

130

Existe uma razão para que um ponto-e-vírgula tenha sido escolhido como terminador de linha em vez de um símbolo diferente?

Quero conhecer a história por trás dessa decisão e espero que as respostas levem a insights que possam influenciar decisões futuras.

Um codificador
fonte
6
Erlang e prólogo usam paradas completas.
31812 Dave Clarke #
13
Gostaria de saber quantas linguagens de programação você conhece. Existem muitos idiomas que não usam ponto e vírgula.
knivil
50
Aposto que a resposta será algo como "o valor ASCII do ponto e vírgula é particularmente durável quando usado como o último caractere em um cartão perfurado de 80 caracteres".
22612 Ryan Thompson
22
Sua pergunta não vai longe o suficiente. A verdadeira questão é, “por qualquer símbolo em tudo?”
Konrad Rudolph
5
Porque está na linha inicial de um teclado qwerty?
Wim

Respostas:

132

Em inglês, o ponto-e-vírgula é usado para separar itens em uma lista de instruções, por exemplo

Ela viu três homens: Jamie, que veio da Nova Zelândia; John, filho do leiteiro; e George, um tipo magro de homem.

Ao programar, você está separando várias instruções e usando um ponto final, pode ser facilmente confundido com um ponto decimal. O uso do ponto-e-vírgula fornece um método fácil de analisar para separar as instruções individuais do programa, mantendo-se próximo da pontuação normal em inglês.

Editar para adicionar
Nos primeiros dias em que a memória era cara, o processamento era lento e as primeiras linguagens de programação eram criadas, era necessário dividir o programa em instruções separadas para processamento. Alguns idiomas exigiam que cada instrução fosse colocada em uma linha para que o retorno de carro pudesse atuar como delimitador de instrução. Outros idiomas permitiram um formato mais livre ao layout do texto e, portanto, exigiram um caractere delimitador específico. Esse personagem foi escolhido para ser o ponto-e-vírgula, provavelmente devido à semelhança com o uso no idioma inglês (isso deve ser uma suposição; eu não estava lá na época) e porque não produziu um conflito com a outra pontuação marcas e símbolos necessários para fins matemáticos ou outros fins sintáticos.

Editar novamente
A necessidade de algum caractere terminador remonta aos requisitos para analisar o texto do idioma. Os primeiros compiladores foram escritos em linguagem assembly ou, em alguns casos, diretamente nas instruções de máquina binária criadas manualmente. Ter um caractere especial que identifique o final da instrução e delimite a parte do texto que está sendo processada facilita muito o processamento. Como eu disse acima, outros idiomas usaram o retorno de carro ou os colchetes. Algol, Pascal, Ada, BCPL, B, C, PL / M e outras famílias de idiomas usam o ponto e vírgula. Quanto a quem foi o primeiro a usar esse personagem em particular, não volto na história o suficiente para lembrar. Sua escolha e adoção faz todo sentido, pois

  • Seu uso reflete o uso na pontuação normal em inglês.
  • Outros caracteres (por exemplo, ponto final) podem ser confusos, pois eles já têm um uso comum (ponto final também é usado como ponto decimal).
  • Um caractere de pontuação visível permite um layout de código de formato livre.
  • O uso de um caractere delimitador semelhante em linguagens derivadas ou posteriores se baseia na familiaridade adquirida por todos os programadores que usaram a linguagem anterior.

Como observação final, acho que houve mais tempo gasto nessas respostas e comentários do que na decisão de usar o ponto-e-vírgula para encerrar uma declaração ao projetar o primeiro idioma que o usava dessa maneira.

uɐɪ
fonte
19
Não totalmente correto. O ponto e vírgula separa sentenças em blocos: cada bloco deve ser uma sentença de trabalho, mas usamos o ponto e vírgula para indicar que existe um forte vínculo entre duas sentenças. É meio caminho entre uma vírgula e um ponto final, por isso é realmente um ponto de parada, mas vincula uma frase à outra. A frase acima seria: "Ela viu três homens; Jamie: que veio da Nova Zelândia, John: o filho do leiteiro e George: um tipo magro de homem". O uso do ponto e vírgula pode ser substituído por vírgula. Falou pouco sobre o tópico, mas a essência é essencialmente a mesma; quebra declarações.
28412 alex.p # 1353
40
@ alex.p, na verdade, um uso aceitável de ponto-e-vírgula está no lugar de uma vírgula quando causaria uma frase confusa, o que torna isso correto.
Ryathal
13
Informações críticas sobre ponto-e-vírgula: theoatmeal.com/comics/semicolon
Ed James
7
@ alex.p: Parece que você está dizendo que o uso de Ian está errado, mas você pode simplesmente dizer que a explicação de como usamos ponto-e-vírgula está incompleta. Se você está dizendo que ele está errado, então você está completamente errado. Seu uso de ponto-e-vírgula é inteiramente convencional, e eu acho que é muito mais comum do que o exemplo que você dá. Se você está simplesmente dizendo que ele não fornece uma explicação exaustiva, não sei por que isso realmente vale a pena mencionar.
Iconoclast
17
@Ian "isso tem que ser uma suposição, eu não estava lá no momento" Você perdeu uma oportunidade perfeita para (corretamente) usar um ponto e vírgula lá :)
Travis Christian
70

Muitos idiomas usam sintaxe modelada após C (que foi modelada após B - obrigado @Crollster). Como pode ser visto nos comentários, há uma longa cadeia de tais idiomas ... B foi inspirado no PL / I, que foi precedido pela ALGOL ao usar o ;como separador.

Como em C o terminador da declaração é ;, esses idiomas seguem o exemplo.

Quanto ao motivo pelo qual foi selecionado como terminador de declaração em C - possivelmente por causa de seu uso em inglês "para indicar declarações interdependentes" .

C também foi inventado no PDP-11 em um momento em que havia uma quantidade limitada de memória disponível para conjuntos de caracteres; portanto, os inventores das línguas tiveram que trabalhar dentro dessas restrições.

Oded
fonte
8
C apenas seguiu a convenção de usar ponto-e-vírgula como usado por seu antecessor 'B'
Crollster 13/03/12
8
B apenas seguiu a convenção de ponto e vírgula utilizando como usado por seu antecessor 'PL / I' :)
Skomski
15
@ Skomski - O que se seguiu? Estou esperando por esse último tartaruga para entrar;)
Oded
26
-1; Vamos lá pessoal, todos nós esquecemos o ALGOL extremamente influente? Tinha ponto-e-vírgula como separador de instruções antes de tudo o mais que você está mencionando. (Eu não sei se ele teve a idéia de algum outro lugar embora)
hugomg
13
@ Oded - Eu acho que você encontrará tartarugas todo o caminho . * 8 ')
Mark Booth
54

FORTRAN usou o retorno de carro para delinear instruções. Período utilizado COBOL. O LISP não usou nada, contando com parênteses para tudo. ALGOL foi o primeiro idioma a usar ponto e vírgula para separar as declarações. O PASCAL seguiu o exemplo da ALGOL, usando ponto e vírgula para separar as declarações.

PL / I usou ponto-e-vírgula para finalizar instruções. Há uma diferença, e isso é facilmente visto no PASCAL. Ada seguiu a liderança de PL / I nesse item, em vez da ALGOL.

O ponto e vírgula como separador ou terminador de declarações foi rapidamente aceito pela comunidade de ciência da computação como uma notação útil e, tanto quanto eu sei, toda linguagem subsequente estruturada em bloco seguiu o exemplo da ALGOL e usou ponto e vírgula para separar ou encerrar declarações.

Foi-me dito há muitos anos que o BCPL usava o ponto- e- vírgula E o retorno de carro como separadores / terminadores de instruções, mas eu nunca usei o idioma sozinho e não consigo verificar isso. Em algum momento, o uso de retorno de carro para separar ou encerrar instruções foi descartado dos descendentes da BCPL. BCPL gerou B, B gerou C, C gerou C ++, Java, D e uma série de coisas consideravelmente menos bem pensadas que PASCAL e Ada.

John R. Strohm
fonte
2
Deve-se notar que o uso de ponto-e-vírgula ou nova linha está reaparecendo recentemente. Javascript, Lua, Go e Haskell têm ponto-e-vírgula implícito na nova linha, se for sintaticamente válido lá. E, claro, alguns idiomas que mantiveram a nova linha como separador. Shell e Python vêm à mente aqui.
Jan Hudec
2
+1 para "consideravelmente menos bem pensado que PASCAL e Ada"
Aditya
2
O Algol 58 , um precursor do Algol 60, usava ponto e vírgula. Observe que, na época, muitas vezes era feita distinção entre a forma de publicação de um idioma e a forma de entrada real, porque os dispositivos de entrada eram bastante limitados: somente em maiúsculas etc. Essa dicotomia não era verdadeira para FORTRAN, mas para uma número de outros idiomas.
Dan Halbert #
5
@kevincline: Você consideraria o Boeing 777 de uso comum? Toda linha do software de aviônicos que voa naquele avião é escrita em Ada.
John R. Strohm
2
@kevincline Skype: escrito em Delphi (Pascal.) A Microsoft tentou mudar isso depois que eles o adquiriram, mas não conseguiram portá-lo com sucesso, então agora eles estão comprando licenças Delphi. Já assistiu TV nos EUA? A estação provavelmente roda em software da WideOrbit, escrito em Delphi; eles são os líderes de mercado por uma margem enorme. Já esteve em um parque temático? Há uma boa chance de o sistema de bilheteira ter sido escrito em Delphi. Pascal está em todo lugar; é que ele oferece uma vantagem competitiva tão forte que muitas pessoas tentam ficar caladas para que seus concorrentes não descubram.
Mason Wheeler
14

Por que não outro símbolo?

Alguns idiomas usaram outros símbolos - versões antigas do BASIC usavam dois pontos, por exemplo.

Ignorando as poucas exceções, no entanto, acho que há duas razões principais. A primeira é que você está simplesmente procurando por algo inequívoco. Em um analisador típico, se você encontrar um erro grave o suficiente para não poder continuar analisando a instrução atual, normalmente tenta recuperar o analisador em sincronia apenas passando adiante para o terminador de instruções e reiniciando o analisador a partir do início da próxima declaração. Para isso, você deseja algo que normalmente não ocorrerá em nenhum outro lugar do código, e um ponto-e-vírgula passa a ser um símbolo com pouco outro significado anexado, por isso é muito fácil dedicar esse objetivo.

A segunda razão é um pouco semelhante, mas direcionada mais para as pessoas que leem / usam o código. Novamente, ele volta ao fato de que o símbolo real que você usa não importa muito. Há uma vantagem substancial na legibilidade de obter ao usar o símbolo que seu leitor está acostumado a ver para um fim específico, quando e se possível. Isso não significa que C é a sintaxe perfeita e todo o resto deve segui-la de maneira servil, mas significa que pessoas suficientes estão familiarizadas com esse estilo de sintaxe que uma linguagem vagamente semelhante ganha muito (e perde muito pouco) seguindo aproximadamente a mesma sintaxe onde puder.

Eu observaria que isso é como projetar quase qualquer outro programa. Se eu escrever um programa que usa janelas de algum tipo, tentarei usar apenas os recursos nativos da (s) plataforma (s) de destino. Muitas das decisões incorporadas serão amplamente arbitrárias e podem ser tomadas de maneira diferente sem grandes perdas de funcionalidade - mas igualmente, alterá-las sem um ganho substancial de funcionalidade apenas confunde os usuários sem realizar nada útil. Os mesmos princípios básicos se aplicam a "o que deve terminar (ou separar) as declarações em um idioma?" como "como deve ser uma barra de rolagem" ou "como um controle de árvore deve funcionar?" Em todos esses casos, a decisão é quase sempre arbitrária e a uniformidade fornece um benefício substancial em si mesma.

Eu acrescentaria que o mesmo acontece em muitas linguagens, da maneira que a maioria de nós está tão acostumada antes da programação que poucas pessoas pensam nisso. Por que todo mundo usa "+" para indicar adição ou "-" para indicar subtração? Como a forma do símbolo não importa muito, mas todo mundo que concorda em aplicar o mesmo significado a cada símbolo é muito importante.

Jerry Coffin
fonte
Muito bons pontos (+1), embora eu não concorde totalmente com a parte "principalmente arbitrária". Eu acho que existem definitivamente algumas coisas que são mais intuitivas e outras que são menos intuitivas. No uso de um X pelo Windows para fechar janelas, existe algum simbolismo preexistente (talvez apenas vagamente conectado) que ele utiliza. E certo no uso de cores do OS X existe um forte simbolismo em que ele se baseia. (Estou ignorando para o momento que a M $ Windows pode ter roubado o X do X Windows, desde que eu não me lembro o que é utilizado.)
iconoclasta
3
@Brandon: Eu certamente não pretendia dizer que todas as partes do design da GUI são arbitrárias - talvez eu devesse ter dito "algumas" em vez de "a maioria". Não seria X que definisse qualquer forma específica para o ícone "fechar janela" - isso seria um gerenciador de janelas individual.
Jerry Coffin
Para o melhor de minha lembrança, o BASIC original de Dartmouth usou apenas retorno de carro para encerrar declarações (ou seja, uma declaração por linha). I PENSAR várias instruções em uma linha, separados por dois pontos, foi uma extensão Microsoft.
John R. Strohm
7

O ponto-e-vírgula foi originalmente proposto no Algol 60 como um separador de instruções , não um terminador.

Antes do Algol 60, a única linguagem de programação de alto nível existente era o Fortran, que exigia que cada declaração estivesse em uma linha separada. As declarações que abrangem várias linhas, como do-loops, foram consideradas uma singularidade e consideradas como 'blocos de declaração'.

Os projetistas do Algol 60 perceberam que as instruções precisavam de uma estrutura hierárquica (if-then-else, do-loops, declarações de caso etc.) e elas poderiam ser aninhadas umas nas outras. Portanto, a ideia de cada afirmação em uma linha separada não fazia mais sentido. Composição seqüencial de declarações no formato S1; S2; ...; Sn opcionalmente entre colchetes de início e fim foi chamado de instruções compostas e se encaixam na estrutura hierárquica de instruções prevista pelo Algol 60. Portanto, aqui, o ponto-e-vírgula é claramente um separador de instruções , não um terminador.

Isso deu origem a problemas na prática. Algol 60 também tinha uma "declaração vazia" que foi denotada por não escrever nada. Assim, pode-se escrever " begin S1; end " onde o ponto-e-vírgula aparece como se estivesse terminando S1. Mas o compilador Algol 60 realmente o tratou como um separador entre S1 e uma declaração vazia invisível a seguir. Essas sutilezas eram um pouco demais para programadores práticos. Tendo sido acostumados a linguagens orientadas a linhas como Assembly e Fortran, eles realmente pensavam no ponto e vírgula como um terminador de declarações. Quando os programas eram gravados, normalmente ponto-e-vírgula era colocado no final das instruções, da seguinte forma:

    a [i]: = 0;
    i: = i + 1

e o ponto e vírgula realmente parecia um terminador para a primeira declaração. Se os programadores tratassem o ponto-e-vírgula como um terminador, uma declaração como esta daria um erro de sintaxe:

    se eu> 0 então
      a [i]: = 0;
    outro
      a [i]: = 1;

porque o ponto-e-vírgula termina o "se" e, portanto, o "mais" fica pendente. Os programadores estavam completamente confusos.

Assim, o PL / I, que foi o sucessor da IBM para o Fortran orientado a linhas, decidiu tornar o ponto-e-vírgula um terminador de declaração em vez de um separador. Os programadores ficaram felizes com essa escolha. A maioria das linguagens de programação seguiu o exemplo. (Pascal resistiu à tendência, mas seu sucessor Ada desistiu.)

[Nota adicionada: o artigo da Wikipedia sobre comparações de linguagens de programação possui uma boa tabela resumindo como o ponto-e-vírgula é tratado em várias linguagens de programação.]

Uday Reddy
fonte
6

Este é um trabalho de suposição, mas olhando para um teclado QWERTY padrão restrito aos valores ASCII, os caracteres naturais para terminação / separação seriam.!?,:; e retornos de carro. desses!?: deve ser imediatamente desqualificado por receber várias chaves e o encerramento de instruções será uma coisa muito comum. Os períodos seriam desqualificados porque são facilmente confundidos com pontos decimais, o que os tornaria desnecessariamente complicados para serem um terminador, devido ao espaço limitado dos computadores iniciais. os retornos de carro seriam desqualificados depois que as linhas de código tivessem potencial para ser mais longas do que o que pode ser mostrado em uma única linha na tela; portanto, seria mais difícil ler um programa quando as linhas precisassem ser roladas horizontalmente, ou exigir caracteres adicionais para criar uma continuação na próxima linha, que novamente adiciona complexidade. isso sai e; como opções, dentre essas, é usada com muito mais frequência por escrito em comparação com; portanto, o ponto-e-vírgula é escolhido porque é mais fácil de digitar, menos confuso porque adiciona significado a um personagem com significado limitado e menos complicado porque casos especiais realmente não existem com seu uso.

O ponto-e-vírgula foi escolhido porque era o melhor personagem baseado na preguiça e na simplicidade.

Ryathal
fonte
você tem um bom argumento aqui; Eu só iria voltar a palavra "escolhido" (o que é difícil de provar) para algo como "... O ponto e vírgula ganhou porque foi o melhor personagem baseado em preguiça e simplicidade"
mosquito
2
Dificilmente. O ponto e vírgula como terminador / separador de instruções começou em ALGOL (1958), que antecedia o ASCII (trabalho iniciado em 1960, primeira versão 1963, versão principal 1967, última atualização em 1986).
John R. Strohm
@ JohnR.Strohm bem que é novidade para mim, mas tudo isso é praticamente a história antiga para mim
Ryathal
6
Essa é uma ótima teoria, mas a realidade é que as teclas necessárias precisam de uma tecla Shift para chegar ao ponto-e-vírgula de qualquer maneira até que a entrada moderna do teclado apareça nos anos 70. (Existem várias fotos boas na parte inferior do artigo da wiki: en.wikipedia.org/wiki/Keypunch ) Provavelmente, é apenas baseado em regras naturais do idioma inglês, um modismo que foi particularmente popular ao mesmo tempo. (Eu incluiria todos os idiomas dos anos 50: ALGOL, FORTRAN, COBOL e SQL, excluindo LISP.) O ponto-e-vírgula do ALGOL é apenas uma das muitas convenções em inglês usadas, que o BASIC expandiu posteriormente.
precisa
@ SilverbackNet, razão pela qual o "trabalho de adivinhação pura" provavelmente não deve ser a base de uma resposta aqui.
precisa saber é o seguinte
6

É em grande parte uma escolha arbitrária. Alguns idiomas fizeram outras escolhas. COBOL finaliza instruções com o .caractere. FORTRAN, BASIC e Python geralmente encerram instruções com novas linhas (com sintaxe especial para instruções com várias linhas). E o Lisp coloca suas declarações entre parênteses.

O principal motivo ;é tão popular como separador / terminador de instruções é que a maioria dos idiomas populares de hoje se baseia no ALGOL , que usou essa convenção.

em vez de um símbolo diferente?

Que outro símbolo você poderia escolher?

Os caracteres ASCII # $ @ [] ^ _ `{|} ~ nem sempre estavam presentes nas primeiras codificações de caracteres como ISO 646 .

Os caracteres ()*+-/<=>são normalmente usados ​​como operadores matemáticos e criariam ambiguidades de análise se usados ​​como terminadores de instrução.

product = a * b *  // If '*' were a statement terminator,
c * d *            // Are there two factors, or four?

Problemas semelhantes se aplicam a 'e ", que são normalmente utilizados como delimitadores de cordas; ,, que normalmente é usado para separar argumentos de função e ., que geralmente é usado como um ponto decimal (ou como um delimitador em construções como some_struct.some_field).

Isso sai !%&:;?.

Escolher !ou ?provavelmente não causaria dificuldades técnicas, mas o significado em inglês daria o humor errado ao programa.

print(x)?  # Yes, you should.
           # It's an IMPERATIVE language; stop questioning my commands.
print(x)!  # OK!  You don't have to shout!

A &seria uma escolha mais sensata como um separador de instrução (não terminator), porque

do_thing_a() &
do_thing_b()

pode ser lido como um comando para fazer a coisa A e depois a coisa B. Mas a maioria das linguagens com um &operador a usa como AND lógico ou bit a bit .

O %sinal pode causar confusão em declarações como interest_rate = 2.99%(que definiria a variável como em 2.99vez do esperado 0.0299). Obviamente, o conhecido significado matemático de %não impediu C de usá-lo como operador restante.

Então isso sai :e ;.

: é uma escolha sensata e, de fato, é usada como o separador de instrução intra-linha na maioria dos dialetos do BASIC.

Mas ;tem a gramática inglesa do seu lado; pode ser usado para separar cláusulas dentro de uma frase.

dan04
fonte
3

Em vez de tentar responder à sua pergunta principal, acho melhor focar na sua pergunta implícita:

Quero conhecer a história por trás dessa decisão e espero que as respostas levem a insights que possam influenciar decisões futuras no design e na implementação de linguagens de programação.

Se você quiser aprender sobre o design da linguagem de programação e o histórico de implementação e obter mais informações sobre o processo, os procedimentos das Conferências de História das Linguagens de Programação são um bom ponto de partida. (Acho que você precisará de uma associação à ACM para poder acessar os procedimentos.)

Por que as declarações em muitas linguagens de programação são encerradas por ponto e vírgula? Existe uma razão para que um ponto-e-vírgula tenha sido escolhido como terminador de linha em vez de um símbolo diferente?

Tomando sua pergunta principal como uma pergunta de exemplo que você pode tentar responder lendo o processo HOPL, gostaria de oferecer o seguinte ponto: as pessoas que projetam uma nova linguagem de programação geralmente o fazem porque consideram as que sabem ser quebrado / deficiente de alguma forma. Seu novo idioma é, por um lado, projetado para corrigir essa deficiência. Por outro lado, os designers de idiomas também copiarão elementos de design de outros idiomas que eles consideram bons ou simplesmente não alteram os elementos com os quais não tiveram problemas.

Especialmente essa última parte é importante: em vez de tentar descobrir qual linguagem de programação já foi o primeiro a usar ponto e vírgula como terminadores e por que um monte de outras linguagens de programação copiados que, provavelmente você vai aprender mais, olhando para as línguas que se não copiar isto. Por exemplo, embora o Smalltalk tenha se inspirado muito em Simula, ele nãocopie sua sintaxe e, em particular, seu uso de ponto e vírgula como terminadores de instruções. Ele mudou os terminadores (realmente separadores) para um ponto final e usa o ponto e vírgula para outra coisa. Por outro lado, o primeiro idioma que já usou um ponto-e-vírgula como terminador de declaração pode ter tido um motivo para mudar isso do que foi usado nos idiomas que vieram antes dele. Também é possível que tenha sido o primeiro idioma a introduzir todo o conceito de um terminador de declaração (ou o fez independentemente de outros idiomas) e que o ponto-e-vírgula tenha sido usado por algum motivo que agora está perdido no tempo. (Suspeito que o último seja o caso aqui, pois nenhum dos outros respondentes conseguiu desenterrar uma citação da pessoa que introduziu o ponto-e-vírgula em vez de oferecer suposições atualizadas sobre por que o ponto-e-vírgula era uma boa escolha.) ponto, Eu acho que você aprenderá mais examinando por que os designers de idiomas mudaram as coisas, e não por que eles os copiaram / mantiveram. Quando as pessoas mudam as coisas, geralmente querem ou precisam explicar a mudança, enquanto não fazem isso ao copiar ou manter as mesmas coisas porque “por que mudaríamos? é assim que é feito! ”

Rinzwind
fonte
2

É sobre visibilidade.

Os primeiros separadores de declarações eram o '.' como em COBOL e nova linha, retorno de carro em FORTRAN.

O CR provou ser limitado, pois dificulta o fluxo de uma declaração por várias linhas.

Ponto final causou um problema mais interessante. Quando você lê texto em inglês, seu cérebro processa as paradas completas em um nível subliminar, você está consciente de que uma frase terminou e pode fazer uma pausa para respirar, mas na verdade não percebe. isso sinalizou. Também em muitas fontes, o '.' é o menor caractere possível, às vezes renderizado como um único pixel. Períodos ausentes ou extras se tornaram a causa mais comum de erros nos programas COBOL.

Assim, aprendendo com os erros iniciais, a ALGOL escolhe um terminador específico que permite que uma declaração flua por várias linhas e escolhe um que seja visível e facilmente percebido pelos leitores humanos. O ponto e vírgula é grande e incomum o suficiente no inglês comum para não ser processado subconscientemente.

James Anderson
fonte
1

Entendi que foi escolhido porque havia a necessidade de um terminador de instrução explícito que não fosse um retorno de carro / nova linha. Nos dias de telas de 80 colunas, na verdade, ter uma única linha de quebra de código em várias linhas era comum o suficiente para que usar \ r ou \ n para o terminador de instrução não funcionasse.

Os pontos e vírgulas eram apenas convenientes porque não são usados ​​em declarações de lógica / matemática. Como tal, eles não entram em conflito com o conteúdo real das declarações de forma significativa.


Pessoalmente, acho que o uso contínuo do ponto e vírgula, juntamente com os requisitos de estilo para manter as linhas com menos de 80 caracteres, é francamente estúpido e anacrônico. Idiomas como python demonstraram extensivamente que você pode escrever códigos concisos e fáceis de entender mais facilmente sem eles. Além disso, se você tiver problemas com linhas com mais de 80 caracteres, precisará de um monitor maior.

Nome falso
fonte
3
Na Idade das Trevas, não havia "telas de 80 colunas". Havia cartões perfurados de 80 colunas e impressoras com diferentes números de colunas. (Cerca de 130 ou mais eram comuns.) FORTRAN finalizou as declarações no final do cartão, mas permitiu que os cartões de continuação continuassem a declaração. Os cartões de continuação foram marcados por um caractere digitado na coluna 6 do cartão. (Qualquer personagem iria trabalhar Dependendo convenção local, você normalmente vê qualquer um sinal de + ou um único dígito, dígitos contando-se de vários cartões de continuação..)
John R. Strohm
11
Uma linguagem como Python seria inviável para os computadores que existiam nos primeiros dias de C. O uso de um caractere de finalização de instrução simplifica a análise e era muito importante reduzir a memória e a carga de CPU dos compiladores décadas atrás. Especialmente nos computadores em que você pagou pelo tempo de CPU a cada segundo.
Gigatron 13/03/12
@Gigatron - Eu estava me referindo apenas ao uso de retornos de carro para encerrar uma declaração, não a nenhum dos aspectos de nível superior do python.
Nome falso
11
@Gigatron, você pode querer dar uma olhada no LISP, e especialmente em sua história inicial no IBM 704. Você pode se surpreender com o que os Antigos poderiam fazer, mesmo trabalhando com facas de pedra e peles de urso.
John R. Strohm
11
@Gigatron: FORTRAN foi executado nos mesmos computadores e usa novas linhas para separar instruções (com sintaxe especial para instruções com várias linhas).
dan04
0

Aqui estão duas perguntas: Por que o ALGOL obteve ponto e vírgula e por que outros idiomas foram atrás dele.

A primeira pergunta já está respondida de várias maneiras aqui.

Como o segundo, o ALGOL foi amplamente utilizado como uma linguagem de pseudocódigo para a escrita de algoritmos. Portanto, ponto e vírgula logo se tornou natural para usuários de diferentes idiomas. E naturalmente eles foram levados para os idiomas mais jovens.

Gangnus
fonte
0

Posso estar errado, mas acho que isso tem algo a ver com o fato de que em muitos montadores um ponto-e-vírgula foi usado para iniciar um comentário, geralmente colocado após uma instrução. Tudo depois de a ;era um comentário e não fazia mais parte da própria instrução.

Depois, é necessário encerrar as instruções quando você as digitar em um intérprete. Instruções breves (por exemplo, expressões matemáticas) podem ser encerradas simplesmente pressionando a tecla Enter, informando ao intérprete que a expressão está pronta para ser calculada e produziu um resultado. Mas, às vezes, alguém queria inserir várias linhas de código para a instrução, portanto, uma maneira de conseguir isso era usar algum caractere especial como terminador da instrução, em vez de depender apenas da tecla Enter. Dessa forma, o usuário pode inserir mais linhas de código de uma só vez, porque a Enter ainda não a enviou ao intérprete. Somente quando o intérprete encontrasse o caractere final em uma linha inserida com Enter, ele finalmente o executaria e calcularia seu resultado.

Agora, combine essas duas coisas e o ponto-e-vírgula parece ser uma escolha óbvia para o caractere final: indica onde a parte da instrução termina e a parte do comentário começa; assim, quando o intérprete a encontra em uma linha, sabe que pode liberar todas as linhas da expressão foram armazenadas em buffer até agora e executadas, porque a instrução acabou de terminar, agora estamos em um comentário (bem, pelo menos até o final desta linha, porque a próxima linha começará no código novamente, iniciando uma nova expressão / instrução).

Isso pressupõe, é claro, que foi realmente o ponto-e-vírgula que foi usado para comentários pela pessoa que teve essa ideia de reutilizá-lo como terminadores de instruções. Se houvesse outro caractere, poderíamos ter terminado com um terminador de instruções diferente.

Inb4: Não, este não é um relato histórico. Não tenho nenhuma evidência de que esse seja o modo como os pontos e vírgulas ganharam vida. É exatamente como eu imagino que isso possa ter acontecido.

BarbaraKwarc
fonte
-1

A maioria das línguas adotou o ponto-e-vírgula porque já era amplamente usada para esse fim e as mudanças não faziam sentido.

E considerando os primeiros idiomas para fazer essa escolha, você terá que considerar quais são as alternativas. Ao projetar um idioma, você deseja que os caracteres necessários estejam disponíveis, e os conjuntos de caracteres no momento foram codificados em 6 bits, geralmente com alguns padrões reservados, geralmente com alguns caracteres não definidos com firmeza (para uma ocorrência posterior disso, pense no variantes nacionais da ISO-646 - a variante dos EUA é bem conhecida sob o nome ASCII - que reutiliza os códigos para caracteres "comuns", como [, #ou $, e vê o efeito em um contexto em que há apenas metade do número de posições de código disponíveis e letras e dígitos que reservam mais da metade).

Provavelmente, não havia outro caractere que pudesse ser usado como separador de instruções de maneira intuitiva ( .provavelmente já é o único candidato sério a esse critério) e sem introduzir dificuldades de expressão ou análise em um momento em que a teoria de análise e expressão ainda estava em elaboração ( .é agora fora de questão devido ao seu uso em números reais).

AProgrammer
fonte
-1

Outro motivo para usar ponto-e-vírgula é porque esse é um dos caracteres que não exigimos ou usamos com mais frequência.

Suponha que o usemos com mais frequência como nome de variável ou algo assim e se ponto-e-vírgula tivesse sido usado como uma palavra-chave ou como um operador, teria sido um conflito de símbolo para o compilador; portanto, era importante usar um símbolo que não seja frequentemente usado na codificação.

Acredito que as linguagens de programação no estilo C a tornaram popular e, em seguida, os autores de novas linguagens de programação não queriam reinventar a roda e continuaram usando-a até agora.

Basav
fonte