Perché C è ancora nella categoria delle lingue di alto livello? [chiuso]


12

Molti libri di testo sul linguaggio di programmazione C dicono che C è un linguaggio di programmazione di alto livello, ma molti tutor online affermano che C è anche un linguaggio di programmazione di livello medio. Perché è così?


3
lettura consigliata: discuti di questo $ {blog}
gnat il

6
Mi immedesimo nella tua confusione. Questo è il tipo di classificazione che mi aggraverebbe nel vedere un esame perché anche una risposta "sbagliata" è corretta. Prega di non avere mai questo come una domanda d'esame vero / falso o a scelta multipla. Se lo fai, rispondi in base a ciò che dice il libro di testo, non a ciò che ritieni corretto (mi sento male raccomandare di andare contro il tuo intestino).
Brandon,

1
Storicamente i "linguaggi di alto livello" erano quelli che, a differenza del linguaggio assembly, permettevano al programmatore di estrarre dalla macchina specifica e scrivere codice in un modo più problematico. Fortran e Cobol erano "di alto livello" a causa di ciò nei primi giorni. C è solo un velo sottile sopra la roba specifica della macchina, ma il suo scopo è quello di essere portatile, non specifico per la macchina. Quindi per gli anni '60 gli standard C erano di alto livello. Rispetto a C ++ 14 o Haskell o OCaml o Rust, C non è di livello così elevato, ovviamente.
9000

La maggior parte di questi "linguaggi" moderni di alto livello "sono in realtà solo linguaggi di scripting. La differenza è se è compilato o interpretato.
MarcusJ,

Asm è di alto livello. L'astrazione fornita da ASM sull'hardware è enorme.
curioso

Risposte:


34

Storicamente, tutto ciò che si sottrae al codice assembly è stato chiamato di alto livello. C certamente lo fa. Questa definizione è anche relativamente chiara, in contrasto con quanto segue.

Nel tempo, abbiamo creato sempre più linguaggi di programmazione e inventato sempre più astrazioni e strumenti. Rispetto, per esempio, a Python, il linguaggio C è positivamente primitivo nella ricchezza semantica e nel livello di astrazione sull'hardware. Con questo in mente, molte persone trovano fuorviante chiamare C di alto livello, quando ci sono molti linguaggi che sono molto più in alto dell'hardware.

Quindi ora "alto livello" di solito significa "abstract molto sull'hardware" e "basso livello" significa "abstract poco". Questa è la definizione utilizzata dai tutor. Tuttavia, non tutti sono d'accordo, e i vecchi testi non adottano magicamente la nuova terminologia, quindi si vede ancora il vecchio uso di "alto livello" (sotto il quale C è di alto livello) che fluttua intorno. Tieni presente che molti buoni libri in C sono sostanzialmente edizioni più recenti di libri pubblicati venti anni fa.


Affinché qualcosa sia considerato un linguaggio di programmazione di basso livello, è necessario consentire a un programmatore di operare facilmente allo stesso livello di astrazione dell'hardware sottostante. Mentre lo standard C consentirebbe alle implementazioni di comportarsi in questo modo, non esiste una distinzione formalmente riconosciuta tra implementazioni che operano a quel livello di astrazione rispetto a quelle che non lo fanno.
supercat

12

È un linguaggio di livello superiore rispetto al codice macchina (assembly), che è il punto di vista da cui provengono i libri di programmazione C e le esercitazioni.

A tale proposito è un linguaggio di programmazione di alto livello.

Tuttavia, è ancora molto vicino all'hardware - molto più di altri linguaggi più moderni (Java, C # e simili) - se visto da questo punto di vista, è un linguaggio di programmazione di livello medio.


1
Allora perché non possiamo dire chiaramente che C è un linguaggio di programmazione di livello medio. Nei libri di testo non lo troviamo.
CodeIt,

5
@manutd - questa è una domanda per gli autori dei libri;) - ma questa è la cosa. Dal loro punto di vista, C è un linguaggio di alto livello. Ecco di cosa si occupano. Il concetto di "linguaggio di alto livello" è confuso: non esiste una definizione singola concordata da tutti.
Oded,

Sfortunatamente concordare opinioni in una comunità non è come funziona la definizione. Sono i creatori e i concetti sono di livello superiore rispetto al linguaggio assembly del processore - questa è la linea di definizione. Questo è ciò che lo definisce di alto livello. Qualsiasi libro che prendi in informatica lo definirà sempre in questo modo. Gli insegnanti non possono e le opinioni delle persone no, ma la scienza reale di come funzionano i computer e come è stata definita nella scienza dei computer e dei processori è molto chiara.
Ryan Rentfro,

C # consente ai programmatori di accedere a un intervallo di memoria come una sequenza di valori a 64-bit, 32-bit, 16-bit o 8-bit come conveniente; se la memoria contiene pixel a 16 bit, ad esempio, il codice può elaborare i pixel singolarmente o in gruppi di 2 o 4, a seconda di ciò che è meglio per l'algoritmo. C come definito dalla norma non definisce un modo pratico con cui i programmatori possono richiedere una semantica simile. Molti dialetti C sono di livello inferiore a C #, ovviamente, ma la lingua definita dallo Standard non lo è.
Supercat,
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.