Почему C до сих пор в категории языка высокого уровня? [закрыто]

12

Многие из учебников по языку программирования C говорят, что C - это язык программирования высокого уровня, но многие онлайн-преподаватели говорят, что C также является языком программирования среднего уровня. Почему это так?

CodeIt
источник
3
рекомендуемое чтение: Обсудите этот $ {blog}
gnat
6
Я сочувствую твоему замешательству. Такая классификация усугубит меня на экзамене, потому что даже «неправильный» ответ верен. Молитесь, чтобы у вас никогда не было этого вопроса как истинного / ложного или с несколькими вариантами ответов. Если вы это сделаете, ответьте, основываясь на том, что сказано в учебнике, а не на том, что вы считаете правильным (я чувствую зло, рекомендуя идти против вашей интуиции).
Брэндон
1
Исторически «высокоуровневыми языками» были те, которые, в отличие от ассемблера, позволяли программисту абстрагироваться от конкретной машины и писать код в более проблемной области. Фортран и Кобол были «высокого уровня» из-за этого в первые дни. С - лишь тонкая завеса над машиной, специфичной для машины, но сама ее цель - быть портативной, машинно-специфичной. Так, к 1960-м годам стандарты С были на высоком уровне. По сравнению с C ++ 14, Haskell, OCaml или Rust, C, конечно, не такой высокий уровень.
9000
Большинство из этих "современных" языков "высокого уровня" на самом деле являются языками сценариев. Разница в том, если он скомпилирован или интерпретирован.
MarcusJ
Асм это высокий уровень. Абстракция, обеспеченная asm по аппаратному обеспечению, огромна.
любопытный парень

Ответы:

34

Исторически все, что абстрагируется от ассемблера, называлось высокоуровневым. C, конечно, делает это. Это определение также относительно четкое, в отличие от следующего.

Со временем мы создали все больше языков программирования и изобрели все больше абстракций и инструментов. По сравнению, скажем, с Python, язык C положительно примитивен в семантическом богатстве и уровне абстракции по сравнению с аппаратным обеспечением. Имея это в виду, многие люди считают вводящим в заблуждение называть C высокоуровневым, когда существует множество языков, которые намного выше аппаратных.

Так что теперь «высокий уровень» обычно означает «много абстрагируется от аппаратного обеспечения», а «низкий уровень» означает «мало абстрагируется». Это определение, которое используют ваши преподаватели. Однако не все согласны с этим, и старые тексты волшебным образом не принимают новую терминологию, поэтому вы все еще видите, как старое использование «высокого уровня» (при котором C является высоким уровнем) распространяется вокруг. Имейте в виду, что многие хорошие книги по Си - в основном более новые издания книг, выпущенных двадцать лет назад.


источник
Чтобы что-то считалось правильным языком программирования низкого уровня, оно должно позволять программисту легко работать на том же уровне абстракции, что и базовое оборудование. В то время как стандарт C позволил бы реализациям вести себя таким образом, формально признанного различия между реализациями, работающими на этом уровне абстракции, и теми, которые этого не делают, не существует.
суперкат
12

Это язык более высокого уровня, чем машинный код (сборка), с которой исходят книги и руководства по программированию на C.

В этом отношении это язык программирования высокого уровня.

Тем не менее, он все еще очень близок к аппаратному обеспечению - гораздо больше, чем другие, более современные языки (Java, C # и т. Д.) - если смотреть с этой точки зрения, это язык программирования среднего уровня.

Одед
источник
1
Тогда почему мы не можем четко сказать, что C - это язык программирования среднего уровня. В учебниках этого нет.
CodeIt
5
@ Manutd - это вопрос к авторам книг;) - но это вещь. С их точки зрения, C является языком высокого уровня. Вот с чем они имеют дело. Понятие «язык высокого уровня» нечетко - нет единого определения, согласованного всеми.
Одед
К сожалению, согласие мнений в сообществе не совсем так. Это создатели и его концепции более высокого уровня, чем язык ассемблера процессора - это определяющая черта. Это то, что определяет его как высокий уровень. Любая книга по информатике, которую вы выбираете, всегда будет определять ее таким образом. Преподаватели могут этого не делать, а мнения людей - нет, но фактическая наука о том, как работают компьютеры и как это было определено в науке о компьютерах и процессорах, очень ясна.
Райан Рентфро
C # позволяет программистам получать доступ к диапазону памяти в виде последовательности 64-битных, 32-битных, 16-битных или 8-битных значений, насколько это удобно; например, если память содержит 16-битные пиксели, код может обрабатывать пиксели индивидуально или группами по 2 или 4, в зависимости от того, что лучше для алгоритма. C в соответствии со стандартом не определяет практические средства, с помощью которых программисты могут запрашивать подобную семантику. Конечно, многие диалекты C ниже, чем C #, но язык, определенный в Стандарте, - нет.
суперкат