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

37
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… /

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

Page 1: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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…

Page 2: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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)

Page 3: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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?

Page 4: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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.

Page 5: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Anatomia di un linguaggio

Linguaggio di programmazione

Grammatica

ParserLexer

Page 6: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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

Page 7: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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!!!

Page 8: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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

And now…Let’s have fun!!!

Page 9: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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” ( )

Page 10: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Hello Fortran

PROGRAM HELLO 

WRITE(*,10) 

10 FORMAT('Hello World!') 

STOP 

END

Page 11: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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

Page 12: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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.

Page 13: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

BANG!!!

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

Page 14: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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

Page 15: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Hello Pascal

program Hello; 

var a: string;begin 

a:=‘Hello, Pascal’;

Writeln(a); end.

Page 16: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Ma a questo punto…Dov’è Pascal?

Page 17: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima
Page 18: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima
Page 19: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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. 

Page 20: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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

Page 21: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Hello C

#include <stdio.h> 

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

Page 22: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Hello PHP

<?php

echo 'Hello World!'; ?> 

Page 23: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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”

Page 24: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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; } 

Page 25: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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

Page 26: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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(); 

Page 27: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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; 

}

.

Page 28: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Hello Delphi! (in console)

program HelloWorld; 

{$APPTYPE CONSOLE} begin 

WriteLn('Hello World!'); 

end.

Page 29: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Hello .net!

C# IL

Page 30: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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).

Page 31: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Però…

Compilati Interpretati

Pascal, Object Pascal

C, C++, Objective‐C

PHP

Python

Ruby

Perl

...Java

C#, VB9, Delphi, …

Semicompilati

Page 32: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Hello Python

"Hello World!"

Page 33: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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

Page 34: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Ovvero???

Page 35: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Potenzialità di Python

Page 36: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

Esempio di codice Python

def fattoriale(x): 

if x == 0: return 1 

else: 

return x * fattoriale(x‐1)

Page 37: Una (troppo) breve storia dei linguaggi di programmazione · UNA (TROPPO) BREVE STORIA DEI ... La CPU del computer è la realizzazione pratica ... àAnche pascal riceve la sua prima

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

Appendice: La grafica in Pascal!!!

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