Quando una lingua è considerata un linguaggio di scripting? [chiuso]


107

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?

Guarda anche:


Potresti voler espandere un po 'la tua domanda. Penso che questo sia quasi un imbroglione altrimenti. Altri potrebbero non vedere la distinzione
Kent Fredric

Un idiota a quale altra domanda?
Sietse

2
stackoverflow.com/questions/98268/… Ci sono molte somiglianze. Non di per sé identico, ma molto contesto / opinione condivisa.
Kent Fredric

7
... Quando una lingua rompe l'API e cambia la sua sintassi ad ogni versione minore, quando è un wrapper di circa 100 librerie C sporche e non mantenute, allora è un linguaggio di script. ;)
ivan_ivanovich_ivanoff

1
Nella barra laterale "Correlati" troverai stackoverflow.com/questions/1514206/… a cui ho collegato una pila di duplicati allora esistenti che risalgono a stackoverflow.com/questions/101055/… .
dmckee --- gattino ex moderatore

Risposte:


52

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.


E per quanto riguarda linguaggi come Python? Non è facile capire dove sia il focus, ma si potrebbe dire che si concentra maggiormente sulle proprie applicazioni, tuttavia è spesso chiamato "linguaggio di scripting". Forse perché la compilazione nascosta in bytecode del riferimento CPython impl. non solleva errori di compilazione riguardanti la "sicurezza dei tipi"? Forse la risposta di Oded ha questi ...
n611x007

Bytecode e sistemi di tipi non hanno davvero nulla a che fare con questo. Secondo la definizione precedente, se un'app espone un'API a Python, si dice che utilizzi Python come linguaggio di scripting. Se crei un'app interamente in Python, quell'app la utilizza come linguaggio di programmazione.
bug

"Scripting" non è una definizione di un tipo di linguaggio. È una caratteristica che le lingue possono avere . Quindi, Python è un "buon linguaggio di scripting" perché rende facile scrivere codice che scansiona le cose. Assembly non è un buon linguaggio di scripting perché rende difficile lo script. C è da qualche parte nel mezzo, perché sebbene abbia una parola chiave (sistema) per chiamare, mette anche a disposizione dell'utente un sacco di cruft prima che tu possa arrivarci.
nomen

93

Semplice. Quando lo uso, è un linguaggio dinamico moderno, quando lo usi, è semplicemente un linguaggio di scripting!


19
Si. "Non è un 'linguaggio giocattolo', è un 'linguaggio di alto livello'": P
Roberto Bonvallet

6
che era bumptious e fuori tema, -1
adf88

1
Anche con - (1 + 1) si ottiene circa 2x + 1s rispetto a uno contrassegnato. : D
anatoly techtonik

Migliore. Risposta. EVAR!
iconoclasta

41

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".


1
@Amr: Beh, si chiama java script
sepp2k

1
@Ram Bhat - è fonte di confusione, poiché la distinzione è artificiale.
Oded

11
@Andrey: vengono compilate tutte le implementazioni JavaScript moderne. E ci sono interpreti per C.
Jörg W Mittag

27
Questo è semplicemente sbagliato. Beh, in realtà non è nemmeno sbagliato , semplicemente non ha senso. Non esiste un linguaggio compilato o interpretato. Una lingua non è compilata, una lingua semplicemente lo è . È un mucchio di regole matematiche astratte. L'interpretazione e la compilazione sono tratti di un motore di esecuzione , non di un linguaggio. Ogni lingua può essere implementata con un compilatore o un interprete. Infatti, tutti i linguaggi che sono stati citati come "interpretati" in questa pagina, hanno quasi esclusivamente implementazioni compilate, ad esempio JavaScript, PHP, Python, Ruby.
Jörg W Mittag

