Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Обзор языков программирования высокого уровня (Общие понятия о языках программирования)

Содержание:

ВВЕДЕНИЕ

Практически каждый (алгоритмический) язык программирования предназначен для записи некоторого множества алгоритмов. Соответственно, учитывая, что алгоритмом, как правило, называют набор инструкций, понятных исполнителю, и то, что исполнителем в данном случае является ЭВМ, легко определить набор механизмов (средств управления исполнителем), которыми обязан обладать каждый язык программирования. Знание этих базовых механизмов позволяет программисту довольно легко переходить с одного языка на другой (хотя бы по той простой причине, что в любом новом языке эффективнее искать известные вещи, чем натыкаться на неизвестные). Кроме того, зачастую оно (знание) позволяет легче понять структуру языка в целом.

Классическое операционное и/или процедурное программирование требует от программиста детального описания того, как решать задачу, т.е. формулировки алгоритма и его специальной записи. При этом ожидаемые свойства результата обычно не указываются. Основные понятия языков этих групп - оператор и данные. При процедурном подходе операторы объединяются в группы - процедуры. Струк­турное программирование в целом не выходит за рамки этого направления, оно лишь дополнительно фиксирует некоторые полезные приемы технологии програм­мирования.

Принципиально иное направление в программировании связано с методоло­гиями (иногда говорят «парадигмами») непроцедурного программирования. К ним можно отнести объектно-ориентированное и декларативное программирование. Объектно-ориентированный язык создает окружение в виде множества независимых объектов. Каждый объект ведет себя подобно отдельному компьютеру, их можно использовать для решения задач как «черные ящики», не вникая во внутренние механизмы их функционирования. Из языков объектного про­граммирования, популярных среди профессионалов, следует назвать, прежде всего, Си++, для более широкого круга программистов предпочтительны среды типа Delphi и Visual Basic.

Целью курсовой работы является обзорный анализ языков программирования высокого уровня.

Предметом исследования представлены языки программирования высокого уровня.

Исходя из цели были определены задачи исследования:

  1. Дать общую характеристику структуры языков программирования;
  2. Определить общее понятие о языках программирования, проанализировать алгоритмические механизмы и механизмы управления данными.
  3. Рассмотреть различные уровни языков программирования (низкий и высокий). Провести обзор языков программирования высокого уровня, охарактеризовать их.

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

ГЛАВА 1. ОБЩАЯ СТРУКТУРА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

1.1 Общие понятия о языках программирования

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

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

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

Языки программирования – искусственные языки. Они отличаются от естественных человеческих языков малым количеством слов, значение которых понятно транслятору (эти слова называются ключевыми ), и довольно жесткими требованиями по форме записи операторов (совокупность этих требований образует грамматику и синтаксис языка программирования). Нарушения формы записи приводят тому, что транслятор не может правильно выполнить перевод и выдает сообщение об ошибке.

Что же нужно, чтобы «создать язык программирования»? На первый взгляд, для этого необходимо определить какие инструкции в нем могут использоваться (их называют операторами ), жестко утвердить список ключевых слов, которые допустимо использовать, и разработать правила записи каждого из операторов (правила синтаксиса). Однако этого не достаточно. Это лишь идея языка программирования. Для того, чтобы он имел практическое применение, следует разработать программу, способную транслировать текст, записанный по всем правилам данного языка в машинный код, то есть создать транслятор. Таким образом, именно транслятор представляет собой конкретную реализацию идеи языка программирования.

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

Трансляция – это перевод. Если мы посмотрим, как работают переводчики с иностранных языков, то тоже увидим, что существует два подхода: синхронный перевод и перевод текстов.

Синхронный переводчик «ловит» услышанную фразу и переводит ее как можно ближе к смыслу. В момент перевода он не знает, какая фраза последует далее, и не успевает учитывать фразы, высказанные ранее. Он как бы в любой момент времени работает с одной конкретной фразой. Для перевода каких-либо специфических понятий ему приходится выстраивать целые конструкции. Фразы синхронного перевода обычно длиннее, чем их оригинал, и не отличаются изяществом.

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

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

