2010-05-25 2 views
1

В обсуждениях на языке программирования мы слышим такие термины, как низкоуровневые, средние и высокоуровневые. Как они определяются? Будет ли C рассматриваться как язык среднего уровня?Является ли язык среднего уровня?

+13

Что такое язык среднего уровня? – pmr

+4

Возможно, это язык * чуть ниже среднего уровня *) –

+6

Это тот же тип вопроса, что и «Является ли Java чистым OO?»: До тех пор, пока у вас нет определенного определения того, что означает «средний язык» , вы не получите однозначного ответа. И как только у вас есть это определение, ответ становится тривиальным. –

ответ

23

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

Это говорит о том, что вы услышите много аргументов о том, являются ли языки C или C++ низкоуровневыми или высокоуровневыми, поскольку некоторые люди предпочитают думать о C/C++ как низкоуровневые, учитывая их относительное положение на других языках (25 лет назад это было бы неслыханно). Это в значительной степени бессмысленно, если вы не согласны с определением низкого уровня или высокого уровня. Таким образом, вы можете легко найти определение «средний уровень», а затем использовать это, чтобы определить, считается ли C средним уровнем или нет.

+0

Согласитесь, что это все субъективны. Однако 25 лет назад пользователи Algol и PL/I были рады представить себе C как язык более низкого уровня, по крайней мере, более низкий уровень, чем собственный. – kmarsh

+0

@Pete: вы можете просто отредактировать вопрос ;-) –

1

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

, но я согласен с danben .. нет никакого детерминированного фактора за этим ...

5

Я нашел, что это является причиной такого смещения между классификацией высокого уровня и низкого уровня.

С часто называют средний уровень компьютерного языком, так как это комбинации элементов языков высокого уровня с функционализмом ассемблера.

язык высокого уровня:

Язык программирования высокого уровня один, что более удобно, в какой-то степени независимой от платформы, и абстрагироваться от низкоуровневого компьютера процессора операций, таких как память доступ.

Низкий уровень Язык:

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

любезность: http://www.cfanatic.com/showthread.php?s=cfa39a622e72217cce1fb9118a90fd79&t=130

+0

Являются ли эти определения вашими или вы цитируете источник? – danben

+0

@ danben am i right в цитате из такого ресурса – abson

+0

Да, это помещает ваш ответ в контекст в качестве источника информации. Благодаря! – danben

1

Моей старая C книга из прежде, чем C++ был вокруг разговоров о С в качестве языка среднего уровня. Но это было до Java, .NET, Ruby, Python и т. Д. Я бы сказал, что (неопределенные) границы несколько изменились, поскольку языки высокого уровня, такие как Ruby/Python, стали намного более продвинутыми.

C всего лишь на один шаг выше сборки, но над C у вас есть C++, затем Java/.net, затем Ruby/Python.Поэтому я бы сказал, что C теперь является языком ниже или ниже среднего, так как вы можете легко сопоставить его с asm/машинным кодом. Я бы сказал, что C++ - это язык среднего уровня, Java/C# mid-high, высокий уровень Ruby/Python.

2

Хотя терминология довольно расплывчата, я считаю, что язык C является языком среднего и низкого уровня. У вас очень низкоуровневые функции (доступ к ручной памяти, арифметика указателей) и очень мало абстракций - почти буквально конвертировано в сборку. Как указано в Википедии C++ - это типичный язык среднего уровня, поскольку у вас есть низкоуровневый доступ к C в сочетании с абстракциями, такими как ориентация объектов, шаблоны и даже некоторая функциональная программирование.

0

Я думаю, что C еще должен быть классифицирован как язык высокого уровня. По сравнению с сборкой это действительно высокий уровень.

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

Попробуйте написать сборку на 8-битном микроконтроллере, а затем перейдите к использованию C. Вы скоро поймете, насколько они далеко друг от друга.

Редактировать: С каких это пор была такая вещь, как язык среднего уровня? Средний уровень по сравнению с чем?

1

C часто называют переносной сборкой людьми, которые могут программировать в сборке. Теперь спросите ту же группу людей, если C - слишком много или слишком мало абстракции от сборки, и вы увидите, что гнилые плоды начинают летать (ну, возможно, хорошие фрукты тоже, в зависимости от того, что доступно).

