Categorizza una lingua?

-2

È vero che non si "implementa un linguaggio di programmazione"? Mi è stato detto che in alcuni commenti qui diversi anni fa e ho letto che in realtà "implementa un linguaggio di programmazione".

Lo sfondo è che stavo cercando di verificare se è vero che Python è un "linguaggio di programmazione" e non un linguaggio di scripting. Penso di aver scoperto che la differenza non ha senso e devo sapere come viene usata la lingua.

Ad esempio: Perl ha un compilatore e quindi è un linguaggio di programmazione se si usa il compilatore. Lo stesso vale per Python vero?

Quindi, se si categorizzano "linguaggio di programmazione", "linguaggio di scripting", "linguaggio compilato" e / o "linguaggio interpretato", non si può sapere solo dalla conoscenza della lingua, è necessario sapere come viene utilizzato o implementato.

Quindi ora penso che Python e Ruby non siano necessariamente "linguaggi interpretati", dipende se usi un compilatore o un interprete.

Ho capito bene?

    
posta Niklas Rosencrantz 27.02.2017 - 09:31
fonte

2 risposte

6

Un linguaggio di programmazione è una specifica scritta in alcuni rapporti. È non un software. Per esempi di specifiche dei linguaggi di programmazione, vedi R5RS (per alcuni Schema), n1570 (bozza delle specifiche di C11 ), ecc. Tale specifica dovrebbe interessare la sintassi e sulla semantica per definire quali sono i programmi "corretti" e come devono comportarsi.

Raccomando vivamente di leggere la programmazione linguistica di programmazione di Scott , l'ultima Dragon Book , SICP , Lisp In Small Pieces .

di Queinnec

Compilatori e interpreti sono software che implementano alcuni linguaggi di programmazione. In realtà, c'è un continuum tra di loro e la maggior parte delle implementazioni può avere sia compilato che amp; aspetti interpretati (es. printf generalmente "interpreta" la sua stringa di controllo del formato specificata dallo standard C, e molti "interpreti" -eg Lua , Guile , Python, ...- stanno "compilando" per alcuni bytecode , o usando qualche raccolta JIT libreria) . Si noti che (come estremo) SBCL è un'implementazione di Common Lisp che compila il codice macchina ogni REPL interazione e ogni chiamata a eval . E potresti trovare interpreti per C (anche se preferisco usare un compilatore come GCC o Clang / LLVM per il mio codice C).

Non sono sicuro che il "linguaggio di scripting" abbia una definizione chiara (ma vedi la sua wikipage ). Forse una loro "definizione" pragmatica su Linux è di avere qualche implementazione utilizzabile con shebang che viene elaborato da execve (2) . Sono d'accordo che la definizione è un hack (ma lo sono anche i linguaggi "scripting"). Alcune lingue (in particolare Ocaml) hanno sia interpreti che compilatori e potrebbero essere viste come lingue "di scripting". E TinyC può essere usato con uno shebang (ma è un compilatore che genera codice macchina molto ingenuo e inefficiente) per gli script in C.

    
risposta data 27.02.2017 - 09:38
fonte
4

Is it true that one doesn't "implement a programming language"?

No, non è vero.

Sicuramente puoi implementare un linguaggio di programmazione. Ad esempio, Clang, GCC, icc, xlc, PathScale, Metrowerks, pcc e tcc sono tutte implementazioni del linguaggio di programmazione C. Oracle javac ed Eclipse ecj sono entrambe implementazioni del linguaggio di programmazione Java. Zend Engine, Quercus e P8 sono tutte implementazioni del linguaggio di programmazione PHP. YARV, Rubinius, JRuby, Opal, MRuby, MagLev, IronRuby, Cardinal, Ruby.NET, XRuby, RubyGoLightly, MRI, tinyrb, Alumina, IoRuby, Smalltalk.rb, SmallRuby, BlueRuby, Carbone, Topaz, RubyMotion, MacRuby, Corindone, e Red Sun sono (o erano) tutte le implementazioni del linguaggio di programmazione Ruby. CPython, PyPy, IronPython, Jython, pynie e Pyston sono tutte implementazioni del linguaggio di programmazione Python.

