HyperTalk
HyperTalk è un linguaggio di programmazione creato nel 1987 da Dan Winkler e usato nel software hypermediale HyperCard di Bill Atkinson.Il linguaggio si rivolgeva soprattutto a principianti: i programmatori HyperTalk venivano chiamati "autori" ed il processo dello scrivere programmi scripting. Gli script HyperTalk sono molto simili alla lingua inglese e usano una struttura simile al Pascal.
Il linguaggio, non sensibile alle maiuscole, agli inizi era interpretato, ma diventò "virtualmente compilato": ogni script viene compilato al primo lancio, dopo di che il codice resta a disposizione.
Sono previste le strutture di base per il controllo del flusso: repeat for/while/until, if..then..else; è inoltre possibile definire funzioni e subroutine, qui chiamate handler, con passaggio di parametri. I tipi di dati vengono gestiti direttamente dal linguaggio: ogni dato viene sempre convertito in stringa prima della memorizzazione: al momento dell'uso, HyperTalk trasforma il dato nel tipo richiesto dal contesto; il tutto avviene in background al runtime. Non ci sono classi o strutture nel senso tradizionale; il loro posto è preso da stringhe speciali o liste di item, separate da un carattere (definibile, nelle ultime versioni). Queste liste prendono anche il posto dei vettori, non supportati direttamente.
Table of contents |
2 Estensioni di HyperTalk 3 Discendenti di HyperTalk 4 Alcuni esempi di HyperTalk |
Orientamento agli oggetti
Ogni script è associato ad un oggetto di HyperCard e salvato assieme all'oggetto nei file (chiamati stack); HyperTalk permette di manipolare tali oggetti e cambiare le loro proprietà (comando set). Ogni oggetto viene identificato usando un linguaggio molto simile a quello naturale e indicando la gerarchia in cui si trova:
get the name of card button 5 put "questa è una prova" into card field "mioCampo" send "mouseUp" to card button "OK" of this cardTali oggetti (indicati col nome, con il numero d'ordine o con un ID unico) possono appartenere ad una singola scheda o al background, dal quale possono essere visibili su ogni scheda, pur mantenendo valori diversi.
HyperTalk prevede anche il pieno controllo degli strumenti grafici tramite la scelta dell'attrezzo da usare e simulando il movimento del mouse mediante il comando drag:
put "10,10" into start put "100,100" into end drag from start to endHyperCard usa i messaggi (cioé gli eventi) per gestire le varie interazioni; per esempio, il messaggio mouseDown è spedito quando l'utente preme il pulsante del mouse mouseUp quando lo rilascia; il bersaglio dell'evento è l'oggetto in cui è avvenuto l'evento, che eventualmente può passarlo più in alto nella gerarchia, dopo averlo o meno processato. Durante i momenti di inattività viene generato il messaggio idle e durante il movimento del mouse vengono spediti ai vari oggetti messaggi mouseEnter e mouseLeave. Anche la pressione di un tasto genera un evento keyDown che contiene il codice del tasto. L'autore di uno stack non deve preoccuparsi di generare un event loop, in quanto questo avviene già all'interno di HyperTalk.
Estensioni di HyperTalk
Il linguaggio, sufficientemente completo per un uso normale, poteva essere espanso tramite un protocollo tipo plug-in: si tratta dei comandi esterni (XCMD) e delle funzioni esterne (XFCN). Si trattava in pratica di codice nativo allegato agli stack (inserito nelle risorse, tipo di file specifico del Mac OS) con un punto di ingresso ed un valore di ritorno. Queste estensioni sono richiamate dall'interno degli script come una qualunque funzione (handler) e possono generare messaggi. Alcuni XCMD avanzati aggiunsero caratteristiche avanzate, come il pieno supporto del colore (ColorizeHC, HyperTint, AddColor), finestre speciali (ShowDialog, MegaWindows, Listoid, Textoid, Tabloid, Prompt), supporto del drag & drop o molte interfacce hardware (Midi, seriali, ecc...)
Questi cloni e dialetti (normalmente chiamati linguaggi xTalk) hanno aggiunto molte caratteristiche indispensabili per un linguaggio moderno, come la gestione delle eccezioni, proprietà definite dal programmatore, timer, multi-threading ed anche nuovi oggetti.Discendenti di HyperTalk
Molti linguaggi sono nati sulla scia di HyperTalk. Ad esempio:
Altri esempi di script, che possiamo considerare cloni di secondo livello:
Alcuni dei termini usati in HyperCard sono diventati popolari in altri linguaggi (per esempio, i messaggi "onmouseup" di Javascript).