Il potere espressivo è definito da Wikipedia come:
Diamo una nuova lettura a quella pagina. Una delle prime cose da notare è che dice "linguaggio", non "linguaggio di programmazione", e la maggior parte dei suoi esempi non sono linguaggi di programmazione, ad esempio il primo esempio dato è un confronto di OWL2 EL e OWL2 RL, che sono entrambi ontologia le lingue.
Si può applicare il concetto ai linguaggi di programmazione, ma anche linguaggi di corrispondenza dei pattern, linguaggi di markup, linguaggi di query, linguaggi di fogli di stile visivi, espressioni regolari (e tutti i linguaggi regolari a cui si riferiscono) e così via. Si può persino fare riferimento al potere espressivo delle lingue naturali come l'inglese, che viene spesso fatto in modo molto informale, ma con maggiore serietà quando si considerano i problemi relativi all'elaborazione del linguaggio naturale.
Le "idee" si riferiscono alle cose (operazioni, strutture, algoritmi, ecc.?) Che possiamo comunicare alla macchina? O si riferisce ai concetti "umani" che possono essere catturati e comunicati con la lingua ad altri umani?
Si riferisce a ciò che può essere espresso in quella lingua, considerata puramente come una cosa in sé.
Ad esempio, (userò javascript in tutto per i miei esempi, perché la tua domanda indica che è una delle lingue che conosci) considera l'istruzione javascript:
var x = 3 + 4;
Ciò rappresenta che viene calcolata la somma dei valori di 3 e 4 e il valore associato a un'etichetta x
all'interno di un determinato ambito dello spazio dei nomi.
Se distruggessimo tutti i computer del mondo e scrivessimo quel codice su un pezzo di carta, rimarrebbe che in javascript avesse ancora lo stesso significato; non saremmo in grado di eseguire tale codice su nulla, ma la definizione astratta del linguaggio è ancora qualcosa di cui potremmo parlare.
Questo può sembrare pedante, ma in realtà è abbastanza importante che le lingue siano cose su cui si possa ragionare in astratto senza considerare i computer reali. Per prima cosa, il ragionamento delle persone sui punti teorici dei linguaggi informatici che non erano ancora fattibili nella pratica è una delle cose che ci ha portato dove siamo oggi; i computer hanno bisogno dell'informatica, ma l'informatica non ha bisogno dei computer, solo l'idea di un calcolo.
Certo, usiamo i computer nel mondo reale e oggigiorno ci sono molte persone che li usano in pratica piuttosto che alcuni specialisti che ne discutono in teoria. La pagina a cui ti sei collegato dice:
Il termine potere espressivo può essere usato con una serie di significati. Può significare una misura delle idee esprimibili in quella lingua:
Il primo senso domina in aree della matematica e della logica che si occupano della descrizione formale delle lingue e del loro significato, come la teoria del linguaggio formale, la logica matematica e l'algebra dei processi.
Nelle discussioni informali, il termine si riferisce spesso al secondo senso, o ad entrambi. Questo è spesso il caso di discutere dei linguaggi di programmazione. Sono stati compiuti sforzi per formalizzare questi usi informali del termine
Di questi due usi del termine, l'impatto pratico del primo riguarda esclusivamente ciò che può essere trasmesso al computer.
Il secondo riguarda più la comprensione umana sia nella lettura che nella scrittura, sebbene il grado in cui lo fa, differisce molto tra gli usi, poiché sono informali e come tali non sono rigorosamente definiti.
Ad esempio, se prendessimo una lingua come JavaScript e imponessimo una strana restrizione ai nomi delle variabili, come la variabile deve essere un numero di 8 cifre preceduto da un trattino basso, corrispondente /^_[0-9]{8}$/
, perderemmo il potere espressivo?
Per definizione formale, non abbiamo perso alcun potere espressivo: siamo limitati a 100.000.000 di variabili, ma se davvero ne avessimo bisogno potremmo aggirare il problema creando oggetti per contenere più variabili all'interno dello spazio dei nomi appena creato. Pertanto, qualsiasi programma scritto oggi in javascript potrebbe essere riscritto in questa nuova forma, quindi sono ugualmente espressivi.
Secondo la definizione informale, ne abbiamo perso un po ', ma quanto dipende da quanto siamo informali, il che varierà perché di nuovo non si può dire quale sia la "regola" su un uso informale. Potremmo dire di aver perso una piccola quantità, perché i programmi con più di 100.000.000 di variabili nello stesso spazio dei nomi devono essere riscritti oltre una semplice sostituzione. Un uso ancora più informale si riferirebbe all'impatto mentale di nomi così sgraziati e variabili sull'essere umano completo.
Vale anche la pena notare che le persone prenderanno in considerazione in modo informale cose che non fanno assolutamente parte della lingua. Considera le modifiche in Javascript dalla sua creazione fino ad oggi.
Secondo la definizione più formale, l'espressività è rimasta pressoché invariata; dopo tutto, era Turing completo.
Con una definizione più informale, è diventato considerevolmente più espressivo in certe cose come la manipolazione di array, la gestione delle eccezioni e (forse soprattutto) nell'inclusione di espressioni regolari. Questi non fanno nulla che prima non si potesse fare in javascript, anche se spesso possono fare qualcosa in poche righe e un tempo di esecuzione inferiore al secondo che richiederebbe kilobyte di codice per scrivere in javascript1.0 e molto tempo per essere eseguito.
Con una definizione molto più informale, la modifica dal primo utilizzo di javascript nei browser (in grado di cambiare i valori degli input del modulo, document.write
mentre la pagina viene prima analizzata e spostata in una nuova posizione o tornare indietro o avanti nella cronologia, ma piuttosto nient'altro) a quello di oggi (in grado di cambiare praticamente qualsiasi cosa sulla pagina, anche sulla base dei dati dalle chiamate del server) è assolutamente immenso, anche se la maggior parte non si riferisce a javascript ma ai modelli di oggetti e API realizzati disponibile, piuttosto che la lingua (ad esempio vbscript in IE ha beneficiato di tali cambiamenti allo stesso modo).
A mio avviso, quell'ultimo uso è così informale da non essere realmente corretto, ma questo è il problema con le definizioni informali.
Per definizione formale, in realtà non è diventato affatto più espressivo.