I was told that in some comment around here several years ago and I read that actually you do "implement a programming language".

Sì, è possibile implementare un linguaggio di programmazione. Non è necessario, tuttavia: una programmazione non è meno un linguaggio di programmazione se non è implementata. Non puoi semplicemente eseguire i programmi scritti in esso se non hai un'implementazione.

Ad esempio: il linguaggio di programmazione Plankalkül è stato creato da Konrad Zuse nel 1942-1946, ma non è stato implementato fino al 1972. Tuttavia, nei 30 anni intermedi, era certamente un linguaggio di programmazione.

The background is that I was trying to check if it is true that python is a "programming language" and not a scripting language. I think I found that the difference is meaningless and I have to know how the language is used.

Lo scripting è un tipo specifico di programmazione, quindi un linguaggio di scripting è un tipo specifico di linguaggio di programmazione. Chiedere se Python è un linguaggio di programmazione e non un linguaggio di scripting è come chiedere se un ThinkPad è un computer e non un laptop.

For example: Perl has a compiler and therefore it is a programming language if the compiler is used. The same goes for python doesn't it?

No. Questo non ha senso: perché decidere se Perl è un linguaggio di programmazione diverso a seconda che io usi o meno un compilatore? Cosa succede se tu usi un compilatore per Perl e I usi un interprete per Perl? Ciò significa che Perl è allo stesso tempo un linguaggio di programmazione e non un linguaggio di programmazione? Come funzionerebbe?

Dovrebbe essere ovvio da questo esempio, che una lingua essendo un linguaggio di programmazione che dipende da come qualcuno sceglie di eseguire programmi scritti in quella lingua è logicamente non sensata.

So if one is gonna categorize "programming language", "scripting language", "compiled language" and/or "interpreted language" then you can't know just from knowing the language, you must know how it is used or implemented.

I termini "linguaggio compilato" e "linguaggio interpretato" non sono sensoriali: la compilazione e l'interpretazione sono tratti di un'implementazione linguistica, non tratti di una lingua. La lingua rimane la stessa, indipendentemente da come tu o io abbiamo scelto di eseguire programmi scritti in esso.

Ancora una volta, immagina la seguente situazione: io e te eseguiamo esattamente lo stesso programma Python; Io uso un interprete, tu usi un compilatore: ora, Python è un linguaggio compilato o un linguaggio interpretato?

non è una cosa simile come linguaggio compilato o linguaggio interpretato. I termini non hanno senso.

"Scripting" è un tipo specifico di programmazione, in cui il programma (noto anche come "script") fa parte di un ambiente più ampio e in cui la maggior parte degli oggetti viene manipolata dallo script, la maggior parte delle operazioni viene utilizzata per manipolare oggetti e la maggior parte dei tipi di dati, sono forniti da tale ambiente. Inoltre, le vite degli oggetti manipolati dallo script sono in genere indipendenti dalla durata dello script stesso.

Alcuni esempi sono lo scripting del browser con ECMAScript, dove i tipi DOM, gli oggetti DOM e le API DOM non fanno parte di ECMAScript ma piuttosto parte del browser e la durata degli oggetti DOM dipende dal browser, non dallo script. O script OS con qualcosa come Bash, Perl, Python o Ruby, in cui i processi, i file e le directory esistono indipendentemente dallo script e le utilità utilizzate per manipolarli fanno parte del sistema operativo, non della lingua.

Hence I now think that Python and Ruby not necessarily are "interpreted languages", it depends on if you use a compiler or an interpreter.

No, non dipende da niente. Sono lingue. Periodo. Il termine "linguaggio interpretato" non ha senso. Se l'inglese fosse una lingua tipizzata, sarebbe un errore di tipo.

Ancora una volta, pensaci logicamente: IFF Python essendo un linguaggio interpretato dipende dal fatto che tu usi un compilatore o un interprete, che cosa sarebbe se usassi un interprete e tu usassi un compilatore? E se cancello l'interprete e installo un compilatore, perché la definizione di Python cambierà improvvisamente per tutti sul pianeta?

Semplicemente non ha senso.

    
risposta data 01.03.2017 - 12:00
fonte