5
@Andrey: Chakra (IE9), TraceMonkey / JägerMonkey (Firefox), Nitro (Safari), Carakan (Opera) compilano tutti JavaScript in bytecode e poi alcuni dei bytecode vengono interpretati e alcuni compilati in codice nativo. V8 (Chrome) salta il bytecode e compila JavaScript direttamente in codice nativo. IronJS compila JavaScript in bytecode CIL. Rhino compila JavaScript in bytecode JVML. BESEN (l'unico motore ECMAScript 5 fino ad ora) compila JavaScript in bytecode BESEN e attualmente viene aggiunto un compilatore nativo. Alcuni dei precedenti compilano anche espressioni regolari in codice macchina nativo.
Jörg W Mittag

31

"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.


hmmm .. Non sono riattaccato, ma la maggior parte degli intervistatori e degli insegnanti lo sono. E non ho mai avuto nessuna di queste persone che mi desse una risposta soddisfacente!
Laz

1
E se tu fornissi una delle altre risposte qui, come intervistatore penserei che tu non abbia davvero un controllo sulla domanda. La distinzione è davvero sfocata e non c'è una risposta chiara. Se avessi detto "Beh, tradizionalmente ..." lo prenderei, ma poi mi aspetto che tu discuta di cose come la compilazione runtime e anche JIT'ing.
Clinton Pierce

25

La mia definizione sarebbe un linguaggio tipicamente distribuito come sorgente piuttosto che come binario.


5
Quindi pensi che php, python, ecc. Siano linguaggi di scripting?
Sietse

"Scripting" è una descrizione comune per Python e PHP.
S.Lott,

22
php e python - ovviamente sono linguaggi di scripting!
Antony Carthy,

questo è ciò che è stata la mia definizione dall'inizio

@Antony Carthy questo è sbagliato. Python non è di solito un linguaggio di scripting, ma può essere, come qualsiasi altro linguaggio, utilizzato all'interno di un programma (come Word (VB), Browser (JS))
Joschua

16

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 Filee Directoryseguendo 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 findinvece 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.


Alcune di queste risposte sono sciocche. Un linguaggio è "orientato agli oggetti" quando è orientato alla programmazione con oggetti. Un linguaggio è "funzionale" se ha funzioni di prima classe. Ciò non significa che una lingua non possa essere entrambe le cose. Queste sono le caratteristiche delle lingue, non le definizioni dei tipi. Lo scripting è simile. Un linguaggio è un "buon linguaggio di scripting" se rende facile scrivere script: brevi e semplici bit di interazione utente-applicazione.
nomen

16

È 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 è.


1
È un'ottima spiegazione, ma sono sicuro che alcune persone la
votano positivamente

Il collegamento alla carta è interrotto.
Quazi Irfan

5

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.


Perl compila in byte-code prima di essere eseguito.
Brad Gilbert,

2
E Java? Hai bisogno di una jvm per eseguire un programma java ma non lo chiamerei un linguaggio di scripting
Eineki

5

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.


4

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


Questo non risponde affatto alla domanda!
Paul Biggar

Lasciatemi ribadire che, un linguaggio di scripting è quello in cui è incluso il compilatore ed è possibile eseguire codice generato al volo. Come fa a non rispondere alla domanda?
Rodrigo Lopez

Questo è un linguaggio interpretato. Se stai cercando di dire che qualsiasi linguaggio interpretato è un linguaggio di scripting, dillo.
Paul Biggar

Bene, tutte le lingue possono essere utilizzate per lo scripting, l'elemento chiave per me è quanto siano adatte. Per me il tratto distintivo è che, sì, vengono interpretati.
Rodrigo Lopez

4
Common Lisp non è quello che di solito penso come un linguaggio di scripting, ma ha una evalfunzione completa.
David Thornley

4

Una divisione è

  • scripting = interpretato dinamicamente
  • normale = compilato

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.


Che mi dici di Objective-C?
mouviciel

1
Supporta la digitazione dinamica, ma non lo chiamerei un linguaggio di scripting.
Timo Westkämper

2
Questo è semplicemente sbagliato. Beh, in realtà non è nemmeno sbagliato , semplicemente non ha senso. Non esiste un linguaggio compilato o interpretato. Una lingua non è compilata, una lingua semplicemente lo è . È un mucchio di regole matematiche astratte. L'interpretazione e la compilazione sono tratti di un motore di esecuzione , non di un linguaggio. Ogni lingua può essere implementata con un compilatore o un interprete. Infatti, tutti i linguaggi che sono stati citati come "interpretati" in questa pagina, hanno quasi esclusivamente implementazioni compilate, ad esempio JavaScript, PHP, Python, Ruby.
Jörg W Mittag

@ jorg-w-mittag, Sentiti libero di modificare la mia risposta per renderla più corretta. I tuoi punti sono validi. Normalmente però, se parli di una lingua, parli anche del motore di esecuzione predefinito.
Timo Westkämper

3

Un linguaggio di scripting è in genere :

  1. Digitato dinamicamente
  2. Interpretato, con pochissima enfasi sulle prestazioni, ma buona portabilità
  3. Richiede molto meno codice boilerplate , portando a una prototipazione molto rapida
  4. Viene utilizzato per piccoli compiti, adatto per scrivere un singolo file per eseguire qualche utile "script".

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.


2
Non esiste un linguaggio compilato o interpretato. Una lingua non è compilata, una lingua semplicemente lo è . È un mucchio di regole matematiche astratte. L'interpretazione e la compilazione sono tratti di un motore di esecuzione , non di un linguaggio. Ogni lingua può essere implementata con un compilatore o un interprete. Infatti, tutti i linguaggi che sono stati citati come "interpretati" in questa pagina, hanno quasi esclusivamente implementazioni compilate, ad esempio JavaScript, PHP, Python, Ruby.
Jörg W Mittag

@ Jorg: buon punto, sono d'accordo. Ma non ho detto che non può essere compilato, ho solo detto che questi tipi di linguaggi sono tipicamente interpretati piuttosto che compilati, nell'uso comune.
Quercia

Sono loro? Vengono compilate tutte le attuali implementazioni di Python, PHP, Perl e Lua. Ad eccezione della risonanza magnetica, vengono compilate tutte le attuali implementazioni di Ruby. (E in realtà non ce ne sono uno, ma due compilatori JIT per MRI.) Con l'eccezione di JScript, vengono compilate tutte le implementazioni JavaScript correnti. Notare che il successore di JScript, Chakra, è stato compilato. Molte implementazioni di Scheme vengono compilate. ELisp è compilato.
Jörg W Mittag

3

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 .


In realtà, l'implementazione BASIC originale era un compilatore. Fu solo più tardi che i cloni BASIC furono scritti come interpreti, perché si suppone che gli interpreti siano più facili da scrivere rispetto ai compilatori.
Jörg W Mittag

1
@ Jörg: Non proprio così. Mentre le primissime implementazioni di test di Dartmouth BASIC sono state compilate (chiamate Card BASIC), le implementazioni effettive erano degli interpreti. In effetti, probabilmente la nuova caratteristica più importante di BASIC era che era interattivo. Non è necessario inserire il codice sorgente in una scheda e inserirla nel compilatore. L'utente potrebbe semplicemente sedersi alla telescrivente, scrivere il programma e quindi eseguirlo.
PauliL

È interessante che questa risposta introduca l'idea di un linguaggio "duro". "Difficile" ha bisogno di una definizione in questo contesto?
DA Vincent

@DavidVincent: probabilmente avrei dovuto intendere "più difficile". Non è necessaria alcuna definizione formale, dovrebbe bastare la comprensione intuitiva: è molto più difficile scrivere un programma in Assembly o C che in Ruby o Python, dato che i primi sono di livello molto più basso e verboso dei secondi.
Amadan

3

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 è.


3

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.


Non voglio denigrare la risposta di Peter, ma possiamo aggiungere più dell'opinione?
DA Vincent

3

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é?

  1. Chakra e V8 (motori JavaScript di Microsoft e Google) compilano il codice prima dell'esecuzione
  2. QBasic è interpretato: questo rende Qbasic un linguaggio di "scripting"?

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.


2

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:

  1. copia A.txt in / tmp / work /
  2. eseguire il processo di pulizia notturna sul server del database
  3. registrare i risultati e inviarli al sysdamin

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.


Grazie .. Questo rende le cose un po 'più chiare. Quindi, per ricapitolare, i linguaggi di scripting sono progettati per utilizzare programmi già esistenti insieme in una sequenza. MA linguaggi come il C possono essere usati per fare lo stesso tramite API. Quindi tecnicamente parlando tutto dipende dall'uso
Laz

No, stai solo facendo una distinzione artificiale (che è di cosa si tratta). Se riesci a creare rapidamente qualcosa con esso, un linguaggio verrà spesso chiamato linguaggio di scripting, ma non è una definizione rigorosa o altro. I linguaggi comunemente interpretati sono spesso chiamati anche linguaggi di scripting.
wlangstroth

@ Will: qualsiasi distinzione sarebbe artificiale. Questa era la mia ostinata distinzione. ;)
FrustratedWithFormsDesigner

