Linguaggi standard:
il C e l'HTML

 

    INDICE:

 

    Il linguaggio C

 

    Il linguaggio HTML

 

IL LINGUAGGIO C

Se analizziamo attentamente la definizione di crittografia, possiamo concludere che qualsiasi linguaggio può essere di tipo crittografico, anche i cosiddetti linguaggi standard.

Prendendo ad esempio la sorgente di un programma scritto in C, oppure un file html, questi risultano incomprensibile, a meno che non ci siano state fornite le diverse regole per poterlo leggere.

    Cenni generali

Come qualunque linguaggio, anche il linguaggio C si compone di parole e regole; queste ultime costituiscono la portante grammaticale e sintattica che consente di aggregare le prime per formare frasi di senso compiuto.

Come qualsiasi linguaggio di programmazione, inoltre, il linguaggio C rappresenta in qualche modo un compromesso tra l'intelligenza umana e l'intrinseca stupidità della macchina. Esso costituisce il mezzo tramite il quale il programmatore "spiega" alla macchina come effettuare determinate operazioni.

Naturalmente (si perdoni l'ovvietà) la macchina non è in grado di capire direttamente il linguaggio C: essa è troppo stupida per poterlo fare, e d'altra parte il C è direttamente leggibile e comprensibile dagli esseri umani; troppo distante, quindi, dalla logica binaria, l'unica che abbia senso per un calcolatore.

Perché la macchina possa eseguire un programma scritto in C, anche il più banale, occorre rielaborarlo fino a ridurlo ad un insieme di valori esprimibili in codice binario: diciamo, per capirci, che questi rappresentano la traduzione in linguaggio macchina di quanto il programmatore ha espresso in linguaggio C, il quale non è altro che un "sottolinguaggio" della lingua parlata dal programmatore stesso, o, in altre parole, un sottoinsieme di quella.  

In effetti, l'utilizzo di sottoinsiemi della lingua parlata per scrivere programmi deriva dall'esigenza di semplificare la traduzione del programma nell'unica forma comprensibile alla macchina (il binario, appunto): lo scopo è eliminare a priori le possibili ambiguità, le scorrettezze grammaticali e, in generale, tutti quei "punti oscuri" dei discorsi in lingua naturale che sono solitamente risolti dall'essere umano mediante un processo di interpretazione o di deduzione dei significati da conoscenze che non sono direttamente reperibili nel discorso stesso ma derivano dall'esperienza e dalla capacità di inventare. La macchina non impara e non inventa.

Sebbene quanto detto valga, evidentemente, per tutti i linguaggi di programmazione, va sottolineato che il C ha caratteristiche proprie, che ne fanno, in qualche modo, un linguaggio particolare.  

    Principali caratteristiche

Innanzitutto esso dispone di un insieme limitatissimo di istruzioni. E' dunque un linguaggio intrinsecamente povero, ma può essere facilmente ed efficacemente arricchito: chiunque può aggiungere nuove istruzioni (o meglio, funzioni) alla strumentazione che accompagna il linguaggio. In pratica si possono coniare neologismi e creare dei vocabolari aggiuntivi a quello proprio del linguaggio, che potranno essere utilizzati all'occorrenza. Di fatto, in C, anche la gestione dello I/O (Input/Output) è implementata così. Un gran numero di funzioni esterne al linguaggio è ormai considerato universalmente parte del linguaggio stesso ed accompagna sempre il compilatore, nonostante, dal punto di vista strettamente tecnico, questo sia comunque in grado di riconoscere solo un piccolo numero di istruzioni intrinseche.

Tutto ciò si traduce anche in una relativa semplicità funzionale del compilatore: sono quindi molti gli ambienti per i quali è stato sviluppato un compilatore dedicato. Essendo la maggior parte del linguaggio esterna al compilatore, è possibile riutilizzarla semplicemente facendo "rimasticare" i file sorgenti delle funzioni (e sono sorgenti C) al compilatore con il quale dovranno essere associati. In questo sta la cosiddetta portabilità del C, cioè la possibilità di utilizzare gli stessi sorgenti in ambienti diversi, semplicemente ricompilandoli.  

Un'altra caratteristica del C è la scarsità di regole sintattiche. Il programmatore ha molta libertà di espressione, e può scrivere programmi che riflettono ampiamente il suo personalissimo stile, il suo modo di risolvere i problemi, il suo tipo di approccio all'algoritmo. Ciò ha senz'altro riflessi positivi sull'efficienza del programma, ma può essere causa di difficoltà talora insuperabili, ad esempio nei successivi interventi sul sorgente a scopo di manutenzione o di studio, quando lo stile del programmatore sia eccessivamente criptico. La regola forse più importante che il programmatore C deve seguire, nonostante non faccia parte del linguaggio, è la cosiddetta regola "KISS" (Keep It Simple, Stupid).

    Basso livello

Infine, il C mette a disposizione concetti e strumenti che consentono un'interazione "di basso livello" con la macchina e con le sue risorse. Per "basso livello" non si intende qualcosa di poco valore, ma una piccola distanza dalla logica binaria della macchina stessa. Ne deriva la possibilità di sfruttare a fondo, e con notevole efficienza, tutta la potenza dell'elaboratore. Non a caso il C è nato come linguaggio orientato alla scrittura di sistemi operativi; tuttavia la possibilità di estenderlo mediante librerie di funzioni ha fatto sì che, nel tempo, esso divenisse linguaggio di punta anche nella realizzazione di programmi applicativi, per i quali ne erano tradizionalmente usati altri.

    Il C++

L'evoluzione più recente del C è rappresentata dal C++, il quale è, in pratica, un "superset" del C stesso, del quale riconosce ed ammette tutti i costrutti sintattici, affiancandovi le proprie estensioni: queste consentono al programmatore di definire delle entità composte 

di dati e del codice eseguibile atto alla loro manipolazione. Dette entità vengono così trattate, a livello logico, come se fossero tipi di dato intrinseci al linguaggio e consentono pertanto di descrivere la realtà su cui il programma opera in termini di linguaggio fondamentale: è la cosiddetta programmazione ad oggetti. Che il C++ sia un'estensione del C (e non un nuovo linguaggio) è dimostrato dal fatto che gli arricchimenti sintattici sono tutti implementati a livello di preprocessore; in altre parole, ogni sorgente C++ viene 

ridotto a sorgente C dal preprocessore e poi masticato da un normale compilatore C. I programmi eseguibili risultanti sono efficienti e compatti in quanto il compilatore traduce 

ogni istruzione C in un numero limitato di istruzioni macchina (al limite una sola): solo l'Assembler è più efficiente (ma rende la vita del programmatore assai più dura)

 

IL LINGUAGGIO HTML

    L'ipertesto

 HTML è un acronimo per HyperText Markup Language (ovvero: linguaggio per la codifica di ipertesti tramite marcatori).
Un ipertesto è un testo che puo' contenere al suo interno dei riferimenti ad altri testi, che possono a loro volta essere ipertesti. Mentre un usuale testo è organizzato in forma necessariamente sequenziale, l'ipertesto stravolge questo tipo di approccio, associando ad opportuni elementi del testo stesso (parole, frasi, immagini, ...) degli altri ipertesti, e segnalando graficamente all'utente-lettore l'esistenza di questi link (legami, riferimenti). Nel consultare l'ipertesto l'utente può quindi decidere se trascurare per il momento tali associazioni, continuando nella lettura della pagina, oppure se seguirle (generalmente selezionando l'oggetto con il mouse), sospendendo momentaneamente la lettura della pagina attuale e passando alla consultazione della pagina linkata (connessa) all'oggetto in questione. In questa maniera la potenzialità espressiva del linguaggio è arricchita di una nuova primitiva di interazione con l'utente. E' possibile, per esempio, trovare una collocazione per informazioni dettagliate su di un argomento marginale senza per questo rinunciare ad approcci ad un più alto livello, oppure citare concetti, persone, cose, senza doverli descrivere in dettaglio ogni volta, ma linkando una pagina in cui ciò viene fatto una volta per tutte, con enorme risparmio di tempo, e con nessun compromesso sul rigore o la completezza dell'informazione.
    I marcatori o teg

Un marcatore è un codice che segnala l'inizio (o la fine) di una formattazione del testo. I 

linguaggi che fanno uso di marcatori (markup languages) sono usati diffusamente per la composizione di testi, e costituiscono lo strato sottostante i più comuni editor di testi (Winword, Word Perfect, ...).

 

L'HTML è un markup language. I suoi marcatori cominciano con un segno di minore (<) e terminano con un segno di maggiore (>).

La sintassi generale è la seguente:

    I caratteri speciali

Essendo i caratteri '<' e '>' utilizzati per il riconoscimento dei marcatori, essi non possono più essere utilizzati all'interno del file HTML. Per ovviare a questo inconveniente l'HTML definisce una serie di combinazioni di caratteri che possono rappresentare i caratteri proibiti. Se si vuole immettere all'interno di un file HTML il carattere '<' si dovrà scrivere "&lt;" (le lettere "lt" stanno per less than). Il simbolo '>' deve essere sostituito con "&gt;" (greater than). Questo sistema di codifica rende indisponibile il carattere "&", che viene sostituito con "&amp;". Tutte le sequenze dei cosiddetti caratteri speciali cominciano con '&' e finiscono con ';'.

    L'header ed il body

Un file HTML è composto logicamente da due parti: un header (testata) ed un body (corpo). L'header contiene tutti quei marcatori che contribuiscono alla descrizione generale della pagina (ivi compreso il titolo da mettere sulla titlebar del browser). Il body contiene la descrizione dettagliata dei singoli elementi interni alla pagina.

    Il marcatore àncora

Gli elementi più importanti dei file HTML sono le ancore ed i riferimenti. Sono loro che trasformano quello che altrimenti sarebbe un normale testo in un ipertesto. Il marcatore <A> segna l'inizio di un'àncora o di un riferimento. Se lo facciamo seguire da un attributo 

NOME="nome_ancora" allora abbiamo realizzato un'ancora, cioè un punto che può essere riferito, indicato dall'interno dello stesso file o da fuori. E' come se fosse un punto di atterraggio di un link proveniente da un'altra parte dell'ipertesto.
Se, invece, lo facciamo seguire da un attributo HREF="#nome_ancora", tutto il testo compreso tra questo marcatore e il marcatore </A> apparirà all'utente sottolineato, e se l'utente lo selezionerà verrà portato nel punto in cui è stata inserita l'ancora <A NOME="nome_ancora">. Dunque abbiamo introdotto nel file HTML un punto di partenza, un trampolino di lancio. Il trampolino di lancio può condurre anche ad altre pagine (tramite l'attributo <A HREF="URL">) oppure ad àncore interne ad altre pagine (tramite un attributo del tipo <A HREF="URL#nome_ancora">).

    I commenti, le liste e le tabelle

Tutto ciò che è contenuto all'interno del marcatore <!--...--> viene ignorato dal browser, e costituisce un commento, visibile solo a chi consulta il codice HTML.

Una nota a parte, invece, merita la lista non ordinata (<ul>), che può essere utilizzata (quando priva di elementi <li>) per indentare un testo. Si noti che un elemento di una lista può essere a sua volta una lista. 

Le liste possono essere anche numerate, nel senso che ogni elemento della lista verrà presentato all'utente preceduto da un numero d'ordine.


Infine le tabelle sono introdotte dal marcatore <table> e terminate da </table>. Ogni campo <tr> introduce una riga, ed ogni campo <td> una casella sulla riga.
    Estensioni

Il linguaggio HTML è suscettibile di estensioni. Chiunque può inventare un nuovo marcatore od un nuovo set di marcatori, e realizzare un browser che lo interpreti correttamente. I browser che non riconoscono tale marcatore, semplicemente lo ignorano. Per esempio: il linguaggio Java permette l'esecuzione di programmi che si annidano, per così dire, all'interno della finestra del browser, e che vengono passati insieme alla pagina HTML. Per poter trasferire al borwser questi programmi, che vengono chiamati applet, sono stati definiti un certo numero di marcatori, tra cui alcuni che contengono fisicamente uno pseudocodice del programma da eseguire (il cosiddetto bytecode), ed altri che specificano la porzione della finestra che ospiterà l'applet stesso. I browser che non supportano Java, nel momento in cui incontrano tali marcatori li ignoreranno, e passeranno oltre, senza pregiudicarsi la capacità di interpretare in qualche modo il file HTML.
Si può avere un immediato riscontro di questa tolleranza dei browsers inserendo all'interno di un file HTML un marcatore di nostra invenzione. Il browser lo ignorerà, come se fosse una estensione al linguaggio che ancora non supporta.