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

Обзор языков программирования высокого уровня (История развития и классификация языков программирования)

Содержание:

Введение

В современном мире электроника не просто стала частью нашей жизни, как это было лет 10-20 назад, сегодня электроника – это часть большинства из нас. Мы просыпаемся от будильника на домашнем мультимедийном центре. После этого мы собираемся на работу, попутно просматривая информацию с десятка гаджетов: задачи в CRM на планшете, погода, пробки, электропитание квартиры, автономная сигнализация и видеонаблюдение. Мы выходим из квартиры, и нас так же окружают, системы, датчики, компьютеры, и на билбордах реклама очередного «облачного сервиса». И даже во сне за нашим здоровьем следит датчик на запястье, а для нашего спокойного сна такие же датчики следят за здоровьем наших близких.

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

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

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

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

Цели исследования:

  1. Описать историю появления и развития языков программирования
  2. Сделать обзор языков программирования высокого уровня
  3. Обозначить критерии языков, по которым можно выбрать тот или иной ЯП.

Задачи исследования:

1. Ознакомления с языками программирования ВУ.

2. Рассмотрение истории развития языков программирования.

3. Обзор современных языков программирования.

4. Отбор критериев по которым можно выбрать наиболее подходящий под задачи и навыки ЯПВУ.

В первой главе рассмотрена история развития языков программирования.

Во второй главе обозначены важнейшие понятия и классификаци языков программирования

В третьей главе рассмотрены самые перспективные, признанные и полезные языки программирования на сегодняшний день.

Глава 1. История развития и классификация языков программирования

1.1 История возникновения и развития ЯП

Язы́к программи́рования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель (обычно — ЭВМ) под её управлением.[1]

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

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

Код с которым работали первые машины назывался машинным кодом. Машинный код (платформенно-ориентированный код), машинный язык — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины.[2] По сути первым появившимся языком программирования и являются машинные команды – последовательность нулей и единиц. Программы для машин заносились в чисто цифровом виде, иногда с использованием переключателей.

Языки программирования делятся в зависимости от приближенности к машинным командам по уровню абстракции на языки:

- с низким уровнем абстракции, такие как группа языков Ассемблера. Такие языки называются низкоуровневыми.

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

Первыми языками программирования с низким уровнем абстракции били Ассемблеры появившиеся в 40-50е годы. Язык ассе́мблера (англ. assembly language) — машинно-ориентированный язык низкого уровня с командами, обычно соответствующими командам машины, который может обеспечить дополнительные возможности вроде макрокоманд[3]. Языки Ассемблера относятся ко второму поколению языков программирования. Код написанный на Ассемблере требовал перевода в машинный язык, для чего необходимо было использовать компилятор или транслятор.

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

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

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

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

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

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

Языки пятого поколения – системы машинного кода для проектирования и разработки искусственного интеллекта и систем с элементами самообучения.

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

Сегодня языков программирования создано великое множество. Они все отличаются, имеют множество критериев различия, на которых в данной работе будет заострено внимание. Языки создаются и отмирают, постоянно изменяются и дополняются. Сегодня ни один знакомый с IT технологиями человек не скажет сколько существует языков программирования. Языков и назначений применения великое множество, сами языки программирования обрастают ветками (fork), которые могут претендовать на звание отдельного ЯП. Сегодня существуют языки программирования, которыми пользуется четыре человека на планете (секретные разработки),а есть такие, которыми пользуется четверть миллиарда (php, html).

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

Высокоуровневыми и низкоуровневыми

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

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

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

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

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

Преимущества ассемблера

минимальное количество избыточного кода (использование меньшего количества команд и обращений в память). Как следствие — большая скорость и меньший размер программы

Недостатки ассемблера

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

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

Синтаксис

Общепринятого стандарта для синтаксиса языков ассемблера не существует. Однако, существуют стандарты де-факто — традиционные подходы, которых придерживаются большинство разработчиков языков ассемблера. Основными такими стандартами являются Intel-синтаксис и AT&T-синтаксис.

