Le lingue sono solo sintassi o includono anche il framework? [chiuso]

5

Nella costruzione di una cronologia linguistica per Pascal ho notato che a un certo punto le lingue sono passate da una linea strong tra la lingua e le sue librerie comuni a una più sfocata. Nelle prime versioni di Turbo Pascal non esisteva la possibilità di moduli riutilizzabili fino alla versione 4 introdotta. Versioni successive di Pascal avevano una collezione molto potente di librerie comuni.

Con l'introduzione di Delphi è arrivato con RTL e VCL . Soprattutto per la RTL, è spesso considerato parte della lingua. Ad esempio, le eccezioni fanno parte della lingua, ma è necessario utilizzare l'unità SysUtils per ottenere una gestione corretta. Inoltre c'è l'unità System incorporata che viene sempre utilizzata in tutti i progetti Delphi.

Quindi con Java hai il linguaggio Java con Java run-time e la piattaforma Java. Non è possibile utilizzare il linguaggio Java al di fuori della piattaforma Java.

Ora con .NET abbiamo VB.NET e C # che sono lingue che non esistono senza il loro framework, mentre Phyton, Ruby e altri esistono sia all'interno di .NET che senza.

Quindi la mia domanda è, è una lingua solo la sintassi e il compilatore, oppure è anche la piattaforma e la parte strutturale della lingua? Dov'è la linea? Perché o perché no?

    
posta Jim McKeeth 28.07.2011 - 21:25
fonte

7 risposte

7

La risposta dipende interamente dal contesto.

In senso stretto, la lingua è solo la sintassi e l'amp; semantica della lingua e niente di più. Neanche il compilatore o l'interprete conta. Non esiste un compilatore "ufficiale" per alcune lingue.

Se un set di funzioni standard o una libreria di oggetti standard fa parte della definizione del linguaggio astratto, la libreria fa parte della lingua ancor più di qualsiasi compilatore. Ad esempio, la specifica ECMAScript contiene la descrizione degli oggetti standard.

    
risposta data 28.07.2011 - 21:43
fonte
7

Una lingua è solo la sintassi (e la semantica), non un compilatore o una struttura o una libreria. Una volta che le specifiche per la lingua sono conosciute, chiunque può, in teoria, creare un compilatore per questo. Un venditore può spedire una libreria / framework / runtime con una lingua, ma ciò non significa che sia parte della lingua stessa . ... Anche se come puoi leggere nei commenti qui sotto, ci sono alcuni casi in cui alcune funzioni essenziali o librerie possono essere referenziate in una specifica del linguaggio. E probabilmente ci sono altri linguaggi che non lo fanno, ma non leggo le specifiche linguistiche sufficienti per saperlo con certezza.

    
risposta data 28.07.2011 - 21:29
fonte
2

Ho sempre considerato che una lingua è definita da due cose: il compilatore e la libreria standard. Il compilatore, ovviamente, fornisce la definizione e l'interpretazione concreta della sintassi e della semantica del linguaggio, ma IMO di solito è la libreria standard che ha la maggiore influenza sul tipo di programmi che vengono scritti con esso.

Ad esempio, hai citato Delphi. Delphi è completo per Turing e può teoricamente essere utilizzato per scrivere qualsiasi programma computabile. PHP è anche completo da Turing e può teoricamente essere utilizzato per scrivere qualsiasi programma computabile. Ma vedi un sacco di programmi desktop basati su GUI scritti in Delphi e molti siti web interattivi in PHP, e non esattamente il contrario.

Perché è così? È dovuto in gran parte alle biblioteche. Delphi viene fornito con la VCL come caratteristica standard, e gran parte del design della lingua (in particolare le modifiche che differenziano Delphi 1 da Turbo Pascal 7) sono state originariamente messe in atto per far funzionare correttamente la VCL o per rendere il form designer di VCL in l'IDE funziona bene. Avere il gold standard delle librerie di widget come caratteristica standard tende ad attrarre le persone che vogliono creare programmi GUI, ed è generalmente considerato come un linguaggio RAD.

