Чому C досі перебуває в категорії мови високого рівня? [зачинено]


12

Багато підручників з мови програмування на C говорять про те, що C - мова програмування високого рівня, але багато хто з репетиторів в Інтернеті кажуть, що C також є мовою програмування середнього рівня. Чому це так?


3
рекомендуємо прочитати: Обговори це $ {blog}
gnat

6
Я співчуваю вашій розгубленості. Це така класифікація, яка б загрожувала мені бачити на іспиті, оскільки навіть "неправильна" відповідь є правильною. Моліться, щоб у вас ніколи це не було справжнім / неправдивим чи екзаменаційним запитанням з множинним вибором. Якщо ви робите, відповідайте на підставі сказаного в підручнику, а не на те, що ви вважаєте правильним (я почуваюся злом, рекомендуючи йти проти вашої кишки).
Брендон

1
Історично "високими [er] -рівневими мовами" були такі, які, на відміну від мови складання, дозволяли програмісту абстрагуватися від конкретної машини та писати код більш проблемним способом. Фортран і Кобол були на високому рівні через це в перші дні. C - це лише тонка завіса над специфічними для машини матеріалами, але сама її мета - бути портативною, неспецифічною для машини. Так до 1960-х стандартів С був високим рівнем. Порівняно з C ++ 14 або Haskell, OCaml або Rust, звичайно, C не дуже високий рівень.
9000

Більшість цих "сучасних" мов високого рівня "" насправді є просто написаними мовами. Різниця полягає в тому, якщо вона складена або інтерпретована.
MarcusJ

Асм - високий рівень. Абстракція, надана asm над обладнанням, величезна.
допитливий

Відповіді:


34

Історично все, що резюмує над асемблерним кодом, називалося високим рівнем. C звичайно це робить. Це визначення також є досить чітким, на відміну від наступного.

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

Тож зараз "високий рівень" зазвичай означає "багато рефератів над обладнанням", а "низький рівень" означає "реферати мало". Це визначення, яке використовують ваші репетитори. Не всі згодні, однак, і старі тексти не магічно приймають нову термінологію, тому ви все ще бачите, як старе використання "високого рівня" (під яким C є високим рівнем) плаває навколо. Майте на увазі, що багато хороших книг С - це в основному новіші видання книг, виданих двадцять років тому.


Щоб щось вважалося правильною мовою програмування низького рівня, воно повинно дозволяти програмісту легко працювати на тому ж рівні абстракції, що і базове обладнання. Хоча стандарт C дозволив би реалізаціям вести себе таким чином, формально не визнається різниці між реалізаціями, які працюють на цьому рівні абстракції, порівняно з тими, які цього не роблять.
supercat

12

Це мова вищого рівня, ніж машинний код (складання), звідки виходять книги та навчальні програми з програмування С.

У цьому відношенні це мова програмування високого рівня.

Однак він все ще дуже близький до апаратного забезпечення - набагато більше, ніж інші, більш сучасні мови (Java, C # і подібні) - якщо дивитися з цієї точки зору, це мова програмування середнього рівня.


1
Тоді чому ми не можемо чітко сказати, що C - мова програмування середнього рівня. У підручниках ми цього не знаходимо.
CodeIt

5
@manutd - це питання до авторів книг;) - але в цьому справа. З їх точки зору, C - мова високого рівня. Ось чим вони займаються. Поняття "мова високого рівня" нечітка - немає єдиного визначення, погодженого всіма.
Oded

На жаль, погодження думок у спільноті не є тим, як визначальне функціонування працює. Це творці, і його концепції вищого рівня, ніж мова складання процесора - це визначальна лінія. Саме це визначає його як високий рівень. Будь-яка книга, яку ви візьмете з інформатики, завжди визначатиме її таким чином. Репетитори можуть, а думки народів не можуть, але реальна наука про те, як працюють комп'ютери та як це було визначено в науці про комп'ютери та процесори, дуже зрозуміла.
Райан Рентфро

C # дозволяє програмістам отримати доступ до діапазону пам'яті як послідовність 64-бітних, 32-бітних, 16-бітних або 8-бітних значень, як зручно; якщо пам'ять містить 16-бітні пікселі, наприклад, код може обробляти пікселі окремо або групами по 2 або 4, залежно від того, що найкраще в алгоритмі. C, визначений Стандартом, не визначає практичних засобів, за допомогою яких програмісти можуть запитувати подібну семантику. Звичайно, багато діалектів C нижчого рівня, ніж C #, але мова, визначена Стандартом, не є.
supercat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.