Компиляторы обрабатывают программу в несколько приемов. Сначала они несколько раз просматривают исходный текст (обычно он называется исходным кодом), находят общие места, выполняют проверку на отсутствие ошибок синтаксиса и внутренних противоречий, и лишь потом переводят текст в машинный код. В результате программа получается компактной и эффективной.

Если программа написана на интерпретируемом языке программирования, то ее можно выполнить только на том компьютере, на котором предварительно будет установлен интерпретатор, ведь он должен участвовать в исполнении программы. Программы, написанные на компилируемых языках программирования, в посредниках не нуждаются – после компиляции уже получен машинный код, в котором есть все необходимее для работы процессора. Поэтому такие программы работают на любом компьютере и делают это в сотни раз быстрее. Это достоинство компилируемых языков программирования.

Однако у программ, написанных на интерпретируемых языках программирования, есть другое преимущество. Так как мы можем исполнять их только под управлением интерпретатора, то соответственно мы можем в любой момент времени остановить работу программы, посмотреть ее операторы, внести нужные изменения, вновь запустить и т. д. Содержание программы открыто для пользователя. Для откомпилированных программ все это сделать практически невозможно. После компиляции программы ее исходный текст остается только у автора. Все остальные пользователи получают машинный код, который можно исполнять, но практически нельзя ни посмотреть, ни изменить.

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

1.2 Алгоритмические механизмы (управляющие структуры)

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

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

  1. Оператор условия. Необходимость его присутствия в языке очевидна. Предоставляет возможность выполнить то или иное действие в зависимости от истинности некоторого логического условия. Практически во всех языках называется if.

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

Типичный пример:

if (a=4) a=a+1; 
else a=b-2; //C++

  1. Оператор множественного выбора. Некоторые алгоритмы требуют выполнения более двух различных действий в зависимости от некоторого условия (всегда не логического; к примеру от значения некоторой переменной), то есть ветвления более чем на 2 ветки. Реализация такого ветвления с помощью условного оператора нецелесообразна. Как следствие в большинство языков программирования включен оператор множественного выбора.

Суть его, как правило, в следующем. Некоторое выражение (как правило это просто переменная), которое к моменту выполнения оператора может принимать несколько различных значений, сравнивается с одним из заранее определенных программистом значений, и в случае совпадения выполняется соответствующий оператор.

case c of
3: c: =8;
4: c:= b-3;
else b:= 4;
end; {Pascal}

  1. Параметрический цикл. Часто некоторые действия необходимо повторять более одного раза, причем количество повторений можно заранее вычислить. К примеру - обработать последовательно элементы некоторого массива. Для эффективной реализации такого рода алгоритмов в язык программирования включают циклы с параметром.

Наиболее часто такие циклы имеют следующий смысл. Некоторой переменной, называемой параметром присваивается некоторое начальное значение. Затем выполняются повторяемые операторы, называемые телом цикла, после чего параметр изменяется на некоторое значение, называемое шагом. Новое значение параметра сравнивается с конечным значением, и, если значение параметра не превысило конечное значение, все (выполнение тела цикла и изменение параметра) повторяется; в противном случае цикл считается завершенным.

Do 100 I=3,8,1
*операторы тела цикла
100 Continue 
* Fortran IV

4. Операторы цикла с условием. Однако не всякий алгоритм позволяет заранее предсказать количество повторений тех или иных действий: довольно часто некоторые действия следует повторять вплоть до достижения некоторой цели (некоторого условия). Соответственно, для предоставления программисту возможности простой и эффективной реализации такого рода алгоритмов в языки программирования высокого уровня включают циклы с условием окончания.

Суть их в следующем. Повторяемые операторы, называемые все так же телом цикла, повторяются до тех пор пока выполняется некоторое логическое условие.

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

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

