Por que C ainda está na categoria de linguagem de alto nível? [fechadas]

12

Muitos dos livros didáticos sobre a linguagem de programação C dizem que C é uma linguagem de programação de alto nível, mas muitos dos tutores on-line dizem que C também é uma linguagem de programação de nível médio. Por que é assim?

CodeIt
fonte
3
leitura recomendada: discuta este $ {blog}
gnat
6
Eu simpatizo com a sua confusão. Esse é o tipo de classificação que me agravaria de ver em um exame, porque mesmo uma resposta "errada" está correta. Ore para que você nunca tenha isso como uma questão de exame verdadeiro / falso ou de múltipla escolha. Em caso afirmativo, responda com base no que o livro disse, não no que você acha correto (eu me sinto mal recomendando ir contra o seu intestino).
Brandon
1
Historicamente, 'linguagens de mais alto nível' eram aquelas que, diferentemente da linguagem assembly, permitiam que o programador abstraísse da máquina específica e escrevesse código de uma maneira mais problemática. Fortran e Cobol eram de "alto nível" por causa disso nos primeiros dias. C é apenas um véu fino acima do material específico da máquina, mas seu objetivo é ser portátil, não específico da máquina. Assim, nos anos 60, os padrões C eram de alto nível. Comparado com C ++ 14, Haskell, OCaml ou Rust, C é um nível não tão alto, é claro.
9000
A maioria dessas "linguagens modernas de alto nível" "são realmente apenas linguagens de script. A diferença é se for compilado ou interpretado.
precisa saber é o seguinte
Asm é de alto nível. A abstração fornecida pelo asm sobre o hardware é enorme.
Curiousguy

Respostas:

34

Historicamente, tudo o que abstrai sobre o código de montagem era chamado de alto nível. C certamente faz isso. Essa definição também é relativamente clara, em contraste com o que se segue.

Com o tempo, criamos mais e mais linguagens de programação e inventamos mais e mais abstrações e ferramentas. Comparada com, digamos, Python, a linguagem C é positivamente primitiva em riqueza semântica e nível de abstração sobre o hardware. Com isso em mente, muitas pessoas acham enganoso chamar C de alto nível, quando há uma variedade de idiomas que estão muito acima do hardware.

Portanto, agora "alto nível" geralmente significa "abstrai muito sobre hardware" e "baixo nível" significa "abstrai pouco". Esta é a definição que seus tutores usam. Porém, nem todos concordam, e textos antigos não adotam magicamente a nova terminologia; portanto, você ainda vê o uso antigo de "alto nível" (sob o qual C é alto) flutuando. Lembre-se de que muitos bons livros em C são basicamente edições mais recentes de livros lançados há vinte anos.


fonte
Para que algo seja considerado uma linguagem de programação de baixo nível adequada, é necessário permitir que um programador opere facilmente no mesmo nível de abstração que o hardware subjacente. Embora o Padrão C permita que as implementações se comportem dessa maneira, não há distinção formalmente reconhecida entre implementações que operam nesse nível de abstração versus aquelas que não o fazem.
Supercat
12

É uma linguagem de nível superior ao código de máquina (assembly), que é o ponto de vista de onde vêm os livros e tutoriais de programação C.

Nesse sentido, é uma linguagem de programação de alto nível.

No entanto, ele ainda está muito próximo do hardware - muito mais que outras linguagens mais modernas (Java, C # e outras) - quando visto desse ponto de vista, é uma linguagem de programação de nível médio.

Oded
fonte
1
Então, por que não podemos dizer claramente que C é uma linguagem de programação de nível médio?
CodeIt
5
@manutd - essa é uma pergunta para os autores de livros;) - mas é isso. Do ponto de vista deles, C é uma linguagem de alto nível. É com isso que eles lidam. O conceito de "linguagem de alto nível" é confuso - não há uma definição única acordada por todos.
Oded
Infelizmente, concordar com opiniões em uma comunidade não é como a definição funciona. São criadores e seus conceitos são de nível superior à linguagem assembly do processador - esta é a linha de definição. É isso que define como alto nível. Qualquer livro que você pegar sobre ciência da computação sempre o definirá dessa maneira. Os tutores podem não e as opiniões das pessoas podem não, mas a ciência real de como os computadores funcionam e como ela foi definida na ciência dos computadores e processadores é muito clara.
Ryan Rentfro
O C # permite que os programadores acessem um intervalo de memória como uma sequência de valores de 64 bits, 32 bits, 16 bits ou 8 bits, conforme conveniente; se a memória contiver pixels de 16 bits, por exemplo, o código poderá processar pixels individualmente ou em grupos de 2 ou 4, dependendo do que for melhor para o algoritmo. C, conforme definido pelo Padrão, não define um meio prático pelo qual os programadores podem solicitar semânticas semelhantes. Muitos dialetos em C são de nível inferior ao C #, é claro, mas o idioma definido pelo Padrão não é.
22717