Языки программирования и их классификация: Классификация языков программирования
Классификация языков программирования
Историю компьютерных наук в известной степени можно представить как историю языков программирования, начало развития которых приходится на XIX в., когда английский ученый Чарльз Бэббидж разработал механическую вычислительную машину. Программу для нее, как вам известно, написала леди Ада Лавлейс. Языки программирования в современном понимании фактически начали развиваться с появлением электронных вычислительных машин.
Язык программирования (англ. Programming language) — это искусственный язык, созданный для разработки программ, предназначенных для выполнения на компьютере.
Компьютерная программа (англ. Computer program) — это последовательность команд (инструкций), которые обеспечивает реализацию на компьютере конкретного алгоритма.
Команда (инструкция) — это указание, которое определяет, какое действие (операцию) следует выполнять.
Сегодня можно насчитать более 2 тыс. различных языков программирования и их модификаций, однако лишь отдельные получили широкое признание. Все языки программирования можно условно классифицировать по некоторым основным признакам. Ниже приведена краткая классификация языков программирования:
- По степени зависимости от аппаратных средств
- Языки низкого уровня
- Языки высокого уровня
- По принципам программирования
- Процедурные
- Непроцедурные
- Объектно-ориентированные
- По ориентации на класс задач
- Универсальные
- Специализированные
Рассмотрим подробно классификацию и составные части языков программирования.
По степени зависимости от аппаратных средств
Языки программирования низкого уровня (машинно-ориентированные) — языки, в которых команды и данные учитывают архитектуру компьютера. Такие языки ориентированы на конкретный тип компьютера и учитывают его аппаратные особенности.
Практически каждый тип компьютера имел собственный язык программирования низкого уровня. Одна и та же программа не могла выполняться на компьютере другого типа, что существенно ограничивало возможность обмена программами.
Программы для первых ЭВМ разрабатывали именно на «машинных» языках. Это был сложный процесс, поэтому вскоре появились языка символьного кодирования. Команды подавались уже не двоичным кодом, а символами. Преобразование символьного кода в машинные команды осуществляется автоматически.
Обычно команды современных языков программирования записывают английскими буквами с использованием символов, содержащихся на клавиатуре. Но в компьютере хранятся и выполняются команды, которые представлены физическими сигналами (например, двумя уровнями окончательной магнитной индукции, двумя значениями электрического напряжения, наличием и отсутствием светового луча и т.д.). Значение физических сигналов отождествляются с математическими значениями 0 и 1, то есть двоичными символами.
Программы, которые представлены совокупностью 0 и 1, называют машинными или машинным кодом. Он указывает, какую именно действие следует выполнить процессору.
Используются различные структуры команд. Чаще всего команды состоят из операционной и адресной частей. В операционной части отмечается, действие (операцию) следует выполнить, а в адресной — выполнить над какими именно данными.
Упрощенно команду двоичным или шестнадцатеричным кодом можно записать соответственно так:
- 10100011 10110111 11000101
- АЗ В7 С5
В нашем случае код АЗ может быть операционной частью и означать, например, операцию Добавить, а В7 и С5 — адресной частью, которая определяет место хранения данных, над которыми следует выполнить операцию.
Уже на первых этапах развития вычислительной техники началась разработка языков, доступных для широкого круга пользователей и не связанных с конкретным компьютером. Первым языком высокого уровня, получившим признание программистов, был Fortran.
Процесс разработки программ несколько облегчился, когда к языкам символьного кодирования начали включать макрокоманды, реализуемые последовательностью из нескольких машинных команд. К разновидностям языков символьного кодирования принадлежат языки ассемблер и машинных кодов.
Языки программирования высокого уровня (машинно-независимые) — языки, на которых программы могут использоваться на компьютерах различных типов и которые более доступны человеку, чем языки низкого уровня.
Первым языком высокого уровня, который получил широкое признание среди программистов мира, был Fortran. Он был разработан корпорацией IBM (США) в 1954 году. Язык Фортран приближен к языку алгебры и ориентирован на решение вычислительных задач. В 1960 году группой ученых разных стран создан язык Algol-60, тоже ориентированный на решение вычислительных задач.
По принципам программирования
По принципам программирования различают процедурные, непроцедурные языки и языки объектно-ориентированного программирования.
Процедурные языки основаны на описании последовательной смены состояния компьютера, то есть значения ячеек памяти, состояния процессора и других устройств. Они манипулируют данными в пошаговом режиме, используя пошаговые инструкции. В процедурных языках выдерживают четкую структуризацию программ, поэтому их еще называют языками структурного программирования. К таким языкам относятся Fortran, Algol, Pascal, BASIC и др.
Процедурные языки полностью удовлетворяют потребности разработки небольших программ и программ средней сложности. Но в начале 80-х годов XX века объем и сложность программ достигли уровня, который требовал новых концептуальных подходов к программированию.
Непроцедурные языка эффективны для программирования поиска данных в больших объемах, а также для программирования задач, процесс решения которых невозможно описать точно (перевод, распознавание образов). В этих языках сама процедура поиска решения встроена в интерпретатор языка. К таким языкам относятся языки функционального и логического программирования.
В конце XX в. была презентована новая методика программирования, получила название объектно-ориентированного программирования (ООП). То есть начали развиваться языки, содержащие конструкции, позволяющие определять объекты, принадлежащие к классам и имеющие средства для работы с абстрактными типами данных. К таким языкам относятся C ++, Java, C #, Python и др. Сегодня языки ООП практически вытеснили с рынка профессионального программирования процедурные языки.
По ориентации на класс задач
Языки программирования делятся на универсальные и специализированные.
Универсальные языки предназначены для решения широкого класса задач. К таким языкам относятся PL/1, Algol, Pascal, С и др. Особым классом универсальных языков является визуальные среды программирования: VisualBasic, Delphi и др.
Специализированные языки учитывают специфику предметной области. В настоящее время существуют десятки специализированных языков программирования, например, языки веб-программирования, языки скриптов и др. Язык скриптов используется для создания небольших вспомогательных программ, например Javascript — для создания динамических объектов на веб-страницах. Языки разметки содержат шаблоны и средства описания содержания, структуры и формата электронных документов, например язык HTML обеспечивает разметку гипертекстового документа. Языка для работы с базами данных обеспечивают создание и сопровождение баз данных.
Отметим, что не все из перечисленных языков в классическом понимании являются языками программирования. Так, язык HTML является языком разметки гипертекста, но его также часто называют языком программирования.
День программиста отмечается в 256-й день года (в високосный год это 12 сентября, а в не-високосный — 13 сентября). Выбор объясняется тем, что это число символическое, оно тесно связано с компьютерами, но не ассоциируется с конкретными лицами или кодами специальностей. Число 256 соответствует количеству символов, которые можно представить с помощью одного байта.
Начиная с 60-х годов XX века развитие языков программирования происходит как путем специализации, так и путем универсализации.
Одним из первых специализированных языков был COBOL, разработанный в США в 1961 году и ориентированый на решение экономических задач. Впоследствии появились десятки различных специализированных языков, например, Simula — язык моделирования, LISP — язык для информационно-логических задач, RPG — речь для решения учебных задач и тому подобное.
Составляющие части языка программирования
Любой язык программирования высокого уровня, как и любой другой язык, имеет основные составляющие:
Алфавит
Набор символов, из которых образуются команды программы и другие конструкции языка.
Каждый язык имеет свой алфавит. Но большинство из них содержит английские буквы, цифры, знаки арифметических операций (+, *, -, /), знаки отношений (больше, равно и др.), синтаксические знаки (точка, точка с запятой и др.).
Синтаксис
Совокупность правил записи команд и других конструкций языка.
Нарушение правил синтаксиса определяется автоматически, о чем программист получает сообщение.
Семантика
Совокупность правил толкования и выполнения конструкций языка программирования.
Например, два кода, приведенные далее, имеют одинаковую логику (выполняют одинаковые действия), результаты их выполнения тоже одинаковые. Но семантически коды разные:
- i = 0; while (i <5) {i ++;}
- i = 0; do {i ++;} while (i <= 4)
Словарь
Язык программирования имеет словарь — определенное количество слов, правила употребления которых определены для этого языка и которые имеют строго определенное назначение. Такие слова называют зарезервированными (ключевыми), например, for, input, if, print.
Классификация языков программирования
Классификация языков программирования по категориям связана с методами, которые используются при написании программ.
интернет-биржа студенческих работ»>
Рисунок 1. Классификация языков программирования. Автор24 — интернет-биржа студенческих работ
Процедурные языки
Процедурные языки являются языками высокого уровня, в которых используется метод разбиения программ на отдельные связанные между собой модули – подпрограммы (процедуры и функции). Компоненты языка состоят из последовательности операторов, которые используют библиотечные процедуры и функции. Первым процедурным языком был Fortran, затем появился Cobol, Algol, Pascal, C, Ada.
Языки программирования низкого уровня
Замечание 1
Программирование на первых компьютерах происходило с помощью двоичных машинных кодов. Такое программирование довольно трудоемкое и тяжелое. Для упрощения процесса программирования разрабатывались языки программирования низкого уровня, которые позволяли задавать машинные команды в понятном для человека виде. Чтобы преобразовать их в двоичный код создавались специальные программы – трансляторы.
Готовые работы на аналогичную тему
К языкам низкого уровня относится:
- программирование в машинных кодах;
- ассемблер;
- макроассемблер.
Языки низкого уровня ориентировались на определенный тип процессора и учитывали его особенности, поэтому для того, чтобы перенести программу, написанную на ассемблере, на другую аппаратную платформу её нужно было почти полностью переписать. Различия присутствовали также и в синтаксисе программ под разные компиляторы.
Языками низкого уровня пользуются преимущественно для написания небольших системных программ, драйверов устройств, модулей стыков с нестандартным оборудованием, программирования специализированных микропроцессоров, когда немаловажным является компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам.
Языки программирования высокого уровня
В языках высокого уровня особенности конкретных компьютерных архитектур не учитываются, поэтому написанные программы легко могут быть перенесены на другой компьютер. Зачастую достаточным является компиляция программы под определенную архитектурную и операционную систему. Разработка программ на языках высокого уровня значительно проще и ошибок намного меньше. К тому же время разработки программы значительно уменьшается, что является особенно важным фактором при работе над сложными программными проектами.
Недостаток некоторых языков высокого уровня состоит в большом размере программ по сравнению с программами на языках низкого уровня. В то же время текст программ на языке высокого уровня гораздо меньше, но в байтах код, написанный на ассемблере, будет более компактным.
Поэтому языки высокого уровня преимущественно используют для создания программного обеспечения для компьютеров и вычислительных устройств с большим объемом памяти. Языки же низкого уровня используются для написания программ к устройств, для которых критичным является размер программы.
Языки высокого уровня делятся на универсальные и проблемно-ориентированные.
Наиболее распространенные универсальные языки C#, C++, Basic, Pascal (Delphi) используются для разработки Windows-приложений. Большой вклад в программирование на начальных этапах внесли языки Fortran, Cobol, Algol, C и др.
Языки программирования для разработки Интернет-приложений скорее относятся к универсальным языкам. К ним относятся современные версии C#, Basic, J#.
Замечание 2
Проблемно-ориентированными языками, которые используются на Интернет-серверах и клиентских Интернет-приложениях, являются PHP, Perl, JavaScript, VBScript.
Объектно-ориентированные языки
Объектно-ориентированные языки стали дальнейшим уровнем развития процедурных языков, основной концепцией которых есть совокупность программных объектов. Написание программы на языке представляется в виде последовательности создания экземпляров объектов и использование их методов. К ним относятся из первых языков Simula и SmallTalk, далее C++, Java.
Декларативные языки программирования
В декларативном программировании задается спецификация решения задачи, то есть дается описание того, что представляет собой проблема и какой ожидается результат. Программы, созданные с помощью декларативного языка, не содержат переменные и операторы присваивания.
К декларативным языкам можно отнести SQL и HTML. К подвидам декларативного программирования относится функциональное и логическое программирование.
Функциональные языки программирования
Функциональные языки являются языками искусственного интеллекта. Программа, написанная на функциональном языке, состоит из последовательности функций и выражений, которые необходимо вычислить. Основной структурой данных является связный список. Функциональное программирование принципиально отличается от процедурного. Основными функциональными языками являются Lisp, Miranda, Haskel.
Логические языки программирования
Языки, ориентированные на решение задач без описания алгоритмов, языки искусственного интеллекта. Представителем логического программирования является Prolog, которым написано большинство экспертных систем.
Языки сценариев (скрипты)
Языки относятся к объектно-ориентированным языкам, используются для написания программ, которые исполняются в определенной программной среде. Тексты программ, написанные на языке сценариев, можно включать в тело Html-документа. Первыми скриптами были Perl и Python, которые изначально были разработаны для операционной системы Unix, а уже в дальнейшем появились версии языков для операционных систем Windows и Macintosh. Для написания программ на языке сценариев необходимо знание процедур и функций системных библиотек.
Языки, ориентированные на данные
Языки ориентированы на работу с одним определенным типом данных. Например, APL работает с матрицами и векторами, Snobol обрабатывает строки, SETL выполняет операции над множествами.
Особое развитие получили языки для работы с базами данных:
Замечание 3
Широкими возможностями обработки документов текстового процессора Microsoft Word, электронных таблиц MS Excel, баз данных MS Access и даже программ подготовки слайдовых презентаций MS PowerPoint обладает встроенный язык системы MS Office – Visual Basic for Application (VBA).
Классификация языков программирования — Студопедия
Тема №4 Язык программирования: эволюция, классификация
(О.Л. Голицина, И.И. Попов «Основы алгоритмизации и программирования» Стр. 38-45)
Эволюция Языков программирования
В развитии инструментального программного обеспечения (т.е. программного обеспечения, служащего для создания программных средств в любой проблемной области) рассматривают пять поколений языков программирования (ЯП). Языки программирования как средство общения человека с ЭВМ от поколения к поколению улучшали свои характеристики, становясь, все более доступными в освоении непрофессионалам.
Первые три поколения ЯП характеризовались более сложным набором зарезервированных слов и синтаксисом. Языки четвертого поколения все еще требуют соблюдения определенного синтаксиса при написании программ, но он значительно легче для освоения. Естественные ЯП, разрабатываемые в настоящее время, составят пятое поколение и позволят определять необходимые процедуры обработки информации, используя предложения языка, весьма близкого к естественному и не требующего соблюдения особого синтаксиса.
Поколения ЯП
Поколения | Языки программирования | Характеристика |
Первое | Машинные | Ориентированы на использование в конкретной ЭВМ, сложны в освоении, требу ют хорошего знании архитектуры ЭВМ |
Второе | Ассемблеры, Макроассемблеры | Более удобны для использования, но по-прежнему машинно-зависимы |
Третье | Языки высокого уровня | Мобильные, человеко — ориентированные, проще в освоении |
Четвертое | Непроцедурные, объектно-ориентированные, языки запросов, параллельные | Ориентированы на непрофессионального пользователя и на ЭВМ с параллельной архитектурой |
Пятое | Языки искусственного интеллекта, экспертных систем и баз знаний, естественные языки | Ориентированы на повышение интеллектуального уровня ЭВМ и интерфейса с языками |
ЯП первого поколения представляли собой набор машинных команд в двоичном (бинарном) или восьмеричном формате, которым определялся архитектурой конкретной ЭВМ. Каждый тип ЭВМ имел свой ЯП, программы на котором были пригодны только для данного типа ЭВМ. От программиста при этом требовалось хорошее знание не только машинного языка, но и архитектуры ЭВМ.
Второе поколение ЯП характеризуется созданием языков ассемблерного типа (ассемблеров, макроассемблеров), позволяющих вместо двоичных и других форматов машинных команд использовать их мнемонические символьные обозначения (имена). Являясь существенным шагом вперед, ассемблерные языки все еще оставались машинно-зависимыми, а программист все также должен был быть хорошо знаком с организацией и функционированием аппаратной среды конкретного типа ЭВМ. При этом ассемблерные программы все так же затруднительны для чтения, трудоемки при отладке и требуют больших усилий для переноса на другие типы ЭВМ. Однако и сейчас ассемблерные языки используются при необходимости разработки высокоэффективного программного обеспечения (минимального по объему и с максимальной производительностью).
Третье поколение ЯП начинается с появления в 1956 г. первого языка высокого уровня — Fortran, разработанного под руководством Дж. Бэкуса в фирме IВМ. За короткое время Fortran становится основным ЯП при решении инженерно-технических и научных задач. Первоначально Fortran обладал весьма ограниченными средствами обеспечения работы с символьной информацией и с системой ввода-вывода. Однако постоянное развитие языка сделало его одним из самых распространенных ЯВУ на ЭВМ всех классов — от микро- до суперЭВМ, а его версии используются и для вычислительных средств нетрадиционной параллельной архитектуры.
Вскоре после языка Fortran появились такие ныне широко известные языки, как Аlgol, Соbоl, Ваsiс, РL/1, Раscal, АРL, АDА, С, Forth, Lisp, Моdula и др. В настоящее время насчитывается свыше 2000 различных языков высокого уровня.
Языки четвертого поколения носят ярко выраженный непроцедурный характер, определяемый тем, что программы на таких языках описывают только что, а не как надо сделать. В программах формируются скорее соотношения, а не последовательности шагов выполнения алгоритмов. Типичными примерами непроцедурных языков являются языки, используемые для задач искусственного интеллекта (например, Рrolog, Langin). Так как непроцедурные языки имеют минимальное число синтаксических правил, они значительно более пригодны для применения непрофессионалами в области программирования.
Второй тенденцией развития ЯП четвертого поколения являются объектно-ориентированные языки, базирующиеся на понятии программного объекта, впервые использованного в языке Simulа-67 и составившего впоследствии основу известного языка Smalltalk. Программный объект состоит из структур данных и алгоритмов, при этом каждый объект знает, как выполнять операции со своими собственными данными. На самом деле, различные объекты могут пользоваться совершенно разными алгоритмами при выполнении действий, определенных одним и тем же ключевым словом (так называемое свойство полиморфизма). Например, объект с комплексными числами и массивами в качестве данных будет использовать различные алгоритмы для выполнения операции умножения. Такими свойствами обладают объектно-ориентированные Pascal Basic, С++, Smalltalk, Simulа, и ряд других языков программирования.
Третьим направлением развития языков четвертого поколения можно считать языки запросов, позволяющих пользователю получать информацию из баз данных. Языки запросов имеют свой особый синтаксис, который должен соблюдаться, как и в традиционных ЯП третьего поколения, но при этом проще в использовании. Среди языков запросов фактическим стандартом стал язык SQL .
И, наконец, четвертым направлением развития являются языки параллельного программирования (модификация ЯВУ Fortran, языки Оссаm, SISAL, FР и др.), которые ориентированы на создание программного обеспечения для вычислительных средств параллельной архитектуры (многомашинные, мультипроцессорные среды и др.), в отличие от языков третьего поколения, ориентированных на традиционную однопроцессорную архитектуру.
К интенсивно развивающемуся в настоящее время пятому поколению относятся языки искусственного интеллекта, экспертных систем, баз знаний (InterLisp, ExpertLisp, IQLisp, SIAL и др.), а также естественные языки, не требующие освоения какого-либо специального синтаксиса (в настоящее время успешно используются естественные ЯП с ограниченными возможностями — Clout, Q&А, НАL и др.).
Классификация языков программирования
Для того чтобы ЭВМ могла решать задачи, составленные человеком, она должна последовательно выполнять инструкции некоторой программы-алгоритма. Совокупность таких инструкций, направленных на решение конкретной задачи, называется компьютерной программой. Но это еще не все.
Компьютер не понимает естественного языка человека, а понимает только свой язык — машинный код. Что касается языка программирования, то он с помощью фиксированных систем обозначений и правил позволяет описывать алгоритмы и структуры данных, которые впоследствии будут переведены транслятором в машинный код.
Все языки программирования можно разделить на языки низкого, высокого и сверхвысокого уровней.
Языки низкого уровня — это средство записи инструкций компьютеру простыми приказами-командами на аппаратном уровне. Такой язык зависит от структуры конкретной ЭВМ и иногда называется машинно-ориентированным языком. Этот язык плохо приспособлен для использования человеком, ведь запись программы на этом языке представляет собой последовательность нулей и единиц, и мало шансов, что сложная задача будет запрограммирована безошибочно. Для упрощения программирования был разработан язык символического кодирования (автокод, или язык ассемблера). Программа, написанная на таком языке, ближе человеку, но все равно требует от программиста широких познаний в этой области.
Следующая группа — языки программирования высокого уровня. Это языки, которые допускают описание задачи в наглядном, легко воспринимаемом виде. Их отличительной особенностью является ориентация не на систему команд той или иной ЭВМ, а на систему инструкций, характерных для записи алгоритмов определенного класса. К языкам программирования высокого класса относятся Бейсик, Фортран, Алгол, Паскаль, Си и др.
К языкам программирования сверхвысокого уровня можно отнести Алгол-68, в котором сделана попытка формализовать описание языка, приведшая к появлению двух типов программ: абстрактной и конкретной. Первый тип программы — абстрактный — создается программистом, конкретный — выводится из первого. Существует предположение, что при таком подходе принципиально невозможно породить синтаксически (а на практике и семантически) неверную конкретную программу.
Изучение ЯП часто начинают с их классификации. Определяющие факторы классификации обычно жестко не фиксируются. Чтобы продемонстрировать характер типичной классификации, опишем наиболее часто применяемые факторы, дадим им условные названия и приведем примеры ЯП для каждой из классификационных групп .
Элементы языков программирования могут рассматриваться на следующих уровнях:
алфавит — совокупность символов, отображаемых на устройствах печати и экранах и/или вводимых с клавиатуры терминала.
лексика — совокупность правил образования цепочек символов (лексем), образующих идентификаторы (переменные и метки), операторы, операции и другие лексические компоненты языка. Сюда же включаются зарезервированные (запрещенные, ключевые) слова ЯП, предназначенные для обозначения операторов, встроенных функций и пр.Иногда эквивалентные лексемы, и зависимости от ЯП, могут обозначаться как одним символом алфавита, так и несколькими.
синтаксис — совокупность правил образования языковых конструкций, или предложений ЯП — блоков, процедур, составных операторов, условных операторов, операторов цикла и пр. Особенностью синтаксиса является принцип вложенности (рекурсивность) правил построения конструкций. Это значит, что элемент синтаксиса языка в своем определении прямо или косвенно в одной из его частей содержит сам себя. Например, в определении оператора цикла телом цикла является оператор, частным случаем которого является все тот же оператор цикла;
семантика — смысловое содержание конструкций, предложений языка, семантический анализ — это проверка смысловой правильности конструкции. Например, если мы в выражении используем переменную, то она должна быть определена ранее по тексту программы, а из этого определения может быть получен ее тип. Исходя из типа переменной, можно говорит о допустимости операции с данной переменной. Семантические ошибки возникают при недопустимом использовании операций, массивов, функций, операторов и пр.
Трансляторы
Программа, написанная на любом языке программирования, является исходной программой. Особенность таких программ, как мы помним, заключается в том, что они состоят из инструкций, понятных человеку, но не понятных процессору компьютера. Чтобы процессор мог выполнить работу в соответствии с алгоритмом, записанным в исходной программе, эта программа должна быть переведена на машинный язык — язык команд процессора. Такой перевод программы называется трансляцией, а выполняется он специальными программами — трансляторами.
Существует три вида трансляторов: интерпретаторы, компиляторы и ассемблеры.
Интерпретатор — транслятор, переводящий текст программы поэтапно (покомандно) и сразу же (то есть параллельно) выполняющий оттранслированную команду исходной программы.
Компилятор транслирует текст программы в модуль на машинном языке, затем программа переписывается в оперативную память и лишь после этого исполняется процессором компьютера. Именно с использованием трансляторов такого типа осуществляется перевод программы на многих языках программирования в машинный код. Поэтому рассмотрим его чуть подробнее.
Схематически работу компилятора иллюстрирует рис. 1.6.
Цифрой 1 на схеме обозначен блок синтаксического контроля текста программы, цифрой 2 — генератор машинного кода.
Если генератор машинного кода компилятора перевел исходный текст программы в необходимую форму, значит, в тексте программы нет синтаксических ошибок, но это не говорит об отсутствии ошибок в алгоритме. Убедиться в правильности работы программы можно только при ее тестировании, то есть при обработке результатов, получаемых в процессе работы программы.
Последний вид трансляторов — ассемблеры. Они предназначены для перевода программы, написанной на языке ассемблера (автокода), в программу на машинном языке.
Все трансляторы, независимо от их вида, решают следующие основные задачи:
+ выполняют анализ и проверяют синтаксис транслируемой программы;
+ генерируют машинный код программы;
+ распределяют память для выходной программы.
Языки программирования. понятие, классификация, виды.
Операционные системы. Виды, требования, особенности, функции,.
Операционная система- это целый комплекс управляющих программ, вступающих в качестве интерфейса между компонентами персонального компьютера и обеспечивающих эффективное использование ресурсов ЭВМ. Операционная система обеспечивает взаимосвязь и управление всеми элементами компьютера и выполняемыми программами. Загрузка операционной системы производится при включении компьютера. К операционным системам нового поколения относятся: Windows XP, Windows NT, Windows Vista, операционные системы семейства OS\ 2, UNIX, LUNIX.
Каждая операционная система имеет свой командный язык, который позволяет пользователю выполнять те или иные действия. Операционная система сложна и занимает большой объем памяти. Обычно в оперативной памяти ЭВМ находятся только те части операционной системы, с которыми в данный момент работают процессоры. Программы и их части, находящиеся в оперативной памяти, называются резидентными программами. Остальные программы располагаются во внешней памяти. С операционной системой взаимодействуют драйверы – это комплексы программ, выполняющие интерфейсные и управляющие функции. Приложениями любой операционной системы являются программы, предназначенные для работы под управлением этой операционной системы.
Требования к ОС:
— Cовместимость – означает, что операционная система должна включать средства для выполнения приложений (программ) , подготовленных для других операционных систем,
— переносимость – означает обеспечение возможности переноса операционной системы с одной аппаратной платформы на другую,
— надежность и отказоустойчивость – предполагает защиту операционной системы от внутренних и внешних ошибок, сбоев и отказов,
— безопасность — означает, что операционная система должна содержать средства защиты ресурсов одних пользователей от других, должна обеспечивать удобство внесения последующих изменений и дополнений,
— производительность – означает, что операционная система должна обладать достаточным быстродействием.
Операционная система Windows — это современная и наиболее совершенная операционная система, хранится во внешней памяти компьютера, постоянно развивается и совершенствуется.
Особенности ОС Windows:
— Оконный графический интерфейс. Окно – это основное поле действия программы,
— многозадачность – система обеспечивает работу с нескольким задачами одновременно с возможным переключением между ними,
— возможность использования длинных имен файлов и каталогов – до 255 символов,
— удобная и гибкая справочная система,
— стандартные — система меню, форма представления отчетов, операции обработки для сервисных и прикладных программ,
— устойчивость в работе, защищенность программы и информации,
— полная независимость от аппаратуры и др.
Функции ОС:
— обеспечение нескольких видов интерфейса (интерфейса командной строки, графического интерфейса),
— обеспечение взаимодействия между пользователем и программно – аппаратными средствами компьютера,
— обеспечение взаимодействия между разными видами программного обеспечения,
— поддержка функционирования локальной компьютерной сети без специального программного обеспечения,
— обеспечение доступа к основным службам Интернета,
— наличие средств защиты от несанкционированного доступа, просмотра и внесения изменений, обеспечение поочередной работы разных пользователей на одном ПК с сохранением персональных настроек рабочей среды каждого пользователя и другие/
Языки программирования. Понятие, классификация, виды.
Даже при наличии десятков тысяч готовых программ пользователям может понадобиться нечто такое, чего не делают или делают не так имеющиеся готовые программы. В этих случаях для разработки новых программ используют системы программирования — совокупность программ, используемых для автоматизации процесса разработки программ.
Языки программирования – это языки записи программ для ЭВМ. Первыми языками программирования были языки Алгол, Фортран, Бейсик, Pascal.
Существующие в настоящее время языки программирования можно отнести к четырем группам. Следует заметить при этом, что нет такого одного языка, который удовлетворял бы всем областям программирования и интересам всех программистов. Такой язык в каждом случае приходится выбирать разработчику программы, исходя из уровня квалификации и собственных предпочтений.
Языки программирования низкого уровня — это машинные языки – (языки Ассемблера). Команды такого языка больше понятны процессору, чем пользователю. Язык Ассемблер предназначен для написания системных программ, используется в основном системными программистами, разрабатывающие программы, которые управляют работой вычислительной машины и автоматизируют процесс разработки прикладных программ. Поскольку команды разных процессоров различны, то при использовании таких языков приходится их выучивать для каждого конкретного процессора. По этим же причинам написанные программы нельзя перенести на другой процессор. В настоящее время на низкоуровневых языках пишутся в основном драйвера устройств и составные части операционных систем для персонального компьютера и суперкомпьютеров. К таким языкам относятся языки Ассемблера и в некоторой мере С.
Языки программирования высокого уровня — это немашинные языки. Они более понятны нам, нежели компьютеру, однако это не мешает создавать на них практически все существующие программы для персональных компьютеров. Высокоуровневые языки программирования облегчают труд программистов, в них заложены важные функции, выполнение которых на языке низкого уровня потребовало бы тысячи строк кода. Самым массовым языком считается Basic, разработанный в 60-х годах в качестве учебного языка. Известны версии Visual BASIC 7 и Qbasic. Язык программирования Pascal разработал Н.Вирт – основоположник множества идей современного программирования в конце 70-х годов. В Паскале имеются возможности для создания крупных проектов, но он успешно применяется и для написания небольших программ повседневного использования. Delphi 2006 является на данный момент наиболее мощной визуальной средой Паскаля.
К языкам высокого уровня относятся:
Процедурно – ориентированные языки. Являются средством записи процедур или алгоритмов обработки информации для определенного класса задач. К ним относятся языки – Фортран, Бейсик, Си (С), Паскаль.
Проблемно – ориентированные языки. Появились в связи с постоянным расширением области применения вычислительной техники и возникновением целых классов новых задач, для которых надо было найти решение. К ним относятся языки – Лисп, Пролог.
Объектно – ориентированные языки. Представляют собой развитие версии процедурных и проблемных языков. Программирование с помощью языков данной группы более простое и наглядное. К языкам этой группы относятся – Visual Basic, Delphi, Visual Fortran, C++ (C), Prolog.
Для операционной системы Windows фирма Microsoft создала в середине 1990-х годов семейство языков Visual Basic как базового средства разработки программного обеспечения для персональных компьютеров.
Языки Web — программирования
Развитие сети Интернет привело к появлению качественно новых языков — языков программирования для сетей: HTML, Java, Javascript, PHP, Perl
Основной и самый первый язык этого класса — это HTML, язык для форматирования документа. Подавляющее число Интернет –языков подчиняются его правилам и зависят от него.
Язык Java – это машинонезависимый язык программирования для корпоративных сетей ЭВМ, созданный фирмой Sun. Язык Javascript это язык гипертекстовых подпрограмм (скриптов), которые могут выполняться браузерами на любых персональных ЭВМ, которые могут подключаться к локальной или глобальной сети ЭВМ. Этот язык признан международным стандартом языка скриптов для всех браузеров. PHP- наиболее популярный интерпретируемый Интернет-язык. На нем основаны многие Web- сайты. Он довольно прост, позволяет создавать неплохие системы управления сайтами .Perl . По мощности значительно превосходит языки типа Си. В него введено множество функций работы со строками, массивами, всевозможные средства преобразования данных.
Языки программирования баз данных
Реляционные базы данных – это наборы таблиц, состоящие из строк и столбцов. Каждая таблица имеет фиксированное число столбцов, задаваемых в ее описании, и переменное число строк, которое может меняться при работе с базой данных. От остальных языков программирования языки программирования баз данных отличаются своей задачей — управлять базами данных. Структурированный язык запросов SQL является единым языком работы с базами данных. Этот язык понимают любые системы управления базами данных (СУБД), но помимо этого во многих СУБД имеется так же свой уникальный язык, ориентированный именно на эту СУБД, и не переносимый на другие. Основными типами запросов в языке SQL являются: создание таблиц и баз данных, выборка информации из базы данных, редактирование информации в базе данных, администрирование баз данных.
Статьи к прочтению:
Классификация языков программирования
Похожие статьи:
КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ — Международный журнал
Быканов Н.П. Классификация языков программирования // Международный журнал социальных и гуманитарных наук. – 2016. – Т. 5. №1. – С. 229-232.
КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
Н.П. Быканов, магистрант
Балтийский государственный технический университет «ВОЕНМЕХ» им. Д.Ф. Устинова
(Россия, г. Санкт-Петербург)
Аннотация. В течение нескольких последних десятилетий сфера информационных и компьютерных технологий шагнула далеко вперёд. Технологии прочно вошли в нашу повседневную жизнь, и уже довольно сложно представить современного человека без обработки какой-либо информации на компьютере. Программирование, само собой, – идёт бок о бок с техническим прогрессом и развивается столь же стремительно, как и остальные технологии. Развиваются старые языки программирования, разрабатываются новые. За всю историю развития электронно-вычислительных машин появились сотни языков программирования, многие из которых используются и по сей день. Необходимо языки программирования классифицировать. На данный момент существует несколько различных классификаций по отдельным признакам, и каждый автор толкует их по-своему, по-своему распределяя языки по классам.
Ключевые слова: программирование; языки программирования; классификация; уровни языков программирования; поколения языков программирования; парадигмы программирования.
Прежде всего, языки программирования нужно классифицировать по уровням. Разные авторы разбивают языки либо на три уровня (машинные, машинно-ориентированные и машинно-независимые языки), либо на два уровня (языки программирования низкого уровня, языки программирования высокого уровня).
В случае деления языков программирования на три уровня, низшим уровнем будет являться машинный код – набор команд, выполняемых конкретным процессором и разработанных специально для него. Обычно является последовательностью шестнадцатеричных символов. Вывод строки «Hello, World!» для процессора архитектуры x86 выглядит так: BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21. Средним уровнем будут являться машинно-ориентированные языки, то есть языки, призванные управлять непосредственно командами процессора, но более доступным для человеческого восприятия языком. Примером являются языки ассемблера. Язык ассемблера, по сути, представляет каждую команду машинного кода с помощью удобных для восприятия человеком символических команд – мнемокодов. Как правило, язык ассемблера использует особенности конкретного семейства процессоров. Высшим же уровнем будут считаться машинно-независимые языки. Они разработаны для удобства восприятия, быстроты понимания и работы с ними. Характерная черта этих языков программирования – абстракция, то есть введение смысловых конструкций, кратко описывающих данные и операции над ними, описания которых в машинно-ориентированных языках очень длинны и сложны для понимания. Также они были призваны обеспечить платформенную независимость сути алгоритмов. С их появлением зависимость от платформы перекладывается на трансляторы, «переводящие» текст, написанный на языке высокого уровня, в элементарные машинные команды. Примерами языков программирования высокого уровня являются C++, C#, PHP, Perl, Java и многие другие.
В современной классификации языков программирования по уровням всё чаще используют деление на два уровня: языки высокого и низкого уровней. Языками низкого уровня считаются языки, близкие к машинному коду и ориентированные на конкретные команды процессора, то есть машинно-ориентированные языки, а языками высокого уровня в современной классификации считаются машинно-независимые языки, разработанные для удобства использования. Таким образом, на данный момент авторы чаще не учитывают машинный код в своих классификациях. Это может быть связано с тем, что в настоящее время машинный код может понадобиться специалистам узкого профиля, например, системного программирования, защиты информации или программирования устройств напрямую. Прикладному же программисту иметь представление о машинном коде может быть необходимо для понимания того, как его программа хранится и выполняется, и в некоторых случаях для отладки и оптимизации своих программ.
Следующая классификация, которую необходимо рассмотреть, — классификация языков программирования по поколениям. Общепринято делить языки на пять поколений, но разные авторы опять же по-своему разделяют поколения. Некоторые варианты классификации перекликаются с классификацией по уровням, некоторые указывают, что языков программирования пятого поколения пока не существует.
Подавляющее большинство авторов называет языками программирования первого поколения машинные коды, то есть языки низкого уровня, языками второго поколения – языки ассемблера, уже рассмотренные нами, и, соответственно, языками третьего поколения – языки высокого уровня. Эта классификация по эволюционному признаку вполне логична: понятно, что языки низкого уровня появлялись на заре программирования, а языки среднего и высокого уровней разрабатывались и улучшались в связи с растущими возможностями компьютерных технологий. А вот с классификацией языков четвёртого и пятого поколений ситуация не так проста. К языкам программирования четвёртого поколения чаще всего относят языки объектно-ориентированные, декларативные (непроцедурные) и визуальные. Но эти языки с уверенностью можно отнести и к языкам третьего поколения. Также очень часто сюда относят языки запросов, например, SQL, который, по своей сути, вовсе не является языком программирования. Вообще, часто можно прочитать о том, что языки программирования четвёртого поколения – это языки, встроенные в определённую программную оболочку и используемые для узкоспециализированных задач, например, для создания баз данных и управления ими (встроенные языки систем управления базами данных). Получается, вернее всего сказать, что языки программирования четвёртого поколения – логичное развитие языков третьего поколения, упрощающее работу программистов ввиду того, что в основе своей эти языки встроены в собственную программную оболочку с функциями, помогающими разработчикам. Также к языкам четвёртого поколения нужно отнести языки параллельного программирования, ориентированные на создание программных средств многопроцессорной архитектуры.
Языки пятого поколения, теоретически, должны ещё больше упростить и ускорить работу программистов: целью этих языков является переложить значительную часть работы с человека на компьютер. Чаще всего сюда относят языки экспертных систем, баз знаний. В настоящее время, действительно, нет решений, которые могут выдавать полноценный продукт, получая при этом лишь задачу. Некоторые авторы говорят о системе MathCAD, она действительна заметно облегчает работу пользователей, беря на себя огромную долю вычислительной работы. Но всё же, на данный момент нет чёткого определения, по каким критериям определить языки пятого поколения. Одно ясно: с их использованием компьютер должен будет решить поставленную задачу без необходимости пользователю вручную реализовывать алгоритм.
Далее, рассмотрим классификацию языки программирования по функциональному признаку, или парадигме программирования. Парадигма – совокупность идей и понятий, определяющих подход к программированию. Большинство авторов даёт чёткое разделение языков программирования на процедурные (императивные) и непроцедурные (декларативные). Класс непроцедурных языков содержит в себе два подкласса: функциональные и логические языки. Часто отдельным классом выделяют объектно-ориентированные языки программирования, хотя они содержат элементы процедурного программирования. Остановимся на каждом классе поподробнее.
В процедурных языках программа явно описывает необходимые к выполнению действия, то есть она является чёткой последовательностью команд, которые необходимо выполнить компьютеру. Можно сказать, что, программируя на этих языках, программист говорит компьютеру, не что делать, а как. К этому классу можно отнести большинство языков программирования: Pascal, Basic, C и другие.
Непроцедурные языки можно запросто назвать противоположностью языкам процедурным. Декларативное программирование – парадигма программирования, в которой описывается, что необходимо сделать компьютеру. Хорошим примером служит язык разметки HTML, возьмём тег <img>: необходимо просто заключить в него ссылку на изображение, а каким образом оно отобразится на странице – это задача компьютера.
В функциональном программировании процесс вычисления можно описать как вычисление значений функций в математическом понимании. На практике, отличие математической функции от понятия «функция» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, таким образом, получая в разных местах программы разные выходные данные. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим один и тот же результат – выходные данные зависят только от входных. Это позволяет средам функционального программирования кэшировать результаты выполнения функций и вызывать их в нужный момент. Примерами можно привести LISP – первый функциональный язык, Haskell и другие.
В программах, написанных на языках логического программирования, вообще не описывается действий. Программист задаёт данные и отношения между ними, после этого программе можно задать вопрос, компьютер перебирает заданные данные и находит ответ. Классический пример языка логического программирования – Prolog.
В языках объектно-ориентированного программирования переменные и функции группируются в классы, благодаря чему достигается высокий уровень структуризации программы. Объекты, порождённые от классов, вызывают методы (функции) друг друга и, таким образом, меняют состояние свойств (переменных). С формальной стороны объектно-ориентированное программирование базируется на процедурной модели, но с содержательной – оно базируется не на функции, а на объекте, как на целостной системе.
В статье рассмотрены три основные и самые популярные классификации языков программирования. На данный момент, действительно, нет более-менее чёткой классификации языков программирования, охватывающей все признаки и рассказывающей о «переплетениях» различных классификаций между собой. Естественно, эту тему возможно раскрыть намного шире, чем в данной статье, этим автор и собирается заняться в ближайшее время.
Библиографический список
1. Классификация языков программирования [Электронный ресурс]. URL: http://bourabai.ru/alg/classification.htm
2. Пять поколений языков программирования [Электронный ресурс]. URL: http://life-prog.ru/view_zam2.php?id=194&cat=5&page=11
3. Эволюция языков программирования [Электронный ресурс]. URL: http://www.urtt.ru/bib/dataindex/oaip/lection/_html/lect_05.htm
4. Языки программирования и их классификация [Электронный ресурс]. URL: http://www.maksakov-sa.ru/ProgrProd/YazProgr/index.html
5. Язык программирования. Эволюция языков программирования [Электронный ресурс]. URL: http://wiki.mvtom.ru/index.php/Язык_программирования
CLASSIFICATION OF PROGRAMMING LANGUAGES
N.P Bykanov, graduate student
Baltic state technical university «Voenmeh» D.F.Ustinov
(Russia, St. Petersburg)
Abstract. Over the past few decades, the scope of information and computer technology has leaped forward. Technologies have become part of our daily lives, and quite hard to imagine a modern man without processing any information on your computer. The programming itself — goes side by side with the technical progress and evolving as rapidly as the rest of the technology. Develop old programming languages, new development. In the history of the development of electronic computers were hundreds of programming languages, many of which are used to this day. It is necessary to classify programming languages. At the moment, there are several different classifications of individual characteristics, and each author interprets them in his own way, in their own languages distributing classes.
Keywords: programming; programming languages; classification; level programming languages; generation programming languages; programming paradigms.
Язык программирования — Национальная библиотека им. Н. Э. Баумана
Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 21:11, 7 июня 2017.
Язык программирования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.
Классификация языков программирования
Языки программирования низкого уровня
Низкоуровневый язык программирования (язык программирования низкого уровня) — язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, Java, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).
Как правило, использует особенности конкретного семейства процессоров. Общеизвестный пример низкоуровнего языка — язык ассемблера, хотя правильнее говорить о группе языков ассемблера. Для одного и того же процессора существует несколько видов языка ассемблера. Они совпадают в машинных командах, но различаются набором дополнительных функций (директив и макросов).
Пример низких языков:
Языки программирования высокого уровня
Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и удобства использования программистом. Основная черта высокоуровневых языков — это абстракция, то есть введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания.
Так, высокоуровневые языки стремятся не только облегчить решение сложных программных задач, но и упростить портирование программного обеспечения. Использование разнообразных трансляторов и интерпретаторов обеспечивает связь программ, написанных при помощи языков высокого уровня, с различными операционными системами и оборудованием, в то время как их исходный код остаётся, в идеале, неизменным.
Примеры высоких языков:
Безопасные и небезопасные
В общем и целом, язык называется безопасным, если программы на нём, которые могут быть приняты компилятором как правильно построенные, в динамике никогда не выйдут за рамки допустимого поведения. Это не значит, что такие программы не содержат ошибок вообще. Термин «хорошее поведение программы» (англ. well behavior) означает, что даже если программа содержит некий баг (в частности, логическую ошибку), она тем не менее не способна нарушить целостность данных и обрушиться. Хотя термины неформальны, безопасность некоторых языков (например, Standard ML) математически доказуема. Безопасность других (например, Ada) была обеспечена ad hoc-образом, без обеспечения концептуальной целостности, что может обернуться катастрофами, если положиться на них в ответственных задачах .
Языки C и его потомок C++ являются небезопасными. В программах на них обширно встречаются ситуации ослабления типизации (приведение типов) и прямого её нарушения (каламбур типизации), так что ошибки доступа к памяти являются в них статистической нормой (но крах программы наступает далеко не сразу, что затрудняет поиск места ошибки в коде). Самые мощные системы статического анализа для них способны обнаруживать не более 70 — 80 % ошибок, но их использование обходится очень дорого в денежном смысле. Достоверно же гарантировать безотказность программ на этих языках невозможно, не прибегая к формальной верификации, что не только ещё дороже, но и требует специальных знаний. У Си есть и безопасные потомки, такие как Cyclone или Rust.
Язык Forth не претендует на звание «безопасного», но, тем не менее, на практике существование программ, способных повредить данные, почти исключено, так как содержащая потенциально опасную ошибку программа аварийно завершается на первом же тестовом запуске, принуждая к коррекции исходного кода. В сообществе Erlang принят подход «let it crash» , также нацеленный на раннее выявление ошибок.[Источник 2]
Компилируемые и интерпретируемые языки
Программа на компилируемом языке при помощи специальной программы компилятора преобразуется (компилируется) в набор инструкций для данного типа процессора (машинный код) и далее записывается в исполнимый модуль, который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит исходный текст программы с языка программирования высокого уровня в двоичные коды инструкций процессора.
Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) исходный текст без предварительного перевода. При этом программа остаётся на исходном языке и не может быть запущена без интерпретатора. Можно сказать, что процессор компьютера — это интерпретатор машинного кода.
Кратко говоря, компилятор переводит исходный текст программы на машинный язык сразу и целиком, создавая при этом отдельную исполняемую программу, а интерпретатор выполняет исходный текст прямо во время исполнения программы.
Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).
Для любого интерпретируемого языка можно создать компилятор — например, язык Лисп, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений. Создаваемый во время исполнения программы код может так же динамически компилироваться во время исполнения.
Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык.Вместе с тем, при каждом изменении текста программы требуется её перекомпиляция, что создаёт трудности при разработке. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которую был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа, требуется новая компиляция.
Интерпретируемые языки обладают некоторыми специфическими дополнительными возможностями (см. выше), кроме того, программы на них можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий.
Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора.
Примеры компилированных языков: assembler, C++, Pascal
Примеры интерпритируемых языков: PHP, JavaScript, Python
Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми.[Источник 3]
Примечания
Классификация языков программирования: кратко
Классификация и виды языков программирования – это очень сложный, многообразный вопрос, который постоянно вызывает споры, требует регулярной переоценки и умения находить в различных языках объединяющие их характеристики и особенности. Сейчас существует огромное количество самых разных языков программирования. По некоторым подсчетам, всего их более чем 120. Некоторые из них очень распространены и популярны (C++, Java, Python), некоторые известны только узкому кругу специалистов и любителей экзотики (Groovy, Clojure, Boo)
Как таковой единой классификации языков программирования просто не существует. Их можно разделять между собой по целому ряду признаков и именно так обычно и происходит. Одни специалисты склоняются к тому, чтобы классифицировать языки по их техническим свойствам, другие обращают большее внимание на их типовые признаки, третьи руководствуются в определении принадлежности языка к какому-либо классу распространенными мифами и заблуждениями. Так или иначе, но есть несколько подходов к классификации языков. Рассмотрим самые известные и правдоподобные из них.
Высокоуровневые и низкоуровневые
Очень часто именно по этому признаку языки программирования и отличают между собой. Изначально первыми появились языки низкого уровня, и под таким подразумевается язык, который способен обращаться непосредственно к физическим параметрам устройства и работать с определенной архитектурой микропроцессора. Если говорить кратко, такие языки могут работать с заложенными техническими параметрами оборудования, регулировать их функционирование, задавать рабочие параметры. Именно на языках низкого уровня пишутся операционные системы, драйвера, системное ПО, утилиты для работы с периферийными устройствами, датчиками и тому подобными объектами.
Высокоуровневые языки же являются более абстрактными, обладают массой классов, очень развитым синтаксисом и более похожи на простой человеческий язык, нежели на машинные коды и команды. Программы на таких языках, в отличие от низкоуровневых, не «заточены» под определенную архитектуру процессора, а могут быть относительно легко перенесены на другие устройства, модифицированы и изменены под все новые нужды.
К низкоуровневым относятся целая серия языков ассемблера, машинные коды, язык Forth, некоторые причисляют сюда также и С, хотя это уже вызывает некоторые споры. Высокоуровневых языков несравнимо больше – это и С++, Java, Python, Ruby, Фортран, Паскаль, PHP и многие другие. Но такая классификация не слишком хорошо передает реальное многообразие в ИТ сфере, ведь эволюция языков программирования уже далеко шагнула от тех времен, когда разработчикам приходилось использовать непосредственно низкоуровневые языки. Классификация языков программирования по уровню все больше уходит в прошлое, так как основные находящиеся в использовании языки все больше стирают грани своих возможностей.
Языки безопасные и небезопасные
Еще один вариант как-то дифференцировать языки между собой, это смотреть на уровень безопасности, который они предлагают. Современный мир во многом уже электронный – банковская информация, личные данные, пароли, переписка, все это требует защиты от посторонних, иначе возможны и воровство, и другие типы серьезного вредительства. Именно поэтому некоторые специалисты предлагают смотреть на языки программирования, как на безопасные и небезопасные. Такая классификация языков программирования по-своему интересна и полезна.
Безопасным считается тот язык, созданные на котором программы при компиляции не будут нарушать заложенной в них логики поведения. Это не обязательно означает, что такая программа не может содержать ошибок, такое вообще вряд ли возможно. Но она должна быть стабильной и не нарушать целостности вложенных в нее данных. К безопасным относят такие языки, как Standard ML, Ada, BitC, Lisp и некоторые другие. Как правило, это проекты для военных, банковских операций и серьезных реальных сфер деятельности.
Небезопасными являются языки, прямо противоположные безопасным – в созданных ими программах возможны такие ошибки, которые способны привести к проблемам доступа к памяти устройства, а также вызвать вообще крах всей программы. С, С++, Java и большинство других популярных и очень распространенных языков являются небезопасными. Крах написанных на них программ – это вполне бытовое и частое явление. Конечно, постепенное развитие этих языков делает их более безопасными и надежными.
Используемая парадигма программирования
Еще один способ поделить языки на классы – обозначить, какую ПП они реализуют. Можно долго говорить на эту тему, упоминая объектно-ориентированное, функциональное, конкатенативную парадигмы, но проще сделать это по-другому. Все парадигмы делятся всего на два типа: императивная и декларативная парадигмы.
Языки императивной парадигмы отличаются тем, что задают машине команды в виде таких себе приказов, которые компьютер должен выполнять в определенном порядке. Декларативная парадигма позволяет создавать формализованное задание, которое дает машине определенную свободу в порядке выполнения поставленных задач. Эта схема довольно наглядна и понятна. К первому типу языков относятся машинные коды, ассемблер, Форт. Яркие представители второго типа — SQL и HTML.
Это далеко не единственные варианты сортировки языков, но даже их достаточно, чтобы понять, насколько это объемная и сложная тема.
Классификация языков программирования — Codeforwin
На сегодняшний день написаны тысячи языков программирования. Каждый для какой-то конкретной цели. Некоторые языки программирования обеспечивают меньшую абстракцию от аппаратного обеспечения или вообще не обеспечивают ее. В то время как некоторые обеспечивают более высокую абстракцию. Чтобы отделить языки программирования на основе уровня абстракции от аппаратного обеспечения, они классифицируются по различным категориям.
Языки программирования в основном делятся на две основные категории — язык низкого уровня и язык высокого уровня.Однако существует еще одна категория, известная как язык среднего уровня. Каждый язык программирования принадлежит к одной из этих категорий и подкатегорий.
Классификация языков программирования
Подробнее о языках низкого, высокого и среднего уровня читайте в следующей главе.
Изображение ниже описывает уровень абстракции языков программирования от оборудования. Как видите, машинный язык не дает абстракции. Язык ассемблера обеспечивает меньшую абстракцию от оборудования.В то время как язык высокого уровня обеспечивает более высокий уровень абстракции.
Язык программирования уровня абстракции предоставляет
О Панкай
Панкай Пракаш — основатель, редактор и блогер Codeforwin. Он любит изучать новые технологии и писать статьи по программированию, особенно для начинающих. Он работает в Vasudhaika Software Sols. как инженер-разработчик программного обеспечения и руководит Codeforwin. Короче говоря, Панкадж — веб-разработчик, блоггер, ученик, любитель технологий и музыки.
Подписаться на: Facebook | Twitter | Google | Веб-сайт или Просмотреть все сообщения Pankaj
.
типов языков программирования для компьютеров
Ниже приведены два основных типа языков программирования:
- Язык низкого уровня
- Язык высокого уровня
Языки низкого уровня
Языки программирования, которые очень близки к машинному коду (нули и единицы), называются языками программирования низкого уровня.
Программные инструкции, написанные на этих языках, представлены в двоичной форме.
Примеры языков низкого уровня:
- машинный язык
- язык ассемблера
Машинный язык
Инструкции в двоичной форме, понятные компьютеру.
(CPU) без их перевода, называется
машинный язык или машинный код.
Машинный язык также известен как язык программирования первого поколения. Машинный язык — это основной язык
компьютер и программные инструкции на этом языке представлены в двоичной форме (то есть 0 и 1).
Этот язык разный для разных компьютеров.
Выучить машинный язык непросто.
Преимущество машинного языка
Единственное преимущество машинного языка состоит в том, что программа машинного языка работает очень быстро, потому что нет программы перевода.
требуется для ЦП.
Недостаток машинного языка
Вот некоторые из основных недостатков машинных языков:
- Machine Dependent — внутренняя конструкция каждого компьютера отличается от любого другого типа компьютера, машины
язык также отличается от одного компьютера к другому. Следовательно, освоив машинный язык одного
тип компьютера, если компания решит перейти на другой тип, то ее программисту придется изучить новую машину
язык и пришлось бы переписывать всю существующую программу. - Сложно изменить — трудно исправить или изменить этот язык. Проверка машинных инструкций, чтобы найти
ошибки очень сложно и требует много времени. - Сложно запрограммировать — компьютер выполняет программу на машинном языке напрямую и эффективно, его сложно программировать
на машинном языке. Программист на машинном языке должен знать аппаратную структуру компьютера.
Язык ассемблера
Это еще один язык программирования низкого уровня, потому что программные инструкции, написанные на этом языке, близки к машинному языку.
Ассемблер также известен как язык программирования второго поколения.
На языке ассемблера программист пишет инструкции, используя символьный код инструкции вместо двоичного кода.
Символьные коды — это значимые сокращения, например, SUB используется для работы подстанции, MUL — для умножения.
операция и так далее. Поэтому этот язык также называют символическим языком низкого уровня.
Набор программных инструкций, написанных на языке ассемблера, также называется мнемоническим кодом.
Ассемблер предоставляет средства для управления оборудованием.
Преимущество языка ассемблера
Вот некоторые из основных преимуществ использования ассемблера:
- Легко понять и использовать — за счет использования мнемоники вместо числовых кодов операций и символических имен для данных
расположение вместо числовых адресов, его гораздо проще понять и использовать по сравнению с машинным языком. - Ошибки легче обнаруживать и исправлять — программистам не нужно отслеживать место хранения данных и
инструкции, при написании программ на ассемблере делается меньше ошибок, а те, которые сделаны, легче
найти и исправить. - Легко изменить — язык ассемблера легче понять, его легче найти, исправить и изменить инструкцию
программы на ассемблере. - Эффективность машинного языка — программа на ассемблере будет такой же длины, как и полученный машинный язык
программа. Следовательно, без учета времени перевода, требуемого ассемблером, фактическое время выполнения сборки
языковая программа и эквивалентная программа на машинном языке.
Недостаток языков сборки
И вот некоторые из основных недостатков использования ассемблера:
- Машинно-зависимый — каждая инструкция программы на ассемблере переводится ровно на один машинный язык
инструкция, программы на ассемблере зависят от машинного языка. - Требуется знание аппаратного обеспечения — языки ассемблера зависят от машины, программист на ассемблере должен иметь
хорошее знание характеристик и логической структуры своего компьютера для написания хорошего компьютерного кода на языке ассемблера. - Кодирование машинного уровня — инструкция на языке ассемблера заменяется одной инструкцией на машинном языке. Следовательно, как
программы на машинном языке, написание программ на языке ассемблера также занимает много времени и является сложной задачей.
Языки высокого уровня
Языки программирования, близкие к человеческим языкам (например, английский язык), называются высокоуровневыми.
языков.
Примеры языков высокого уровня:
Языки высокого уровня похожи на английский.Инструкции программы написаны английскими словами, например print,
ввод и т. д. Но каждый язык высокого уровня имеет свои правила и грамматику для написания программных инструкций. Эти правила называются синтаксисом.
языка.
Программа, написанная на языке высокого уровня, должна быть переведена в машинный код перед ее запуском. У каждого языка высокого уровня есть свои
собственная программа-переводчик.
Языки программирования высокого уровня подразделяются на:
- Процедурные языки
- Непроцедурные языки
- Объектно-ориентированные языки программирования
Преимущества языков высокого уровня
Есть несколько преимуществ языков программирования высокого уровня.Наиболее важные преимущества:
- Легко выучить — языки высокого уровня выучить намного легче, чем языки низкого уровня. Заявления написаны
для программы аналогичны англоязычным операторам. - Легко понять — программу, написанную на языке высокого уровня одним программистом, легко понять
другой, потому что инструкции программы похожи на английский язык. - Простая в написании программа — на языке высокого уровня новую программу можно легко написать за очень короткое время.В
более крупное и сложное программное обеспечение можно разработать за несколько дней или месяцев. - Простота обнаружения и удаления ошибок — ошибки в программе легко обнаруживаются и устраняются. в основном ошибки
возникают при компиляции новой программы. - Функции встроенной библиотеки — Каждый язык высокого уровня предоставляет большое количество встроенных функций или процедур, которые
может использоваться для выполнения конкретной задачи при разработке новых программ. Таким образом можно сэкономить много времени программиста. - Machine Independence — программа, написанная на языке высокого уровня, не зависит от машины. Это означает, что программа
написанное на одном типе компьютера может быть выполнено на другом типе компьютера.
Ограничение языка высокого уровня
Есть два основных ограничения языков высокого уровня:
- Низкая эффективность — программа, написанная на языках высокого уровня, имеет более низкую эффективность, чем программа, написанная на машине / сборке
язык для выполнения той же работы.То есть программа, написанная на языках высокого уровня, приводит к инструкциям на нескольких машинных языках.
это не может быть оптимизировано, требует больше времени на выполнение и требует больше места в памяти. - Меньшая гибкость — языки высокого уровня менее гибкие, чем языки ассемблера, потому что они обычно не работают
иметь инструкции или механизм для управления процессором, памятью и регистром компьютера.
Процедурный язык
Процедурные языки также известны как языки третьего поколения (3GL).На процедурном языке программа
разработан с использованием процедур.
Процедура — это последовательность инструкций с уникальным именем. Инструкции процедуры выполняются со ссылкой
своего имени.
В процедурных языках программирования программные инструкции записываются в последовательности или в определенном порядке, в котором они должны
выполняться для решения конкретной проблемы. Это означает, что порядок команд программы очень важен.
Некоторые популярные процедурные языки описаны ниже:
- FORTRAN означает перевод формул.Он был разработан в 1957 году для компьютеров IBM. Это был первый самый ранний кайф
язык программирования уровня, используемый для представления концепции модульного программирования. Его много раз пересматривали. Его обычно используют
версия FORTRAN 77 - COBOL — это общий бизнес-ориентированный язык. Он был разработан в 1959 году. Этот язык высокого уровня
был специально разработан для бизнеса и коммерческих приложений. Он подходил для обработки большого количества данных, таких как:- Подготовить платежную ведомость
- Для обработки кредитовых и дебетовых счетов
- Для управления системой инвентаризации и многими другими бизнес-приложениями
- Pascal — этот язык программирования назван в честь Блеза Паскаля, математика и ученого, который
изобрел первый механический калькулятор.Структурированный язык программирования и популярен в развитии информатики.
в 1971 году. Подходит для научной сферы. - ADA — разработан в 1980 году и назван в честь леди Августы ADA. Она была первым программистом.
Язык структуры высокого уровня Паскаль использовался в качестве модели для разработки языка ADA.
Этот язык в основном используется в оборонных целях, например, для управления боевым оружием, таким как ракеты и т. Д. - Язык C — Деннис Ричи и Брайан Карниган разработали его в 1972 году в Bell Laboratories.Это язык высокого уровня
но он также может поддерживать коды языка ассемблера (коды низкого уровня). Это потому, что язык C также упоминается
как язык среднего уровня. Программа, написанная на C, может быть скомпилирована и запущена на любом типе компьютера. Другими словами
программы, написанные на языке C, переносимы. Язык C — это структурированный язык программирования. Основная особенность языка C —
что он использует большое количество встроенных функций для выполнения различных задач. Пользователь также может создавать свои собственные функции.
Непроцедурные языки
Непроцедурные языки программирования также известны как языки четвертого поколения. В непроцедурном программировании
языков порядок команд программы не важен. Значение придается только тому, что должно быть
сделанный.
Используя непроцедурный язык, пользователь / программист пишет на английском языке, как инструкции для извлечения данных из
базы данных. Эти языки проще в использовании, чем процедурные. Эти языки обеспечивают удобный
инструменты разработки программ для написания инструкций.Программистам не приходится тратить много времени на кодирование программы.
Наиболее важные непроцедурные языки и инструменты рассматриваются ниже:
- SQL — это язык структурированных запросов. это очень популярный язык доступа к базам данных и специально используется
для доступа и управления данными баз данных. Слово «запрос» означает, что этот язык используется для
запросы (или запросы) для выполнения различных операций с данными базы данных. Однако SQL также можно использовать для
создавать таблицы, добавлять данные,
удалять данные, обновлять данные таблиц базы данных и т. д. - RPG — генератор программ отчетов. Этот язык был представлен IBM для создания бизнес-отчетов.
Обычно RPG используется для разработки приложений на компьютерах IBM среднего уровня, таких как AS / 400.
Языки объектно-ориентированного программирования
Концепция объектно-ориентированного программирования была представлена в конце 1960-х годов, но теперь она стала самым популярным подходом к
разрабатывать программное обеспечение.
В объектно-ориентированном программировании программное обеспечение разрабатывается с использованием набора взаимодействующих объектов.Объект — это компонент программы
который имеет набор модулей и структуру данных. Модули также называются методами и используются для доступа к данным из объекта. В
Современным методом проектирования программ является объектно-ориентированный подход. Это очень простой подход, при котором программа, разработанная с использованием
объекты. Созданный объект для любой программы, его можно повторно использовать в любой другой программе.
В настоящее время наиболее популярными и часто используемыми языками объектно-ориентированного программирования (ООП) являются C ++ и Java.
Компьютерный фундаментальный онлайн-тест
«Предыдущее руководство
Следующее руководство »
.
Языки низкого уровня — преимущества и недостатки
Язык низкого уровня, сокращенно LLL , — это языки, близкие к набору команд машинного уровня. Они обеспечивают меньшую или полную абстракцию от оборудования. Язык программирования низкого уровня напрямую взаимодействует с регистрами и памятью. Поскольку инструкции, написанные на языках низкого уровня, зависят от машины. Программы, разработанные с использованием языков низкого уровня, зависят от машины и не переносимы.
Язык низкого уровня не требует компилятора или интерпретатора для перевода исходного кода в машинный код.Ассемблер может переводить исходный код, написанный на языке низкого уровня, в машинный код.
Программы, написанные на языках низкого уровня, быстры и эффективны с точки зрения памяти. Однако для программистов — кошмар — писать, отлаживать и поддерживать низкоуровневые программы. В основном они используются для разработки операционных систем, драйверов устройств, баз данных и приложений, требующих прямого доступа к оборудованию.
Языки низкого уровня подразделяются на еще две категории — машинный язык и язык ассемблера.
Классификация языков программирования низкого уровня
Машинный язык
Машинный язык — это язык, наиболее близкий к аппаратному. Он состоит из набора инструкций, которые выполняются непосредственно компьютером. Эти инструкции представляют собой последовательность двоичных битов. Каждая инструкция выполняет очень конкретную и небольшую задачу. Инструкции, написанные на машинном языке, зависят от машины и варьируются от компьютера к компьютеру.
Пример: SUB AX, BX = 00001011 00000001 00100010 — это набор команд для вычитания значений двух регистров AX и BX .
В первые дни программирования программы писались только на машинном языке. Каждая программа была написана как последовательность двоичных файлов.
Программист должен иметь дополнительные знания об архитектуре конкретной машины, прежде чем программировать на машинном языке. Разработка программ с использованием машинного языка — утомительная работа. Так как очень сложно запомнить последовательность двоичных файлов для разных архитектур компьютеров. Поэтому в настоящее время на практике это немного.
Язык ассемблера
Язык ассемблера является усовершенствованием по сравнению с машинным языком. Подобно машинному языку, ассемблер также напрямую взаимодействует с оборудованием. Вместо того, чтобы использовать необработанную двоичную последовательность для представления набора команд, язык ассемблера использует мнемонику .
Мнемоника — это короткие сокращенные английские слова, используемые для обозначения компьютерных инструкций. Каждая инструкция в двоичном формате имеет определенную мнемонику. Они зависят от архитектуры, и существует список отдельных мнемоник для разных компьютерных архитектур.
Примеры мнемоники — ADD, MOV, SUB и т. Д.
Мнемоника избавила программистов от запоминания двоичной последовательности для конкретных инструкций. Так как английские слова вроде ADD, MOV, SUB легче запомнить, чем двоичная последовательность 10001011. Тем не менее, программисту все равно придется запоминать различные мнемоники для разных компьютерных архитектур.
В языке ассемблера используется специальная программа под названием ассемблер . Ассемблер переводит мнемонику в определенный машинный код.
Ассемблер все еще используется. Он используется для разработки операционных систем, драйверов устройств, компиляторов и других программ, требующих прямого доступа к оборудованию.
Преимущества языков низкого уровня
- Программы, разработанные с использованием языков низкого уровня, быстры и эффективны с точки зрения памяти.
- Программисты могут лучше использовать процессор и память, используя язык низкого уровня.
- Нет необходимости в компиляторе или интерпретаторах для перевода исходного кода в машинный код.Таким образом сокращается время компиляции и интерпретации.
- Языки низкого уровня обеспечивают непосредственное управление регистрами и хранилищем компьютера.
- Он может напрямую связываться с аппаратными устройствами.
Недостатки языков низкого уровня
- Программы, разработанные с использованием языков низкого уровня, машинно-зависимы и не переносимы.
- Сложно разрабатывать, отлаживать и поддерживать.
- Низкоуровневые программы более подвержены ошибкам.
- Низкоуровневое программирование обычно приводит к низкой производительности программирования.
- Программист должен иметь дополнительные знания о компьютерной архитектуре конкретной машины для программирования на языке низкого уровня.
.
Языкознание | наука | Британника
Языкознание , научное изучение языка. Это слово впервые было использовано в середине XIX века, чтобы подчеркнуть разницу между новым подходом к изучению языка, который тогда развивался, и более традиционным подходом филологии. Различия были и остаются в основном вопросом отношения, акцента и цели. Филолог занимается прежде всего историческим развитием языков, которое проявляется в письменных текстах и в контексте связанной с ними литературы и культуры.Лингвист, хотя его могут интересовать письменные тексты и развитие языков с течением времени, склонен отдавать приоритет разговорным языкам и проблемам их анализа в том виде, в каком они действуют в данный момент времени.
Сфера лингвистики может быть разделена на три дихотомии: синхроническая и диахроническая, теоретическая и прикладная, микролингвистика и макролингвистика. Синхронное описание языка описывает язык таким, каким он является в данный момент; Диахроническое описание связано с историческим развитием языка и структурными изменениями, которые в нем произошли.Целью теоретической лингвистики является построение общей теории структуры языка или общей теоретической основы для описания языков; Целью прикладной лингвистики является применение результатов и методов научного изучения языка для решения практических задач, особенно для разработки усовершенствованных методов обучения языку. Термины «микролингвистика» и «макролингвистика» еще не получили широкого распространения и фактически используются здесь исключительно для удобства.Первое относится к более узкому, а второе — к гораздо более широкому взгляду на область лингвистики. Согласно микролингвистической точке зрения, языки следует анализировать ради самих себя и без привязки к их социальной функции, к тому, как они усваиваются детьми, к психологическим механизмам, лежащим в основе производства и восприятия речи, к литературным и языковым особенностям. эстетическая или коммуникативная функция языка и т. д. Напротив, макролингвистика охватывает все эти аспекты языка.Терминологическое признание получили различные области макролингвистики: психолингвистика, социолингвистика, антропологическая лингвистика, диалектология, математическая и компьютерная лингвистика и стилистика. Макролингвистику нельзя отождествлять с прикладной лингвистикой. Применение лингвистических методов и концепций к обучению языку может включать другие дисциплины, чего не делает микролингвистика. Но, в принципе, в каждой области макролингвистики есть теоретический аспект, равно как и в микролингвистике.
Большая часть этой статьи посвящена теоретической синхронной микролингвистике, которая обычно считается центральной частью предмета; впредь оно будет сокращаться как теоретическая лингвистика.
История языкознания
Более ранняя история
Незападные традиции
Лингвистические спекуляции и исследования, насколько известно, проводились лишь в небольшом количестве обществ. В той мере, в какой изучение месопотамского, китайского и арабского языков касалось грамматики, их подходы были настолько тесно связаны с особенностями этих языков и были так мало известны европейскому миру до недавнего времени, что практически не оказали влияния на западные лингвистические традиции.Китайская лингвистическая и филологическая наука насчитывает более двух тысячелетий, но интерес этих ученых был в основном сосредоточен на фонетике, письме и лексикографии; их рассмотрение грамматических проблем было тесно связано с изучением логики.
Получите эксклюзивный доступ к контенту из нашего первого издания 1768 с вашей подпиской.
Подпишитесь сегодня
Безусловно, самая интересная незападная грамматическая традиция — и самая оригинальная и независимая — это индийская, которая насчитывает по крайней мере два с половиной тысячелетия и завершается грамматикой Панини V века до нашей эры.Санскритская традиция повлияла на современные лингвистические науки тремя основными способами. Как только санскрит стал известен западному ученому миру, последовал распад сравнительной индоевропейской грамматики, и были заложены основы всей системы сравнительной филологии и исторического языкознания XIX века. Но для этого санскрит был просто частью данных; Грамматика в Индии почти не играла непосредственной роли. Однако исследователи девятнадцатого века признали, что местная традиция фонетики в древней Индии значительно превосходила западные знания, и это имело важные последствия для роста науки фонетики на Западе.В-третьих, в правилах или определениях (сутрах) Панини есть замечательно тонкий и проницательный отчет о грамматике санскрита. Построение предложений, составных существительных и т. Д. Объясняется с помощью упорядоченных правил, действующих на лежащие в основе структуры, в манере, поразительно похожей отчасти на способы современной теории. Как можно было представить, эта проницательная индийская грамматическая работа вызвала большой интерес у лингвистов-теоретиков ХХ века. Изучение индийской логики в отношении панинианской грамматики наряду с аристотелевской и западной логикой в отношении греческой грамматики и ее последователей могло бы пролить свет на понимание.
В то время как в древнем китайском обучении отдельная область обучения, которую можно было бы назвать грамматикой, почти не прижилась, в древней Индии сложная версия этой дисциплины развивалась рано вместе с другими науками. Несмотря на то, что изучение грамматики санскрита могло первоначально иметь практическую цель сохранить священные ведические тексты и комментарии к ним в чистом виде, изучение грамматики в Индии в 1-м тысячелетии до н. Э. Уже стало интеллектуальной целью само по себе.
.