- цикл с постпроверкой выполнится как минимум один раз вне зависимости от значения условия продолжения.

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

Do While Not EOF()
&& Тело цикла c предпроверкой
EndDo && FoxPro
Repeat
{Тело цикла с постпроверкой}
Until i=4; {Pascal}

5. Оператор безусловного перехода.

И, наконец, практически ни один из языков программирования, за исключением, пожалуй, только FoxPro, не обходится без оператора безусловного перехода, полезность которого ставится под сомнение большинством программистов. Суть его общеизвестна и заключается в следующем: как только данный оператор встречается в программе, производится переход по адресу в нем указанному. Этот адрес как правило называется меткой и представляет из себя либо введенную программистом лексему, либо номер строки, как, например, в следующем примере:

157 GoTo 342 (BASIC)

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

1.3 Механизмы управления данными

Механизмы управления данными в общем случае делятся на три глубинно взаимосвязанных части: механизмы размещения данных в памяти, механизмы доступа к ним и механизмы пересылки. При этом если последние практически неотличимы в различных языках программирования (как следствие простоты), то первые и вторые могут кардинально различаться как в синтаксисе, так и в реализации. Поэтому имеет смысл остановиться лишь на наиболее общих их чертах.

- Механизмы предпосылки данных. Предоставляют программисту возможность перенести значение каким-либо образом размещенных в памяти данных в другие (тоже размещенные) данные. Попросту говоря позволяет присваивать одним переменным значение других переменных. Реализуются с помощью либо оператора (Pascal), либо операции (C++). Стоит отметить, что перемещение самих данных (изменение месторасположения переменных) не реализовано практически ни в одном языке программирования.

a:= b; {Pascal}
a=b=c=d; //С++

Первый из приведенных примеров демонстрирует реализацию с помощью оператора, второй - с помощью операции (напомним, что операция обладает результатом).

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

var
a: byte; {Pacal}

float c; // C++

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

struct Point {
int x,y;
char color;} //C++

D: Array[2..5] Of Word; {Pascal}

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

Как правило, для размещения данных в памяти (точнее - для указания компилятору, что под данные необходимо отвести место) достаточно лишь указать (в соответствии с синтаксисом языка) идентификатор переменной и идентификатор типа этой переменной присваиваемого. Остальное - забота компилятора.

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

- Механизмы доступа к данным. Для предоставления программисту простого и легкого доступа к различным объектам, все языки программирования высокого уровня используют идентификаторы. С идентификатором компилятор однозначно сопоставляет некоторый адрес в памяти и подставляет его (адрес) в машинный код на этапе компиляции программы. Естественно по идентификатору (адресу) можно произвести чтение и/или запись какого либо значения, то есть получить полный доступ к данным (стандартных типов).

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

Каждый элемент структуры снабжается специфическим именем (идентификатором), которое сопоставляется со смещением этого элемента относительно начала структуры. Таким образом полный доступ к элементам структуры обеспечивается использованием двух идентификаторов и базовой адресации.

Point.x = Point.y-3; //C++

Как видно из определения каждому элементу массива сопоставляется индекс. Следовательно, учитывая, что размер всех элементов одинаков, доступ к каждому элементу массива может производиться с помощью индексной адресации.

D[3]:= D[2]+D[4]; {Pascal}

Выполнение любых алгоритмов бесполезно, если оно не сопровождается демонстрацией результатов и вводом исходных данных. Поэтому каждый язык программирования, за исключением, пожалуй, С и С++, содержит специальные операторы ввода-вывода. Кроме того, вместо использования стандартных операторов ввода-вывода языка, за счет управления аппаратными средствами ЦВМ, программист может производить ввод и вывод информации более «продвинутыми» способами. Соответственно, для этого необходимы:

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

1. механизмы общения с ОС;

  1. механизмы прямого доступа к аппаратуре.

- механизмы структуризации. Реализация хоть сколько-нибудь сложных

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