Общий формат записи инструкций одинаков для обоих стандартов:

`[метка:] опкод [операнды] [;комментарий]`

Опкод — непосредственно мнемоника инструкции процессору. К ней могут быть добавлены префиксы (повторения, изменения типа адресации и пр.). В качестве операндов могут выступать константы, названия регистров, адреса в оперативной памяти и пр.. Различия между стандартами Intel и AT&T касаются, в основном, порядка перечисления операндов и их синтаксиса при различных методах адресации.

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

Глава 2. Языки программирования высокого уровня

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

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

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

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

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

2.1 Типизация

Следующий критерий разделения – типизация. Он связан с системой организации данных в самой программе – типизацией. Тип данных (тип) — множество значений и операций на этих значениях (IEEE Std 1320.2-1998). [4]Языки программирования можно поделить на имеющие

статическую типизацию;

динамическую типизацию;

бестиповые языки.

Статическая типизация

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

  • Проверки типов происходят только один раз — на этапе компиляции. А это значит, что нам не нужно будет постоянно выяснять, не пытаемся ли мы поделить число на строку (и либо выдать ошибку, либо осуществить преобразование).
  • Скорость выполнения. Из предыдущего пункта ясно, что статически типизированные языки практически всегда быстрее динамически типизированных.
  • При некоторых дополнительных условиях, позволяет обнаруживать потенциальные ошибки уже на этапе компиляции.
  • Ускорение разработки при поддержке IDE (отсеивание вариантов, заведомо не подходящих по типу).

Динамическая типизация

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

  • Простота создания универсальных коллекций — куч всего и вся (редко возникает такая необходимость, но когда возникает динамическая типизация выручит).
  • Удобство описания обобщенных алгоритмов (например сортировка массива, которая будет работать не только на списке целых чисел, но и на списке вещественных и даже на списке строк).
  • Легкость в освоении — языки с динамической типизацией обычно очень хороши для того, чтобы начать программировать.

Бестиповая типизация


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

Бестиповая типизация обычно присуща низкоуровневым (язык ассемблера, Forth) и эзотерическим (Brainfuck, HQ9, Piet) языкам. Однако и у нее, наряду с недостатками, есть некоторые преимущества.

Преимущества

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

Недостатки

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

2.2 Способ реализации языка

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

Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой.[5]

Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати текста программы и т. д.

Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом. Выходной язык называется целевым языком или объектным кодом.

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

Преимущества компилированных программ

выполняются быстрее

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

Недостатки

при каждом изменении текста программы требуется её перекомпиляция, что замедляет процесс разработки.

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

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

Есть ряд возможностей, которые значительно легче реализовать в интерпретаторе, чем в компиляторе:

кроссплатформенность

рефлексия и интроспекция

динамическая типизация

использование динамической области видимости и замыканий

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

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

Глава 3. Обзор современных языков программирования высокого уровня

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

3.1 FORTRUN

FORTRUN - Название Fortran является сокращением от FORmula TRANslator (переводчик формул). П

Фортран (Fortran) — первый реализованный язык программирования высокого уровня (после Планкалкюля), правда, с одной небольшой оговоркой — для машин, построенных по классической схеме фон Неймана. Создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса (John Backus) в корпорации IBM. Через пару лет начались его коммерческие поставки. До этого программирование велось либо непосредственно в машинных кодах, либо на символических ассемблерах.

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

Большинство таких библиотек является фактически достоянием человечества: они доступны в исходных кодах, хорошо документированы, отлажены и весьма эффективны. Поэтому изменять, а тем более переписывать их на других языках программирования накладно, несмотря на то, что регулярно производятся попытки автоматического конвертирования FORTRAN-кода на современные языки программирования. [6]

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

Последней на сегодняшней день реаизацие Фортрана является

Fortran 2008 (2010)

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

Кому подойдет язык Фортран?

Минусы языка

  • Отсутсвует гибкость
  • Неэффективны для бизнеса
  • Слабая реализация ООП

