Cosa rende una lingua un linguaggio di scripting? Ho sentito alcune persone dire "quando viene interpretato anziché compilato". Ciò renderebbe PHP (ad esempio) un linguaggio di scripting. È questo l'unico criterio? Oppure ci sono altri criteri?
Cosa rende una lingua un linguaggio di scripting? Ho sentito alcune persone dire "quando viene interpretato anziché compilato". Ciò renderebbe PHP (ad esempio) un linguaggio di scripting. È questo l'unico criterio? Oppure ci sono altri criteri?
Risposte:
Un linguaggio di scripting è un linguaggio che "script" altre cose per fare cose. L'obiettivo principale non è principalmente creare le proprie app, ma piuttosto fare in modo che un'app esistente agisca nel modo desiderato, ad esempio JavaScript per i browser, VBA per MS Office.
Semplice. Quando lo uso, è un linguaggio dinamico moderno, quando lo usi, è semplicemente un linguaggio di scripting!
Tradizionalmente, quando si parla della differenza tra scripting e programmazione, gli script vengono interpretati e i programmi vengono compilati. Un linguaggio può essere eseguito in diversi modi: interpretato o compilato (in bytecode o codice macchina). Questo non rende una lingua l' una o l'altra.
In alcuni occhi, il modo in cui usi un linguaggio lo rende un linguaggio di scripting (ad esempio, gli sviluppatori di giochi che sviluppano principalmente in C ++ scriveranno gli oggetti in Lua). Anche in questo caso, le linee sono sfocate: un linguaggio può essere utilizzato per una programmazione da una persona e lo stesso linguaggio può essere utilizzato per il linguaggio di scripting da un'altra.
Questo è tratto dall'articolo di wikipedia sui linguaggi di scripting:
Un linguaggio di scripting, un linguaggio di script o un linguaggio di estensione è un linguaggio di programmazione che consente il controllo di una o più applicazioni software. Gli "script" sono distinti dal codice principale dell'applicazione, poiché sono solitamente scritti in una lingua diversa e sono spesso creati o almeno modificati dall'utente finale. Gli script sono spesso interpretati da codice sorgente o bytecode, mentre le applicazioni che controllano sono tradizionalmente compilate in codice macchina nativo. I linguaggi di scripting sono quasi sempre incorporati nelle applicazioni che controllano.
Noterai l'uso di "normalmente", "spesso", "tradizionalmente" e "quasi sempre": tutti questi elementi ti dicono che non esiste un insieme di attributi distinti che rendano una lingua specifica un "linguaggio di scripting".
"Una sceneggiatura è ciò che dai agli attori. Un programma è ciò che dai al pubblico." - Larry Wall
Penso davvero che non ci sia più molta differenza. I cosiddetti linguaggi di "scripting" vengono spesso compilati - solo molto rapidamente e in fase di esecuzione. E alcuni dei linguaggi di "programmazione" sono ulteriormente compilati in fase di esecuzione (si pensi a JIT) e la prima fase della "compilazione" è il controllo della sintassi e la risoluzione delle risorse.
Non rimanere bloccato, non è davvero importante.
La mia definizione sarebbe un linguaggio tipicamente distribuito come sorgente piuttosto che come binario.
Ci sono molte possibili risposte a questo.
Primo: non è davvero una questione di differenza tra un linguaggio di scripting e un linguaggio di programmazione, perché un linguaggio di scripting è un linguaggio di programmazione. È più una questione di quali tratti rendono un linguaggio di programmazione un linguaggio di scripting mentre un altro linguaggio di programmazione non è un linguaggio di scripting.
Secondo: è davvero difficile dire cosa sia un linguaggio XYZ, se XYZ sia "scripting", "programmazione funzionale", "programmazione orientata agli oggetti" o cosa hai. La definizione di cosa sia "programmazione funzionale" è abbastanza chiara, ma nessuno sa cosa sia un "linguaggio di programmazione funzionale".
La programmazione funzionale o la programmazione orientata agli oggetti sono stili di programmazione ; puoi scrivere in uno stile funzionale o orientato agli oggetti praticamente in qualsiasi lingua. Ad esempio, il Linux Virtual File System Switch e il Linux Driver Model sono fortemente orientati agli oggetti nonostante siano scritti in C, mentre molto codice Java o C # che vedi sul web è molto procedurale e non orientato affatto agli oggetti . OTOH, ho visto del codice Java molto funzionale.
Quindi, se la programmazione funzionale e la programmazione orientata agli oggetti sono semplicemente stili che possono essere eseguiti in qualsiasi linguaggio, come si definisce un "linguaggio di programmazione orientato agli oggetti"? Si potrebbe dire che un linguaggio di programmazione orientato agli oggetti è un linguaggio che consente la programmazione orientata agli oggetti. Ma non è una gran definizione: tutti i linguaggi consentono la programmazione orientata agli oggetti, quindi tutti i linguaggi sono orientati agli oggetti? Quindi, dici, beh un linguaggio è orientato agli oggetti, se ti costringe a programmare in uno stile orientato agli oggetti. Ma non è nemmeno una definizione: tutti i linguaggi consentono la programmazione funzionale, quindi nessun linguaggio è orientato agli oggetti?
Quindi, per me, ho trovato la seguente definizione:
Un linguaggio è un linguaggio di scripting (linguaggio orientato agli oggetti / linguaggio funzionale) se entrambi
- facilita lo scripting (programmazione orientata agli oggetti / programmazione funzionale), cioè non solo lo consente , ma lo rende facile e naturale e contiene funzionalità che lo aiutano , E
- incoraggia e guida l' utente verso lo scripting (programmazione orientata agli oggetti / programmazione funzionale).
Quindi, dopo cinque paragrafi, sono arrivato a: "un linguaggio di scripting è un linguaggio per lo scripting". Che ottima definizione. NON.
Ovviamente, ora dobbiamo guardare alla definizione di "scripting".
È qui che entra in gioco il terzo problema: mentre il termine "programmazione funzionale" è ben definito ed è solo il termine "linguaggio di programmazione funzionale" che è problematico, sfortunatamente con lo scripting, sia il termine "scripting" che il termine "linguaggio di scripting "sono mal definiti.
Bene, in primo luogo lo scripting è la programmazione. È solo un tipo speciale di programmazione. IOW: ogni script è un programma, ma non tutti i programmi sono uno script; l'insieme di tutti gli script è un sottoinsieme appropriato dell'insieme di tutti i programmi.
A mio parere personale, la cosa che rende lo scripting scripting e lo distingue da altri tipi di programmazione, è che ...
Gli script manipolano in gran parte gli oggetti che
- non sono stati creati dalla sceneggiatura,
- avere una vita indipendente dallo script e
- vivere al di fuori del dominio dello script.
Inoltre, i tipi di dati e gli algoritmi utilizzati non sono generalmente definiti dallo script ma dall'ambiente esterno.
Pensa a uno script di shell: gli script di shell di solito manipolano file, directory e processi. La maggior parte dei file, delle directory e dei processi sul sistema probabilmente non sono stati creati dallo script attualmente in esecuzione. E non svaniscono quando la sceneggiatura termina: la loro vita è completamente indipendente dalla sceneggiatura. E non fanno nemmeno parte della sceneggiatura, sono parte del sistema. Non hai iniziato la tua sceneggiatura scrivendo File
e Directory
seguendo le lezioni, quei tipi di dati non ti interessano: presumi semplicemente che siano lì e non sai nemmeno (né hai bisogno di sapere) come funzionano. E non implementate nemmeno i vostri algoritmi, ad esempio per l'attraversamento di directory che usate semplicemente find
invece di implementare la vostra ricerca in ampiezza.
In breve: uno script si attacca a un sistema più grande che esiste indipendentemente dallo script, manipola una piccola parte del sistema e quindi esce.
Quel sistema più grande può essere il sistema operativo in caso di uno script di shell, il browser DOM nel caso di uno script di browser, un gioco (ad es. World of Warcraft con Lua o Second Life con Linden Scripting Language), un'applicazione (ad es. AutoLisp linguaggio per macro di AutoCAD o Excel / Word / Office), un server web, un pacchetto di robot o qualcos'altro.
Si noti che l'aspetto dello scripting è completamente ortogonale a tutti gli altri aspetti dei linguaggi di programmazione: un linguaggio di scripting può essere tipizzato fortemente o debolmente, tipizzato strettamente o liberamente, tipizzato staticamente o dinamicamente, nominalmente, strutturalmente o anatra, diamine può anche essere non tipizzato . Può essere imperativo o funzionale, orientato agli oggetti, procedurale o funzionale, rigoroso o pigro. Le sue implementazioni possono essere interpretate, compilate o miste.
Ad esempio, Mondrian è un linguaggio di scripting funzionale pigro fortemente tipizzato staticamente con un'implementazione compilata.
Tuttavia, tutto ciò è discutibile, perché il modo in cui il termine linguaggio di scripting è realmente usato nel mondo reale, non ha nulla a che fare con nessuno dei precedenti. È spesso usato semplicemente come un insulto e la definizione è piuttosto semplice, persino semplicistica:
- vero linguaggio di programmazione: il mio linguaggio di programmazione
- linguaggio di scripting: il tuo linguaggio di programmazione
Questo sembra essere il modo in cui il termine viene utilizzato più spesso.
È come il porno, lo sai quando lo vedi. L'unica possibile definizione di un linguaggio di scripting è:
A language which is described as a scripting language.
Un po 'circolare, non è vero? (A proposito, non sto scherzando).
Fondamentalmente, non c'è nulla che renda una lingua un linguaggio di scripting tranne che è chiamato tale, specialmente dai suoi creatori. Il set principale di linguaggi di scripting moderni è PHP, Perl, JavaScript, Python, Ruby e Lua. Tcl è il primo grande linguaggio di scripting moderno (non era il primo linguaggio di scripting, però, ho dimenticato cosa sia, ma sono rimasto sorpreso di apprendere che è antecedente a Tcl).
Descrivo le caratteristiche dei principali linguaggi di scripting nel mio articolo :
A Practical Solution for Scripting Language Compilers
Paul Biggar, Edsko de Vries and David Gregg
SAC '09: ACM Symposium on Applied Computing (2009), (March 2009)
La maggior parte è tipizzata e interpretata dinamicamente e la maggior parte non ha una semantica definita al di fuori della loro implementazione di riferimento. Tuttavia, anche se la loro implementazione principale viene compilata o sottoposta a JIT, ciò non cambia la "natura" del linguaggio.
L'unica domanda che rimane è come puoi sapere se una nuova lingua è un linguaggio di scripting. Ebbene, se si chiama linguaggio di scripting, lo è. Quindi Factor è un linguaggio di scripting (o almeno lo era quando è stato scritto), ma, diciamo, Java non lo è.
Il "linguaggio di scripting" è uno di quei concetti sfocati che possono significare molte cose. Di solito si riferisce al fatto che esiste un processo in un passaggio che ti porta dal codice sorgente all'esecuzione.
Ad esempio in Perl fai: perl my_source.pl
Dati i criteri di cui sopra PHP è un linguaggio di scripting (anche se puoi avere un processo di "compilazione", ad esempio, quando usi Zend Encoder per "proteggere" il codice sorgente).
PS. Spesso (ma non sempre) i linguaggi di scripting vengono interpretati. Inoltre, spesso (ma di nuovo, non sempre) i linguaggi di scripting sono tipizzati dinamicamente.
Tutti i linguaggi di scripting sono linguaggi di programmazione. Quindi, in senso stretto, non c'è differenza.
Il termine non si riferisce ad alcuna proprietà fondamentale della lingua, si riferisce all'uso tipico della lingua. Se l'uso tipico è scrivere brevi programmi che fanno principalmente chiamate a codice preesistente e alcune semplici elaborazioni sui risultati (cioè, se l'uso tipico è scrivere script ), allora si tratta di un linguaggio di scripting.
Penso che il signor Roberto Ierusalimschy abbia un'ottima risposta o la domanda in "Programmazione in Lua":
Tuttavia, la caratteristica distintiva dei linguaggi interpretati non è che non sono compilati, ma che qualsiasi compilatore fa parte del language runtime e che, quindi, è possibile (e facile) eseguire codice generato al volo
eval
funzione completa.
Una divisione è
Un linguaggio interpretato dinamicamente viene interpretato in fase di esecuzione mentre un linguaggio compilato viene compilato prima dell'esecuzione.
Aggiungo che, come ha sottolineato Jörg, la distinzione interpretato / compilato non è una caratteristica del linguaggio, ma del motore di esecuzione.
Potresti anche essere interessato a questa spiegazione del sistema Type , che è correlato e si concentra maggiormente sull'aspetto del linguaggio, invece che sul motore di esecuzione. La maggior parte dei linguaggi di scripting sono tipizzati dinamicamente, mentre i linguaggi "normali" sono tipizzati per lo più staticamente.
In generale, la divisione tra linguaggi tipizzati staticamente e dinamicamente è meglio definita e ha maggiori implicazioni sull'usabilità del linguaggio.
Un linguaggio di scripting è in genere :
Mentre un linguaggio non di scripting è solitamente : 1. Digitato staticamente 2. Compilato, con enfasi sulle prestazioni 3. Richiede più codice standard, che porta a una prototipazione più lenta ma più leggibilità e manutenibilità a lungo termine 4. Usato per grandi progetti, si adatta a molti modelli di progettazione
Ma oggigiorno è più una differenza storica, secondo me. Javascript e Perl sono stati scritti pensando a script piccoli e semplici, mentre C ++ è stato scritto pensando ad applicazioni complesse; ma entrambi possono essere usati in entrambi i modi. E molti linguaggi di programmazione, moderni e vecchi allo stesso modo, confondono comunque la linea (ed era sfocata in primo luogo!).
La cosa triste è che ho conosciuto alcuni sviluppatori che detestano ciò che percepivano come "linguaggi di scripting", ritenendoli più semplici e non così potenti. La mia opinione è quel vecchio cliché: usa lo strumento giusto per il lavoro.
I linguaggi di scripting erano originariamente pensati come meccanismi di controllo per applicazioni scritte in un linguaggio di programmazione hard. I programmi compilati non potevano essere modificati in fase di esecuzione, quindi lo scripting dava flessibilità alle persone.
In particolare, lo script di shell automatizzava i processi nel kernel del sistema operativo (tradizionalmente, AppleScript su Mac); un ruolo che è passato sempre di più nelle mani di Perl, e poi recentemente fuori in Python. Ho visto Scheme (in particolare nella sua implementazione Guile) usato per dichiarare scene di raytracing; e recentemente, Lua è molto popolare come linguaggio di programmazione per scrivere giochi - al punto che l'unica cosa hardcoded in molti nuovi giochi è il motore grafico / fisico, mentre l'intera logica del gioco è codificata in Lua. Allo stesso modo, si pensava che JavaScript scrivesse il comportamento di un browser web.
Le lingue si sono emancipate; nessuno ora pensa al sistema operativo come un'applicazione (o ci pensa molto), e molti linguaggi di scripting in precedenza iniziarono ad essere utilizzati per scrivere applicazioni complete. Il nome stesso divenne privo di significato e si diffuse in molte lingue interpretate in uso oggi, indipendentemente dal fatto che siano progettate per essere interpretate dall'interno di un altro sistema o meno.
Tuttavia, "linguaggi di scripting" non è sicuramente sinonimo di "linguaggi interpretati" - per esempio, BASIC è stato interpretato per la maggior parte della sua vita (cioè prima che perdesse la sua acronimità e diventasse Visual Basic), ma nessuno lo pensa davvero come scripting.
AGGIORNAMENTO: Materiale di lettura come al solito disponibile su Wikipedia .
Primo punto, un linguaggio di programmazione non è un "linguaggio di scripting" o qualcos'altro. Può essere un "linguaggio di scripting" e qualcos'altro.
Secondo punto, l'implementatore del linguaggio ti dirà se è un linguaggio di scripting.
La tua domanda dovrebbe essere "In quali implementazioni un linguaggio di programmazione sarebbe considerato un linguaggio di scripting?", Non "Qual è la differenza tra un linguaggio di scripting e un linguaggio di programmazione?". Non c'è mezzo.
Tuttavia, considererò un linguaggio un linguaggio di scripting se viene utilizzato per fornire un qualche tipo di middleware. Ad esempio, considererei la maggior parte delle implementazioni di JavaScript un linguaggio di scripting. Se JavaScript fosse eseguito nel sistema operativo, non nel browser, non sarebbe un linguaggio di scripting. Se PHP viene eseguito all'interno di Apache, è un linguaggio di scripting. Se viene eseguito dalla riga di comando, non lo è.
Vedo un linguaggio di scripting come qualcosa che non richiede un passaggio di "compilazione" esplicito e pesante. La caratteristica principale dal punto di vista dei programmatori è: si modifica il codice e lo si esegue subito.
Quindi considererei JavaScript e PHP come linguaggi di scripting, mentre ActionScript 3 / Flex non lo è davvero.
Io e il mio amico abbiamo appena avuto questo argomento: qual è la differenza tra un linguaggio di programmazione e un linguaggio di scripting.
Un argomento popolare è che i linguaggi di programmazione vengono compilati e i linguaggi di scripting vengono interpretati - Tuttavia credo che questo argomento sia completamente falso ... perché?
Su questa base, questo è il mio argomento per la differenza tra un linguaggio di programmazione e un linguaggio di scripting:
Un linguaggio di programmazione viene eseguito a livello di macchina e ha accesso alla macchina stessa (memoria, grafica, suono, ecc.).
Un linguaggio di scripting è sandbox e ha accesso solo agli oggetti esposti al sandbox. Non ha accesso diretto alla macchina sottostante.
A mio parere, direi che i linguaggi interpretati dinamicamente come PHP, Ruby, ecc ... sono ancora linguaggi "normali". Direi che esempi di linguaggi di "scripting" sono cose come bash (o ksh o tcsh o qualsiasi altra cosa) o sqlplus. Questi linguaggi sono spesso usati per unire i programmi esistenti su un sistema in una serie di comandi coerenti e correlati, come:
Quindi direi che la differenza (per me, comunque) è più nel modo in cui usi la lingua. Linguaggi come PHP, Perl, Ruby potrebbero essere usati come "linguaggi di scripting", ma di solito li vedo usati come "linguaggi normali" (eccetto Perl che sembra andare in entrambe le direzioni.
Vado avanti e migra la mia risposta dalla domanda duplicata
Il nome "Linguaggio di scripting" si applica a un ruolo molto specifico: la lingua in cui scrivi i comandi da inviare a un'applicazione software esistente. (come una "sceneggiatura" di un film o di una TV tradizionale)
Ad esempio, una volta, le pagine web HTML erano noiose. Erano sempre statici. Poi un giorno, Netscape pensò: "Ehi, e se lasciamo che il browser legga e agisca su piccoli comandi nella pagina?" E così è stato formato Javascript.
Un semplice comando javascript è il alert()
comando, che istruisce / comanda il browser (un'app software) che sta leggendo la pagina web per visualizzare un avviso.
Ora, è alert()
correlato, in qualche modo, al C ++ oa qualsiasi linguaggio in codice che il browser utilizza effettivamente per visualizzare l'avviso? Ovviamente no. Qualcuno che scrive "alert ()" su una pagina .html non sa come il browser visualizzi effettivamente l'avviso. Sta solo scrivendo un comando che il browser interpreterà.
Vediamo il semplice codice javascript
<script>
var x = 4
alert(x)
</script>
Si tratta di istruzioni che vengono inviate al browser, affinché il browser interpreti di per sé. Il linguaggio di programmazione che il browser utilizza per impostare effettivamente una variabile su 4 e metterlo in un avviso ... non è completamente correlato a javascript.
Chiamiamo l'ultima serie di comandi uno "script" (motivo per cui è racchiuso tra <script>
tag). Proprio per definizione di "copione", nel senso tradizionale: una serie di istruzioni e comandi inviati agli attori . Tutti sanno che una sceneggiatura (una sceneggiatura di un film), per esempio, è una sceneggiatura.
La sceneggiatura (sceneggiatura) non sono gli attori, o la telecamera, o gli effetti speciali. La sceneggiatura dice loro cosa fare.
Ora, che cosa è uno scripting lingua , esattamente?
Ci sono molti linguaggi di programmazione che sono come strumenti diversi in una cassetta degli attrezzi; alcuni linguaggi sono stati progettati specificamente per essere utilizzati come script.
Javasript è un ovvio esempio; ci sono pochissime applicazioni di Javascript che non rientrano nel regno dello scripting.
ActionScript (il linguaggio per le animazioni Flash) e i suoi derivati sono linguaggi di scripting, in quanto inviano semplicemente comandi al lettore / interprete Flash. Certo, ci sono astrazioni come la programmazione orientata agli oggetti, ma tutto ciò è semplicemente un mezzo per raggiungere il fine: inviare comandi al flash player.
Python e Ruby sono comunemente usati anche come linguaggi di scripting. Ad esempio, una volta ho lavorato per un'azienda che utilizzava Ruby per scrivere comandi da inviare a un browser simili a "vai a questo sito, fai clic su questo collegamento ..." per eseguire alcuni test automatici di base. In quel lavoro non ero assolutamente uno "sviluppatore di software". Ho appena scritto script che inviavano comandi al computer per inviare comandi al browser.
A causa della loro natura, i linguaggi di scripting sono raramente "compilati", ovvero tradotti in codice macchina e letti direttamente dal computer.
Anche le applicazioni GUI create da Python e Ruby sono script inviati a un'API scritta in C ++ o C. Dice all'app C cosa fare.
C'è una linea di vaghezza, ovviamente. Perché non puoi dire che Machine Language / C sono linguaggi di scripting, perché sono script che il computer utilizza per interfacciarsi con la scheda madre / le schede grafiche / i chip di base?
Ci sono alcune linee che possiamo tracciare per chiarire:
Quando si può scrivere un linguaggio di scripting ed eseguirlo senza "compilare", è più che altro una sorta di script diretto. Ad esempio, non è necessario fare nulla con una sceneggiatura per dire agli attori cosa farne. È già lì, usato, così com'è. Per questo motivo, escluderemo che i linguaggi compilati vengano chiamati linguaggi di scripting, anche se in alcune occasioni possono essere utilizzati per scopi di scripting.
Il linguaggio di scripting implica comandi inviati a un'applicazione software complessa ; questo è il motivo principale per cui scriviamo script, quindi non è necessario conoscere le complessità di come funziona il software per inviargli i comandi. Quindi, i linguaggi di scripting tendono ad essere linguaggi che inviano comandi (relativamente) semplici ad applicazioni software complesse ... in questo caso, il linguaggio macchina e il codice assembly non lo tagliano.
Posso suggerire che i linguaggi di scripting sono stati un termine da cui molte persone si stanno allontanando. Direi che oggigiorno si riduce principalmente a linguaggi compilati e linguaggi dinamici.
Voglio dire, non puoi davvero dire qualcosa come Python, o Ruby sono linguaggi di "scripting" in questi giorni ed età (hai anche cose come IronPython e JIT, il tuo linguaggio preferito , la differenza è stata offuscata ancora di più).
Ad essere onesti, personalmente non credo che PHP sia più un linguaggio di scripting. Non mi aspetto che alle persone piaccia classificare PHP in modo diverso da dire Java sul proprio curriculum.
I linguaggi di scripting tendono a funzionare all'interno di un motore di scripting che fa parte di un'applicazione più ampia. Ad esempio, JavaScript viene eseguito all'interno del motore di scripting del browser.
Un linguaggio di scripting è un linguaggio che viene interpretato ogni volta che lo script viene eseguito, implica avere un interprete e la maggior parte sono molto leggibili dall'uomo, per essere utile un linguaggio di scripting è facile da imparare e da usare.
Ogni linguaggio compilabile può essere trasformato in un linguaggio di script e viceversa tutto dipende dall'implementazione di un interprete o di un compilatore, ad esempio il C ++ ha un interprete quindi può essere chiamato linguaggio di script se usato così (non molto pratico in generale come C ++ è un linguaggio molto complesso), uno dei linguaggi di script più utili attualmente è Python ...
Quindi, per rispondere alla tua domanda, la definizione è sull'uso di un interprete per eseguire programmi con script facili e veloci, per affrontare compiti semplici o applicazioni prototipo l'uso più potente che si può fare dei linguaggi di script è includere la possibilità per ogni uso di estendere un applicazione compilata.
Preferisco che le persone non usino il termine "linguaggio di scripting" perché penso che diminuisca lo sforzo. Prendi un linguaggio come Perl, spesso chiamato "linguaggio di scripting".
Perché abbiamo anche bisogno di distinguere tra un linguaggio come Java che è compilato e Ruby che non lo è? Qual è il valore nell'etichettatura?
Per ulteriori informazioni su questo, vedere http://xoa.petdance.com/Stop_saying_script .
Una differenza importante è la digitazione forte (rispetto a quella debole ). I linguaggi di scripting sono spesso debolmente tipizzati , rendendo possibile scrivere piccoli programmi più rapidamente. Per programmi di grandi dimensioni questo è uno svantaggio, poiché impedisce al compilatore / interprete di trovare determinati bug in modo autonomo, rendendo molto difficile il refactoring del codice.
I linguaggi di scripting sono linguaggi di programmazione in cui i programmi vengono generalmente forniti agli utenti finali in una forma testuale leggibile e dove esiste un programma che può apparentemente eseguire quel programma direttamente. (Il programma potrebbe compilare lo script internamente; questo non è rilevante qui perché non è visibile all'utente.)
È relativamente comune che i linguaggi di scripting siano in grado di supportare una sessione interattiva in cui gli utenti possono semplicemente digitare il proprio programma e farlo eseguire immediatamente. Questo perché si tratta di una banale estensione del requisito essenziale del primo paragrafo; il principale requisito aggiuntivo è l'aggiunta di un meccanismo per capire quando un'istruzione digitata è completa in modo che possa essere inviata al motore di esecuzione.
Per un approccio leggermente diverso alla domanda. Un linguaggio di scripting è un linguaggio di programmazione, ma un linguaggio di programmazione non è necessariamente un linguaggio di scripting. Un linguaggio di scripting viene utilizzato per controllare o eseguire lo script di un sistema. Quel sistema potrebbe essere un sistema operativo in cui il linguaggio di scripting sarebbe bash. Il sistema potrebbe essere un server web con PHP il linguaggio di scripting. I linguaggi di scripting sono progettati per riempire una nicchia specifica; sono lingue specifiche del dominio. I sistemi interattivi hanno interpretato i linguaggi di scripting dando origine all'idea che i linguaggi di scripting siano interpretati; tuttavia, questa è una conseguenza del sistema e non del linguaggio di scripting stesso.
Un linguaggio di scripting è un linguaggio che configura o estende un programma esistente.
Un linguaggio di scripting è un linguaggio di programmazione.
La definizione di "linguaggio di scripting" è piuttosto confusa. Lo baserei sulle seguenti considerazioni:
I linguaggi di scripting di solito non hanno passaggi di compilazione visibili all'utente. In genere l'utente può eseguire i programmi con un semplice comando.
I programmi nei linguaggi di scripting vengono normalmente trasmessi in formato sorgente.
I linguaggi di scripting normalmente hanno runtime che sono presenti su un gran numero di sistemi e possono essere installati facilmente sulla maggior parte dei sistemi.
I linguaggi di scripting tendono ad essere multipiattaforma e non specifici della macchina.
I linguaggi di scripting facilitano il richiamo di altri programmi e l'interfaccia con il sistema operativo.
I linguaggi di scripting sono solitamente facilmente incorporabili in sistemi più grandi scritti in linguaggi di programmazione più convenzionali.
I linguaggi di scripting sono normalmente progettati per la facilità di programmazione e con molta meno attenzione per la velocità di esecuzione. (Se vuoi un'esecuzione veloce, il solito consiglio è di codificare le parti che richiedono tempo in qualcosa come C, e incorporare il linguaggio in C o chiamare i bit C dal linguaggio.)
Alcune delle caratteristiche che ho elencato sopra sono vere per le implementazioni, nel qual caso mi riferisco alle implementazioni più comuni. Ci sono stati interpreti C, con (AFAIK) nessun passaggio di compilazione ovvio, ma non è vero per la maggior parte delle implementazioni C. Si potrebbe certamente compilare un programma Perl in codice nativo, ma non è così che viene normalmente utilizzato. Alcune altre caratteristiche sono di natura sociale. Alcuni dei criteri di cui sopra si sovrappongono in qualche modo. Come ho detto, la definizione è sfocata.
Direi che il linguaggio di scripting è quello che manipola pesantemente le entità che non definisce. Ad esempio, JavaScript manipola gli oggetti DOM forniti dal browser, PHP gestisce un'enorme libreria di funzioni basate su C e così via. Ovviamente non una definizione precisa, più un modo per pensarla.
Se non funziona / non funziona sulla CPU, è uno script per me. Se un interprete deve essere eseguito sulla CPU sotto il programma, allora è uno script e un linguaggio di scripting.
Non c'è motivo per renderlo più complicato di così?
Ovviamente, nella maggior parte (99%) dei casi, è chiaro se una lingua è un linguaggio di scripting. Ma considera che una VM può emulare il set di istruzioni x86, ad esempio. Questo non renderebbe il bytecode x86 un linguaggio di scripting se eseguito su una VM? E se qualcuno scrivesse un compilatore che trasformerebbe il codice Perl in un eseguibile nativo? In questo caso, non saprei più come chiamare la lingua stessa. Sarebbe l'output che conta, non la lingua.
Poi di nuovo, non sono a conoscenza che sia stato fatto nulla di simile, quindi per ora mi sento ancora a mio agio a chiamare linguaggi interpretati linguaggi di scripting.
Uno script è un programma relativamente piccolo . Un sistema è un programma relativamente grande o una raccolta di programmi relativamente grandi.
Alcuni linguaggi di programmazione sono progettati con funzionalità che il progettista del linguaggio e la comunità di programmazione considerano utili quando si scrivono programmi relativamente piccoli. Questi linguaggi di programmazione sono noti come linguaggi di scripting , ad esempio PHP.
Allo stesso modo, altri linguaggi di programmazione sono progettati con caratteristiche che il progettista del linguaggio e la comunità di programmazione considerano utili quando si scrivono programmi relativamente grandi. Questi linguaggi di programmazione sono noti come linguaggi di sistema , ad esempio Java.
Ora, programmi piccoli e grandi possono essere scritti in qualsiasi lingua. Un piccolo programma Java è uno script. Ad esempio, un programma Java "Hello World" è uno script, non un sistema. Un grande programma, o raccolta di programmi, scritto in PHP è un sistema. Ad esempio, Facebook, scritto in PHP, è un sistema, non uno script.
Considerare una caratteristica della singola lingua come una "cartina di tornasole" per decidere se il linguaggio è più adatto per lo scripting o la programmazione di sistemi è discutibile. Ad esempio, gli script possono essere compilati in byte code o codice macchina, oppure possono essere eseguiti mediante interpretazione AST (direct abstract syntax tree).
Quindi, un linguaggio è un linguaggio di scripting se viene tipicamente utilizzato per scrivere script . Un linguaggio di scripting potrebbe essere utilizzato per scrivere sistemi, ma è probabile che tali applicazioni siano considerate dubbie.