Дальнейшее развитие данной концепции достаточно давно (около 1978 года) привело к идее объединения структур данных с их структурными свойствами, из чего выросла концепция объектно-ориентированного программирования. Однако, ее реализация слишком различна для разных языков программирования (а в некоторых до сих пор полностью не реализована), чтобы выносить ее в общий обзор языков программирования.

Этим набором, собственно, и исчерпываются почти все средства большинства языков программирования.

ГЛАВА 2. ОБЗОР ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ

2.1 Уровни языков программирования

Существует два уровня языков программирования: языки низкого уровня и языки высокого уровня .

Язык программирования низкого уровня – это язык программирования, созданный для использования со специальным типом процессора и учитывающий его особенности. В данном случае «низкий уровень» не значит «плохой». Имеется в виду, что язык близок к машинному коду (он позволяет непосредственно реализовать некоторые команды процессора).

Языки низкого уровня мало похожи на нормальный, привычный человеку язык. Большие, громоздкие программы на таких языках пишутся редко. Зато если программа будет написана на таком языке, то она будет работать быстро, занимая маленький объем и допуская минимальное количество ошибок. Чем ниже и ближе к машинному уровень языка, тем меньше и конкретнее задачи, которые ставятся перед каждой командой.

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

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

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

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

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

Достоинства языков программирования высокого уровня:

- алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста;

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

- конструкции операторов задаются в удобном для человека виде;

- поддерживается широкий набор типов данных.

Существуют также как универсальные, так и специализированные языки программирования.

2.2 Обзор языков программирования высокого уровня

Процедурное или императивное  программирование есть отражение фон Неймановской архитек­туры компьютера. Программа на процедурном языке состоит из пос­ледовательности команд, определяющих процедуру решения задачи. Основным является оператор присваивания, предназначенный для определения и изменения содержимого памяти компьютера. Концеп­ция памяти как места хранения данных, значения которых можно изменять операторами программы, является фундаментальным в императивном программировании.

Выполнение программы сводится к последовательному выпол­нению операторов с целью преобразования исходного состояния па­мяти, т.е. программа последовательно обновляет содержимое памя­ти, изменяя его от исходного состояния до результирующего.

Языки программирования можно разбить на 3 группы: процедурные, функциональные и логические. Основой всех языков программирования являются процедурные языки, поскольку в основе работы компьютера (центрального процессора) на самом низком уровне лежит возможность исполнять только примитивные команды, явно указывающие, что делать процессору. Языки других типов можно рассматривать как надстройки над процедурными языками программирования. В этих языках (функциональные и логические) заложены и реализованы определенные математические модели, позволяющие более эффективно программировать некоторые специфические типы задач. Но трансляторы, библиотеки и другие средства этих языков программирования все равно реализованы посредством процедурных языков программирования.

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

Логические языки программирования. Языки программирования данного типа основываются на формальной логике и булевой алгебре. Программа не содержит в себе явных алгоритмов. Задаётся описание условий задачи и логических соотношений, по которым система программирования строит дерево вывода и находит решения задачи. Язык Пролог является логическим языком программирования.

Функциональные языки программирования. Функциональное программирование основывается на использование списков и функций. Переменные могут отсутствовать вообще. Язык Лисп есть функциональный язык программирования.

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

Большинство современных процедурных языков программирования развивается в направлении объектно-ориентированного программирования.

Следует кратко остановиться на разновидности языков программирования высокого уровня.

1. Одним из первых процедурных языков программирования высокого уровня стал FORTRAN (Фортран). Это первый компилируемый язык, созданный Джимом Бэкусом в 50-е годы. Программисты, разрабатывавшие программы исключительно на ассемблере, выражали серьезное сомнение в возможности появления высокопроизводительного языка высокого уровня, поэтому основным критерием при разработке компиляторов Фортрана являлась эффективность исполняемого кода. Хотя в Фортране впервые был реализован ряд важнейших понятий программирования, удобство создания программ было принесено в жертву возможности получения эффективного машинного кода. Однако для этого языка было создано огромное количество библиотек, начиная от статистических комплексов и кончая пакетами управления спутниками, поэтому Фортран продолжает использоваться в некоторых организациях.