Плюсы языка

  • Многолетняя история, множество реализаций и подходов
  • Широкая поддержка научным сообществом.
  • Эффективный исполняемый код
  • Межплатформная совместимость.
  • Простота изучения.[7]

Почему Фортран упомянут в данной курсовой работе? Все просто – сегодня в РФ Фортран до сих пор включен в образовательную программу большинства технических специальностей Российских ВУЗов.

Многие компании, занимающиеся ранее разработкой реализаций, библиотек, программ и подпрограмм на Фортране и по сей день предлагают свои решения для студентов и профессоров образовательных учреждений. Например на сайте http://www.dreamspark.ru/ можно скачать Microsoft Fortran Powerstation 4.0.

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

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

3.2 С

Си (англ. C) — компилируемый статически типизированный язык программирования общего назначения, разработанный в 1969—1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие языка Би. Первоначально был разработан для реализации операционной системы UNIX, но, впоследствии, был перенесён на множество других платформ. Благодаря близости по скорости выполнения программ, написанных на Си, к языку ассемблера, этот язык получил широкое применение при создании системного программного обеспечения и прикладного программного обеспечения для решения широкого круга задач.

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

Язык программирования Си отличается минимализмом. Керниган и Ритчи хотели, чтобы программы на нём легко компилировались с помощью однопроходного компилятора, после компиляции каждой элементарной составляющей программы соответствовало весьма небольшое число машинных команд, а использование базовых элементов языка не задействовало библиотеку времени выполнения. Однопроходный компилятор компилирует программу, не возвращаясь назад, к уже откомпилированному тексту. Поэтому использованию функции должно предшествовать её объявление. Код на Си можно легко писать на низком уровне абстракции, почти как на ассемблере. Иногда Си называют «универсальным ассемблером» или «ассемблером высокого уровня», что отражает различие языков ассемблера для разных платформ и единство стандарта Си, код которого может быть скомпилирован без изменений практически на любой модели компьютера. Си часто называют языком среднего уровня или даже низкого уровня, учитывая то, как близко он работает к реальным устройствам.

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

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

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

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

Вот некоторые особенности других языков программирования, которых не имеет Си:

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

3.3 C++

C++ — компилируемый статически типизированный язык программирования общего назначения.

Поддерживает такие парадигмы программирования как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование, обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. [8]В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

Имя языка, получившееся в итоге, происходит от оператора унарного постфиксного инкремента C ++ (увеличение значения переменной на единицу). Имя C+ не было использовано потому, что является синтаксической ошибкой в С и, кроме того, это имя было занято другим языком. Язык также не был назван D, поскольку «является расширением C и не пытается устранять проблемы путём удаления элементов C».

зык программирования С++ задумывался как язык, который будет:

- лучше языка С;

- поддерживать абстракцию данных;

- поддерживать объектно-ориентированное программирование.

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

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

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

3.4 Python

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

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

Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ[7]. Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные[8]. Есть реализации интерпретаторов для JVM (с возможностью компиляции), MSIL (с возможностью компиляции), LLVM и других. Проект PyPy предлагает реализацию Python на самом Python, что уменьшает затраты на изменения языка и постановку экспериментов над новыми возможностями.

Python — активно развивающийся язык программирования, новые версии (с добавлением/изменением языковых свойств) выходят примерно раз в два с половиной года. Вследствие этого и некоторых других причин на Python отсутствуют стандарт ANSI, ISO или другие официальные стандарты, их роль выполняет CPython.

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

