Quais recursos contribuíram para a evolução de Pascal?

17

Estou compilando um histórico detalhado da linguagem Pascal e faltam alguns detalhes.

Hoje, existem tantos recursos que consideramos óbvios. Quais recursos contribuíram significativamente para a evolução de Pascal e por que foram significativos?

Estou procurando recursos de idioma, não recursos de plataforma ou estrutura. Assim como sobrecarga do operador ou parâmetros padrão, mas não o suporte ao Linux ou o novo widget Rich Text.

Eu sei que existem alguns sabores diferentes de Pascal (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal, etc.) e eles introduziram os mesmos recursos em momentos diferentes e em paralelo. Está bem. Estou olhando para o idioma Pascal como um todo e quando ocorreram marcos significativos (datas, versões etc.)

Jim McKeeth
fonte
@ Jim Sua pergunta pediu uma lista de datas, mas não solicitou informações sobre por que alguém as consideraria significativas. Reformulei sua pergunta para capturar esse aspecto e o reabri.
2
Você está ciente de que o produto Turbo Pascal revolucionou o mundo Pascal? E o mundo dos computadores IBM também, na verdade? Especialmente porque consertava cordas.
4
Não se esqueça do UCSD Pascal! Ele introduziu bytecodes (códigos-p), muito antes de Java ter um brilho nos olhos de Sun.
Macneil
1
+1 O código p @Macneil UCSD e a VM Smalltalk são as coisas que eu sempre explico quando falo sobre código gerenciado moderno (Java, .NET). É divertido ter um déjà vu ao ver um monte de coisas 'modernas' (como Apps, que é apenas um novo sabor do cliente-servidor).
Jeroen Wiert Pluimers
1
@ Jeroen Pluimers: Eu também me divirto com essa conversa sobre o DVCS ser "novo". Eu usei o SCCS / Teamware na Sun, o Torvalds usou o BitKeeper. Quando vi o CVS, sabia que estava quebrado (como Torvalds). Quando ouvi falar pela primeira vez sobre o SVN, pensei "ah, eles finalmente o consertaram". Mas não. O mundo do OSS (e Joel!) Foi tão danificado pelo CVS fazendo tudo errado, que eles precisam acreditar que é uma coisa nova!
Macneil

Respostas:

10

De uma perspectiva histórica da linguagem, provavelmente a maior contribuição de Pascal foi a forte segurança do tipo. Essa batalha está praticamente terminada agora - o lado de Pascal venceu - e o ponto de inflexão industrial foi o Java. Mas, durante muito tempo, C foi favorecido à frente de Pascal por pessoas que se consideravam codificadores crescidos em grande parte por causa disso: as pessoas queriam a liberdade de manipular seus indicadores como se fossem números inteiros. As implementações práticas de Pascal tinham brechas, no entanto, como sindicatos que não controlavam dinamicamente o campo discriminante, ou até tinham a conversão de tipos de ponteiros a ponto de serem todos menos C (o Turbo Pascal era um deles).

Isso e uma simplificação da complicada especificação ALGOL 68 [1] podem ser um ponto de partida.

[1] Tente ler o relatório ALGOL 68 em algum momento - é definitivamente um produto dos anos 60! Um site na Web menciona alguns de seus estranhos jargões: 'token de ônibus', 'árvores de produção invisíveis', 'ambientes primordiais', 'uniões incestuosas', 'noções', 'protonotions', 'metanotions', 'hypernotions', ' paranoções ", etc.

Barry Kelly
fonte
15

Eu diria que as duas forças motrizes mais importantes ao longo da história de Pascal foram:

  1. Segurança de tipo: Pascal foi seminal ao criar a crença de que a segurança de tipo é importante e crítica em um idioma.
  2. Eficiência do compilador: o Pascal sempre foi projetado como uma linguagem de passe único e mostrou ao mundo o quão rápido um compilador pode ser sem abrir mão da energia. O que contribui para um compilador rápido também é o que contribui para uma linguagem bem projetada e fácil de ler. O genuis da Borland também fornecia tudo isso e desempenho.
Nick Hodges
fonte
PASCAL não foi também o primeiro idioma em que o compilador foi escrito no próprio PASCAL? Outra coisa notável na época era o código P - código para uma máquina pascal virtual. Tudo o que era necessário para implementar o PASCAL em uma máquina diferente era escrever um intérprete ou montador para o código-P.
Ingo
Eu acrescentaria que o tipo safety também incluiu os mecanismos conhecidos como verificações de tempo de execução na maioria dos compiladores pascal. (Quase?) Todo compilador os possui, o que é fundamentalmente diferente da abordagem LINT preferida pelos compiladores C.
Marco van de Voort 30/11/2013
11

Você realmente precisa voltar às origens - encontre um pouco da história de Niklaus Wirth. Pascal começou sua vida como uma língua de ensino. "Algoritmos + estruturas de dados = programas" é um bom ponto de partida.