2. COBOL (Кобол). Это компилируемый язык для применения в экономической области и решения бизнес-задач, разработанный в начале 60-х годов. Он отличается большой «многословностью» — его операторы иногда выглядят как обычные английские фразы. В Коболе были реализованы очень мощные средства работы с большими объемами данных, хранящимися на различных внешних носителях. На этом языке создано очень много приложений, которые эксплуатируются и сегодня.

3. Algol (Алгол). Компилируемый язык, созданный в 1960 году. Он был призван заменить Фортран, но из-за более сложной структуры не получил широкого распространения. В 1968 году была создана версия Алгол 68, по своим возможностям опережающая многие языки программирования, однако из-за отсутствия достаточно эффективных компьютеров для нее не удалось своевременно создать хорошие компиляторы.

4. Pascal (Паскаль). Язык Паскаль, созданный в конце 70-х годов основоположником множества идей современного программирования Никлаусом Виртом, во многом напоминает Алгол, но в нем ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его при создании крупных проектов.

5. Basic (Бейсик). Для этого языка имеются и компиляторы, и интерпретаторы. Он создавался в 60-х годах в качестве учебного языка и очень прост в изучении.

6. С (Си). Данный язык был создан в лаборатории Bell и первоначально не рассматривался как массовый. Он планировался для замены ассемблера, чтобы иметь возможность создавать столь же эффективные и компактные программы и в то же время не зависеть от конкретного типа процессора. Си во многом похож на Паскаль и имеет дополнительные средства для прямой работы с памятью (указатели). На этом языке в 70-е годы написано множество прикладных и системных программ и ряд известных операционных систем (Unix).

7. C++ (Си++). Это объектно-ориентированное расширение языка Си, созданное Бьярном Страуструпом в 1980 году. Множество новых мощных возможностей, позволивших резко повысить производительность программистов, наложилось на унаследованную от языка Си определенную низкоуровневость, в результате чего создание сложных и надежных программ потребовало от разработчиков высокого уровня профессиональной подготовки.

8. Java (Джава, Ява). Этот язык был создан компанией Sun в начале 90-х годов на основе Си++. Он призван упростить разработку приложений на основе Си++ путем исключения из него всех низкоуровневых возможностей. Но главная особенность этого языка — компиляция не в машинный код, а в платформно-независимый байт-код (каждая команда занимает один байт). Этот байт-код может выполняться с помощью интерпретатора — виртуальной Java-машины JVM (Java Virtual Machine) версии которой созданы сегодня для любых платформ. Благодаря наличию множества Java-машин программы на Java можно переносить не только на уровне исходных текстов, но и на уровне двоичного байт-кода. Особое внимание в развитии этого языка уделяется двум направлениям: поддержке всевозможных мобильных устройств и микрокомпьютеров, встраиваемых в бытовую технику (технология Jini) и созданию платформно-независимых программных модулей, способных работать на серверах в глобальных и локальных сетях с различными операционными системами (технология Java Beans). Пока основной недостаток этого языка — невысокое быстродействие, так как язык Ява интерпретируемый.

9. С# (Си Шарп). В конце 90-х годов в компании Microsoft под руководством Андерса Хейльсберга был разработан язык С#. В нем воплотились лучшие идеи Си и Си++, а также достоинства Java. Правда, С#, как и другие технологии Microsoft, ориентирован на платформу Windows. Однако формально он не отличается от прочих универсальных языков. Язык С# предназначен для быстрой разработки .NET-приложений, и его реализация в системе Microsoft Visual Studio . NET содержит множество особенностей, привязываю­щих С# к внутренней архитектуре Windows и платформы .NET.

