Языки программирования низкого уровня: ориентированы на конкретный тип процессора и учитывают его особенности (разные типы процессоров имеют разные наборы команд); "низкий уровень" не означает плохой, операторы языка близки к машинному коду и ориентированы на конкретные команды процессора.
Язык самого низкого уровня – язык ассемблера, который просто представляет каждую команду машинного кода, но не в виде чисел, а с помощью символьных условных обозначений (мнемоник). Однозначное преобразование одной машинной инструкции в одну команду ассемблера называется транслитерацией. Так как наборы инструкций для каждой модели процессора отличаются, конкретной компьютерной архитектуре соответствует свой язык ассемблера, и написанная на нем программа может быть использована только в этой среде.
С помощью языков низкого уровня создаются очень эффективные и компактные программы, так как разработчик получает доступ ко всем возможностям процессора.
Недостатки:
- требуется хорошее понимание устройства компьютера;
- затрудняется отладка больших приложений;
- результирующая программа не может быть перенесена на компьютер с другим типом процессора.
Подобные языки применяют для написания небольших системных приложений, драйверов устройств, модулей стыковки с нестандартным оборудованием, когда важнейшими требованиями становятся компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам. В машинной графике на ассемблере пишутся библиотеки.
Языки программирования высокого уровня ближе и понятнее человеку, чем компьютеру. Особенности конкретных компьютерных архитектур в них не учитываются, поэтому создаваемые программы на уровне исходных текстов легко переносимы на другие платформы, для которых создан транслятор этого языка. Разрабатывать программы с помощью понятных и мощных команд значительно проще, а ошибок при создании программ допускается гораздо меньше.
Кроме деления на уровни, языки программирования делятся на классы:
- машинные (computer language) – языки программирования, воспринимаемые аппаратной частью компьютера (машинные коды);
- машинно-ориентированные (computer-oriented language) – предназначены для использования на тех ЭВМ, для которых эти языки разработаны (ассемблеры);
- алгоритмические (algorithmic language) – языки, не зависящие от архитектуры компьютера и предназначенные для отражения структуры алгоритма (Паскаль, Фортран, Бейсик и др.);
- процедурно-ориентированные – языки программирования с возможностью описания программы как совокупности процедур (подпрограмм);
- проблемно-ориентированные – для решения задач из определенной профессиональной деятельности (Лисп);
- объектно-ориентированные языки – поддерживают понятия объектов, их свойств, методов обработки (Object Pascal, Delphi). Например, в Турбо Паскале объект – это особый тип данных, экземпляры этого объекта – переменные этого типа. Методами объекта являются связанные с ними функции и процедуры.