sì, ma "scripting" in questo caso è un uso molto colloquiale e vago. Decidere che si tratta di "utilizzare programmi già esistenti insieme in una sequenza" è molto specifico e non del tutto corretto. Sembra uno script di shell , forse, ma non Perl. Quindi, per contrastarlo con le API (?) ... non volevo che il ragazzo andasse troppo fuori strada.
wlangstroth

2

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:

  1. 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.

  2. 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.


2

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.


Anche se lavoro molto in php, direi che finché non passa dall'essere basato su script ad avere un modello di servlet / real / fcgi che invia compiti delegati dal server, lo definirei personalmente "un linguaggio di scripting piuttosto buono, che può dare l'illusione di un'applicazione "
Kent Fredric

Statico / dinamico, ci sono linguaggi dinamici che vengono compilati.
Brad Gilbert,

Ripeto: voglio dire che non puoi davvero dire qualcosa come Python, o Ruby sono linguaggi di "scripting" al giorno d'oggi (hai persino cose come IronPython e JitYourFavoriteLanguage, la differenza è stata offuscata ancora di più).
Robert Gould

1

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.


Esilarante che la risposta accettata abbia due voti negativi.
Robert S.

1
Dovrebbe esserci una sorta di distintivo per questo. Che ne dici di "Non riesco a gestire la verità"? Nah, un po 'troppo prolisso. ;-)
Joseph Ferris

