Tiny BASIC: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nuova pagina: {{WIP|Leo72}} Il '''Tiny BASIC''' è un dialetto del linguaggio di programmazione BASIC che è stato sviluppato tra il 1975 ed il [[...
 
mNessun oggetto della modifica
 
(28 versioni intermedie di 16 utenti non mostrate)
Riga 1:
{{Linguaggio di programmazione
{{WIP|Leo72}}
|nome = Tiny BASIC
Il '''Tiny BASIC''' è un [[dialetto (informatica)|dialetto]] del [[linguaggio di programmazione]] [[BASIC]] che è stato sviluppato tra il [[1975]] ed il [[1976]] per i [[computer]] ad [[8 bit]] dell'epoca. Un suo punto di forza era la ridotta quantità di memoria occupata, variabile dai 2 ai 3 [[byte|kB]], un fattore molto importante in un periodo in cui gli elaboratori dell'epoca erano normalmente offerti con una dotazione di 4 kB di [[Random Access Memory|RAM]].
|immagine =
<!--
|didascalia =
|autore = aa. vv.
|data = [[1975]]/[[1976]]
|versione =
|utilizzo = linguaggio general-purpose
|paradigmi = non strutturato
|tipizzazione = forte
|specifiche =
|estensione =
|influenzato_da = [[BASIC]]
|ha_influenzato =
|implementazione_riferimento =
|sistema_operativo =
|lingua =
|licenza =
|sito_web =
}}
Il '''Tiny BASIC''' è un [[dialetto (informatica)|dialetto]] del [[linguaggio di programmazione]] [[BASIC]] che è stato sviluppato tra il [[1975]] e il [[1976]] per i [[computer]] a [[8 bit]] dell'epoca. Un suo punto di forza era la ridotta quantità di memoria occupata, variabile dai 2 ai 3&nbsp;[[byte|kB]], un fattore molto importante in un periodo in cui gli elaboratori erano offerti con una dotazione di [[RAM]] che generalmente non superava i 4&nbsp;kB. Da questo il nome ''Tiny'', {{lett|minuscolo}}.
 
==Sviluppo==
laLa struttura del linguaggio fu inizialmente teorizzata da [[Dennis Allison]], un membro della facoltà di [[informatica]] della [[Stanford University]], su richiesta di [[Bob Albrecht]], un membro dell'[[Homebrew Computer Club]]., Heche hadaveva seenvisto il BASIC onsui [[minicomputer]]s ande feltpensava itche wouldtale belinguaggio thefosse perfectperfetto matchper fori newnuovi machinescomputer like thequali l'[[Altair 8800|MITS Altair 8800]], whichche hadera beenstato releasedpresentato inagli Januaryinizi del 1975.
 
BobAllison ande DennisAlbretch publishedpubblicarono thela designstruttura documentdel inlinguaggio thesulla [[newsletter]] of thedi ''[[People's Computer Company]]'', un'organizzazione dedita alla diffusione della cultura del computer come strumento per aiutare le persone.<ref>{{cita Inweb|url=http://www.digibarn.com/collections/newsletters/peoples-computer/index.html|titolo=Informazioni Decembersul People's Computer Company|accesso=18 febbraio 2011}}</ref> Nel mese di dicembre del 1975, Dick Whipple ande John Arnold createdcrearono anun [[interpreterinterprete (computinginformatica)|interpreterinterprete]] fordel thelinguaggio languageche thatrichiedeva requiredsolo only3&nbsp;kB 3K ofdi RAM. BobAllison ande DennisAlbretch decideddecisero todi publishpubblicare thisquesto versioninterprete ande correctionsle tocorrezioni theapportate originalalla designstruttura documentsoriginale del linguaggio in auna newsletter dedicated to Tiny BASIC, which theychiamata called [[Dr. Dobb's Journal|"'Dr. Dobb's Journal of Tiny BASIC Calisthenics and Orthodontia"]].'', Inpoi thedivenuta 1976la issuesrivista several''[[Dr. versionsDobb's ofJournal]]'' Tinyedita BASIC,da including[[Jim designWarren]], descriptionsun andaltro fullmembro sourcedell'Homebrew code, wereComputer publishedClub.
 
La spinta a terminare e a pubblicare il Tiny BASIC fu data dalla pubblicazione della famosa [[Lettera aperta agli hobbisti]] che un giovane [[Bill Gates]] scrisse per denunciare la crescente diffusione della pratica di copiare il software piuttosto che acquistarlo. La lettera era indirizzata genericamente a tutti gli appassionati di computer, ma in realtà era diretta principalmente proprio verso l'Homebrew Computer Club, un membro del quale aveva trafugato durante un tour di presentazione dell'Altair 8800 una copia dell'[[Altair BASIC]] e lo aveva poi ridistribuito agli altri membri.
== Tiny BASIC grammar ==
 
Bill Gates, nella sua lettera, sosteneva che la [[pirateria informatica]] non solo non ripagava gli autori del software delle loro fatiche in termini di rientro economico ma scoraggiava anche i programmatori dal continuare a produrre software di qualità. Warren rispose a Gates dalle colonne di ''SIGPLAN Notices'', la newsletter pubblicata da [[Association for Computing Machinery]] (ACM):
The grammar is listed below in [[Backus-Naur form]]. In the listing, an asterisk ("<tt>*</tt>") denotes zero or more of the object to its left &mdash; except for the first asterisk in the definition of "<tt>term</tt>", which is the multiplication operator; parentheses group objects; and an epsilon ("<tt>ε</tt>") signifies the empty set. As is common in computer language grammar notation, the vertical bar ("<tt>|</tt>") distinguishes alternatives, as does their being listed on separate lines. The symbol "<tt>CR</tt>" denotes a [[carriage return]] (usually generated by a keyboard's "Enter" key).
 
{{citazione|C'è una valida alternativa ai problemi del "furto" del software sollevati da Bill Gates nella sua rabbiosa lettera agli appassionati di computer. Quando il software è gratuito, o poco costoso, è più facile pagarlo che duplicarlo, così che non sia "rubato".|Jim Warren, ''SIGPLAN Notices'' (luglio 1976)}}
<!-- Note: there might be some typos in the listing, which IIRC is an exact copy of the DrD original. A correction of those errors would have to be shown with (foot)notes, so that the reader will be presented with the original text as printed in the DrD. --Wernher -->
 
Warren annunciava la disponibilità del Tiny BASIC, i cui sorgenti erano copiabili dalla rivista ''Dr. Dobb's Journal'' oppure era possibile acquistarne una copia già pronta alla modica cifra di 5/10 dollari.
line ::= number statement CR | statement CR
 
== Sintassi ==
La [[sintassi (informatica)|sintassi]] del Tiny BASIC è elencata qui sotto, in [[Backus-Naur Form|formato Backus-Naur]]. Nell'elenco un asterisco ("<kbd>*</kbd>") denota zero o più degli oggetti alla sua sinistra — tranne che per il primo asterisco nella definizione del "<kbd>termine</kbd>", che è il segno della moltiplicazione; le parentesi raggruppano gli oggetti; la lettera epsilon ("<kbd>ε</kbd>") indica un insieme vuoto. La barra verticale ("<kbd>|</kbd>") indica delle alternative, elencate su righe separate; il simbolo "<kbd>CR</kbd>" indica un carattere di [[ritorno carrello]]:
 
linea ::= numero istruzione CR | istruzione CR
statementistruzione ::= PRINT expr-list
IF expressionespressione relopconfronto expressionespressione THEN statementistruzione
GOTO expressionespressione
INPUT var-listelenco di variabili
LET var = expressionespressione
GOSUB expressionespressione
RETURN
CLEAR
Line 27 ⟶ 51:
END
expr-listelenco di espressioni ::= (stringstringa|expressionespressione) (, (stringstringa|expressionespressione)* )
var-listelenco di variabili ::= var (, var)*
expressionespressione ::= (+|-|ε) termtermine ((+|-) term)*
termtermine ::= factorfattore ((*|/) factorfattore)*
factorfattore ::= var | numbernumero | (expressionespressione)
var ::= A | B | C .... | Y | Z
numbernumero ::= digitcifra digitnumerica*
digitcifra ::= 0 | 1 | 2 | 3 | ... | 8 | 9
relopconfronto ::= < (>|=|ε) | > (<|=|ε) | =
Un BREAK dal terminale interrompe l'esecuzione del programma
A BREAK from the console will interrupt execution of the program
 
Source: ''Dr. Dobb's Journal of Computer Calisthenics & Orthodontia'', Volume 1, Number 1, 1976, p.9.
''Fonte: "Dr. Dobb's Journal of Computer Calisthenics & Orthodontia", Volume 1, Numero 1, 1976, pag. 9.''
 
==Implementazione==
== Implementation in interpreted language==
Il Tiny BASIC fu implementato come [[linguaggio interpretato]] usando un [[interprete (informatica)|interprete]] che girava su una [[macchina virtuale]]: l'interprete traduceva le istruzioni scritte dall'utente in appositi comandi che poi eseguiva. L'interprete era scritto con gli stessi comandi che eseguiva. Quelli che seguono sono un esempio dei comandi eseguibili dall'interprete:
 
* <code>TST etichetta, stringa</code>: se "stringa" combacia con la linea BASIC, avanza il cursore oltre "stringa" ed esegue la prossima istruzione interpretata alla linea indicata da "etichetta", altrimenti esegue l'istruzione presente a "etichetta"
For the implementation, an [[interpreted language]] (IL) is used. An [[interpreter (computing)|interpreter]] written in IL interprets a line of Tiny Basic code and executes it. The IL is run on an [[abstract machine]], which interprets IL code. The idea to use an interpreted language goes back to Val Schorre (with [[META II]], 1964) and Glennie (Syntax Machine). See also [[virtual machine]], [[Common Language Infrastructure|CLI]].
* <code>CALL etichetta</code>: esegue il codice presente a "etichetta"; salva l'indirizzo dell'istruzione dopo <code>CALL</code> nello [[pila (informatica)|stack]]
* <code>RTN</code>: riprende l'esecuzione dal punto specificato nel valore contenuto in cima allo stack;
* <code>JUMP etichetta</code>: continua l'esecuzione del programma dal punto indicato da "etichetta";
<small>(fonte: "Dr. Dobb's Journal", Volume 1, Numero 1, 1976, pag.12.)</small>
 
==Palo Alto Tiny BASIC==
The following table gives a partial list of the commands of the ''interpreted language'' in which the Tiny BASIC interpreter is written. The length of the whole interpreter program is only 120 IL operations. Thus the choice of an interpretive approach economized on memory space and implementation effort, although the BASIC programs run thereon were executed somewhat slowly. The <tt>CRLF</tt> in the last line symbolizes a carriage return followed by a [[line feed]].
<!-- ATTENZIONE: a questo capitolo punta un redirect dalla voce "Palo Alto Tiny BASIC" - Si prega di non modificarne il titolo-->
[[File:Copyleft All Wrongs Reserved.png|thumb|Inizio del sorgente del '''Palo Alto Tiny BASIC''' di [[Li-Chen Wang]]. Si legge la dicitura "[[Copyleft|@Copyleft]]" e "All wrongs reserved".]]
Il '''Palo Alto Tiny BASIC''' fu la quarta versione del Tiny BASIC che fu pubblicata su ''Dr. Dobb's Journal'', esattamente sul nº 5 di maggio del 1976 della rivista. Fu scritta da [[Li-Chen Wang]] e, rispetto alle altre versioni del linguaggio, era quella che occupava meno memoria: solo 1,77&nbsp;kB di RAM. Altre differenze riguardavano l'introduzione del supporto agli [[array]] (mediante l'uso del prefisso "@") e la possibilità di omettere il comando <code>LET</code> per le operazioni di assegnamento con le variabili. Infine, per risparmiare sullo spazio occupato dai listati in memoria, l'interprete accettava le forme abbreviate dei comandi: <code>A.</code> per <code>ABS</code>, <code>P.</code> per <code>POKE</code>, <code>R.</code> per <code>RUN</code> ecc..<ref name="paloalto">{{cita web|url=http://www.nicholson.com/rhn/files/tinybasic.tar.Z|titolo=Sorgenti del Palo Alto Tiny BASIC di Li-Chen Wang e relativa documentazione|accesso=09/03/2011}}</ref> Li-Chen scrisse anche una versione del gioco [[Star Trek (videogioco 1971)|Star Trek]] con il suo BASIC che fu pubblicato sul numero di luglio del 1976 della newsletter ''People's Computer Company''.
 
Il Palo Alto Tiny BASIC è anche da segnalare come uno dei primi software per cui fu utilizzato il concetto di [[copyleft]], con esplicito riferimento ai diritti dei produttori software difesi da [[Bill Gates]] nella sua [[lettera aperta agli hobbisti]] pubblicata alcuni mesi prima, lettera in cui Gates accusava di violazione di [[copyright]] chi copiava il suo [[Altair BASIC]].
<table>
<tr>
<td width=90 valign=baseline>TST ''lbl'', ''string''</td>
<td>If ''string'' matches the BASIC line, advance cursor over ''string'' and execute the next IL instruction; if the test fails, execute the IL instruction at the label ''lbl''</td>
</tr>
<tr>
<td>CALL ''lbl''</td><td>Execute the IL subroutine starting at ''lbl''; save the IL address following the CALL on the control stack</td>
</tr>
<tr>
<td>RTN</td><td>Return to the IL ___location specified at the top of the control stack</td>
</tr>
<tr>
<td>DONE</td><td>Report a syntax error if after deleting leading blanks the cursor is not positioned to reach a carriage return</td>
</tr>
<tr>
<td>JUMP ''lbl''</td><td>Continue execution of the IL at the label specified</td>
</tr>
<tr>
<td>PRS</td><td>Print characters from the BASIC text up to but not including the closing quotation mark</td>
</tr>
<tr>
<td>PRN</td><td>Print number obtained by popping the top of the expression stack</td>
</tr>
<tr>
<td>SPC</td><td>Insert spaces to move the print head to next zone</td>
</tr>
<tr>
<td>NLINE</td><td>Output a CRLF to the printer</td>
</tr>
</table>
Source: ''Dr. Dobb's Journal'', Volume 1, Number 1, 1976, p.12.
 
==See alsoNote==
<references/>
*[[Palo Alto Tiny BASIC]], by [[Li-Chen Wang]]
*[[Copyleft]]
 
==Voci External links correlate==
* [[Altair 8800]]
* [http://www.IttyBittyComputers.com/IttyBitty/TinyBasic/TBuserMan.htm ''Tiny Basic User Manual''] and [http://www.IttyBittyComputers.com/IttyBitty/TinyBasic/TBEK.txt ''Experimenter's Kit''] &ndash; by [http://ittybittycomputers.com Tom Pittman]
* [[Lettera aperta agli hobbisti]]
<!--
* [[Copyleft]]
* [http://www-ist.massey.ac.nz/GM oretti/159704/sitemap.html Giovanni Moretti's lecture notes in Systems programming] &ndash; With Tiny BASIC as a programming language example
--> <!-- this link is broken (removed by mlerman) -->
* [http://www.swtpc.com/mholley/BASIC_2/Uiterwyk.htm Robert Uiterwyk's MICRO BASIC] &ndash; A MC6800 tiny BASIC later sold with the [[SWTPC]] 6800 computer
* [http://web.archive.org/web/19980702115208/http://www.signiform.com/erik/pubs/minol.htm MINOL] &ndash; Erik Mueller's MINOL &ndash; Tiny BASIC with strings for Intel 8080
* [http://www.multicians.org/raf-tbl-definition.html TBL] &ndash; A similar IL to Tiny BASIC's, used in the first successful compilers for PL/I, Fortran, etc, on limited memory [[minicomputer]]s
* [http://members.shaw.ca/gbrandly/68ktinyb.html M68000 Tiny BASIC] &ndash; Based on [[Li-Chen Wang]]'s [[Palo Alto Tiny BASIC]], and published in the 100th edition of ''Dr. Dobb's''
* [http://smallbasic.sourceforge.net/sb/tiny.txt Tiny BASIC] &ndash; An implementation written in [[SmallBASIC]]
* [http://www.aldweb.com/articles.php?lng=en&pg=7407 tinyBasic] &ndash; An implementation written in [http://www.aldweb.com/articles.php?lng=en&pg=5350 iziBasic]
* [http://www.runbasic.com/?_page=tinybasic.bas Tiny BASIC] &ndash; A live web version, ported to Run BASIC from iziBasic
* [http://www.thisiscool.com/tinybasic.htm TinyBasic] &ndash; A port of [http://www.ittybittycomputers.com/IttyBitty/TinyBasic/TinyBasic.c Tom Pittman's TinyBasic C interpreter] to [[Java_(programming_language)|Java]], [[C_Sharp_(programming_language)|C#]] and [[Adobe Flex]]. Includes live web versions.
* [http://www.tinybasic.de TinyBasic] &ndash; A modern implementation on a 16bit Microcontroller.
<!-- dead link: [http://www.mixtel.pwp.blueyonder.co.uk/tinyb.html Tiny BASIC] -->
<!-- dead link: * [http://www.jollyp.demon.co.uk/port/download/pages/language.html TINY BASIC] &ndash; Mid-80s version based on [[Li-Chen Wang]]'s Palo Alto 8080 TINY BASIC as published in the May '76 ''Dr. Dobb's'' -->
 
==Collegamenti esterni==
{{BASIC}}
* {{cita web|http://www.IttyBittyComputers.com/IttyBitty/TinyBasic/TBuserMan.htm|Manuale utente del Tiny BASIC}}
* {{cita web|http://www.IttyBittyComputers.com/IttyBitty/TinyBasic/TBEK.txt|Esempi di codice in Tiny BASIC}}
* [https://web.archive.org/web/20110107204656/http://www.swtpc.com/mholley/BASIC_2/Uiterwyk.htm Micro BASIC], una versione per [[Motorola 6800|MC6800]] venduta da Robert Uiterwyk con i computer [[SWTPC]] 6800
* [http://www.multicians.org/raf-tbl-definition.html Linguaggio TBL], un linguaggio che usa un interprete su macchina virtuale come il Tiny BASIC
* [http://members.shaw.ca/gbrandly/68ktinyb.html Il 68000 Tiny BASIC], versione per il [[Motorola 68000]] del Tiny BASIC, pubblicato sul 100° numero della rivista "Dr. Dobb's Journal"
* [http://www.aldweb.com/articles.php?lng=en&pg=7407 Tiny BASIC per Palm], implementazione del linguaggio scritta in [http://www.aldweb.com/articles.php?lng=en&pg=5350 iziBasic]
* [https://web.archive.org/web/20110715213426/http://www.runbasic.com/?_page=tinybasic.bas Tiny BASIC per web], una implementazione del Tiny BASIC scritto per girare su web in {{Collegamento interrotto|1=[http://www.runbasic.com/seaside/go/runbasic?_s=CPdbnQcuHfQqPOdy&_k=ufhcDZto Run BASIC] |data=marzo 2020 |bot=InternetArchiveBot }}
* [http://www.tinybasic.de Tiny BASIC per microcontrollori], una implementazione per i moderni [[microcontrollore|microcontrollori]] ad 8/16 bit
* [http://rosettacode.org/wiki/Category:Tiny_BASIC Category:Tiny BASIC] Attività implementate in Tiny BASIC in [http://rosettacode.org rosettacode.org]
* [http://rosettacode.org/wiki/Category:Palo_Alto_Tiny_BASIC Category:Palo Alto Tiny BASIC] Attività implementate in Palo Alto Tiny BASIC in [http://rosettacode.org rosettacode.org]
 
{{portale|informatica}}
[[Category:Microcomputer software]]
[[Category:BASIC interpreters]]
-->
 
[[enCategoria:Tiny BASIC]]
[[es:Tiny BASIC]]
[[ja:Tiny BASIC]]