PHP, d'altra parte, ha un sacco di funzioni di libreria per l'elaborazione del testo, i modelli HTML e la comunicazione con il database. Ciò semplifica la creazione di siti Web, quindi tende ad attrarre persone che desiderano creare siti Web e generalmente viene considerato un linguaggio di scripting Web.

    
risposta data 28.07.2011 - 23:03
fonte
2

Mi sembra che un numero di parole abbia uno spettro di significati.

Ad esempio, il corpo potrebbe riferirsi a: tutto il tuo corpo, il tuo corpo senza la testa, o il tuo corpo senza braccia / gambe / testa. Analogamente, il braccio potrebbe includere la tua mano come parte del braccio, o potresti guardare il tuo braccio come si distingue dalla tua mano.

Penso che il linguaggio rientri nella stessa categoria. Nella sua forma più specifica, penso che il linguaggio si riferisca alla sintassi e alla semantica di quella sintassi. Nella sua forma più generale includerei la sintassi, la libreria standard, eventuali librerie esterne in uso e persino lo stile da parte del programmatore.

In questo momento sto lavorando a un progetto scritto in C ++ da qualcuno che ha chiaramente molta più esperienza in C. Lo descriverei, in un certo senso, come un linguaggio distinto "C ++ -" dal C ++ che Scrivo normalmente.

    
risposta data 29.07.2011 - 00:30
fonte
1

Sono d'accordo con Frustrato. Il "linguaggio" è solo ciò che è definito dalle specifiche per quel linguaggio, che fondamentalmente significa sintassi, parole chiave e operatori, e il comportamento degli stessi. Date le specifiche per, diciamo, C #, un individuo intraprendente potrebbe creare un compilatore che produce programmi che funzionano senza .NET Framework.

