Pascal | |
Data da primeira versão | 1970 |
---|---|
Paradigma | genérico , orientado a objetos , procedural , imperativo |
Autor | Niklaus Wirth |
Digitando | estático , forte , nominativo |
Dialetos | ISO Pascal, UCSD Pascal, Turbo Pascal , Apple Pascal, Delphi , Free Pascal |
Influenciado por | Algol , Fortran |
Influenciado | Ada , Modula-2 , Modula-3 , Oberon |
Implementações | CDC 6000 , PASCAL-P , PDP-11 , PDP-10 , IBM System / 370 , HP , GNU Pascal , Delphi , Free Pascal , Lazarus |
Extensão de arquivo | pp, p, inc e não |
Pascal é uma linguagem de programação imperativa que, desenhada para o ensino, se caracteriza por uma sintaxe clara, rigorosa e facilitando a estruturação dos programas.
Além da sintaxe e de seu rigor, a linguagem Pascal tem pontos em comum com C (ver ponteiros ). A linguagem Pascal básica foi projetada apenas para uso educacional e era bastante limitada. Por exemplo, cadeias de caracteres , ausentes do idioma original, foram rapidamente integradas.
Seu poder foi estabelecido e sua distribuição rapidamente facilitada pela escrita de compiladores Pascal escritos em Pascal.
Os desenvolvimentos que ele experimentou posteriormente tornaram-no uma linguagem completa e eficaz. Mais recentemente, a genericidade foi adicionada no Delphi 2009 e no Free Pascal desde a versão 2.2.
As implementações atuais de Pascal, usadas fora do mundo educacional, são extensões como Turbo Pascal (modo texto), Object Pascal (programação de objetos) e Delphi (janela). Existem versões gratuitas como Free Pascal e Lazarus (em janela). Você pode programar em Pascal em DOS , Windows , Mac OS , Atari ST e FireBee ("High Speed Pascal" e "Pure Pascal". Pure Pascal é totalmente compatível com Turbo Pascal 7 e Object Pascal), ou mesmo em Linux / Unix ou Palm OS .
O sistema operacional Domínio / SO (em) computadores Apollo e parte do sistema Macintosh foram escritos em Pascal. A primeira versão do Adobe Photoshop também. O compilador GCC foi desenvolvido por Richard Stallman a partir de um compilador LLNL , que foi escrito na linguagem Pastel, uma extensão da linguagem Pascal.
A sintaxe da linguagem foi adaptada para outras linguagens, como Ada , Modula-2 (então Modula-3 ) ou Oberon .
A linguagem de programação Pascal (cujo nome vem do matemático francês Blaise Pascal ) foi inventada por Niklaus Wirth na década de 1970 com a ajuda de um de seus alunos, Urs Amman. Ele foi projetado para ser usado para ensinar programação de uma forma rigorosa, mas simples, em reação à complexidade do Algol 68 . O primeiro compilador foi projetado em um CDC 6400 .
Esta linguagem é uma das que têm sido utilizadas para ensinar programação estruturada . O ir para ou pular em qualquer parte do programa (chamado de "ramificação") é fortemente desencorajado nesta linguagem, o programa é uma montagem de procedimentos e funções, em que se pode usar blocos condicionais ( se , caso ) e repetitivos ( enquanto , para , repetir ) cada um tendo uma entrada e uma saída para facilitar as verificações, o que resulta em uma depuração rápida e segura.
A linguagem também é fortemente tipada estaticamente , ou seja, todas as variáveis devem ter um tipo definido em tempo de compilação. Por outro lado, sua falta de flexibilidade para gerenciar mudanças de tipo de caractere para tipo de string de caractere é um de seus pontos fracos.
Ele penetrou amplamente no mundo da educação e da pesquisa (universidades) e, em menor escala, no da indústria e da publicação de software.
O compilador P4 foi distribuído in source nas universidades, a um preço muito reduzido. Ele gerou P-Code , um código para uma máquina virtual. Os programas Pascal eram, portanto, facilmente portáveis para uma máquina. Foi o suficiente para escrever um intérprete P-Code para ela. Portanto, houve rapidamente portas para DEC PDP-11 , o primeiro suporte C, e para 6502 , 8080 e Z80 , os principais microprocessadores da época.
O compilador UCSD Pascal, da Universidade da Califórnia em San Diego , foi muito bem-sucedido, principalmente em máquinas como o Apple II, que eram amplamente utilizadas. O Pascal UCSD também foi portado para Thomson TO8 e Thomson TO9
Mas o golpe do "turbo" será dado pela empresa Borland , criada em 1983 que comercializava o compilador Turbo Pascal por um preço muito modesto (49 $ na época enquanto o compilador Microsoft Pascal custava mais de 500 $ e não tinha nenhum editor integrado ou compilação in-core ). O QuickPascal da Microsoft será lançado tarde demais para reverter a tendência.
Os compiladores foram produzidos para vários computadores, incluindo os fabricantes Sun , HP , SGI , CDC , IBM , Unisys , Texas Instruments .
Pascal foi objeto das normas ISO 7185 (1983) e ISO 10206 (1990).
Em geral, um programa Pascal é reconhecido pela extensão do arquivo que o contém: .pas , .p ou .pp , sendo os dois últimos mais comuns em sistemas do tipo UNIX . O uso de ambientes com janelas (Delphi e Lazarus) resultou no aparecimento de novas extensões.
O código-fonte é organizado de acordo com diferentes possibilidades:
Antes do surgimento das bibliotecas, o Turbo Pascal permitia o uso de Overlay (en) , a técnica usual no DOS para programas grandes. Esses eram arquivos separados do arquivo executável principal e podiam ser carregados de vez em quando.
É possível incluir código em um programa diferente de escrever uma unidade e simplesmente fazer uma inclusão , ou seja, dizer ao compilador para incluir o texto de um arquivo em um programa com a diretiva $ I :
program test; uses Crt, Dos; { utilisation habituelle des unités } {$I outil.inc} { utilisation directe de code externe } begin { utiliser les fonctions du fichier outil.inc } end.No entanto, este método não é recomendado devido às desvantagens que apresenta - especialmente se um identificador for declarado várias vezes em arquivos diferentes - e à falta de controle do compilador sobre este tipo de arquivo.
O software Turbo Pascal foi escrito por Anders Hejlsberg : anteriormente se chamava Compass Pascal, depois Poly Pascal. Muito compacto (12 kilobytes) e muito rápido porque trabalhando principalmente em RAM , compilou em uma passagem e produziu código de máquina x86 em DOS e não bytecode . Foi entregue com um ambiente completo (editor de textos e ajuda on-line, uma inovação na época, particularmente compacta graças a um sistema de substituição ).
Cada nova versão do Turbo Pascal trouxe sua cota de inovações, parcialmente preenchendo as lacunas do idioma original. Assim em 1987 surgiu a versão 4 com um ambiente de desenvolvimento integrado real , em 1989 a versão 5.5 introduziu objetos , em 1990 a versão 6 permitiu a programação de janelas no console DOS, através do Turbo Vision, fornecendo as premissas para a programação de eventos . Finalmente, em 1992 lançou a versão 7 para DOS, que será a última, assim como uma versão para Windows , rapidamente suplantada pelo Delphi .
O parâmetro Output após o nome do programa agora é opcional (era necessário apenas com as primeiras versões de implementações Pascal). Hoje em dia, ele está ausente na maior parte do tempo.
Ao contrário de C , Pascal não faz distinção entre maiúsculas e minúsculas , ou seja, palavras reservadas (como início ) ou identificadores (como escrita ou variável a ) podem ser escritos em maiúsculas ou minúsculas.
Novamente, ao contrário de C, as declarações são feitas em uma parte claramente separada do código. As declarações locais são feitas no início de um procedimento ou função, enquanto as declarações globais são feitas em qualquer lugar antes do programa principal. Isso acrescenta clareza à linguagem à custa de uma certa falta de flexibilidade. Você não pode declarar uma variável no meio de uma função. Observe que em Pascal, as declarações devem preceder qualquer uso; em particular, é proibido usar um procedimento ou uma função que ainda não foi declarada. É possível contornar esse problema usando a palavra - chave forward .
Finalmente, a distinção entre procedimentos e funções ajuda a evitar alguns erros de programação - por padrão , porque uma diretiva de compilação Delphi permite uma sintaxe "estendida" que oferece a mesma frouxidão que C.
Em 1995 , para frustrar a Microsoft e a programação visual do Visual Basic , a Borland lançou o Delphi . Ao contrário do VB, que produz código-p, o Delphi produz código de máquina mais rápido. Também se vê a biblioteca VCL para interface com as bibliotecas do sistema (in) para Windows , facilitando muito o desenvolvimento.
No início dos anos 2000, a Borland produziu o Kylix , o equivalente Linux do Delphi , que não teria muito sucesso. No início de 2010, a Embarcadero, que assumiu o negócio de ferramentas de desenvolvimento da Borland, produziu o Delphi XE, cujas versões recentes são compatíveis com Windows , OS X e iOS .
Lázaro , é um pouco diferente RAD software livre desenvolvimento integrado , permitindo a compilação em diferentes sistemas operacionais, como o Windows , GNU / Linux , OS X , Unix , OS / 2 , ReactOS , Haiku e plataformas como o x86 , x86 64 , ARM , SPARC , PowerPC , IA-64 .
Aqui está um exemplo de um arquivo Pascal associado a uma janela ( Form1: TForm1 ) contendo um rótulo (um texto). Este arquivo é gerado automaticamente e serve como estrutura básica para a programação. Ou seja, pode ser modificado, complementado etc. Pequenos pontos são referências durante a edição. Eles são invisíveis em tempo de execução. A fonte e as janelas Delphi são muito semelhantes.
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class (TForm) Label1: TLabel; { le label "Hello world!" posé sur la fenêtre } private { private declarations } public { public declarations } end; var Form1: TForm1; implementation initialization {$I unit1.lrs} end.Breve explicação: a diretiva {$ I unit1.lrs} permite que você vincule a classe TForm1, que descreve uma janela, ao arquivo de recurso unit1.lrs que contém o design da janela. Com o Lazarus, o arquivo lrs é um arquivo intermediário criado automaticamente pelo compilador a partir de informações no arquivo lfm e diretivas de compilação (incluindo a capacidade de escolher a biblioteca de widgets ). Com Delphi, a diretiva equivalente seria {$ R unit1.dfm} e não existe um arquivo intermediário. Além disso, ele teria sido colocado na parte da interface.
Dentre os compiladores utilizados ainda hoje (2013), podemos citar:
Você pode escrever funções recursivas em Pascal. A função a seguir dá um exemplo:
function factorielle(n: integer): integer; begin if n <= 1 then factorielle := 1 else factorielle := n*factorielle(n - 1); end;O número de chamadas recursivas é limitado pela pilha . No entanto, algumas implementações são capazes de otimizar a recursão do terminal , por exemplo Free Pascal com a opção -O2 .
É possível definir tipos genéricos, ou seja, podem ser usados com diferentes tipos possíveis sem ter que reescrever o código. Aqui está um exemplo em Free Pascal:
program Pj_gen; uses SysUtils; type { On définit un objet qui permet d'additionner deux éléments et multiplier un élément par un entier strictement positif } { TAnneauGenerique } generic TAnneauGenerique<T> = class function Somme(a, b: T): T; function Multiple(n: integer; a: T): T; end; { On crée deux versions spécialisées, s'appliquant aux nombres réels et aux chaines de caractères } TAnneauReel = specialize TAnneauGenerique<Real>; TAnneauChaine = specialize TAnneauGenerique<String>; { TAnneauGenerique } function TAnneauGenerique.Somme(a, b: T): T; begin result := a + b; end; function TAnneauGenerique.Multiple(n: integer; a: T): T; var i: integer; begin { On ne gère que le cas où n >= 1 } result := a; for i := 2 to n do result := result + a; end; var r: TAnneauReel; c: TAnneauChaine; begin r := TAnneauReel.Create; writeln('Avec des reels :'); writeln('4.1 + 5.2 = ', FloatToStr( r.Somme(4.1, 5.2) )); writeln('3 x 5.1 = ', FloatToStr( r.Multiple(3, 5.1) )); r.free; writeln; c := TAnneauChaine.Create; writeln('Avec des chaines :'); writeln('bon + jour = ', c.Somme('bon', 'jour')); writeln('10 x a = ', c.Multiple(10, 'a')); c.free; writeln; writeln('Press <Enter> to quit'); readln; end.Resultado em FPC2.6.0:
Avec des reels : 4.1 + 5.2 = 9,3 3 x 5.1 = 15,3 Avec des chaines : bon + jour = bonjour 10 x a = aaaaaaaaaa Press <Enter> to quitNota: no Delphi, você não deve adicionar as palavras-chave genéricas e especializadas .
É possível que as diferentes unidades do programa se usem, mas há uma limitação. Com efeito, em Pascal, pode-se referir a outra unidade em dois locais possíveis, nomeadamente na interface e na implementação. Se duas unidades se referem uma à outra em sua interface, obtemos um erro de dependência circular. Podemos contornar esse problema usando uma terceira unidade que servirá de base para as outras duas e / ou usando tipos mais abstratos nas interfaces. Essa limitação não existe no Visual Basic .
Em 1981, Brian Kernighan e Phillip J. Plauger (in) publicaram o livro Software Tools in Pascal , reedição de seu livro anterior, Software Tools , publicado em 1976, e empregaram a linguagem Rational Fortran (in) . O objetivo era fornecer, em linguagem Pascal, programas completos e úteis, bem documentados, e mostrando como escrever programas "bons". Observe que Niklaus Wirth publicou em 1979 uma coleção de programas voltados para um objetivo semelhante. As Ferramentas de Software foram escritas na linguagem definida pelo trabalho de Kathleen Jensen e Niklaus Wirth, Manual do Usuário Pascal e Relatório de 1978 e o rascunho da norma ISO. Nesse mesmo ano, Brian Kernighan publicou o artigo Por que Pascal não é minha linguagem favorita , no qual denunciou as falhas que viu na linguagem, e que disse que a impediam de ser usada para "programação séria". O artigo foi baseado em sua experiência com o livro anterior, e na comparação que ele havia feito com o C , que ele também estava promovendo - o livro The C Programming Language , em coautoria com Dennis Ritchie , foi lançado em 1978.
Entre os aspectos discutidos neste artigo, um deles torna a programação em Pascal particularmente complicada: a digitação de arrays e, conseqüentemente, a digitação de strings . Na verdade, as dimensões dos arrays são parte do tipo, em Pascal, que impede a passagem de arrays de tamanho variável (ou strings de tamanho variável) para uma função. A solução alternativa requer a gravação de várias versões de funções que usam arrays como parâmetros ou o uso de um tipo de array com o tamanho máximo estimado. Este último "truque" era freqüentemente usado nesta linguagem; é assim que as receitas numéricas nos programas Pascal fazem uso sistemático dele. Essa desvantagem, ainda presente na versão final da linguagem ISO 7185 de 1983, era bem conhecida no mundo da análise numérica. Assim, durante a Conferência sobre Ambiente de Programação para Desenvolvimento de Software Numérico , organizada em 1978 pelo Laboratório de Propulsão a Jato e ACM SIGNUM, uma das apresentações mostrou a possível utilização do Pascal na análise numérica, e apontou este problema de tabela de passagem , ao propor uma sintaxe alternativa destinada a ser integrada a uma versão posterior do padrão. Na verdade, ele será adicionado em 1990 ao ISO 10206 Extended Pascal . O último permite, por meio dos esquemas , criar tipos estruturados de tamanho dinâmico. Da mesma forma em Extended Pascal, todos os tipos de string de caracteres são compatíveis entre si. Mas poucos compiladores seguiram o padrão ISO 10206 ao pé da letra, especialmente nem o Turbo Pascal nem os compiladores derivados dele (Delphi e Free Pascal).
Hoje, esse problema não é mais relevante, já que versões recentes de Delphi e Free Pascal permitem várias alternativas:
Além disso, outra solução, muito mais relevante em Object Pascal, consiste em definir uma classe que encapsule as matrizes e suas operações. Os argumentos passados para funções são então objetos. Outra possibilidade, que já existia com o Turbo Pascal 4.0, é passar argumentos de array não digitados e associar arrays genéricos a eles absolute.
Quanto às strings, Delphi e Free Pascal fornecem o tipo AnsiString , que é ilimitado em tamanho, e mais importante para o que nos interessa aqui, não faz parte do tipo. Na verdade, essas strings são ponteiros cujo gerenciamento é feito de forma transparente para o usuário.
Outra crítica, apontada pelas Receitas Numéricas em Pascal , diz respeito à passagem de uma função como parâmetro, muito útil na análise numérica. É essencial escrever uma biblioteca de cálculo o mais geral possível: assim, para o cálculo integral , escreve-se uma função realizando o cálculo no caso geral, a função a ser integrada sendo desconhecida, e passa-se para ela como um parâmetro em os casos especiais de que precisamos. Essa funcionalidade também faz parte do Pascal estendido e não foi usada no livro mencionado acima porque poucos compiladores a implementaram na época. Novamente, isso não é mais um problema com Delphi e Free Pascal, que aceitam "tipos procedurais", que podem ser passados como parâmetros: eles foram inicialmente introduzidos no Turbo Pascal 5.0.
Além das variações comerciais, certo número de usuários Pascal preocupados com a confiabilidade passaram ou para a linguagem do Portal , ou para a linguagem Modula 2 e seus descendentes, ou para linguagens relacionadas como Ada 83 , ou finalmente para linguagens de objeto como Simula , Modula 3, Oberon ou Ada 95 .
Em particular, Modula como C é suficiente para escrever um sistema operacional, mas com maior segurança devido a uma separação clara entre o nível físico - o mais delicado nas operações de portabilidade - e o nível simbólico, o mais fácil de controlar, e o mais utilizado.
A portabilidade do Pascal / CDC pelo INRIA para o Iris 80 disponibilizou esta linguagem para centros de computação universitários no final da década de 1970. A partir de 1980, universidades e escolas de engenharia seguiram o exemplo, servindo como suporte para algoritmos e programação estruturada . Na verdade, ele era:
A chegada dos microcomputadores introduziu uma certa competição entre Pascal UCSD, Microsoft Pascal e Turbo Pascal.
O ensino da informática em aulas preparatórias só foi introduzido em 1987, com base no Pascal (mais precisamente Turbo Pascal). Uma biblioteca ("MODULOG"), desenvolvida pela ALESUP e IREM em Marselha , foi também disponibilizada às escolas secundárias.
Com a reforma de 1995, o ensino de informática em ciência preparatória é separado em um núcleo comum, baseado em software de álgebra computacional, e uma disciplina opcional em MPSI e MP baseada, à sua escolha, em Pascal ou Caml . O sucesso deste último é tal que no “workshop Luminy” em 1997, apenas três participantes escolheram Pascal. Muito minoritário no setor de MP, Pascal foi oficialmente retirado da sessão de competição de 2015 e, desde então, apenas Caml foi autorizado a fazer os testes de opções de TI.
BCPST preps seguido um caminho semelhante: Pascal foi introduzido para o programa, em 1987, em seguida, retirado no início da década de 2000, a favor de MATLAB e Scilab . Pascal não é mais oferecido em competições a partir de 2004.
Pascal foi amplamente adotado pela primeira vez. Posteriormente, trabalhos práticos e desenvolvimentos combinando Pascal e montador levaram à sua substituição pela linguagem Portal .