Na época, Pascal era muito mais simples que o Algol 68 e o PL / 1. Forçou a estrutura e a declaração, além de uma forte segurança de tipo, ao contrário do Fortran4 (o Fortran 77 melhorou um pouco as coisas lá, mas você ainda podia jogar terrivelmente rápido-e-solto). E comparado ao COBOL, era curto, simples e mais fácil de escrever programas. (Olá mundo em cerca de 6 linhas em vez de 600).

Quando se originou, havia coisas como matrizes de caracteres em Pascal - era para manipulação de strings. As coisas melhoraram ao longo dos anos.

Se você realmente deseja se aprofundar na história do Pascal, alguns pontos devem ser levados em consideração:

  • O original de Wirth (Standard Pascal)
  • extensões da Digital Equipment Corp (DEC) no Vax
  • o UCSD p-System (em muitas máquinas, mas principalmente na Apple-2)
  • Turbo Pascal
  • Apollo Domain Pascal (usado para escrever o sistema operacional Domain / OS, também chamado Aegis)
  • Turbo Pascal com objetos e unidades (versão 5.5 e posterior. Edit: acabou de encontrar o PDF do TP 5.5 OOP )
  • Delphi

Na década de 1980, houve um enorme festival de lesmas entre Pascal e C. Havia uma grande quantidade de desenvolvimento e atividade acontecendo nos dois campos.

Como conseqüência, coisas estranhas e maravilhosas como Bliss-32, Algol e PL / 1 praticamente desapareceram - mas as idéias surgiram em Pascal.

EDIT: as matrizes de caracteres podem ser compactadas, o que confere algumas propriedades especiais, mas se você quiser o que agora sabemos como manipulação de strings, você precisará cultivá-las.

rapid_now
fonte
IIRC houve uma pequena quantidade de tratamento especial para packed array[1..n] of char;, por exemplo, em Read (ln) e Write (ln)
Gerry
Sim, readln, writeln eram um pouco especiais, pois podiam lidar com a entrada / saída de um número variável de caracteres. Também houve um pouco de confusão no final dos anos 80, sobre eles serem maus e pecadores e quebrar a construção da linguagem porque aceitaram um número variável de parâmetros. Os puristas odiavam isso. O resto de nós apenas o usou sem se preocupar muito com isso.
quickly_now
Talvez sistemas de módulos / unidades da "outra" linguagem Wirth Modula2. (Embora talvez indireto pelos esforços resultantes para obtê-lo nos padrões de Pascal, ele finalmente tornou o padrão Extended Pascal, embora com sintaxe diferente)
Marco van de Voort
5

Extensões orientadas a objetos! O Object Pascal foi o maior salto (não oficial) dos padrões com o lançamento do Delphi (1) em meados dos anos 90. É difícil escolher apenas um, mas todo o núcleo do modelo de objetos como um todo ajudou a trazer a linguagem para o status moderno. Infelizmente, até hoje, ele não foi transformado em um único padrão oficial unificado, com o qual todos os compiladores se ajustariam para simetria de codificação.

Felizmente, os desenvolvedores do projeto Free Pascal têm acomodado bastante os recursos adicionados ao Delphi pelo Borland e pelo Embarcadero. Os RemObjects não muito, mas pelo menos têm vínculos com o Embarcadero sob o Delphi Prism; portanto, qualquer desvio de um padrão (para tornar o idioma mais compatível com .NET) seria altamente documentado.

Jason McMillen
fonte
8
Objetos foram introduzidos Pascal com Turbo Pascal 5.5
mcottle
1
procedimentos e funções eram, por padrão, estáticos. Você tinha que usar a virtualpalavra-chave para torná-las substituíveis por subclasses.
1
Virtual não é uma palavra reservada no Delphi. A lista de palavras reservadas do Delphi e palavras-chave do Prism pode ser encontrada aqui e aqui .
David I
2
Os objetos foram introduzidos no Pascal pela Apple. en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Carl Manaster
2
@Carl - eu tinha esquecido que os Macs clássicos foram programados em Pascal, e eu não sabia que era uma versão OO de Pascal co-criada por Wirth.
Mcottle
4

Apenas uma ou duas coisas que me lembro de usar Pascal há muito tempo com o MS-DOS:

