C - только скалярные операции? - PullRequest
3 голосов
/ 28 февраля 2010

Чтение в Википедии:

«Термины« высокий уровень »и« низкий уровень »по своей сути являются относительными. Несколько десятилетий назад язык C и подобные языки чаще всего считали« высокоуровневыми », поскольку он поддерживал такие понятия, как оценка выражений, параметризованная рекурсивная функции, типы данных и структуры, в то время как язык ассемблера считался «низкоуровневым». Многие программисты сегодня могут ссылаться на C как низкоуровневый, так как ему не хватает большой среды выполнения (без сборки мусора и т. д.), в основном поддерживает только скалярные операции и обеспечивает прямую адресацию памяти. Поэтому он легко сочетается с языком ассемблера и машинным уровнем процессоров и микроконтроллеров. "

http://en.wikipedia.org/wiki/High_level_language

Что это значит точно? Какие операции предоставляют другие языки программирования, а C - нет?

1 Ответ

14 голосов
/ 28 февраля 2010

Учитывая контекст и тему статьи, на что ссылается статья, так это на термин «скаляр», как он определен в самом языке Си. На языке C арифметические типы и указатель типы вместе называются скалярными типами (см. 6.2.5 / 21). В повседневном языке мы часто видим эти типы, называемые базовыми типами или встроенными типами (в то время как правильный формальный термин, опять же, скаляр ). Дело в том, что типы scalar предназначены для типов, которые непосредственно (или почти сразу) поддерживаются аппаратными средствами. Большинство неконцептуальных операций в Си работают только со скалярными типами и скалярными типами.

Если вы посмотрите на историю языка C, вы увидите, что ранние версии C были настолько ограничительны скаляр , что вы даже не могли назначить один объект структуры другому объекту структуры ( или передать его функции / вернуть из функции по значению). Возможность делать структурное копирование на основном языке была добавлена ​​в C позже. И по сей день она остается единственной нескалярной операцией на всем базовом языке.

C ++, с другой стороны, как и другие языки более высокого уровня, поддерживает операции с определяемыми пользователем типами , которые по определению не являются скалярными , или с другими типами которые не имеют немедленной поддержки со стороны оборудования.

P.S. Нет, точка зрения, которую пытается изложить статья, не имеет ничего общего с операциями vector , в отличие от операций scalar . Поддержка векторных операций, конечно, полностью ортогональна уровню языка. Вы можете выполнять векторные операции на языках низкого уровня, а также на языках высокого уровня. Термин скаляр используется в том смысле, который я описал выше.

...