Linguaggio di scripting: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Abisys.bot (discussione | contributi)
m ., replaced: javascript → JavaScript (3)
Collegamenti esterni: Aggiunto il template "FOLDOC"
 
(29 versioni intermedie di 21 utenti non mostrate)
Riga 1:
[[File:JavaScript code.png|miniatura|Esempio di [[script]] in [[JavaScript]]|300x300px]]
Un '''linguaggio di scripting''', in [[informatica]], è un [[linguaggio di programmazione interpretato]] destinato in genere a compiti di automazione del [[sistema operativo]] (''[[batch]]'') o delle [[applicazione (informatica)|applicazioni]] (''[[Macro (informatica)|macro]]''), o a essere usato nella [[programmazione web]] all'interno delle [[pagine web]].<ref>{{cita web|url=http://www.insidevcode.eu/index.php/2015/01/14/linguaggi-di-scripting-ecco-qui-alcuni|titolo=Linguaggi di scripting: ecco qui alcuni|autore=Flavius Florin Harabor|sito=insidevcode.eu|data=14 gennaio 2015|accesso=21 febbraio 2015}}</ref> I [[programma (informatica)|programmi]] sviluppati con questi linguaggi vengono detti ''[[script]]'', termine della [[lingua inglese]] utilizzato in ambito teatrale per indicare il [[sceneggiatura|copione]] (anche detto canovaccio) in cui sono tracciate le parti che devono essere interpretate dagli attori. Un linguaggio di ''scripting'' è un linguaggio di programmazione per un [[Run-time system|sistema runtime]] che automatizza l'esecuzione di compiti che altrimenti verrebbero eseguiti individualmente da un operatore umano<ref>{{Cita web|url=http://www.cse.wustl.edu/~loui/praiseieee.html|sito=web.archive.org|accesso=2022-04-27|titolo=Copia archiviata|dataarchivio=23 settembre 2015|urlarchivio=https://web.archive.org/web/20150923211452/http://www.cse.wustl.edu/~loui/praiseieee.html|urlmorto=sì}}</ref>.
 
I [[programma (informatica)|programmi]] sviluppati con questi linguaggi sono detti ''[[script]]'', termine della [[lingua inglese]] utilizzato in ambito teatrale per indicare il [[sceneggiatura|testo]] (anche detto canovaccio) in cui sono tracciate le parti che devono essere interpretate dagli attori.
 
== Storia ==
Inizialmente, i primi linguaggi di ''scripting'' nacquero dall'esigenza di automatizzare alcune operazioni come l'esecuzione di programmi e l'interazione con essi: non c'erano molti costrutti e spesso erano relegati a mansioni specifiche. I linguaggi di ''scripting'' hanno poi trovato applicazione in molte aree della progettazione di [[software]], potendo essere utilizzati come linguaggi indipendenti per l'implementazione di [[algoritmi]] per un'ampia gamma di compiti.
 
La differenza rispetto agli altri linguaggi interpretati è data più che altro da ragioni “storiche”. Inizialmente i primi linguaggi di ''scripting'' erano molto rudimentali e permettevano poche e semplici operazioni, non risultando adatti alla scrittura di veri programmi. I moderni linguaggi di ''scripting'' hanno poi acquisito i costrutti e la potenza degli altri linguaggi; la distinzione resta solo in base all'uso che si fa del linguaggio.<ref>{{cita web
Riga 14 ⟶ 13:
Per la diffusione di questi linguaggi furono di fondamentale importanza linguaggi come [[Tcl]] e [[Lua]], specificatamente sviluppati come linguaggi di ''scripting'', che potevano essere integrati in qualsiasi applicazione o utilizzati autonomamente. Lo sviluppo di questi linguaggi comportò maggiori benefici rispetto alla creazione di nuovi linguaggi per applicazioni specifiche, evitando allo sviluppatore di dover scrivere un traduttore di linguaggio e permettendo all'utente di applicare le proprie capacità acquisite.
 
Il [[Common Gateway Interface]] (CGI) permise ai linguaggi di ''scripting'' di controllare i [[server web|web server]], così da comunicare tramite il [[World Wide Web|web]]. Alcuni dei linguaggi di ''scripting'' che usavano il CGI agli albori dell'evoluzione del web furono [[Perl]], [[Active Server Pages|ASP]], e [[PHP]].
 
Molti sono i software che integrano linguaggi di scripting. Ad esempio i moderni web [[browser]] sono provvisti di un linguaggio per la scrittura di estensioni al browser stesso, e molti altri linguaggi standard per controllare il browser, come [[ECMAScript]] (comunemente conosciuto come [[JavaScript]]), [[CSS]], e [[HTML]]. Al 2020, secondo [[TIOBE Programming Community Index|l'indice TIOBE]], i linguaggi di ''scripting'' costituiscono circa un terzo dei linguaggi di programmazione più diffusi al mondo<ref>{{Cita web|url=https://www.tiobe.com/tiobe-index/|titolo=index {{!}} TIOBE - The Software Quality Company|sito=www.tiobe.com|accesso=2022-04-27}}</ref><ref>{{Cita web|url=https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/cosa-sono-i-linguaggi-di-scripting/|titolo=Cosa sono i linguaggi di scripting?|sito=IONOS Digitalguide|lingua=it|accesso=2022-04-27}}</ref>.
 
== CaratteristicheDescrizione ==
Consistono generalmente in semplici programmi il cui scopo è l'interazione con altri programmi, molto più complessi, in cui avvengono le operazioni più significative. Gli ''script'' si distinguono dai programmi con cui interagiscono, solitamente implementati in un linguaggio differente e non interpretato. Inoltre, spesso gli ''script'' sono creati o modificati dall'utente finale. Nel sorgente è frequente l'uso dello ''[[shabang]]''.
 
Nei linguaggi di ''scripting'' il [[programmatore]] generalmente si disinteressa delle ''risorse di sistema'' che il programma finito dovrà consumare, demandando il tutto al sistema stesso. Per risorse si intendono, per esempio, la gestione della allocazione e deallocazione della [[memoria (informatica)|memoria]], la [[Conversione di tipo|conversione tra tipi]], l'inizializzazione e la chiusura dell'applicazione.
 
In questo modo si evitano molti problemi tipici della programmazione tradizionale, che risulta essere soggetta a errori insidiosi, non facilmente individuabili e pericolosi, e costringe inoltre il programmatore ada occuparsi di problematiche non strettamente connesse con l'obiettivo del [[software]] che deve creare. L'utilizzo di un linguaggio di ''scripting'' permette di concentrarsi invece direttamente sulla soluzione del problema.
 
== Tipologia ==
===I job control language===
{{vedi anche|Job Control Language}}
I primi sistemi informatici, tipicamente [[mainframe]], erano destinati all'utilizzo da parte di più utenti (multiutenza) che potevano usufruire delle risorse del calcolatore mediante la disciplina [[fifo]] tipica dei sistemi ada elaborazione a lotti ([[Batch|Batch processing]])<ref>{{cita web
|1=http://www.dmi.unict.it/~fondinfo/slidy/fdi-2009/fdi_l09/it/fdi_l09.html#(2)
|titolo=Evoluzione dei sistemi operativi
|accesso=12 marzo 2010
|urlarchivio=https://web.archive.org/web/20100225121146/http://www.dmi.unict.it/~fondinfo/slidy/fdi-2009/fdi_l09/it/fdi_l09.html#(2)
|dataarchivio=25 febbraio 2010
|urlmorto=sì
}}</ref>
Il costo notevole dell'hardware fece sì che più istituzioni, anche con sedi diverse, utilizzassero lo stesso [[computer]] tramite dei [[Terminale (informatica)|terminali remoti]]; così l'utente, non potendo interagire direttamente con la macchina, inviava il proprio [[job (informatica)|job]] (programma, dati e istruzioni per l'esecuzione del programma) tramite i terminali.<ref>{{cita web
Riga 40 ⟶ 42:
 
* Memoria richiesta.
* Periferiche [[input/output]] da utilizzare.
* Parametri e nome dei dati.
 
Per questo scopo nacquero i primi linguaggi di ''scripting'' della storia, i [[Job control language]] (abbreviato JCL).<ref>{{cita web
|http://www.simotime.com/jclone01.htm
|titolo=JCL Quick Reference
Riga 53 ⟶ 55:
===Bash scripting===
{{vedi anche|Bash}}
Con il termine [[Bash]] ''scripting'' ci si riferisce alla creazione di ''script'' solitamente utili all'automazione di operazioni di routine sui sistemi operativi [[Unix-like]] come [[Linux]]. Operazioni che richiedono l'inserimento di diversi comandi sulla shell testuale possono così essere inseriti in un unico file utilizzando la sintassi e gli operatori tipici di questo linguaggio. Gli ''script'' così creati possono semplificare notevolmente il lavoro dell'utente.<ref>{{cita web
|http://www.pluto.it/files/ildp/guide/abs/part1.html
|titolo=Guida avanzata di scripting Bash (introduzione)
Riga 60 ⟶ 62:
}}</ref>
 
Su alcuni sistemi come Linux è possibile pianificare l'esecuzione degli ''script'', ad esempio è possibile eseguire alcuni ''script'' ogni volta che il sistema viene avviato.
 
Ecco un esempio di ''script'' in ''bash'' per la cancellazione dei file in <code>/var/log</code>:
 
<source lang=bash>
# Cleanup
# Da eseguire come root, naturalmente.
 
<syntaxhighlight lang="bash" line="1">
#-- Cleanup
#-- Da eseguire come root, naturalmente.
#!/bin/bash
cd /var/log
cat /dev/null > messages
cat /dev/null > wtmp
echo "Log cancellati."
exit 0
</source>
</syntaxhighlight>
 
=== GUI Scriptingscripting ===
Con l'avvento delle [[interfaccia grafica|interfacce grafiche]] nasce una tipologia di linguaggi di scripting mirati al controllo del computer. Questi linguaggi interagiscono con le finestre grafiche, i menu, i bottoni e gli oggetti grafici che il sistema genera, simulando le azioni che farebbe un utente umano. Il loro scopo è quello di automatizzare le azioni dell'utente. I linguaggi in cui il controllo avviene attraverso la pressione di tasti o click del mouse sono anche chiamati ''[[Macro (informatica)|macro]]''.
Questa categoria di linguaggi doveva inizialmente essere usata per controllare tutte le applicazioni eseguibili su un computer basato su interfacce grafiche; ma, in pratica, il supporto per questi linguaggi dipende dalle [[applicazione (informatica)|applicazioni]] e dal [[sistema operativo]]. Tuttavia ci sono alcune eccezioni a questa limitazione. Alcuni linguaggi di scripting relativi alle GUI sono basati sul riconoscimento degli oggetti grafici dai loro [[pixel]] sullo schermo; essi non dipendono dal sistema operativo o dall'applicazione.
 
Riga 81 ⟶ 84:
 
Molti programmi includono un linguaggio di scripting idiomatico adattato al bisogno dell'utente.
Allo stesso modo, alcuni [[Videogioco|videogiochi]] per il computer utilizzano un linguaggio di scripting per estendere le azioni di personaggi secondari e dell'ambiente. Linguaggi di questo tipo sono sviluppati per una singola applicazione; e, anche se possono assomigliare ada un linguaggio generico (ad esempio [[Quake engine#QuakeC|QuakeC]], modellato su [[C (linguaggio)|C]])<ref>{{cita web
|http://ouns.nexuizninjaz.com/dev:quakec
|titolo= QuakeC
|lingua=en
|accesso=13 marzo 2010
}}</ref>, hanno caratteristiche personali che li distinguono da essi. [[Emacs Lisp]], un dialetto di [[Lisp]] ben sviluppato e potente, contiene molte caratteristiche speciali che lo rendono più adatto all'estensione delle funzioni di ''editing'' di [[Emacs]].
 
===Web browser===
 
[[File:Scriptwikip.jpg|right|thumb|Codice in JavaScript presente nei sorgenti di Wikipedia|300x300px]]
 
I Web Browser sono applicazioni per la visualizzazione delle pagine web. Sono stati sviluppati una serie di linguaggi speciali per controllarne operazioni e funzionalità. Fra questi compaiono [[JavaScript]], il cui nome può trarre in inganno per la sua apparente derivazione da [[java (linguaggio di programmazione)|Java]] (in realtà i due linguaggi non hanno quasi nulla in comune); [[VBScript]] prodotto dalla [[Microsoft]], che lavora solo con il browser [[Internet Explorer]]; [[XML User Interface Language|XUL]] prodotto dal progetto [[Mozilla]], che lavora solamente con [[Mozilla Firefox|Firefox]]; [[XSLT]], un particolare linguaggio che trasforma il contenuto [[XML]] in una nuova forma.<ref>{{cita web
|1=http://users.libero.it/giudio/tech/script.html
|accesso=12 marzo 2010
|titolo=Utilizzo dei linguaggi di script in ambiente Web
|urlarchivio=https://web.archive.org/web/20100314235634/http://users.libero.it/giudio/tech/script.html
|dataarchivio=14 marzo 2010
|urlmorto=sì
}}</ref> Le tecniche che comportano la combinazione di scripting fornita da XML e JavaScript sono cresciute al livello tale da acquisire un nome proprio: [[AJAX]].
 
===Web Serverserver===
Dal [[lato server]] del link [[Hypertext Transfer Protocol|HTTP]], gli ''[[Application server|application]]'' [[Application server|server]] e altri server a contenuto dinamico come il ''[[Contentcontent management system]]'' (sistema di gestione dei contenuti), forniscono i contenuti attraverso una grande varietà di tecniche e tecnologie caratterizzate dall'approccio di scripting. Particolarmente predominanti in questo campo sono [[PHP]], [[JavaServer Pages|JSP]] e [[Active Server Pages|ASP]], ma altri linguaggi come [[Ruby (linguaggio di programmazione)|Ruby]] e [[Python]], diventati molto conosciuti soprattutto grazie ai loro famosi framework (rispettivamente [[Ruby on Rails]] e [[Django (informatica)|Django]]), si sono ritagliati il loro spazio.
 
Dal lato server del link [[Hypertext Transfer Protocol|HTTP]], gli [[application server]] e altri server a contenuto dinamico come il [[Content management system]] (sistema di gestione dei contenuti), forniscono i contenuti attraverso una grande varietà di tecniche e tecnologie caratterizzate dall'approccio di scripting. Particolarmente predominanti in questo campo sono [[PHP]], [[JavaServer Pages|JSP]] e [[Active Server Pages|ASP]], ma altri linguaggi come [[Ruby]] e [[Python]], diventati molto conosciuti soprattutto grazie ai loro famosi framework (rispettivamente [[Ruby on Rails]] e [[Django (informatica)|Django]]), si sono ritagliati il loro spazio.
 
===Linguaggi per l'elaborazione di testi===
 
L'elaborazione dei documenti di testo fu una delle prime applicazioni dei linguaggi di scripting. ''Script'' scritti per strumenti di [[Unix]] come [[Awk]], [[sed (Unix)|sed]] e [[grep]] automatizzano le attività che coinvolgono la configurazione del testo e del file di [[log]]. Di grande importanza è l'[[espressioni regolari|espressione regolare]], un linguaggio creato per la descrizione formale della struttura lessicale del testo, ede usato da tutti questi strumenti.
 
[[Perl]] fu originariamente designato per colmare le limitazioni di questi strumenti, ma è cresciuto diventando uno dei più diffusi linguaggi di uso generico.
Riga 108 ⟶ 115:
===Linguaggi dinamici generici===
 
Alcuni linguaggi, come il [[Perl]], cominciarono come linguaggi di ''script'' ma furono implementati in linguaggi adatti per problematiche ben più ampie. Altri linguaggi simili sono stati descritti come "linguaggi di ''script''" per questa somiglianza, anche se sono più comunemente usati per programmare applicazioni.
 
===Linguaggi estensioni/incorporati===
 
Un considerevole numero di linguaggi sono stati progettati per rimpiazzare linguaggi di programmazione specifici per applicazioni, per essere integrabili nei programmi. Il programmatore (che lavora in C o in un altri linguaggio) include dei "Ganci" tramite i quali il linguaggio di scripting può controllare l'applicazione. Questi linguaggi hanno lo stesso scopo dei linguaggi specifici per applicazioni, ma con il vantaggio di permettere il trasferimento di caratteristiche fra applicazione e applicazione. JavaScript partì, inizialmente, come un linguaggio all'interno dei web browser; tuttavia, la standardizzazione del linguaggio come [[ECMAScript]] lo ha reso popolare come un linguaggio incorporabile generico. In particolare, l'implementazione da parte di [[Mozilla]] di [[SpiderMonkey]] è utilizzata in molti alti ambienti come lo [[Yahoo! Widget Engine]]. Altre applicazioni che utilizzano implementazioni ECMAScript includono i prodotti [[Adobe (azienda)|Adobe]], come [[Adobe Flash]] e [[Adobe Acrobat]].
In particolare, l'implementazione da parte di [[Mozilla]] di [[SpiderMonkey]] è utilizzata in molti alti ambienti come lo [[Yahoo! Widget Engine]]. Altre applicazioni che utilizzano implementazioni ECMAScript includono i prodotti [[Adobe Systems|Adobe]], come [[Adobe Flash]] e [[Adobe Acrobat]].
 
[[Tcl]] fu creato come un linguaggio d'estensione da utilizzare in parallelo come un linguaggio di uso generale, emulando il ruolo di linguaggi come [[Python]], [[Perl]] e [[Ruby (linguaggio di programmazione)|Ruby]].
 
Altre applicazioni complesse e destinate ada un compito specifico, possono incorporare ed esporre un linguaggio di programmazione integrato al fine di consentire agli utenti un maggiore controllo e consentendo loro più funzionalità che possono essere disponibili attraverso una interfaccia utente. Per esempio, [[Autodesk Maya]] 3D incorpora il linguaggio di scripting [[Maya Embedded Language|MEL]], o [[Blender (programma)|Blender]] che si avvale di [[Python]] per il medesimo ruolo.<ref>{{cita web |http://jmsoler.free.fr/didacticiel/blender/tutor/python_script00_en.htm
|titolo=Python e Blender
|lingua=en
Riga 123 ⟶ 129:
}}</ref>
 
Altri tipi di applicazioni che necessitano l'aggiunta di veloci funzionalità o cicli di ottimizzazioni (ad esempio un [[motore grafico]]), usano anch'esse linguaggi integrati. Durante lo sviluppo, permette ai prototipi di essere modificati in modo facile e veloce, senza forzare l'utente ada una conoscenza approfondita del programma(cosa che può richiedere molto tempo). I linguaggi di scripting, grazie alla loro versatilità, sono ampiamente usati, ede oggi vanta di una vasta gamma che offre linguaggi come [[Lua]] e [[Python]], ma anche meno conosciuti come [[AngelscriptAngelScript]] e [[Squirrel]].
 
== Linguaggi diffusi ==
Secondo un sondaggio globale, svolta dalla EvansData nel 2008,<ref>{{cita web
{{cita web|1=http://www.cio.com/article/446829
|lingua=en
|accesso=13 marzo 2010
|titolo=The State of the Scripting Universe
|dataarchivio=22 novembre 2008
|urlarchivio=https://web.archive.org/web/20081122105345/http://www.cio.com/article/446829/
|urlmorto=sì
}}</ref> il più famoso linguaggio di scripting è il [[JavaScript]], al secondo posto il [[PHP]], mentre [[Perl]] si aggiudica il terzo posto.
{{Div col|cols=3}}
Riga 167 ⟶ 176:
* [[REBOL]]
* [[REXX]]
* [[Ruby (linguaggio di programmazione)|Ruby]]
* [[Scheme]]
* [[ScriptBasic]]
Riga 176 ⟶ 185:
* [[Visual DialogScript]]
* [[ZZT-oop]]
* [[HTML]]
{{Div col end}}
 
Riga 189 ⟶ 199:
*[[Shabang]]
*[[Shell (informatica)]]
 
==Altri progetti==
{{interprogetto|preposizione=sul}}
 
==Collegamenti esterni==
* {{Collegamenti esterni}}
* {{FOLDOC|scripting language|scripting language}}
* {{cita web|http://ennebi.solira.org/linprog/pag12.html|linguaggi di scripting nel web}}
* {{cita web | 1 = http://www.pluto.it/files/ildp/guide/abs/index.html | 2 = Guida avanzata di scripting Bash | accesso = 12 marzo 2010 | urlarchivio = https://web.archive.org/web/20101229052846/http://www.pluto.it/files/ildp/guide/abs/index.html | dataarchivio = 29 dicembre 2010 | urlmorto = sì }}
* {{cita web|http://javascript.html.it/guide/|guide su JavaScript}}
* {{cita web|httphttps://www.gnu.org/software/emacs/emacs-lisp-intro/html_mono/emacs-lisp-intro.html#toc_Top|Programming in Emacs Lisp}}
 
{{Principali linguaggi di programmazione}}
{{Controllo di autorità}}
{{portale|informatica}}