«Уровень», на который вы ссылаетесь, - это просто сумма абстракции между вами и скомпилированной кучей единиц и нулей. Некоторые могут сказать, что математика хорошо абстрагируется на C, а строки - просто убогие.

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

0

С точки зрения использования, в отличие от C++, C обеспечивает меньший языковой синтаксис, семантику и возможности. C - язык более низкого уровня, чем C++.

с функциональной точки зрения, если язык может предоставлять мощные функции с помощью замечательной инфраструктуры, такой как API Windows SDK C, я думаю, что это действительно можно назвать языком «высокого уровня».

Языки сценариев обеспечивают другое использование языка программирования: интерпретируются, а не компилируются. Хотя его функция несколько ограничена.

поэтому, вам это нужно, вы используете его. чем выше уровень, тем выше уровень, который вам понравился!

0

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

0

Кажется, языки делятся на generation.

Эти поколения широко считается (с определениями, имеющих большую дисперсию, чем выше вы получаете):

  1. Машинные языки.
  2. языки Ассамблеи (который является только для чтения человеком версия машины Языки)
  3. Структурированные языки (FORTRAN, COBOL, C, C++, C#, Java, Python и т.д. ...)
  4. Языки, используемые для создания приложений в конкретной области (PL/SQL, R, FoxPro и т. д.)
  5. Языки, которые работают с определенными ограничениями, а не с алгоритмами. Они обычно используются в ИИ. (Пролог и т. Д.)

Сказав это, четвертое поколение, как говорят, включает в себя объектно-ориентированные языки.

0

Ответ на другой вопрос: является ли язык C++ высокоуровневым?

Это не: Язык сам по себе дает вам классы, перегрузку оператора и шаблоны. Это просто синтаксический сахар вокруг структур, функций и макросов. Например, Lightblue BREW - это мост с нулевой нагрузкой между BREW (объектно-ориентированным C) и C++, поскольку BREW двоично-совместимый с C++!

Cfront был оригинальным «компилятором» для C++: он предварительно обработал его на C. original compilers for Objective-C был также просто препроцессорами.

Это: Вы можете написать код, который использует «высокого уровня» функции (управление памятью, сбор мусора, lambda expressions, ...), не заботясь о «низкий уровень» детали (забывание бесплатно). Существует множество библиотек C++ (например, Boost).

Гораздо полезнее классифицировать язык с помощью функций, которые он имеет, вместо того, чтобы давать ему номер высокого уровня. Возьмем, например, распаковку заголовка .bmp («DIB»):

  • C: Легко. Просто используйте struct. Возможно, вам придется беспокоиться о контенте, упаковке и переносимости нечетных архитектур.
  • C++: Используйте struct. Если вы умны, структуры также могут обрабатывать сущность и упаковку в основном переносимым образом.
  • Java: вам нужно вычислить смещения в заголовке. Если это массив байтов, вы должны делать маскировку и битрейт. (Если это nio-буфер, вы просто установите endianness.)
  • REALbasic: Это MemoryBlock. Вы должны сами вычислять смещения в заголовке. Возможно, вам придется беспокоиться о контенте, в зависимости от того, используете ли вы плагин расширения MemoryBlock.
  • Python: Только import struct. Однако ни одно из полей не имеет имен, поэтому вам нужно отслеживать, в каком порядке они находятся, поэтому он незначительно парит, чем вычисляет смещения.

Там, простая проблема, когда C++ кажется языком самого высокого уровня, а C - вторым.

Я также отмечу, что наличие функций «низкого уровня» не делает язык низкоуровневым. В C# вы можете написать «неуправляемый» код и использовать арифметику указателя. В Python вы можете import ctypes вызывать функции C или C++ и для вызова Objective-C, теряя всякую безопасность типов (я делаю это, когда в противном случае я написал быструю тестовую программу, потому что это намного проще, чем повторная компиляция и запуск) ,

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

0

Я думаю, что это зависит от пользователя, как он его использует. Язык высокого уровня - это то, что обеспечивает абстракцию, и язык низкого уровня - это тот, который использует ресурсы, предоставляемые ОС (системный вызов). В этом случае, если программист использует системный вызов для выполнения некоторой задачи, тогда c является языком программирования низкого уровня, и если тот же самый программист использует команды bash или другие функции, которые дают представление о программировании, то c является языком высокого уровня. язык.