10. PL/1 (ПЛ/1). В середине 60-х годов компания IBM решила взять все лучшее из языков Фортран, Кобол и Алгол. В результате в 1964 году на свет появился новый компилируемый язык программирования, который получил название Programming Language One. В этом языке было реализовано множество уникальных решении, полезность которых удается оценить только спустя 33 года, в эпоху крупных программных систем. По своим возможностям ПЛ/1 значительно мощнее многих других языков (Си, Паскаля). Например, в ПЛ/1 присутствует уникальная возможность указания точности вычислений — ее нет даже у Си++ и Явы. Этот язык и сегодня продолжает поддерживаться компанией IBM.

11. Smalltalk (Смолток). Работа над этим языком началась в 1970 году в исследовательской лаборатории корпорации XEROX, а закончились спустя 10 лет, воплотившись в окончательном варианте интерпретатора SMALLTALK-80. Данный язык оригинален тем, что его синтаксис очень компактен и базируется исключительно на понятии объекта. В этом языке отсутствуют операторы или данные. Всё, что входит в Смолток, является объектами, а сами объекты общаются друг с другом исключительно с помощью сообщений (например, появление выражения I + 1 вызывает посылку объекту I сообщения «+», то есть «прибавить», с параметром 1, который считается не числом-константой, а тоже объектом). Больше никаких управляющих структур, за исключением «оператора» ветвления (на самом деле функции принадлежащей стандартному объекту), в языке нет, хотя их можно очень просто смоделировать. Сегодня версия VisualAge forSmalltalk активно развивается компанией IBM.

12. LISP (Лисп). Интерпретируемый язык программирования, созданный в 1960 году Джоном Маккарти. Ориентирован на структуру данных в форме списка и позволяет организовывать эффективную обработку больших объемов текстовой информации.

13. Prolog (Пролог).Создан в начале 70-х годов Аланом Колмероэ. Программа на этом языке, в основу которого положена математическая модель теории исчисления предикатов, строится из последовательности фактов и правил, а затем формулируется утверждение, которое Пролог будет пытаться доказать с помощью введенных правил. Человек только описывает структуру задачи, а внутренний «мотор» Пролога сам ищет решение с помощью методов поиска и сопоставления.

14. Ada (Ада). Назван по имени леди Огасты Ады Байрон, дочери английского поэта Байрона. В 1980 году сотни экспертов Министерства обороны США отобрали из 17 вариантов именно этот язык, разработанный небольшой группой под руководством Жана Ишбиа. Он удовлетворил на то время все требования Пентагона, а к сегодняшнему дню в его развитие вложены десятки миллиардов долларов. Структура самого языка похожа на Паскаль. В нем имеются средства строгого разграничения доступа к различным уровням спецификаций, доведена до предела мощность управляющих конструкций.

15. Forth (Форт). Результат попытки Чарльза Мура в 70-х годах создать язык, обладающий мощными средствами программирования, который можно эффективно реализованным на компьютерах с небольшими объемами памяти, а компилятор мог бы выдавать очень быстрый и компактный код, то есть служил заменой ассемблеру. Однако сложности восприятия программного текста, записанного в непривычной форме, сильно затрудняли поиск ошибок, и с появлением Си язык Форт оказался забытым.

В настоящее время существуют специализированные языки программирования для некоторых областей – баз данных, Интернет (скриптовые, тэговые, - о них в соответствующих разделах), моделирования и др.

Например, языки моделирования используются при создании программ и формировании структур баз даны. Такие языки используют формальные способы их представления — формальные нотации, с помощью которых можно визуально представить (изобразить с помощью мыши) объекты программы и взаимосвязи между ними в системе, имеющей специализированный редактор и генератор исходных текстов программ на основе созданной модели. Такие системы называются CASE-системами. В них активно применяются нотации IDEF, а в последнее время все большую популярность завоевывает язык графического моделирования UML.

ЗАКЛЮЧЕНИЕ

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