Питон обладает огромным количеством преимуществ:

  • Python - интерпретируемый язык программирования. С одной стороны, это позволяет значительно упростить отладку программ, с другой - обуславливает сравнительно низкую скорость выполнения.
  • Динамическая типизация. В python не надо заранее объявлять тип переменной, что очень удобно при разработке.
  • Хорошая поддержка модульности. Вы можете легко написать свой модуль и использовать его в других программах.
  • Встроенная поддержка Unicode в строках. В Python необязательно писать всё на английском языке, в программах вполне может использоваться ваш родной язык.
  • Поддержка объектно-ориентированного программирования. При этом его реализация в python является одной из самых понятных.
  • Автоматическая сборка мусора, отсутствие утечек памяти.
  • Интеграция с C/C++, если возможностей python недостаточно.
  • Понятный и лаконичный синтаксис, способствующий ясному отображению кода. Удобная система функций позволяет при грамотном подходе создавать код, в котором будет легко разобраться другому человеку в случае необходимости. Также вы сможете научиться читать программы и модули, написанные другими людьми.
  • Огромное количество модулей, как входящих в стандартную поставку Python 3, так и сторонних. В некоторых случаях для написания программы достаточно лишь найти подходящие модули и правильно их скомбинировать. Таким образом, вы можете думать о составлении программы на более высоком уровне, работая с уже готовыми элементами, выполняющими различные действия.
  • Кроссплатформенность. Программа, написанная на Python, будет функционировать совершенно одинаково вне зависимости от того, в какой операционной системе она запущена. Отличия возникают лишь в редких случаях, и их легко заранее предусмотреть благодаря наличию подробной документации.

Недостаток у Питона всего 1: Отступление от объектно-ориентированной чистоты" и "Невозможность модификации встроенных классов.

Питон прост для изучения:

Огромное количество документации, руководств, обучающих материалов

Множество полезных тематических форумов

Возможность обучения в игровой форме.[9]

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

3.5 Java

Java - широко применяемый сегодня, простой для изучения и крайне полезный язык программирования.

Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

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

Часто к недостаткам концепции виртуальной машины относят снижение производительности. Ряд усовершенствований несколько увеличил скорость выполнения программ на Java:

  • применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,
  • широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,
  • аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

По данным сайта shootout.alioth.debian.org, для семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее[10]. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10—30 раз больше, чем программой на C/C++. Также примечательно исследование, проведённое компанией Google, согласно которому отмечается существенно более низкая производительность и бо́льшее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++.[11]

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

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

Обучится программированию на Java будет достаточно просто. Есть огромное количество документации на множестве языков, исчерпывающая документация на английском. Есть возможность обучиться в игровой форме. Выбирая Java начинающие программисты не связаны какой либо платформой или бизнес сегментом: мобильные приложения, веб – ориентированные приложения, специальное ПО для высокопроизводительных систем. Это огромное преимущество, делающее Яву предпочтительной для выбора в качестве «стартового языка программирования» и по своим возможностям подойдет любому. Выбрать или не выбрать Java останется только вопросом личных предпочтений.

Заключение

В современном мире часто говорят: даже чтобы стоять на месте, нужно постоянно двигаться вперед. Что же касается IT отрасли, как двигателя прогресса, то компьютеры и программы движутся с такой быстротой, что даже просто отслеживать последние изменения весьма времязатратно.

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

Сегодняшние реалии свидетельствуют о том что сегодня при выборе «своего» языка программирования, программисты обращаются к официальным документациям, существующим наработкам, но чаще за советом к более опытным коллегам по цеху. И проанализорвав даже поисковую выдачу популярных поисковых систем, и тем более самих форумов программистов, можно сказать о том что сегодня программисты выбирают среди Java, C, C++, C#, Python.[12]

Для каждого кто начинает свое знакомство с программированием стоит сложная задача – найти свой (свои) язык(и) программирования для решения своей задачи и совершенствовать свои навыки, и кто знает, может быть когда то такой энтузиаст или группа энтузиастов когда нибудь создадут универсальный язык программирования.

