Pascal

Pascal è il nome dato da Niklaus Wirth ad un linguaggio che nei suoi progetti doveva consentire ai nuovi programmatori di imparare a scrivere codice in maniera corretta, comprensibile e manutenibile in futuro. Come in altri casi, Wirth non si contentò di scrivere manuali, ma inventò un linguaggio completamente nuovo (anche se basato sull'Algol).

Lo chiamò Pascal, in omaggio a Blaise Pascal, fisico, matematico e filosofo francese e inventore a diciannove anni della Pascalina, una delle prime macchine calcolatrici mai costruite.

Pensandoci bene, forse l'omaggio non è solo legato alla macchina, ma anche alle idee di Pascal, che combatteva un modo di ragionare in voga nel seicento (la "casistica") che tendeva a giustificare ogni comportamento riportandolo all'interno di una miriade di possibili casi.E infatti, nella prefazione del suo libro "Algorithms and Data Structures" Wirth scrive:

Programming is a constructive activity. How can a constructive, inventive activity be taught? One method is to crystallize elementary composition priciples out many cases and exhibit them in a systematic manner. But programming is a field of vast variety often involving complex intellectual activities. The belief that it could ever be condensed into a sort of pure recipe teaching is mistaken.
La caratteristica principale di Pascal è che porta con sé un modello di programmazione strutturata. Un codice sorgente non è più visto solo come una sequenza di centinaia di istruzioni atomiche, come in BASIC, ma come una struttura composta da parti ben identificate. In Pascal vengono introdutte le procedure, cioè blocchi di codice con un nome; all'interno della procedure (come se fosse un programma a sé) le variabili sono completamente nascoste al resto del programma, cioè sono locali. Questo modello, almeno nelle intenzioni di Wirth, doveva impedire di scrivere codice confuso, caotico, come invece sarebbe possibile in BASIC. E infatti nella prima versione di Pascal l'istruzione GOTO non è nemmeno presente.

Un'altra caratteristica di Pascal è la tipizzazione forte. Che significa? In molti linguaggi per usare un valore non occorre decidere prima quanto spazio occuerà nella memoria, o che tipo di operazioni si possono effettuare su di esso: la priam volta che si assegna un valore ad una variabile viene riservato uno spazio della misura giusta, in base al suo contenuto. Un valore vero/falso occupa pochissimo spazio, un numero intero un po' di pù, un numero reale ancora di più, fino alle stringhe o ai vettori che possono avere una spazio molto grande.

Invece in Pascal una variabile va dichiarata fin dal suo primo uso come appartenente ad un tipo (un numero, una lettera, un vettore). Una volta creata, la variabile può cambiare valore ma non tipo. Questo evita un'intera classe di errori che si generano quando il programmatore assegna ad una variabile un valore di un certo tipo, ma in seguito se ne scorda e la usa come se fosse di un tipo diverso, producendo dei comportamenti imprevisti. Per esempio: quanto fa 7 + arancia?

Naturalmente sono proprio queste caratteristiche a rendere Pascal odioso a molti programmatori più esperti, che desideravano una libertà maggiore e una maggiore semplicità, anche a costo di commettere qualche errore. Da questo tipo di atteggiamento nasce l'espressione "I veri programmatori non usano Pascal" (Humour).

Dalla prima versione di Pascal, che aveva un obiettivo esclusivamente educativo, si sono succedute versione più complete, con un compilatore veloce, usabili professionalmente anche al di fuori dall'ambito educativo.

Un'idea che ha molto facilitato la diffusione del Pascal è stata quella di offrire al programmatore una IDE (Integrate Development Environment).

Ancora negli anni '80 i codici sorgenti venivano scritti con un qualsiasi editor testuale; poi occorreva lanciare una serie di utiltà che provvedevano alla verifica sintattica, al collegamento di librerie esterne e infine alla generazione del programma eseguibile. Un IDE invece è un ambiente unico che si presenta come una serie di finestre tra cui quella dell'editor. Nell'IDE è possibile svolgere tutte le operazioni necessarie per la generazione del programma finale senza dover uscire dall'ambiente, velocizzando il processo e semplificandolo anche per gli sviluppatori meno esperti.

Negli anni '90 il Turbo Pascal della Borland è stato uno degli IDE più diffusi per il sistema operativo DOS della Microsoft. Man mano che se ne sviluppavano versioni migliorate cambiava anche il linguaggio, introducendo funzionalità assenti nel Pascal originale.

A partire dalla metà degli anni 90) Turbo Pascal viene sostituito da Delphi, che sposta il paradigma verso quello orientato agli oggetti e che rimane ancora oggi un ambiente utilizzato.

