I LINGUAGGI DI PROGRAMMAZIONE In informatica un linguaggio di programmazione è utilizzabile per il controllo del comportamento di una macchina formale o di una implementazione di essa (tipicamente, un computer) ovvero in fase di programmazione di questa attraverso la scrittura del codice sorgente di un programma ad opera di un programmatore. I linguaggi di programmazione (Programming Languages o PL) si dividono in due grandi famiglie: A) PL A BASSO LIVELLO (cioè a livello del computer). Sono 1. Linguaggio Macchina ( 0101000101001011110….) (Non più usato) 2. Linguaggio Esadecimale ( F1A437EFA14…) (Quasi mai usato) 3. Linguaggio Assembler (Istruzioni della CPU del computer) (Ancora usato) B) PL AD ALTO LIVELLO (cioè a livello dell’uomo). Sono tanti, eccone alcuni fra i più usati: 1. C++ (si legge C plus plus, oppure C più più) 2. Java 3. Python 4. Visual Basic 5. PHP I programmi a basso livello sono più lunghi e difficili da scrivere ma sono velocissimi e richiedono poca memoria RAM. I programmi ad alto livello sono facili da scrivere ma richiedono un tempo di esecuzione maggiore perché tutte le istruzioni devono essere prima tradotte in linguaggio macchina e richiedono molta memoria RAM. FORTRAN Il Fortran (o FORTRAN: il nome maiuscolo è stato sostituito da quello con la sola iniziale maiuscola a partire dal Fortran 90 acronimo di Formula Translation o Translator ovvero traduzione/traduttore di formule matematiche in algoritmi computazionali), è uno dei primi linguaggi di programmazione, essendo stato sviluppato a partire dal 1954, da un gruppo di lavoro guidato da John Backus. Il primo manuale di riferimento per il programmatore del FORTRAN I, "The FORTRAN automatic coding system for the IBM 704 EDPM", scritto dallo stesso Backus, è del 1956; il compilatore fu pubblicato nel 1957. Il Fortran è un linguaggio quasi sempre compilato, imperativo, con tipizzazione statica delle variabili, progettato principalmente per ilcalcolo scientifico e numerico; vi sono state però anche implementazioni con codice interpretato. Un tipo particolare di Fortran compilato è il Fortran FLAG (Fortran Load And Go), sviluppato da Bob Richardson, programmatore presso la Rice University, molto usato negli anni settanta per l'esecuzione di programmi non troppo complessi. Grazie sia agli innumerevoli programmi applicativi sviluppati nel corso degli anni, sia alle immense librerie di funzioni (richiamabili anche da programmi scritti con altri linguaggi di programmazione), il Fortran è tuttora molto usato. Di esso esistono varianti per il calcolo parallelo (usate nel calcolo scientifico: simulazione di fluidi, interazioni fra particelle, previsioni meteorologiche, ecc.); inoltre, anche se progettato originariamente come linguaggio procedurale, alcune sue versioni più recenti consentono di usare anche costrutti propri della programmazione orientata agli oggetti. ASSEMBLY Il linguaggio assembly, detto anche linguaggio assemblativo, è, tra i linguaggi di programmazione, quello più vicino allinguaggio macchina vero e proprio, pur essendo differente rispetto a quest'ultimo. Erroneamente viene spesso chiamato "assembler", anche se quest'ultimo termine identifica il programma "assemblatore" che converte il linguaggio assembly in linguaggio macchina. L'assembly ha lo scopo generale di consentire al programmatore di ignorare il formato binario del linguaggio macchina. Ogni codice operativo del linguaggio macchina viene sostituito, nell'assembly, da una sequenza di caratteri che lo rappresenta in forma mnemonica; per esempio, il codice operativo per la somma potrebbe essere trascritto comeADD e quello per il salto come JMP. In secondo luogo, i dati e gli indirizzi di memoria manipolati dal programma possono essere scritti, in assembly, nella base numerica più consona al momento: esadecimale, binaria, decimale, ottale ma anche in forma simbolica, utilizzando stringhe di testo (identificatori). Il programma assembly risulta in questo modo relativamente più leggibile di quello in linguaggio macchina, con il quale mantiene però un totale (o quasi totale) isomorfismo. Il programma scritto in assembly non può essere eseguito direttamente dal processore; esso deve essere tradotto nel linguaggio macchina (binario) corrispondente, usando un programma compilatore detto assembler. COBOL In informatica il COBOL (acronimo di COmmon Business-Oriented L anguage, ossia, letteralmente, "linguaggio comune orientato alle applicazioni commerciali") è uno dei primi linguaggi di programmazione ad essere stato sviluppato. Nonostante sia un linguaggio datato il COBOL è tuttora presente in molte applicazioni software commerciali di tipo bancario, specie lato mainframe (es.CICS), che non si è preferito o voluto migrare in altra tecnologia software. In generale, le istruzioni del linguaggio COBOL sono da intendere come frasi scritte in inglese, che terminano con un punto fermo. In certe situazioni, si riuniscono più istruzioni in un'unica «frase», che termina con un punto, ma in tal caso spesso si usa la virgola, e il punto e virgola per concludere le istruzioni singole. Le parole chiave più importanti del linguaggio sono dei «verbi» imperativi, che descrivono un comando che si vuole sia eseguito. Un gruppo interessante di parole chiave è rappresentato dalle «costanti figurative», che servono a indicare verbalmente delle costanti di uso comune. Per esempio, la parola chiave ZERO rappresenta uno o più zeri, in base al contesto. PASCAL In informatica il Pascal è un linguaggio di programmazione creato da Niklaus Wirth. Si basa sul linguaggio ALGOL e fu così chiamato in onore del matematico e filosofo francese Blaise Pascal, inventore della prima macchina calcolatrice automatica. Le caratteristiche principali del Pascal sono una sintassi molto chiara e molto rigida con l'obbligo di dividere il programma in sezioni ben definite (uses, implementation) e di dichiarare in anticipo tutte le variabili usate nel programma (var, const); permette l'uso di tipi di dati complessi e definibili dal programmatore (i record) tramite la sezione type; permette (con alcune rigidità) l'uso dei puntatori e l' (allocazione dinamica della memorianew e dispose). Il Pascal è pertanto classificato come linguaggio semidinamico, in quanto gestisce i puntatori, permettendo di creare liste di variabili di dimensione non nota all'atto della compilazione, ma questi possono essere solo di un tipo alla volta, il tipo usato per definire la variabile puntatore stessa. Al posto delle subroutine di uso comune nei linguaggi di allora, il Pascal introduce le procedure e le funzioni, che estendono il concetto di subroutine incapsulando al loro interno le variabili e i dati locali, ed esponendo solo i valori in ingresso ed in uscita. Inoltre, nella sua formulazione originale, era privo dell'istruzione GOTO, aggiunta poi in seguito con riluttanza. BASIC Il BASIC, in informatica, è un linguaggio di programmazione ad alto livello sviluppato nel 1964 presso l'Università di Dartmouth sulcalcolatore GE-225. Ne furono coinventori i professori John George Kemeny e Thomas Eugene Kurtz. Il primo programma in BASIC "girò" il 1º maggio 1964 alle ore 4:00. 'elenco che segue riporta alcune comuni parole chiave utilizzate nel BASIC: Manipolazione dei dati LET (comando): assegna un valore (che può essere anche il risultato di un'espressione) ad una variabile DATA (istruzione): introduce un elenco di valori che possono essere assegnati sequenzialmente dal comando READ. Controllo del flusso IF..THEN..ELSE (istruzione): usate per eseguire confronti o prendere decisioni. FOR..NEXT (istruzione): ripete una porzione di codice per un certo numero di volte. Nel ciclo viene usata una variabile che agisce da contatore. WHILE..WEND e REPEAT..UNTIL (comandi): ripete una porzione di codice mentre la condizione di controllo è vera (ciclo WHILE..WEND) o finché non diventa vera (ciclo REPEAT..UNTIL). La condizione viene verificata all'inizio del ciclo (WHILE..WEND) oppure alla fine (REPEAT.UNTIL). GOTO (comando): salta nel programma ad un determinato numero di riga o ad una specifica etichetta. GOSUB (comando): salta ad eseguire una determinata porzione di codice, continuando ad eseguire il programma dall'istruzione successiva il GOSUB non appena viene incontrato il comando RETURN. Il GOSUB era usato per implementare le subroutine. ON..GOTO/GOSUB (comando): esegue un salto in base al verificarsi di una determinata condizione. Input/output PRINT (istruzione): visualizza un messaggio sullo schermo o su un altro dispositivo di output. INPUT (istruzione): chiede all'utente di inserire un valore che sarà memorizzato in una variabile. Può includere un messaggio di testo. TAB o AT (funzione): imposta la posizione dove stampare il prossimo carattere. Vari REM (da Remark): introduce un commento del programmatore (il nome del programma, la spiegazione delle variabili utilizzate, le istruzioni d'uso del software). Tutto ciò che compare dopo il REM è ignorato dall'interprete o dal compilatore. RPG RPG oppure RPG IV è un linguaggio di programmazione nativo per minicomputer IBM della serie iSeries, denominata anche, più comunemente, AS/400. La sua versione più recente comprende l'uso di prototipi di funzioni e procedure, binding statico e dinamico dei dati, accesso a librerie di routine scritte in C, uso di funzioni contenute in DLLcompilate a partire da altri linguaggi, e supporta totalmente codice dotato di sintassi ricorsiva e rientrante. Un programma RPG inizia tipicamente con una File Specification, contenente la lista di tutti i file da scrivere, leggere o modificare, seguita da una Input Specification, con le strutture dei dati (data Structures) e le matrici. Segue la Calculation Specification che racchiude la parte più importante del programma, ed infine la Output Specification, usata, fra l'altro, per impostare l'aspetto dei report stampati. Una delle modalità di funzionamento più caratteristiche del linguaggio è il cosiddetto ciclo (The Cycle): ogni programma RPG gira all'interno di un loop (letteralmente anello, cioè gruppo di istruzioni eseguite ciclicamente), che può essere usato, ad esempio, per esaminare uno alla volta tutti i record di un file. In alternativa il ciclo può ripetersi per un numero indefinito di volte, finché non viene interrotto dal verificarsi di un evento, oppure a seguito di un esplicito comando dell'utente. Altra caratteristica dell'RPG è che, molto più del COBOL e del FORTRAN, il modo in cui il codice è scritto è strettamente dipendente da come il testo è incolonnato. In altre parole anche gli spazi vuoti all'interno del codice devono avere un'esatta dimensione. Tutto questo era valido fino a qualche anno fa. Ultimamente il linguaggio si è evoluto e permette anche la scrittura in formato libero. C In informatica, il C è un linguaggio di programmazione di tipo strutturato. Il C è un linguaggio di programmazione relativamente minimalista; la sua semantica utilizza un insieme ristretto di concetti relativamente semplici e vicini al funzionamento dell'hardware dei calcolatori; molte istruzioni C sono traducibili direttamente con una singola istruzione di linguaggio macchina (per esempio, gli operatori di autoincremento e autodecremento). Nel linguaggio un ruolo centrale viene svolto dal concetto di puntatore, che viene generalizzato fino a coincidere con l'indirizzamento indiretto, un modo di accedere alla memoria hardware caratteristico di tutte le moderne CPU. Questo rende il C un linguaggio particolarmente efficiente. D'altra parte, rispetto al linguaggio assembly il C ha in più una struttura logica definita e leggibile, funzioni in stile Pascal e soprattutto il controllo sui tipi (in fase di compilazione), che manca completamente in assembly. La sintassi del C è piuttosto versatile e il linguaggio è in forma libera, permettendo di scrivere istruzioni complesse in poche righe di codice, o di creare programmi criptici e illeggibili (offuscamento del codice). In definitiva, il successo del C fu decretato dall'essere un linguaggio creato da programmatori esperti, per essere usato da programmatori esperti. C++ Il C++ è un linguaggio di programmazione orientato agli oggetti, con tipizzazione statica. È stato sviluppato (in origine col nome di "C con classi") da Bjarne Stroustrup ai Bell Labs nel 1983 come un miglioramento del linguaggio C. Tra i miglioramenti principali troviamo: l'introduzione del paradigma di programmazione a oggetti, funzioni virtuali, overloading degli operatori, ereditarietà multipla, template e gestione delle eccezioni. Il C++ fu standardizzato nel 1998 (ISO/IEC 14882:1998 "Information Technology - Programming Languages - C++", aggiornato nel 2003). C++11, conosciuto anche come C++0x, è il nuovo standard per il linguaggio di programmazione C++ che sostituisce la revisione del 2003. L'ultima versione dello standard (nota informalmente come C++14) è stata pubblicata nel 2014. JAVA In informatica Java è un linguaggio di programmazione orientato agli oggetti, specificatamente progettato per essere il più possibile indipendente dalla piattaforma di esecuzione. Uno dei principi fondamentali del linguaggio è espresso dal motto write once, run anywhere (WORA): il codice compilato che viene eseguito su una piattaforma non deve essere ricompilato per essere eseguito su una piattaforma diversa. Il prodotto della compilazione è infatti in un formato chiamato bytecode che può essere eseguito da una qualunque implementazione di un processore virtuale detto Java Virtual Machine. Al 2014, Java risulta essere uno dei linguaggi di programmazione più usati al mondo, specialmente per applicazioni client-server, con un numero di sviluppatori stimato intorno ai 9 milioni. Il linguaggio fu originariamente sviluppato da James Gosling e altri ingegneri presso Sun Microsystems, nel 2010 acquisita da Oracle Corporation, che è attualmente detentore del marchio registrato. Il linguaggio deriva gran parte della sua sintassi dai linguaggi Simula, C e C++, ma ha meno costrutti a basso livello e implementa in modo più puro (rispetto al C++) il paradigma objectoriented. Un buon punto di partenza per imparare Java è il tutorial ufficiale. Caratteristiche Java venne creato per soddisfare quattro scopi: 1. essere orientato agli oggetti; 2. essere indipendente dalla piattaforma; 3. contenere strumenti e librerie per il networking; 4. essere progettato per eseguire codice da sorgenti remote in modo sicuro. I programmi scritti in linguaggio Java, dopo una fase iniziale di compilazione con ottenimento del cosiddetto bytecode, sono destinati all'esecuzione sulla piattaforma Javaattraverso una fase di interpretazione (per questo motivo il linguaggio Java è detto anche semi-interpretato) ad opera di una Java Virtual Machine e, a tempo di esecuzione, avranno accesso alle API della libreria standard. Questi due passi forniscono un livello di astrazione che permette alle applicazioni di essere interamente indipendenti dal sistemahardware su cui esse saranno eseguite. Un'implementazione della piattaforma java è il Java Runtime Environment (JRE), necessario per l'esecuzione del programma compilato, mentre per lo sviluppo dei programmi in Java a partire dal codice sorgente è necessario il Java Development Kit (JDK) che include anche il JRE. JAVA SCRIPT In informatica JavaScript è un linguaggio di scripting orientato agli oggetti e agli eventi, comunemente utilizzato nellaprogrammazione Web lato client per la creazione, in siti web e applicazioni web, di effetti dinamici interattivi tramite funzioni di scriptinvocate da eventi innescati a loro volta in vari modi dall'utente sulla pagina web in uso (mouse, tastiera ecc...). Le caratteristiche principali di JavaScript sono: l'essere un linguaggio interpretato: il codice non viene compilato, ma interpretato (in JavaScript lato client, l'interprete è incluso nel browser che si sta utilizzando). la sintassi è relativamente simile a quella del C, del C++ e del Java. definisce le funzionalità tipiche dei linguaggi di programmazione ad alto livello (strutture di controllo, cicli, ecc.) e consente l'utilizzo del paradigma object oriented. è un linguaggio debolmente tipizzato. è un linguaggio debolmente orientato agli oggetti. Ad esempio, il meccanismo dell'ereditarietà è più simile a quello del Self e del NewtonScript che a quello del linguaggio Java(che è un linguaggio fortemente orientato agli oggetti). Gli oggetti stessi ricordano più gli array associativi del Perl che gli oggetti di Java o del C++. Altri aspetti di interesse: in JavaScript lato client, il codice viene eseguito direttamente sul client e non sul server. Il vantaggio di questo approccio è che, anche con la presenza discript particolarmente complessi, il web server non viene sovraccaricato a causa delle richieste dei client. Di contro, nel caso di script che presentino un codice sorgenteparticolarmente grande, il tempo per lo scaricamento può diventare abbastanza lungo. Un altro svantaggio è il seguente: ogni informazione che presuppone un accesso a dati memorizzati in un database remoto deve essere rimandata ad un linguaggio che effettui esplicitamente la transazione, per poi restituire i risultati ad una o più variabili JavaScript; operazioni del genere richiedono il caricamento della pagina stessa. Con l'avvento di AJAX tutti questi limiti sono stati superati. Alcune funzionalità degne di nota: Può usare Unicode Può valutare le espressioni regolari (introdotte nella versione 1.2; supporto da parte dei browser: a partire da Netscape Navigator 4 e Internet Explorer 4) Le espressioni JavaScript contenute in una stringa possono essere valutate usando la funzione eval. ASP In informatica, le Active Server Pages (Pagine Server Attive, in genere abbreviato in ASP) sono pagine web contenenti, oltre al puro codice HTML, degli script che verranno eseguiti dal server (elaborazione lato server) per generare il codice HTML runtime da inviare al browser dell'utente (proprio per questo vengono in genere definite pagine web dinamiche). In questo modo è possibile mostrare contenuti dinamici (ad esempio estratti da database che risiedono sul server web) e modificarne l'aspetto secondo le regole programmate negli script, il tutto senza dover inviare il codice del programma all'utente finale (al quale va inviato solo il risultato), con notevole risparmio di tempi e banda. La tecnologia ASP comprende alcuni linguaggi di scripting per la programmazione Web all'interno del cosiddetto paradigma del Web dinamico. I linguaggi utilizzati sono VBScript e JScript per l'ambiente ASP e VB.NET, C# e J# per l'ambiente ASP.NET (anche se il più utilizzato è proprio VB.NET). Grazie a questi linguaggi il sistema dinamico può comunicare lato server con tutti gli oggetti presenti sul sistema, infatti le possibilità offerte dal sistema sono fortemente orientate verso l'interfaccia con un corrispondente database, rendendo così possibile lo sviluppo di siti dinamici basati sulle informazioni contenute nel database. È possibile interfacciare le pagine ASP con qualsiasi tipo di database che abbia un driver OLE-db o ODBC, come ad esempio Access, SQL Server, MySQL, Oracle, Firebird,Sybase e tanti altri. Funziona ufficialmente solo sul web server Microsoft Internet Information Services (IIS). Nonostante questo, per quanti utilizzano piattaforme GNU/Linux è disponibile un emulatore che consente di eseguire i codici ASP senza dover riscrivere l'intero progetto ma soltanto una piccola porzione di esso. Nel diffuso web server Apache, ad esempio, è possibile utilizzare pagine dalla sintassi simile ad ASP installando e configurando il modulo Apache: ASP funzionante sulla base di Perl. In alternativa esiste inoltre un modulo generalmente noto come ChiliASP (su cui si basa il modulo SJSASP, Sun Java System Active Server Pages, disponibile sul sito di SUN). Una caratteristica molto apprezzata dagli utilizzatori dell'interprete ASP è la semplice e comprensibile sintassi di programmazione che rende la curva di apprendimento di tale linguaggio poco ripida. L'interprete ASP, tuttavia, presenta alcuni limiti, specialmente di prestazioni. Principali concorrenti di ASP sono il PHP, che funziona in modo molto simile, ma con una sintassi del tutto diversa. PHP PHP (acronimo ricorsivo di "PHP: Hypertext Preprocessor", preprocessore di ipertesti; originariamente acronimo di "Personal Home Page") è un linguaggio di programmazione interpretato, originariamente concepito per la programmazione di pagine web dinamiche. L'interprete PHP è un software libero distribuito sotto la PHP License. PHP riprende per molti versi la sintassi del C, come peraltro fanno molti linguaggi moderni, e del Perl. È un linguaggio a tipizzazione debole e dalla versione 5 migliora il supporto al paradigma di programmazione ad oggetti. Certi costrutti derivati dal C, come gli operatori fra bit e la gestione di stringhe come array, permettono in alcuni casi di agire a basso livello; tuttavia è fondamentalmente un linguaggio di alto livello, caratteristica questa rafforzata dall'esistenza delle sue moltissime API, oltre 3.000 funzioni del nucleo base. Il PHP permette il passaggio di informazioni da una pagina all'altra attraverso le diverse funzionalità supportate dall'HTTP, in specifico richieste di tipo GET (informazioni parametrizzate nella barra degli indirizzi), POST (informazioni con origine da un precedente submit da un web-form, generalmente) e dei COOKIE (informazioni parametrizzate in piccole stringhe di testo salvate fisicamente su un browser), insieme al supporto alle sessioni (funzionalità basata sull'utilizzo dei cookie). Queste informazioni sono utilizzabili in PHP tramite 4 array di tipo associativo: $_GET, $_POST, $_COOKIE, $_SESSION.