La maggior parte delle lingue, tuttavia, richiede una sorta di "runtime". Anche lavorando in linguaggi "non gestiti" come C / C ++, puoi scegliere come target Windows e MFC, o Linux, o anche Mac (anche se Apple cerca MOLTO duro per assicurarti che Obj-C sia l'unico linguaggio utilizzato per lo sviluppo dei sistemi operativi Apple) ). Ciò avviene facendo uso di librerie fornite da vari sistemi operativi, che in genere consentono al programma di collegarsi alla GUI del sistema operativo e utilizzare strumenti di accesso all'hardware a livello di sistema operativo come OpenGL / DirectX.

Generalmente non pensiamo solo a una collezione di librerie come "runtime". In generale, pensiamo alle "macchine virtuali" gestite dalla memoria come JVM e CLR. Oltre alle librerie per l'interoperabilità, l'accesso all'hardware e i comuni costrutti, queste piattaforme forniscono una "sandbox" di memoria e "chaperones" come garbage collection e CAS, che astraggono ulteriormente la logica del programma dal nocciolo del firmware specifico e hardware su cui viene eseguito.

    
risposta data 28.07.2011 - 21:39
fonte
1

C'è sempre stato un aspetto sfocato nel rispondere a questa domanda.

Qualsiasi lingua richiede un runtime standard. Ad esempio, non puoi eseguire nessun programma C senza alcun tipo di runtime. La piattaforma non sa come chiamare main - la libreria di runtime deve fornire una funzione entry-point chiamata in base alle convenzioni della piattaforma, analizza i parametri della riga di comando e chiama main , quindi fa qualsiasi cosa la piattaforma si aspetta di fornire il valore di uscita.

Poiché non esiste una convenzione universale per il modo in cui tutte le piattaforme chiamano il punto di ingresso di un programma, il runtime deve colmare tale lacuna in qualsiasi linguaggio che possa essere eseguito su più piattaforme.

Il runtime non è definito in base allo standard di lingua (dove esiste uno standard ufficiale), tanto quanto al compilatore. Ad esempio, poche o nessuna lingua definiscono i dettagli delle convenzioni di chiamata per le funzioni (libreria standard o altro) perché questi dettagli dipendono strongmente dalla piattaforma. Quindi, sebbene l'insieme di tipi e funzioni di libreria e il loro comportamento possano essere definiti da uno standard, molti dettagli di implementazione non lo sono.

Possono esserci anche interazioni sorprendenti tra il compilatore e la libreria. A volte, quando si importa una libreria, il compilatore non fa riferimento a nessun tipo di header / lib o modulo precompilato o qualsiasi altra cosa - il compilatore sostituisce le chiamate con implementazioni integrate, solitamente per motivi di efficienza.

Tuttavia, è normalmente possibile (e talvolta abbastanza pratico) sostituire la maggior parte o tutta la libreria standard, fino alla funzione del punto di ingresso. Per alcune parti richiede la codifica di un assemblatore. Alcuni bit potrebbero richiedere l'impostazione di alcune opzioni, impedendo l'utilizzo di tali implementazioni integrate. Ma la sostituzione è spesso possibile.

Alcune lingue hanno intrinsecamente un legame così stretto tra il compilatore e le librerie fornite che l'unico modo sensato di usare una libreria alternativa è di usare anche un compilatore alternativo. Questo è probabilmente sempre più il caso in questi giorni, con gli stretti legami tra framework come .NET e la piattaforma Java e i linguaggi supportati come C # e, ovviamente, Java.

  • Oops - ovviamente è molto facile sostituire l'intera piattaforma .NET o Java con un'implementazione alternativa mentre si usano ancora gli stessi compilatori, perché le piattaforme stesse sono standardizzate - fino al codice della macchina virtuale. Siamo spiacenti.

Un contesto in cui probabilmente è ancora relativamente probabile vedere un runtime di sostituzione completo nei sistemi embedded, ma non intendo i telefoni cellulari. Più probabile, lavatrici.

Uno dei principi di Bjarne Stroustrups per C ++ era che non ci dovrebbe essere nulla che la lingua possa fare che il programmatore non possa fare. Ad esempio, l'overloading dell'operatore è lì in modo che gli sviluppatori di librerie possano supportare gli operatori con tipi: in C, solo i tipi predefiniti per il compilatore possono supportare gli operatori. Ci sono casi in cui questo richiede una programmazione di assemblatori - ovviamente, è impossibile scrivere una libreria per fornire accesso O / S di basso livello e funzionalità I / O direttamente in C ++ a meno che non ci sia già un modo per fornire accesso O / S a basso livello e capacità di I / O.

Quindi questo è fondamentalmente - non puoi completamente rinunciare ad avere un runtime, ma puoi scegliere di non utilizzare gran parte di esso, e potresti essere in grado di sostituire le parti che puoi fare a meno, o addirittura sostituire l'intera cosa.

    
risposta data 28.07.2011 - 22:43
fonte
1

La "lingua" è definita in modo più corretto dalla specifica degli standard per quella lingua. Questo potrebbe essere uno standard CODASYL ISO ECMA ecc., Ma la maggior parte delle lingue ha una definizione standard formale o informale.

Quindi per COBOL il "linguaggio" si riferisce alla sintassi e al comportamento associato alla sintassi - ad esempio è molto specifico su come i numeri vengono troncati e arrotondati durante l'aritmetico.

Per FORTRAN la "lingua" come definita nello standard hte ha sempre incluso la sintassi, il comportamento e l'implementazione della libreria standard. Il tuo compilatore non può essere certificato come FORTRAN senza implementare cose come SIN () e PRINTF ().

Quando si parla di JAVA ci sono una serie di standard sovrapposti. La sintassi e il suo comportamento risultante costituiscono lo standard di base, ma esistono effettivamente tre lingue: Micro, Standard ed Enterprise Edition. Condividono le stesse regole SYNTAX ma gli standard per la macchina virtuale e le librerie associate sono diversi. In qualcosa di diverso da una conversazione casuale mi aspetterei che un professionista risponda alla domanda "che cosa è scritto?" con "la sua implementazione in Java SE".

Quindi, sia per precisione che per scopi pratici, il "linguaggio" si riferisce a SYNTAX al comportamento previsto e ai tempi di esecuzione e alle librerie associati.

Quando si vuole essere deliberatamente più generali, il fraseggio "nella maggior parte / qualsiasi ..... dialetti" può essere usato per indicare che si sta parlando di qualcosa di più generale come in:

"Nella maggior parte dei dialetti di BASIC 'LET A = 1' funzionerà" o "In qualsiasi COBOL non puoi eseguire aritmetica su variabili alfanumeriche".

    
risposta data 29.07.2011 - 03:56
fonte