Delphi, e il suo dialetto, è stato anche la fonte di ispirazione per vari cloni, tra cui Free Pascal, un compilatore opensource scritto da Florian Paul Klämpfl a partire dal 1997, e Lazarus, che è un IDE multipiattaforma basato su FreePascal.

Non era raro che software professionali o addirittura sistemi operativi fossero scritti in Pascal. Tra quelli più noti:

  • una parte del sistema opertivo del Macinthosh
  • la prima versione di PhotoShop per Mac
  • la versione di Skype per Windos
  • l'antivirus Kaspersky
Questa che segue è una porzione del codice di Photoshop 1.0.1, rilasciato da Adobe per un uso non commerciale e messa a disposizione dal Computer History Museum:
    {Photoshop version 1.0.1, file: UPixelPaint.p
        Computer History Museum, www.computerhistory.org
        This material is (C)Copyright 1990 Adobe Systems Inc.
        It may not be distributed to third parties.
        It is licensed for non-commercial use according to
        www.computerhistory.org/softwarelicense/photoshop/ }

      UNIT UPixelPaint;

      INTERFACE

      USES
          {$LOAD MacIntf.LOAD}
          MemTypes, QuickDraw, OSIntf, ToolIntf, PackIntf,
          {$LOAD UMacApp.LOAD}
          UObject, UList, UMacApp,
          {$LOAD UPhotoshop.LOAD}
          PaletteMgr, UConstants, UVMemory, UPhotoshop,
          {$LOAD}
          UDialog, URootFormat, UPICTFile, UProgress;

      TYPE

          TPixelPaintFormat = OBJECT (TPICTFileFormat)

              fCenter: BOOLEAN;
              fCanvasSize: INTEGER;

              PROCEDURE TPixelPaintFormat.IImageFormat; OVERRIDE;

              FUNCTION TPixelPaintFormat.CanWrite
                      (doc: TImageDocument): BOOLEAN; OVERRIDE;

              PROCEDURE TPixelPaintFormat.SetFormatOptions
                      (doc: TImageDocument); OVERRIDE;

              PROCEDURE TPixelPaintFormat.ReadRow (cols: INTEGER);

              PROCEDURE TPixelPaintFormat.DoRead
                      (doc: TImageDocument;
                       refNum: INTEGER;
                       rsrcExists: BOOLEAN); OVERRIDE;

              FUNCTION TPixelPaintFormat.DataForkBytes
                      (doc: TImageDocument): LONGINT; OVERRIDE;

              FUNCTION TPixelPaintFormat.RsrcForkBytes
                      (doc: TImageDocument): LONGINT; OVERRIDE;

              PROCEDURE TPixelPaintFormat.DoWriteImage (doc: TImageDocument);

              PROCEDURE TPixelPaintFormat.DoWrite
                      (doc: TImageDocument; refNum: INTEGER); OVERRIDE;

              END;

      IMPLEMENTATION

      {$I UPixelPaint.inc1.p}

      END.

Da Pascal deriva il linguaggio ADA, che introduce l'idea della programmazione concorrente, ovvero in cui più processi possono essere eseguiti parallelamente; ma lo stesso Wirth non era del tutto soddisfatto del Pascal e continuò a progettarne versioni più flessibili e moderne, come Modula e Oberon.

Curiosità: Pascal non ha un animale totemico come il Perl e il PHP; invece Free Pascal ha un ghepardo:

Logo
Source: https://www.freepascal.org/

Prossimo pannello:  Ada



Versione: 02/02/2022 - 08:59:47

Parole: 553

Pannelli

Linguaggi                   
Linguaggi di programmazione 
Nomi dei linguaggi          
Caratteri e linguaggi       
Famiglie                    
Traduzione                  
COBOL                       
Lisp                        
APL                         
Perl                        
Javascript                  
Python                      
PHP                         
Ruby                        
Linguaggi educativi         
Pascal                      
Ada                         
Logo                        
Prolog                      
IEML                        
Linguaggi nazionali         
Linotte                     
Linguaggi esoterici         
Intercal                    
Brainfuck                   
Emmental                    
HQ9+                        
🔎