Pascal | |
Dato for første versjon | 1970 |
---|---|
Paradigme | generisk , objektorientert , prosessuell , imperativ |
Forfatter | Niklaus Wirth |
Skrive | statisk , sterk , nominativ |
Dialekter | ISO Pascal, UCSD Pascal, Turbo Pascal , Apple Pascal, Delphi , Free Pascal |
Påvirket av | Algol , Fortran |
Påvirket | Ada , Modula-2 , Modula-3 , Oberon |
Implementeringer | CDC 6000 , PASCAL-P , PDP-11 , PDP-10 , IBM System / 370 , HP , GNU Pascal , Delphi , Free Pascal , Lazarus |
Filutvidelse | pp, p, inc og ikke |
Pascal er et tvingende programmeringsspråk som, designet for undervisning, er preget av en tydelig syntaks, streng og tilrettelegger for strukturering av programmene.
Bortsett fra syntaksen og dens strenghet, har Pascal-språket felles punkter med C (se pekepinner ). Det grunnleggende Pascal-språket var kun designet for pedagogisk bruk og var ganske begrenset. For eksempel ble tegnstrenger , fraværende fra originalspråket, raskt integrert.
Dens makt ble etablert, og distribusjonen ble raskt lettere ved skriving av Pascal-kompilatorer skrevet i Pascal.
Utviklingen han opplevde senere gjorde det til et komplett og effektivt språk. Mer nylig har generisitet blitt lagt til i Delphi 2009 og i Free Pascal siden versjon 2.2.
Nåværende implementeringer av Pascal, som brukes utenfor utdanningsverdenen, er utvidelser som Turbo Pascal (tekstmodus), Object Pascal (objektprogrammering) og Delphi (vindu). Det er gratisversjoner som Free Pascal og Lazarus (vindu). Du kan programmere i Pascal under DOS , Windows , Mac OS , Atari ST og FireBee ("High Speed Pascal" og "Pure Pascal". Pure Pascal er fullt kompatibel med Turbo Pascal 7 og Object Pascal), eller til og med under Linux / Unix eller Palm OS .
Operativsystemet Domain / OS (in) datamaskiner Apollo , og en del av systemet Macintosh ble skrevet i Pascal. Den første versjonen av Adobe Photoshop også. GCC- kompilatoren ble utviklet av Richard Stallman fra en LLNL- kompilator , som ble skrevet på pastellspråket, en utvidelse av Pascal-språket.
Syntaksen til språket er tilpasset andre språk som Ada , Modula-2 (da Modula-3 ) eller Oberon .
Den Pascal programmeringsspråk (hvis navn kommer fra det franske matematikeren Blaise Pascal ) ble oppfunnet av Niklaus Wirth i 1970 med hjelp av en av hans studenter, Urs Amman. Den ble designet for å brukes til å undervise i programmering på en streng, men enkel måte, som reaksjon på kompleksiteten til Algol 68 . Den første kompilatoren ble designet på en CDC 6400 .
Dette språket er et av de som har blitt brukt til å undervise i strukturert programmering . Den goto eller hoppe hvor som helst i programmet (kalt "forgrening") er sterkt nedprioritert i dette språket, er programmet en forsamling av prosedyrer og funksjoner, der kan man bruke betinget ( hvis , case ) og repeterende blokker ( mens , for , gjenta ) hver med inngang og utgang for å lette kontrollene, noe som resulterer i rask og sikker feilsøking.
Språket er også sterkt og statisk skrevet , det vil si at alle variabler må ha en type definert på kompileringstidspunktet. På den annen side er mangelen på fleksibilitet til å håndtere endringer fra karaktertype til karakterstrengtype et av dens svake punkter.
Den har bredt trengt inn i verden av utdanning og forskning (universiteter), da i mindre grad den innen industri og programvareutgivelse.
Den P4 kompilatoren ble distribuert i kilde på universitetene, til en svært redusert pris. Den genererte P-kode , en kode for en virtuell maskin. Pascal-programmer var derfor lett bærbare til en maskin. Det var nok å skrive en P-Code-tolk for henne. Det ble derfor raskt porter til DEC PDP-11 , den første C-støtten, og til 6502 , 8080 og Z80 , datidens viktigste mikroprosessorer .
UCSD-kompilatoren Pascal, fra University of California i San Diego , var veldig vellykket, spesielt på maskiner som Apple II som ble mye brukt. Pascal UCSD ble også portet til Thomson TO8 og Thomson TO9
Men slag av "turbo" vil bli gitt av selskapet Borland , opprettet i 1983, som markedsførte Turbo Pascal kompilatoren til en veldig beskjeden pris (49 $ av tiden mens Microsoft Pascal kompilatoren var på mer enn 500 $ og ikke hadde ingen integrert redaktør eller kjernekompilering ). Microsofts QuickPascal vil bli utgitt altfor sent til å snu trenden.
Kompilatorer er produsert for forskjellige datamaskiner, inkludert produsenter Sun , HP , SGI , CDC , IBM , Unisys , Texas Instruments .
Pascal har vært gjenstand for ISO 7185 (1983) og ISO 10206 (1990) standarder.
Generelt er en Pascal program anerkjent av forlengelsen av filen som inneholder det: .pas , .P eller .pp , de to siste er mer vanlig på UNIX- typen systemer . Bruken av vindusvinduer (Delphi og Lazarus) har resultert i at nye utvidelser dukker opp.
Kildekoden er organisert etter forskjellige muligheter:
Før utseendet til biblioteker tillot Turbo Pascal bruk av Overlay (en) , den vanlige teknikken under DOS for store programmer. Dette var separate filer fra den viktigste kjørbare filen og kunne lastes inn fra tid til annen.
Det er mulig å inkludere kode i et annet program enn ved å skrive en enhet og bare ved å gjøre en inkludere , det vil si ved å fortelle kompilatoren å inkludere teksten til en fil i et program med $ I- direktivet :
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.Imidlertid er denne metoden ikke anbefalt med tanke på ulempene den presenterer - spesielt hvis en identifikator er erklært flere ganger i forskjellige filer - og mangelen på kontroll av kompilatoren over denne typen filer.
Turbo Pascal- programvaren ble skrevet av Anders Hejlsberg : den het tidligere Compass Pascal, deretter Poly Pascal. Veldig kompakt (12 kilobyte) og veldig rask fordi den hovedsakelig jobbet i RAM , samlet den i ett pass og produserte x86 maskinkode under DOS og ikke bytekode . Den ble levert med et komplett miljø (en tekstredigerer og online-hjelp, en innovasjon på den tiden, spesielt kompakt takket være et erstatningssystem ).
Hver nye versjon av Turbo Pascal har brakt sin andel av innovasjoner, delvis fylt hullene i originalspråket. I 1987 dukket versjon 4 opp med et virkelig integrert utviklingsmiljø , i 1989 introduserte versjon 5.5 objekter , i 1990 versjon 6 tillot programmering av vinduer i DOS-konsollen, gjennom Turbo Vision, og ga lokalene for programmering av hendelser . Til slutt, i 1992, utgitt versjon 7 for DOS, som vil være den siste, samt en versjon for Windows , raskt erstattet av Delphi .
Output- parameteren etter programnavnet er nå valgfri (det var bare nødvendig med de første versjonene av Pascal-implementeringer). I dag er han fraværende det meste av tiden.
I motsetning til C , er Pascal ikke tilfelle sensitive , dvs. reserverte ord (som begynner ) eller identifikatorer (som skrive eller variabel et ) kan enten være skrevet på store eller små bokstaver.
Igjen, i motsetning til C, blir erklæringer avgitt i en klart separat del av koden. Lokale erklæringer avgis ved starten av en prosedyre eller funksjon, mens globale erklæringer avgis hvor som helst før hovedprogrammet. Dette gir språket klarhet på bekostning av en viss mangel på fleksibilitet. Du kan ikke erklære en variabel midt i en funksjon. Merk at i Pascal må erklæringer gå foran enhver bruk; spesielt er det forbudt å bruke en prosedyre eller en funksjon som ennå ikke er deklarert. Det er mulig å omgå dette problemet ved å bruke fremover- nøkkelordet .
Til slutt hjelper skillet mellom prosedyrer og funksjoner til å unngå noen programmeringsfeil - som standard , fordi et Delphi-kompileringsdirektiv muliggjør en "utvidet" syntaks som gir samme slapphet som C.
I 1995 frigav Borland Delphi for å hindre Microsoft og den visuelle programmeringen av Visual Basic . I motsetning til VB som produserer p-kode, produserer Delphi raskere maskinkode. Man ser også biblioteket VCL for grensesnitt til systembiblioteker (in) for Windows , noe som i stor grad letter utviklingen.
På begynnelsen av 2000-tallet produserte Borland Kylix , Linux- ekvivalenten til Delphi , som ikke skulle være veldig vellykket. På begynnelsen av 2010-tallet produserte Embarcadero, som overtok utviklingsverktøyvirksomheten fra Borland, Delphi XE, der nyere versjoner er kompatible med Windows , OS X og iOS .
Lazarus , er en litt annen RAD integrert utviklingsfri programvare , som gjør det mulig å kompilere på forskjellige operativsystemer som Windows , GNU / Linux , OS X , Unix , OS / 2 , ReactOS , Haiku og plattformer som x86 , x86- 64 , ARM , SPARC , PowerPC , IA-64 .
Her er et eksempel på en Pascal-fil assosiert med et vindu ( Form1: TForm1 ) som inneholder en etikett (en tekst). Denne filen genereres automatisk og fungerer som den grunnleggende strukturen for programmering. Det vil si at den kan modifiseres, suppleres osv. Små prikker er målestokker når du redigerer. De er usynlige ved kjøretid. Kilden og Delphi-vinduene er veldig like.
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.Kort forklaring: {$ I unit1.lrs} -direktivet lar deg koble TForm1-klassen, som beskriver et vindu, til ressursfilen unit1.lrs som inneholder vindusdesignet. Med Lazarus er lrs- filen en mellomfil opprettet automatisk av kompilatoren fra informasjon i lfm- filen og kompileringsdirektiver (inkludert muligheten til å velge widgetbiblioteket ). Med Delphi ville det tilsvarende direktivet ha vært {$ R unit1.dfm}, og det er ingen mellomfil . I tillegg ville den ha blitt plassert i grensesnittdelen.
Blant kompilatorene som fortsatt brukes i dag (2013), kan vi nevne:
Du kan skrive rekursive funksjoner i Pascal. Følgende funksjon gir et eksempel:
function factorielle(n: integer): integer; begin if n <= 1 then factorielle := 1 else factorielle := n*factorielle(n - 1); end;Antallet rekursive samtaler er begrenset av stabelen . Imidlertid er noen implementeringer i stand til å optimalisere terminalrekursjon , for eksempel Free Pascal med -O2- alternativet .
Det er mulig å definere generiske typer, det vil si som kan brukes med forskjellige mulige typer uten å måtte skrive om koden. Her er et eksempel i 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.Resultat under 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 quitMerk: i Delphi, må du ikke legge til generiske og spesialiserte nøkkelord .
Det er mulig at de forskjellige enhetene i programmet vil bruke hverandre, men det er en begrensning. I Pascal kan man faktisk referere til en annen enhet på to mulige steder, nemlig i grensesnittet og i implementeringen. Hvis to enheter refererer til hverandre i grensesnittet, får vi en sirkulær avhengighetsfeil. Vi kan omgå dette problemet ved å bruke en tredje enhet som vil tjene som grunnlag for de to andre, og / eller ved å bruke mer abstrakte typer i grensesnittene. Denne begrensningen eksisterer ikke i Visual Basic .
I 1981 utga Brian Kernighan og Phillip J. Plauger (in) boken Software Tools i Pascal , utgivelse av sin forrige bok, Software Tools , utgitt i 1976, og brukte språket Rational Fortran (in) . Målet var å gi, på Pascal-språk, komplette og nyttige programmer, godt dokumentert, og som viser hvordan man skriver "gode" programmer. Merk at Niklaus Wirth i 1979 hadde utgitt en samling programmer rettet mot et lignende mål. De Software Tools ble skrevet i språket definert av arbeidet til Kathleen Jensen og Niklaus Wirth, Pascal Bruksanvisning og Rapporter fra 1978 og utkastet standarden ISO. Samme år publiserte Brian Kernighan artikkelen Why Pascal is not my Favorite Language , der han fordømte feilene han så på språket, og som han sa forhindret at den ble brukt til "seriøs programmering". Artikkelen var basert på hans erfaring med den forrige boka, og sammenligningen han hadde gjort med C , som han også promoterte - boken The C Programming Language , medforfatter med Dennis Ritchie , ble utgitt i 1978.
Blant de aspektene som er omstridt i denne artikkelen, gjorde en av dem programmering i Pascal spesielt komplisert: å skrive matriser, og følgelig også å skrive inn strenger . Faktisk er dimensjonene til matrisen en del av typen, i Pascal, som forhindrer overføring av matriser av variabel størrelse (eller strenger av variabel størrelse) til en funksjon. Løsning krever enten å skrive flere versjoner av funksjoner som tar matriser som parametere, eller bruke en matritype med maksimal estimert størrelse. Dette siste "trikset" ble ofte brukt på dette språket; Slik bruker Numerical Recipes i Pascal-programmene systematisk. Denne ulempen, som fremdeles er til stede i den endelige versjonen av ISO 7185-språket fra 1983, var kjent i numerisk analyseverden. Under konferansen om programmeringsmiljøet for utvikling av numerisk programvare , organisert i 1978 av Jet Propulsion Laboratory og ACM SIGNUM, viste en av presentasjonene mulig bruk av Pascal i numerisk analyse, og påpekte dette problemet med passasjetabellen , ved å foreslå en alternativ syntaks ment å integreres i en senere versjon av standarden. Faktisk vil den bli lagt til i 1990 til ISO 10206 Extended Pascal . Sistnevnte tillater via skjemaene å lage strukturerte typer dynamisk størrelse. På samme måte i Extended Pascal er alle karakterstrengstyper kompatible med hverandre. Men få kompilatorer har fulgt ISO 10206-standarden til punkt og prikke, spesielt verken Turbo Pascal eller kompilatorene avledet av den (Delphi og Free Pascal).
I dag er dette problemet ikke lenger relevant, siden nyere versjoner av Delphi og Free Pascal tillater flere alternativer:
I tillegg består en annen løsning, mye mer relevant i Object Pascal, i å definere en klasse som innkapsler matriser og deres operasjoner. Argumentene som sendes til funksjoner er deretter objekter. En annen mulighet, som allerede eksisterte med Turbo Pascal 4.0, er å sende utypede arrayargumenter og knytte generiske arrays med dem absolute.
Når det gjelder strenger, gir Delphi og Free Pascal typen AnsiString , som er ubegrenset i størrelse, og enda viktigere for det som gjelder oss her, ikke er en del av typen. I virkeligheten er disse strengene pekere hvis ledelsen gjøres på en gjennomsiktig måte for brukeren.
En annen kritikk, påpekt av Numerical Recipes in Pascal , gjelder overføring av en funksjon som parameter, veldig nyttig i numerisk analyse. Det er viktig å skrive et beregningsbibliotek så generelt som mulig: for integralregning skriver man altså en funksjon som generelt utfører beregningen, funksjonen som skal integreres er ukjent, og man sender den til den som en parameter i de spesielle tilfellene vi trenger. Denne funksjonaliteten er også en del av utvidet Pascal, og ble ikke brukt i den ovennevnte boka, fordi få kompilatorer implementerte den på den tiden. Igjen er dette ikke lenger et problem med Delphi og Free Pascal, som godtar "prosedyretyper", som kan overføres som parametere: de ble opprinnelig introdusert i Turbo Pascal 5.0.
Utover de kommersielle variasjonene har et visst antall Pascal-brukere som er bekymret for pålitelighet overført enten til portalspråket , eller til Modula 2- språket og dets etterkommere, eller til beslektede språk som Ada 83 , eller til slutt til innvending språk som Simula , Modula 3, Oberon eller Ada 95 .
Spesielt er Modula som C nok til å skrive et operativsystem, men med større sikkerhet på grunn av en klar skille mellom det fysiske nivået - det mest delikate i porteringsoperasjoner - og det symbolske nivået, jo lettere å kontrollere og det mest brukte.
Porteringen av INRIA av Pascal / CDC til Iris 80 gjorde dette språket tilgjengelig for universitets databehandlingssentre på slutten av 1970-tallet. Fra 1980 fulgte universiteter og ingeniørskoler som en støtte for algoritmikk og strukturert programmering . Han var faktisk:
Ankomsten av mikrocomputere introduserte en viss konkurranse mellom Pascal UCSD, Microsoft Pascal og Turbo Pascal.
Undervisningen i informatikk i forberedende klasser ble først introdusert i 1987, basert på Pascal (nærmere bestemt Turbo Pascal). Et bibliotek ("MODULOG"), utviklet av ALESUP og IREM i Marseille , ble også gjort tilgjengelig for videregående skoler.
Med 1995-reformen er undervisningen i informatikk i forberedende vitenskap skilt inn i en felles kjerne, basert på datamaskinalgebra-programvare, og et valgfritt emne i MPSI og MP basert, etter eget valg, på Pascal eller Caml . Suksessen til sistnevnte er slik at bare tre deltakere valgte "Pascal" på "Luminy-workshopen" i 1997. Svært i mindretall i MP-sektoren ble Pascal offisielt trukket fra 2015-sesjonen, og siden den gang er det bare Caml som har fått autorisasjon til å ta IT-alternativtestene.
BCPST forbereder fulgt en lignende bane: Pascal ble introdusert til programmet i 1987, og deretter trukket tilbake i begynnelsen av 2000-tallet, i favør av MATLAB og Scilab . Pascal tilbys ikke lenger i konkurranser fra 2004.
Pascal ble først adoptert. Deretter førte praktisk arbeid og utvikling som kombinerte Pascal og montør til at den ble erstattet av portalspråket .