3
Perl, Python, Ruby, Tcl / Tk - per citarne solo quattro linguaggi di scripting - non sono principalmente incorporati in un'applicazione più grande.
Jonathan Leffler

3
Ergo: non sono linguaggi di scripting.
Milen A. Radev

3
Uh sì, sarebbe carino se questo non fosse contrassegnato come corretto in qualche modo.
Noon Silk

1

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.


1

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".

  • Perl è un linguaggio di programmazione!
  • Perl è compilato come Java e C ++. È solo compilato molto più velocemente!
  • Perl ha oggetti, spazi dei nomi e chiusure.
  • Perl ha IDE, debugger e profiler.
  • Perl ha formazione, supporto e comunità.
  • Perl non è solo web. Perl non è solo amministratore di sistema. Perl non è solo il nastro adesivo di Internet.

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 .


Nessun computer può eseguire nativamente perl o ruby ​​(o qualsiasi forma in cui potrebbero essere compilati). Pertanto perl e ruby ​​sono linguaggi di scripting, interpretati da un parser o VM.
anon6439

@psoul: sì. così è java.
Stefano Borini

Esistono diverse tecniche per compilare ruby ​​in codice macchina, anche se non sono sicuro che qualcuno di questi non si limiti a raggruppare l'interprete con una stringa che rappresenta il codice ruby, ma anche se fosse vero è possibile creare un traduttore da rubino a codice macchina. esso al codice macchina non lo farebbe nemmeno vicino alla velocità c a causa di tutta l'invio dinamico e gc tra le altre cose. Non penso che ci siano processori ruby ​​ma sono state macchine progettate per adattarsi più da vicino al modello lisp e ai processori che eseguivano il bytecode java.
Roman A. Taycher

1

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.


1

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.


1

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.


1

Un linguaggio di scripting è un linguaggio che configura o estende un programma esistente.
Un linguaggio di scripting è un linguaggio di programmazione.


1

La definizione di "linguaggio di scripting" è piuttosto confusa. Lo baserei sulle seguenti considerazioni:

  1. 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.

  2. I programmi nei linguaggi di scripting vengono normalmente trasmessi in formato sorgente.

  3. 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.

  4. I linguaggi di scripting tendono ad essere multipiattaforma e non specifici della macchina.

  5. I linguaggi di scripting facilitano il richiamo di altri programmi e l'interfaccia con il sistema operativo.

  6. I linguaggi di scripting sono solitamente facilmente incorporabili in sistemi più grandi scritti in linguaggi di programmazione più convenzionali.

  7. 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.


0

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.


Mmm, PHP utilizza la libreria C sottostante, ma è il caso della maggior parte dei linguaggi, incluso Java (al livello più basso). E non manipola queste funzioni ...
PhiLho

0

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.


1
Stai chiamando praticamente tutti i linguaggi tranne quelli che compilano in binario nativo per i linguaggi di scripting? Sono sicuro che gli sviluppatori Java saranno felici di essere chiamati scripter;)
truppo

1
Loro sono. Scripters, cioè.
anon6439

0

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.