Классификация языков программирования

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

Раньше было очень популярно разделение языков на две категории: компилируемые в машинные (native) коды и интерпретируемые. Однако подобная классификация, к сожалению, в наши дни уже не очень актуальна. Как, например, быть с Java? С одной стороны, написанные на этом языке программы компилируются, но не в native-код, а в так называемый байт-код, с другой стороны, для выполнения требуется наличие виртуальной Java-машины, т.е. интерпретатора. Добавим к этому возможность ряда средств разработки компилировать Java-программы в машинный код, существование компиляторов времени исполнения и вспомним про так называемые Java-процессоры, для которых этот язык и должен быть машинным. Также обратим внимание на перекомпиляцию такого типично интерпретируемого языка, как Perl. С языком Visual Basic, по сути, точно такая же ситуация, как и с Java: вы компилируете программу в байт-код, в дальнейшем интерпретируемый, или, начиная с пятой версии, в родной код процессора.

Также что языки делят на объектно-ориентированные и обычные (императивные, функциональные, логические и т.п.). Такое разделение также не совсем актуально. Если Visual Basic — объектно-ориентированный язык, то где же в нем наследование и прочие черты, характерные для объектно-ориентированного программирования (ООП)? Возьмем JavaScript — чтобы как-то с ним определиться даже ввели термин: объектно-базируемый язык. А язык программирования Ada в классической работе Грэди Буча (Grady Booch) «Объектно-ориентированное программирование» назван просто объектным. Кстати, этот известный специалист использует множество переходных градаций при обсуждении ООП. А часто ли пользуются объектными расширениями того же Perl? Написать сотню-другую строк скрипта без ООП, пожалуй, легче. Так это объектно-ориентированный язык (соответствующие средства есть) или нет (так как их мало кто использует)?

Разделение языков на визуальные и «обычные» просто не имеет смысла, так как термин «визуальный» относится в основном к средствам разработки (сегодня модно понятие RAD — Rapid Application Development — быстрая разработка приложений), хотя и не для всех языков и технологий это верно. (Например, как невизуально работать с JavaBeans, да еще и на Macintosh?). И вообще, появление новых версий программного обеспечения всегда сопровождается введением новых возможностей, иногда серьезно затрагивающих «основу» языка (типичный пример — Visual Basic).

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

Рассмотрим подробно две классификации языков, которые можно считать действительно обоснованными: деления в языков в соответствии с их уровнем, и в соответствии с историческим подходом.