Список использованной литературы

  1. C++,Turbo Pasckal,QBasik:Эволюция языков программирования http://langprog.far.ru/historylangprog.html. -27.05.10.
  2. Информатика/Курносов А.П., Кулев С.А., Улезько А.В. и др.; Под ред. А.П. Курносова.-М.: КолосС, 2005.-272 с
  3. Макарова Н.В. Информатика /под ред. Проф. Н.В. Макаровой. — М.: Финансы и статистика, 1997. — 768 с.: ил.
  4. Малышев Р.А. Локальные вычислительные сети: Учебное пособие/ РГАТА. – Рыбинск, 2005. – 83 с.
  5. Островский В.А. Информатика: учеб. для вузов. М.: Высшая школа, 2000. —511 с.: ил.
  6. Организация ЭВМ. К. Хамахер, З. Вранешич, С. Заки. 5-е изд. - СПб.: Питер, 2003. — 848 с.
  7. Семакин И.А., Информатика: Базовый курс /Семакин И.А., Залогова Л., Русаков С., Шестакова Л. – Москва: БИНОМ.,2005. – 105с.
  8. Симонович С.В.Информатика. Базовый курс/Симонович С.В. и др. — СПб.: издательство "Питер", 2000. — 640 с.: ил.
  9. Галисеев Г. В. Ассемблер для Win 32. Самоучитель. — М.: Диалектика, 2007. — С. 368. — ISBN 978-5-8459-1197-1.
  10. Ирвин Кип Язык ассемблера для процессоров Intel = Assembly Language for Intel-Based Computers. — М.: Вильямс, 2005. — С. 912. — ISBN 0-13-091013-9.
  11. М. Уэйт, С. Прата, Д. Мартин Язык Си руководство для начинающих - М: "Мир", 1988. - 512 с.
  12. Типы в языках программирования Бенджамин Пирс Издательство «Лямбда пресс» & «Добросвет» Москва, 2011
  13. Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп,) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания).
  14. СТ ИСО 2382/7-77 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов. — М.: Издательство стандартов, 1989. — 168 с. — 55 000 экз. — ISBN 5-7050-0155-X
  15. ГОСТ 19781-83 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов. — М.: Издательство стандартов, 1989. — 168 с. — 55 000 экз. — ISBN 5-7050-0155-X.
  16. А. М. Горелик. Эволюция языка программирования Фортран (1957—2007) и перспективы его развития//Вычислительные методы и программирование, 2008, Т. 9, с. 53-71
  17. Журнал PC-WEEK (092)18`1997 http://www.pcweek.ru/infrastructure/article/detail.php?ID=41622
  18. Бьёрн Страуструп. Язык программирования C++ = The C++ Programming Language / Пер. с англ. — 3-е изд. — СПб.; М.: Невский диалект — Бином, 1999. — 991 с. — 3000 экз. — ISBN 5-7940-0031-7 (Невский диалект), ISBN 5-7989-0127-0 (Бином)
  19. Изучение языков программирования в игровой форме http://codecombat.com
  20. Статистика бенчмарков выполнения кодов языков программирования http://benchmarksgame.alioth.debian.org/u32q/benchmark.php?test=all&lang=java
  21. Статистика бенчмарков выполнения кодов языков программирования http://www.opennet.ru/opennews/art.shtml?num=30784
  22. Статистика популярности языков программирования http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
  1. https://ru.wikipedia.org/

  2. Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.

  3. СТ ИСО 2382/7-77 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов.

  4. IEEE Std 1320.2-1998 (R2004) IEEE Standard for Conceptual Modeling Language Syntax and Semantics for IDEF1X97:
    a set of values and operations on those values

  5. ГОСТ 19781-83 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов.

  6. А. М. Горелик. Эволюция языка программирования Фортран (1957—2007) и перспективы его развития//Вычислительные методы и программирование, 2008, Т. 9, с. 53-71

  7. Журнал PC-WEEK (092)18`1997 http://www.pcweek.ru/infrastructure/article/detail.php?ID=41622

  8. Бьёрн Страуструп. Язык программирования C++ = The C++ Programming Language / Пер. с англ. — 3-е изд. — СПб.; М.:

  9. http://codecombat.com

  10. http://benchmarksgame.alioth.debian.org/u32q/benchmark.php?test=all&lang=java

  11. http://www.opennet.ru/opennews/art.shtml?num=30784

  12. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html