Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La...

Post on 14-Feb-2019

220 views 0 download

Transcript of Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La...

UNA (TROPPO) BREVE STORIA DEI LINGUAGGI DI PROGRAMMAZIONE

“Il tedesco per la filosofia, l’inglese per il teatro, l’italiano per la lirica”

Noto filosofo tedesco di cui non mi sovviene il nome e che Google non aiuta a cercare…

Agenda

Perché un linguaggio di programmazione? (il computer non è maggico??? :o)

Come è fatto un linguaggio di programmazione? (si, ci sono linguaggi che descrivono linguaggi)Chi è Pascal? Dove è? Quando è?

E prima di Pascal?

E dopo? (sempre che esista un dopo‐Pascal :P)

Perché un linguaggio di programmazione?

Posso scrivere documenti con la calcolatrice scientifica?NO!

Posso fare calcoli con una macchina da scrivere?NO!

Ma allora che differenza c’è tra una calcolatrice o una macchina da scrivere e un PC?

Perché un linguaggio di programmazione?

La CPU del computer è la realizzazione pratica della cosiddetta

Una macchina che può essere programmata per eseguire operazioni complesse a partire da operazioni semplici.

Anatomia di un linguaggio

Linguaggio di programmazione

Grammatica

ParserLexer

Anatomia di un linguaggio: esempio

Linguaggio di programmazione

Frase::= Soggetto + Verbo + 

Complemento oggetto

[[Il[gatto]][è][il [topo]]]

OK!

Gatto := Topo…

FALSO!!!!!

Il Gatto è il topo

Anatomia di un linguaggio

La grammatica deve essere definita in un linguaggio non ambiguo 

Esiste una linguaggio (e quindi una grammatica) per definire una grammatica [BNF, EBNF]Curiosamente (per gli informatici non troppo) la grammatica è stata usata per definire sé stessa

Definita la grammatica si dovrebbe prendere tutto e creare un parser

La procedura è sempre identica, quindi esiste un linguaggio anche per questo

Infine si deve crare il lexer a partire dal parserAnche per questo esiste un linguaggio!!!

Insomma: andiamo a vedere un po’ dei linguaggi che hanno fatto la storia dell’informatica!

And now…Let’s have fun!!!

In origine erano…

FortranFormula Translator

Molto usato negli anni ‘60 per calcolo scientifico tuttora molte librerie specialistiche sono scritte in Fortran

Tuttora viene studiato e utilizzato perché “ciò che funziona non si cambia” ( )

Hello Fortran

PROGRAM HELLO 

WRITE(*,10) 

10 FORMAT('Hello World!') 

STOP 

END

In origine erano…

COBOLCOmmon Business Oriented Language

Molto utilizzato per calcoli “semplici” e per aspetti più operativi dei calcolatori

Le banche hanno ancora i mainframe che per compatibilità eseguono il codice COBOL (ora si chiama spesso ABAP) per gestire tutte le transazioni finanziarieSe fate acquisti su ebay, i vostri dati passano attraverso un programma scritto in COBOL

Hello Cobol

000100 IDENTIFICATION DIVISION. 000200 PROGRAM‐ID. HELLOWORLD. 000300 DATE‐WRITTEN. 02/05/96 21:04. 000400* AUTHOR BRIAN COLLINS 000500 ENVIRONMENT DIVISION. 000600 CONFIGURATION SECTION. 000700 SOURCE‐COMPUTER. RM‐

COBOL. 000800 OBJECT‐COMPUTER. RM‐COBOL. 000900 001000 DATA DIVISION. 001100 FILE SECTION. 001200…

…100000 PROCEDURE DIVISION. 100100 100200 MAIN‐LOGIC SECTION. 100300 BEGIN. 100400 DISPLAY " " LINE 1 POSITION 1 

ERASE EOS. 100500 DISPLAY "HELLO, WORLD." LINE 

15 POSITION 10. 100600 STOP RUN. 100700 MAIN‐LOGIC‐EXIT. 100800 EXIT.

BANG!!!

A dover far tutto si scrive e riscrive un sacco di volte tanta roba che rischia di essere inutile!!!

E Pascal?

Pascal nasce come progetto di ricerca del prof. Niklaus Wirth negli anni ’70

Unico scopo: avere un linguaggio didatticoLinguaggio procedurale

Derivato da FORTRAN

Hello Pascal

program Hello; 

var a: string;begin 

a:=‘Hello, Pascal’;

Writeln(a); end.

Ma a questo punto…Dov’è Pascal?

Perché tutti questi linguaggi?Perché col tempo sono cambiate le esigenze:•Negli anni ’60 tutto era molto sperimentale•Gli anni ’70 hanno portato alla diffusione dei linguaggi procedurali. Il software è artigianato.•Gli anni ‘80 portano alla diffusione dei primi PC e alla programmazione ad oggetti. Il software è manifattura seriale.•Gli anni ‘90 portano alla programmazione ad aspetti. Il software è commerciale e le aziende vivono di software.•Gli anni ’00 portano alla SOA. Non esiste più il concetto di software, ma di servizio. 

Le famiglie: Linguaggi Procedurali

Tipicamente contengono tutto l’algoritmo, l’interfaccia, i dati nello stesso fileLinguaggi tipici:

C (creato per programmare Unix)

PascalChe dire di più???

PHPUno dei primi linguaggi interpretati per internet. La struttura è simile al C

Svantaggi:Ogni modifica significa riprendere tutto e rifare dei pezzi di codice

Hello C

#include <stdio.h> 

