Domanda

In teoria dell'informatica ho sentito e letto su di alto livello e di basso livello lingue di tutti i tempi.

Ma io non capisco perché questo è ancora rilevante come non ci sono (rilevanti) linguaggi di basso livello, ad eccezione assembler in uso oggi.

Così si ottiene:

basso livello

  • Assembler

Non è decisamente di basso livello

  • C
  • BASE
  • FORTRAN
  • COBOL
  • ...

di alto livello

  • C ++
  • Rubino
  • Python
  • PHP
  • ...

E se assembler è di basso livello, come si potrebbe mettere ad esempio C nella stessa lista. Voglio dire: C è estremamente alto livello rispetto al assembler. Lo stesso anche per COBOL, Fortran, ecc.

  • Allora perché tutti mastio di nota alta e basso livello lingue, se assemblatore è davvero l'unico linguaggio di basso livello?
È stato utile?

Soluzione

Wikipedia , i linguaggi di basso livello sono codice macchina e il montaggio.

Dalla fonte:

  

In informatica, un basso livello   programmazione di linguaggio di programmazione è un   linguaggio che offre poco o niente   l'astrazione da un computer di   set di istruzioni. La parola   "Basso" si riferisce al piccolo o   quantità inesistente di astrazione   tra il linguaggio e la macchina   linguaggio; A causa di questo, di basso livello   lingue a volte sono descritti come   essere "vicino all'hardware."

Poi, alla risposta:

  

Allora perché tutti mastio di nota alta e basso livello lingue, se assemblatore è davvero l'unico linguaggio di basso livello.

Non so che "tutti" è, ma vorrei azzardare un'ipotesi che indietro quando linguaggi di alto livello non erano così comuni come lo sono oggi, è stato più rilevante per parlare di basso livello vs alto di livello (perché non c'era una quantità relativamente significativa di programmatori che scrivono codice assembly). Nei tempi moderni si tratta di una distinzione meno importante. Personalmente, ho raramente sentito persone che utilizzano questi termini, tranne per differenziare il montaggio o no (tranne che per quei tempi, quando si potrebbe sentire qualcuno in rilievo sul Python riferimento a C o C ++ come di basso livello, ma questo non è nello spirito della definizione originale ).

Altri suggerimenti

Troverete che

  

molte delle verità che si aggrappano a dipendere nostro punto di vista.

Per un programmatore C, Assembler è un linguaggio di basso livello. Per un programmatore Java, C è un linguaggio di basso livello e così via.

Ho il sospetto che la gente di programmazione il primo a programma memorizzato computer con 1 e 0 sarebbe hanno pensato Assembler un linguaggio di alto livello. E 'tutto relativo.

(Citazione da Il ritorno dello Jedi )

Si sta facendo una domanda relativamente soggettiva; si tratta di una domanda sulla terminologia, che la lingua volgare, e la prospettiva.

Ad esempio, è Lisp un alto livello o di un linguaggio di basso livello? Che cosa succede se l'implementazione è in esecuzione su una macchina Lisp?

Spesso, quando le persone cercano di costruire uno spettro da basso livello di alto livello, ciò che stanno cercando di quantificare un grado di "vicinanza all'hardware" in contrasto con il grado di "astrazione".

Qualità che contano verso la vicinanza di un'implementazione per l'hardware:

  • Il programmatore controlla direttamente il layout di memoria dei dati e dispone di accesso a run-time agli indirizzi di memoria di dati.
  • operazioni matematiche sono definiti in termini di hardware o vagamente definito per conformarsi ai diversi tipi di hardware.
  • Non ci può essere una libreria che fornisce allocazione dinamica della memoria, ma l'uso di memoria dinamica è manuale.
  • Gestione della memoria durante la manipolazione di stringhe è manuale.

qualità Converse che contano verso l'astrazione di un'implementazione dall'hardware:

  • Il programmatore non ha accesso run-time per l'indirizzo di dati (riferimenti invece di puntatori).
  • operazioni matematiche sono definite in termini specifici non legati a hardware specifico. (Ad esempio, ActionScript 3 supporta il tipo che auto-convertiti da intero a virgola mobile anziché esperienza troppopieno Number.)
  • Gestione della memoria dinamica viene gestita dall'ambiente, possibilmente attraverso il conteggio di riferimento, raccolta dei rifiuti, o un altro schema di gestione della memoria automatica.
  • Gestione della memoria durante la manipolazione delle stringhe è sempre nascosto dal programmatore e gestito da l'ambiente.