O Turbo Pascal introduziu mais ou menos um tipo de IDE nos anos 80 (e o desempenho da compilação recebeu um grande impulso em comparação com o UCSD Pascal

De alguma forma, em meados dos anos 90, a Borland mudou o nome de Turbo para Borland Pascal . Como primeiro passo, as Unidades introduzidas, que permitiram dividir grandes projetos em unidades de compilação separadas.

Mais tarde, eles adicionaram também a programação orientada a objetos.

thorsten müller
fonte
Turbo Pascal era o produto simples. Borland Pascal tinha um monte de coisas extra, como montadores etc.
2
As unidades foram introduzidas no Turbo Pascal (v4 IIRC). Eles foram compilados em arquivos .tpu (unidade turbo pascal), que eram o antecessor dos arquivos dcu atuais. Acredito que eles foram baseados em conceitos da linguagem Modula-2 de Wirth.
Gerry
1
O ISTR do UCSD p-System também tinha unidades, mas não sei se elas foram anteriores ao Turbo Pascal ou não.
TMN
Curiosamente, o cartucho "BASIC PROGRAMMING" para o Atari 2600 forneceu em 1980 uma tela de programação surpreendentemente semelhante a uma tela CodeView; era possível visualizar o programa (com o ponto de execução atual destacado) em uma área da tela, os valores das variáveis ​​em um segundo e qualquer saída das instruções "print" em um terceiro. Infelizmente, a quantidade de RAM disponível para o programador era tão restrita que não se limitava apenas a aplicativos "de brinquedo" - nem era um brinquedo. Ainda é uma conquista técnica interessante para uma plataforma com ... #
308
... 128 bytes de RAM (incluindo 24 bytes necessários para ponteiros de tela) e todo o sistema de desenvolvimento cabendo em 4K de ROM (incluindo as formas dos caracteres). Dadas essas restrições, permitir aos usuários 64 bytes de RAM manter seu programa, variáveis ​​e saída foi um truque bastante interessante. Pena que a Atari lançou a Programação Básica antes de desenvolver seu chip "SARA" (que duplicou a RAM de 128 bytes para 256). Ser capaz de usar 128 bytes de RAM para o programa e 64 para variáveis ​​e saída teria sido muito melhor do que ter 64 bytes para tudo.
Supercat
4

Um dos principais passos evolutivos em Pascal foi a noção adequada de strings. A ISO 7185 ("Standard Pascal") não os possuía, o que é meio embaraçoso. No entanto, todos os programadores reais precisavam deles, e implementações viáveis ​​do Pascal (como o Borland / Turbo Pascal) os forneceram.

MSalters
fonte
4

Olhando para as inovações da linguagem Pascal do Delphi - eu adicionaria o modelo de Propriedade, Método, Evento (PME) e a seção "Publicado" para as aulas. Isso tornou o código nativo fácil de usar e estendeu a criação de componentes. Os componentes cumpriram a promessa de Brad Cox de ICs de software.

David I
fonte
3

A luta entre muitos sabores de Pascal nos anos 80 e início dos anos 90.

Você tinha o Apple Pascal , o Microsoft Pascal e o QuickPascal e o Turbo Pascal .

Todos introduziram o Object Pascal de uma maneira ou de outra (QuickPascal 1.0 e Turbo Pascal 5.5 no mesmo período). Apple porque eles exigiram para sua plataforma, Microsoft e Borland porque o OO estava se tornando 'legal' (o QuickPascal morreu logo depois e o Turbo Pascal 6.0 adicionou uma estrutura OO razoável chamada Turbo Vision ).

Rudy Velthuis é bastante completo sobre isso em sua postagem no fórum .

Você pode baixar uma imagem ISO com o DOS 6.22 e alguns dos compiladores do DOS Pascal daquela época .

Jeroen Wiert Pluimers
fonte
2

Eu acho que a introdução de interfaces (no Delphi 3 IIRC) foi muito importante para torná-la uma linguagem moderna orientada a objetos.

François
fonte
Observe que a herança da interface não é OO em si mesma, mas é considerada uma das formas mais verdadeiras de polimorfismo. Como compartilhou o mesmo formato VMT que o COM , tornou muito mais fácil a interoperação com o COM (as pessoas têm opiniões amplas sobre isso ser uma coisa boa ou ruim <g>).
Jeroen Wiert Pluimers
2

Vou adicionar métodos anônimos e genéricos à mistura.

gabr
fonte
1
Para as versões mais recentes do Delphi, talvez. Eu usei o Delphi 7, então é claro que nunca usei métodos anônimos ou genéricos!
precisa saber é o seguinte
2

Para mim, as duas maiores coisas (depois de algumas outras línguas como C ...) foram a insensibilidade do caso e a velocidade do compilador.

E depois disso é o fato de que é mais fácil escrever com o teclado finlandês, porque não preciso constantemente das teclas {} ou outras que são difíceis de alcançar ...

Eu estive a bordo desde o Delphi2, mas usei o D1 no trabalho há alguns anos ...

Tommi Prami
fonte
1

Comece com "Programação Estruturada" , de Dahl, Dijkstra e Hoare. A seção de Dijkstra é fundamental, ainda hoje. A seção de Tony Hoare sobre estruturação de dados estabeleceu grande parte das bases do PASCAL. (A seção de Dahl falou sobre o que acabou se tornando programação orientada a objetos. Ele descreveu o que se tornou classe no Simula 67.)

Veja a implementação do ALGOL-W, Wirth, de uma variante do ALGOL-60.

Você também precisa conhecer o PL / I e o editor de link IBM 360 (vinculador) no momento. Era uma maravilha da generalidade, com a questão menor de correr mais devagar que o melaço em janeiro em Juneau, no Alasca. O PASCAL foi projetado especificamente para ser compilado e vinculado em uma única passagem, para maior velocidade. (Ajudou o início da linguagem em um supercomputador júnior CDC 6400, com muita memória, tornando prático um compilador de uma passagem.)

Na verdade, havia duas versões principais do PASCAL da ETH Zurich. O idioma que todos atualmente conhecem como PASCAL era na verdade PASCAL2, a segunda versão.

John R. Strohm
fonte