main() { printf("Hello World!"); 

Hello PHP

<?php

echo 'Hello World!'; ?> 

Le famiglie: Linguaggi ad Oggetti

modularizzazione modularizzazionemodularizzazione!!!

si inizia a pensare non più a cosa deve fare in globale il programma, ma a che caratteristiche hanno gli elementi che partecipano all’algoritmo e come queste modificano l’algoritmo stesso

Arriva l’interfaccia grafica!!In linguaggi come C e Pascal aveva strani effetti…

Caratteristiche dei linguaggi: Concetto di visibilità di una variabileConcetto di campo e proprietàLe funzioni si chiamano “metodi”

Hello C in finestra!!!

#include <windows.h> 

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); 

char szClassName[] = "MainWnd"; 

HINSTANCE hInstance; 

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; 

MSG msg; 

WNDCLASSEX wincl; 

hInstance = hInst; 

wincl.cbSize = sizeof(WNDCLASSEX); 

wincl.cbClsExtra = 0; 

wincl.cbWndExtra = 0; 

wincl.style = 0; 

wincl.hInstance = hInstance; 

wincl.lpszClassName = szClassName; 

wincl.lpszMenuName = NULL; //No menu 

wincl.lpfnWndProc = WindowProcedure; 

wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); //Color of the window wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); //EXE 

icon wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //Small program icon

wincl.hCursor = LoadCursor(NULL, IDC_ARROW); //Cursor

if (!RegisterClassEx(&wincl)) 

return 0; 

hwnd = CreateWindowEx(0, //No extended window styles szClassName, //Class name "Window", //Window caption WS_OVERLAPPEDWINDOW& ~WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, //Let Windows decide the left and top positions of the window 120, 50, //Width and height of the window, NULL, NULL, hInstance, NULL); //Make the window visible on the screen ShowWindow(hwnd, nCmdShow); //Run the message loop BOOL bRet; while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0) { if (bRet == ‐1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 15, 3, "Hello World!", 13); EndPaint(hwnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: returnDefWindowProc(hwnd, message, wParam, lParam); } return 0; } 

Le famiglie: Linguaggi ad Oggetti

C++ sintassi e compatibilità con C, e tanti accrocchi per unire C e gli Oggetti

Objective‐Cincompatibile con qualunque linguaggio e soprattutto indipendente da C. Apple vive solo di Obj‐C

Java il primo linguaggio semi‐interpretato, usa una Macchina Virtuale per eseguire il codice

Object‐Pascal e DelphiAnche pascal riceve la sua prima evoluzione verso la programmazione ad oggetti

.netC# 1.0‐2.0‐3.0 

il tentativo [decisamente riuscito] di Microsoft di entrare nel mondo dei linguaggi ad oggettiDelphi .net

Portano anche Pascal nell’era degli Oggetti. TurboPascal 7.0 già supporta Obj‐Pascal, ma non lo usa nessuno. Oggi Delphi è parte della piattaforma .net

VB9Facendo parte di un grande progetto per portare i vecchi linguaggi a nuove piattaforme, anche Visual Basic (nato da Cobol e qualche idea di programmazione strutturata) viene portato nel mondo dei Framework

Hello Java! (usando Swing)

import javax.swing.JFrame; 

import javax.swing.JLabel; 

public class HelloWorld extends JFrame { 

public HelloWorld() { 

super("Hello World!"); 

JLabel HelloWorldLabel = new JLabel("Hello World!"); 

getContentPane().add(HelloWorldLabel); 

setDefaultCloseOperation(EXIT_ON_CLOSE); 

setResizable(false); 

setLocation(350, 320); 

setSize(160, 60); 

setVisible(true); 

public static void main(String[] args) { 

new HelloWorld(); 

Hello Objective‐C (con Cocoa)

#import <Foundation/Foundation.h> 

int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello, World!"); [pool release]; return 0; 

}

.

Hello Delphi! (in console)

program HelloWorld; 

{$APPTYPE CONSOLE} begin 

WriteLn('Hello World!'); 

end.

Hello .net!

C# IL

Però…

I linguaggi si dividono, ancora infine, in base alla modalità di esecuzione. Un file .exe è un file che è stato scritto in un certo linguaggio X e poi è stato tradotto nel linguaggio macchina (il linguaggio X è compilato)

Un file .bat è un file che viene eseguito senza dover essere compilato di volta in volta (il linguaggio che lo descrive è interpretato).

Però…

Compilati Interpretati

Pascal, Object Pascal

C, C++, Objective‐C

PHP

Python

Ruby

Perl

...Java

C#, VB9, Delphi, …

Semicompilati

Hello Python

"Hello World!"

Python è il nuovo pascal?

Come Pascal permette la programmazione strutturata “classica” (che piace tanto a chi deve pensare all’algoritmo

Permette anche (e soprattutto) la programmazione ad oggetti (☺) o la programmazione funzionale(☺☺ lambdacalcolo!!) ma non diciamolo in giro… ;)

Al contrario di Pascal grandi aziende hanno deciso di utilizzarlo per prodotti commercialiPuò essere usato per gestire delle personalizzazioni in quanto non difficile da imparare e comunque molto potente

Ovvero???

Potenzialità di Python

Esempio di codice Python

def fattoriale(x): 

if x == 0: return 1 

else: 

return x * fattoriale(x‐1)

Qualche indirizzo utile per chi vuole restare amico di Pascal nonostante tutto…☺

Appendice: La grafica in Pascal!!!

http://userpage.fu‐berlin.de/~molski/fpsdl/