Altre qualità potrebbero rendere un linguaggio molto astratto rispetto all'hardware su cui viene eseguito:

  • dichiarativa, basata sulla ricerca della sintassi. (Ad esempio Prolog)

Con fattori come questi in mente, vorrei rivedere lo spettro che hai scritto come segue:

Livello più basso:

  • linguaggio Assembly della piattaforma in questione.

linguaggi di basso livello con il controllo del flusso di livello superiore a quello di montaggio:

  • C, C ++
  • Pascal

I linguaggi di alto livello:

  • FORTRAN
  • COBOL
  • Python
  • Perl

lingue di livello più alto:

  • PROLOG
  • Python
  • Schema

Python appare due volte da intenti -. Si estende una porzione dello spettro a seconda di come il codice è scritto

Per quanto di basso livello, vorrei aggiungere:

  • .NET IL
  • Java JVM
  • Altro P-Code utilizzato in ambienti come VB6

Il "livello" di una lingua è un bersaglio mobile. Nel 1973, PL / I è stato considerato un linguaggio di alto livello. Oggi, C è considerata (almeno da parte di professionisti della lingua) come un linguaggio di basso livello [vedi nota]. Alcuni dei motivi:

  • espone a livello macchina rappresentazioni di numeri
  • "Integer" può overflow aritmetico
  • Nessun vero e proprio supporto per le stringhe, o per lo meno, le stringhe non sono di prima classe
  • gestione manuale della memoria
  • Indirizzo aritmetica
  • non sicura

Un linguaggio ad alto livello potrebbe includere

  • Supporto per tipi interi indipendente dal computer di destinazione
  • aritmetica intera predefinito mai trabocca se la macchina non esaurisce la memoria
  • Corde come valori di prima classe con, per esempio, la concatenazione di costruzione
  • la gestione della memoria automatica senza indirizzo aritmetica
  • sicura

Alcuni candidati come "linguaggi di alto livello" da questa definizione potrebbe includere Icona, Scheme, Smalltalk, e alcuni dei vostri linguaggi di scripting preferito.

Indietro nel giorno quando ero un giovane studioso e dinosauri popolavano la terra, le persone di cui icona come " molto linguaggio di alto livello". Non più tardi di 15 anni fa si potrebbe anche partecipare ad un simposio imparato sul livello stesso Lingue. Ma questo termine non è usato molto di più.

  

Perché tutti mastio di nota alta e di basso livello le lingue?

Anche se la differenza tra "alto" e "basso" continua a cambiare, distinzioni come quelli elencati sopra sono ancora importanti. E ci sono così molti distinzione che le parole "alte" e "basse" può essere una scorciatoia utile. Ma non è così utile a un cinico, un linguaggio di alto livello è uno che guarda almeno altrettanto potente come qualunque sia la mia lingua preferita è, e un linguaggio di basso livello è tutto il resto. In altre parole, "livello" può facilmente degenerare in mero insulti.

Nota: E 'difficile trovare le citazioni Per la terminologia usata nelle riunioni professionali, in particolare quando i professionisti non usano i termini "di basso livello" e di "alto livello", perché non sono così tecnico. Ma danben chiesto circa le citazioni, e ho trovato una coppia:


P.S. Non contare troppo pesantemente su Wikipedia per una buona informazione sui linguaggi di programmazione, in particolare se il riferimento Wikipedia cita nessuna fonte o le fonti

puramente indovinare qui, ma questo può essere un caso del linguaggio-shift, per cui la distinzione tra linguaggi a basso e ad alto livello si sta lentamente evolvendo nella mente delle persone nella differenza tra managed- e non gestiti-lingue, digitato-e non tipizzati-lingue ecc.ecc. (Almeno nel modo in cui la gente sta usando la terminologia).

In larga misura, "a basso livello" e di "alto livello" non sono categorie binarie, ma un continuum. Ci sono alcune lingue che sono chiaramente a basso livello (assemblaggio, codice macchina), ma oltre a questo non c'è davvero solo "di livello superiore" e "di livello inferiore".

Come la vedo io, "basso livello" lingue richiedono il codice che sembra più l'architettura del computer e lingue "di livello superiore" accetta il codice che sembra più la struttura del problema. Ma con questo, le lingue possono essere di alto livello per un problema e di basso livello per un altro.

basso livello Binario Assembler

ET IL Java JVM Altro P-Code utilizzato in ambienti come VB6

Non è decisamente di basso livello

C DI BASE FORTRAN COBOL Pitone Perl Pascal

ad alto livello C ++ Rubino Pitone PHP PROLOG Schema

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top