Многие языки, первоначально разработанные для боль­ших и малых ЭВМ, в дальнейшем были приспособлены к персональным компьюте­рам. Хорошо вписались в ПК не только Паскаль, Бейсик, Си, Лого, но и ЛИСП, ПРОЛОГ - языки искусственного интеллекта.

В течение многих лет программное обеспечение строилось на основе операцио­нных и процедурных языков, таких как Фортран, Бейсик, Паскаль, Ада, Си. И сегодня современные версии этих и им подобных языков (Модула, Форт и др.) доминируют при разработке прикладных программных средств. Однако по мере эволюции языков программирования получили широкое распространение и другие, принципиально иные, подходы к созданию программ.

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

Рассмотрим некоторые языки программирования высокого уровня, наиболее популярные: SQL Специализированный язык программирования предназначен в первую очередь для работы с системами управления базами данных и их программирования. SQL переводится как «специализированный язык запросов». Поскольку в последние десятилетия рынок СУБД вырос многократно, популярность этого языка не становится сюрпризом. Существуют различные мнения касательно будущего этого языка. Однозначно считается, что технология создания реляционных баз данных была на высоте, однако её время уходит. Необходимость развития в связи с возрастающими объёмами обрабатываемых данных приводит специалистов к мысли, что в будущем человечеству просто необходим переход от реляционных технологий к постреляционным, но с учетом сохранения совместимости с существующими банками данных. Javascript По праву занимает второе место среди языков программирования высокого уровня. Прост в освоении, удобен в работе. Повышенная по сравнению с прародителем приспособленность к программированию приводит к тому, что работают с этим языком миллионы человек по всему миру. Объектно-ориентированный язык основанный на С++, приспособлен к созданию программ и приложений, способных обрабатывать огромные потоки информации в специализированных средах и учитывать специфику среды внедрения готового программного продукта. Технология Java - это основа, позволяющая в неограниченных количествах увеличивать инфраструктуру предприятий и компаний, способная связать воедино системы самого различного калибра, начиная от подключения к сети телефона по Wi-fi и заканчивая суперкомпьютерами. XML Потомок HTML, эта технология являет собой расширяемый язык разметки. Она приспособлена для интерпретирования документов. На нем проводятся сложнейшие преобразования и изменения документов. Язык XML используется для передачи и временного хранения данных при работе с различными реляционными базами через интернет. XML уже достиг того уровня, когда может претендовать на роль основополагающей технологии для построения корпоративных сетей.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Дейт, К. Дж. Введение в системы баз данных, 8-е издание.: пер. с англ. - М.: Издательский дом «Вильямс», 2005. –1328 с.
  2. Зуев Е.А. Язык программирования Turbo Pascal 6.0. - М.: Унитех, 1992. – 298 с.
  3. Каймин В.А. Информатика: Учебник. – М.: Инфра-М, 2012. – 285 с.
  4. Лаптев В.В. С++. Объективно-ориентированное программирование: учебное пособие для студентов и преподавателей ВУЗов. – СПб.: Питер, 2008. – 458 с.
  5. Могилев А.В. Практикум по информатике: учебное пособие для студентов ВУЗов, а так же для учителей информатики. – М.: Академия, 2009. – 608 с.
  6. Павловская Т.А. С#. Программирование на языке высокого уровня. –СПб.: Питер, 2007. – 432 с.
  7. Рубенкинг Н.Дж. Турбо Паскаль для Windows: в 2-х томах. Т.2. Пер. с англ. - М.: Мир, 1993. - 536 с.
  8. Сергиевский Г.М. Функциональное и логическое программирование: учебное пособие для студентов ВУЗов, обучающихся по программе «Информатика и вычислительная техника». – М.: Академия, 2010. – 319 с.
  9. Свердлов С.З. Языки программирования и методы трансляции. – СПБ.: Питер, 2007. – 638 с.
  10. Query-by-Example: язык баз данных / М.М. Злуф [Электронный ресурс]. - Режим доступа:

http://www.lib.csu.ru/dl/bases/prg/dbms/1996/03/source/149.html.