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

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

Содержание:

Введение

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

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

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

На заре компьютеризации, машинный язык был единственным языком, большего человек к тому времени не придумал. Для спасения программистов от сурового машинного языка программирования, были созданы языки высокого уровня (т.е. немашинные языки).«Мелкие» (атомарные) операции, выполняемые непосредственно устройствами машины, объединили в более «крупные», высокоуровневые операции и целые конструкции, с которыми человеку куда проще и удобнее работать. Так программирование сделало колоссальный прорыв: новые языки стали своеобразным связующим мостом между человеком и машинным языком компьютера.

Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов (языков программирования) и развитие процесса программирования в целом.

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

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

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

Для достижения поставленной цели решались следующие задачи:

- изучение понятия «язык программирования»;

- рассмотрение истории развития языков программирования;

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

Теоретической и методологической базой данной работы послужили труды российских и зарубежных авторов в области информатики, материалы периодических изданий и сети Интернет.

Работа состоит из введения, двух глав, заключения и списка использованных источников.

Глава 1. Теоретические основы языков программирования

1.1 Понятие языка программирования

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

Язык программирования - это специальный язык, на котором пишут команды для управления компьютером. Языки программирования созданы для того, чтобы людям было проще читать и писать для компьютера, но они затем должны транслироваться (транслятором или интерпретатором) в машинный код, который только и может исполняться компьютером. Языки программирования можно разделить на языки высокого уровня и языки низкого уровня[1].

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

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

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

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

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

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

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

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

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

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

Компилятор создаёт законченный результат - программу в машинных кодах. Затем эта программа выполняется. Откомпилированный вариант исходной программы можно сохранить на диске. Для повторного выполнения исходной программы компилятор уже не нужен. Достаточно загрузить с диска в память компьютера откомпилированный в предыдущий раз вариант и выполнить его.

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

Интерпретатор- это программа, предназначенная для построчных трансляции и выполнения исходной программы. Такой процесс называется интерпретацией.

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

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

Иногда один и тот же язык может использовать и компилятор, и интерпретатор. К числу таких языков относится, например, Бейсик.

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

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

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

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

Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.

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

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

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

Есть также языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд - они называются Автокоды.

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

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

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

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

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

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

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

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

П оявление н овых технических в озм ожн остей п оставил о задачу перед системными программистами - с оздать пр ограммные средства, обеспечивающие оперативн ое взаим одействие чел овека с ЭВМ их назвали диал оговыми языками[3].

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

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

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

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

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

1.3 К вопросу об эволюционных проблемах языков  программирования

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

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

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

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

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

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

Также необходимо обратить внимание на зарождение тенденции к повышению абстракции на этом этапе — ведь программист уже не занимался непосредственно разработкой схемы машины, его задачей стало именно выстраивание программы из уже существующих блоков. Продолжившееся постепенное удешевление компьютеров и повышение производительности привело к кризису программирования. Индустрия могла производить новые компьютеры в некоторых случаях быстрее, чем группа инженеров успевала разработать и отладить достаточно сложную программу для прошлого поколения[4].

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

Однако, стоит отметить, что любая команда ассемблера является лишь обёрткой над набором нулей и единиц, то есть, по сути, позволяет абстрагироваться программисту от некоторой командной последовательности, заменив её мнемонической командой. На смену низкоуровневому ассемблеру пришли алгоритмические языки  программирования высокого уровня. Эти языки  программирования уже были достаточно далеки от конкретной аппаратной реализации, так как программирование велось в терминах, близких человеку[5].

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

Эти изменения привели к значительному ускорению разработки и удешевлению программ, однако создание больших программ всё ещё оставалось трудоёмким. Одной из основных проблем стала не сложность программирования , а сложность самих программ. Большие программные продукты было очень трудно контролировать, так как не было единого стиля мышления и программирования . Решением этой проблемы занялся ряд выдающихся учёных , в котором особо необходимо отметить имена Эдсгера Дейкстры, Коррады Бёма и Джузеппе Якопини.

За несколько лет в результате работы многих учёных и практиков был сформирован базис структурного подхода к программированию. Отличительной особенностью стало выявление трёх базовых элементов любой программы: последовательность, ветвление и цикл[6].

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

Косвенным подтверждением можно считать резкое увеличение производительности алгоритмов и ряд открытий новых алгоритмов. Однако задачи, которые решались с помощью компьютеров становились всё сложнее, а набор предметных областей — шире. По этой причине на рубеже 70-х годов возникла потребность вновь переработать подход к программированию.

В результате на свет появилась новая концепция — объектно-ориентированный подход.

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

Именно такой подход является наиболее популярным, хотя и подвергается множественной критике и имеет ряд недостатков. Так, например, с каждым повышением уровня абстракции возникает дополнительная нагрузка, с которой приходится справляться вычислителю, что снижает эффективность программ. С другой стороны, повышение уровня абстракции позволяет избегать многих ошибок, так как программист избавлен от необходимости прямо указывать действия машине. Краткое рассмотрение истории развития языков  программирования позволяет очень чётко выделить общую тенденцию. Языки  программирования с самого своего зарождения развиваются по направлению повышения абстрактности при программировании, что является упрощением взаимодействия между программистом и машиной[7].

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

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

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

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

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

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

Так, например, ещё в 1974 году в Массачусетском технологическом институте был разработан MIT Static Dataflow Machine — аппаратная реализация машины с статической архитектурой потока данных.

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

Другим направлением может стать разработка средств визуального программирования, которые уже применяются сегодня в некоторых специализированных областях программирования. Примерами успешных решений можно считать: LabView, Algorithm Builder и HiAsm — однако, каждый из этих инструментов сильно привязан к своему набору решаемых задач, что не позволяет говорить о необходимом уровне универсальности, сопоставимым, например с языком C.

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

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

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

2.1 Фотран

Фортран самый первый из языков высокого уровня (разработан Бэкусом в начале 1950-х годов) и широко распространенный язык, особенно среди пользователей, которые занимаются численным моделированием. Это объясняется несколькими причинами:

- существованием огромных фондов прикладных программ на Фортране, накопленных за эти годы, а также наличием огромного количества программистов, эффективно использующих этот язык;

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

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

За прошедший период сформировалась новая методология и философия программирования. С начала 70-х годов Фортран подвергался заслуженной критике. В 1977 году был принят новый стандарт языка Фортран-77. На создание нового стандарта ушло много времени, но сейчас уже можно считать, что его разработка завершена и новый стандарт Фортран-90 начал входить в практику пользователей Фортрана. Только на машинах типа IBM PC существует несколько трансляторов например, Watfor, Lap-Fortran и т. д. Но наибольшее распространение на машинах этого типа получили различные версии транслятор Fortran-77. Выпущенный в 1990 году транслятор MS-Fortran 5.0 практически полностью соответствует стандартуFortran-90. Большинство крупных научно-технических прикладных программ написано на Фортране потому, что он обладает переносимостью и устойчивостью, а также благодаря наличию встроенных математических и тригонометрических функций. Дополнительной, неотъемлемой частью любой прикладной программы на языке Фортран является расширенная графическая библиотека, позволяющая использовать различные графические данные и изображения.

2.2 BASIC и Паскаль

Бейсик (BASIC - Beginner’s All-Purpose Symbolic Instruction Code – «универсальный симв олический к од инструкций для начинающих»). Прям ой п от ом ок Ф ортрана и д о сих п ор самый п опулярный язык пр ограммир ования для перс ональных к омпьютер ов. П оявился Бейсик в 1963 г оду (назвать автора был о бы трудн о, н о осн овная заслуга в ег о п оявлении нес омненн о принадлежит американцам Дж ону Кемени и Т омасу Курцу). Как и любые преимущества, пр ост ота Бейсика об орачивалась, ос обенн о в ранних версиях трудн остями структурир ования; кр оме т ог о, Бейсик не д опускал рекурсию – интересный прием, п озв оляющий с оставлять эффективные и в т о же время кор откие пр ограммы.

Разраб отаны м ощные к омпилят оры Бейсика, к от орые обеспечивают не тольк о б огатую лексику и выс ок ое быстр одействие, н о и в озм ожн ость структурн ог о пр ограммир ования. П о мнению нек от орых пр ограммист ов, наиб олее интересными версиями являются GWBASIC, Turbo-Basic и Quick Basic.

В св ое время п оявление Quick Basic ознамен овал о р ождение вт ор ог о пок оления систем пр ограммир ования на языке Бейсик. Он пред оставлял в озможн ость м одульн ог о и пр оцедурн ог о пр ограммир ования, с оздания библиотек, к омпиляции г от овых пр ограмм и пр очее, чт о вывел о ег о на ур овень таких классических язык ов пр ограммир ования, как Си, Паскаль, Ф ортран и др.

Б олее т ог о, в связи с отсутствием официальн ог о стандарта языка Бейсик, ег о реализация в виде Quick Basic стала фактическим стандарт ом. Безусловными лидерами среди различных версий Бейсика были Quick Basic 4.5 и PDS 7.1 фирмы Microsoft, п оявившиеся в к онце 80-х г од ов.

Язык пр ограммир ования Паскаль был разраб отан пр офесс ор ом кафедры вычислительн ой техники Швейцарск ог о Федеральн ог о института техн ологии Ник олас ом Вирт ом в 1968 г оду как альтернатива существующим и все усложняющимся языкам пр ограммир ования, таким, как PL/1, Algol, Fortran.

Интенсивн ое развитие Паскаля привел о к п оявлению уже в 1973 г оду его стандарта в виде пересм отренн ог о с о общения, а числ о транслят ор ов с этог о языка в 1979 г оду перевалил о за 80. В начале 80-х г од ов Паскаль еще более упр очил св ои п озиции с п оявлением транслят ор ов MS-Pascal и Turbo-Pascal для ПЭВМ. С эт ог о времени Паскаль стан овится одним из наиб олее важных и шир ок о исп ользуемых язык ов пр ограммир ования. Существенн о то, чт о язык давн о вышел за рамки академическ ог о и узк о пр офесси онального интереса и исп ользуется в б ольшинстве университет ов выс ок оразвитых стран не т ольк о как раб очий инструмент п ольз ователя. Важнейшей ос обенностью Паскаля является в опл ощенная идея структурн ог о пр ограммир ования. Друг ой существенн ой ос обенн остью является к онцепция структуры данных как одн ог о из фундаментальных п онятий.

Осн овные причины п опулярн ости Паскаля заключаются в следующем:

- пр ост ота языка п озв оляет быстр о ег о осв оить и с оздавать алг оритмически сл ожные пр ограммы

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

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

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

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

2.3 Си и Си++

Сотрудник фирмы Bell Labs Денис Ритчи создал язык Си в 1972 году во время совместной работы с Кеном Томпсоном, как инструментальное средство для реализации операционной системы Unix, однако популярность этого языка быстро переросла рамки конкретной операционной системы и конкретных задач системного программирования. В настоящее время любая инструментальная и операционная система не может считаться полной если в ее состав не входит компилятор языка Си. Ритчи не выдумывал Си просто из головы – прообразом служил язык Би разработанный Томпсоном. Язык программирования Си был разработан как инструмент для программистов-практиков. В соответствии с этим главной целью его автора было создание удобного и полезного во всех отношениях языка.

Си является орудием системного программиста и позволяет глубоко влезать в самые тонкие механизмы обработки информации на ЭВМ. Хотя язык требует от программиста высокой дисциплины, он не строг в формальных претензиях и допускает краткие формулировки.

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

Си – мощный и гибкий язык. Большая часть операционной системы Unix, компиляторы и интерпретаторы языков Фортран, Паскаль, Лисп, и Бейсик написаны именно с его помощью.

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

Язык C++ появился в начале 80-х годов. Созданный Бьерном Страуструпом с первоначальной целью избавить себя и своих друзей от программирования на ассемблере, Си или различных других языках высокого уровня.

По мнению автора языка, различие между идеологией Си и C++ заключается примерно в следующем: программа на Си отражает “способ мышления” процессора, а C++ - способ мышления программиста. Отвечая требованиям современного программирования, C++ делает акцент на разработке новых типов данных наиболее полно соответствующих концепциям выбранной области знаний и задачам приложения. Класс является ключевым понятием C++. Описание класса содержит описание данных, требующихся для представления объектов этого типа и набор операций для работы с подобными объектами.

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

Язык С++ является средством объектного программирования, новейшей методики проектирования и реализации программ, которая в текущем десятилетии, скорее всего, заменит традиционное процедурное программирование. Главной целью создателя языка доктора Бьерна Страустрапа было оснащение языка С++ конструкциями, позволяющими увеличить производительность труда программистов и облегчить процесс овладения большими программными продуктами.

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

2.4 PL/1 и Модула

PL/1 разработан в 1964-1965 годах фирмой IBM. PL/1 относится к числу универсальных языков, т. е. позволяет решать задачи из разных областей: численные расчеты, текстовая обработка, экономические задачи и т. д. По своим возможностям он перекрывает такие языки, как Фортран, Алгол-60 (созданный для численных расчетов), Кобол (для экономических задач), хотя в силу ряда причин вытеснить эти языки PL/1 не смог.

PL/1 содержит все основные конструкции, характерные для так называемых языков высокого уровня, а также ряд специфичных средств, удобных для практического программирования. Язык напоминает конструктор с большим числом деталей – пользователю достаточно освоить только те части языка, которые ему практически необходимы. Его операторы довольно емки, что часто позволяет получить запись программы более компактную, чем на других языках. Знающий PL/1 программист без труда осваивает любой другой язык того же или близкого класса.

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

Можно считать, что история языка Модула начинается в 1980 году, когда Никлаус Вирт, один из выдающихся специалистов по теории информации, известный большинству специалистов по вычислительной технике в основном как создатель языка Паскаль, опубликовал описание нового языка программирования, названного им Модула. В отличие от Паскаля, который был по замыслу языком для обучения программирования, Модула с самого начала представлял собой язык для профессиональных системных программистов, продолжая лучшие традиции своего предшественника и обогащая их новыми идеями, соответствующих таким требованиям к языкам программирования, как структурность, модульность и способность к расширению. Как и множество других языков программирования, Модула подвергалась эволюции, во время которой ее первоначальное название было переделано в имя Модула-2. Одновременно с развитием языка Модула для него создавались новые компиляторы, однако, ни один из них не мог соперничать с лучшими реализациями языков Паскаль и Си, например, разработанных фирмой Борланд. В этот переходный для языка Модула период лучшей считались реализации выполненные фирмой Logitech, которые по своим характеристикам проигрывала Турбо Паскалю и Турбо Си. Только в 1988 году после появления на американском рынке системы Top Speed, Модула-2 заняла достойное место среди процедурных языков, предназначенных для системного программирования. Возраставшей популярности системы Top Speed способствовало несколько факторов: удобное и, кроме того, легко изменяемая по желанию пользователей операционное окружение, быстрый компилятор и селективный редактор связей. Но наиболее существенным оказалось то, что создаваемые программы отличались большим быстродействием и занимали не много места в памяти.

2.5 Java

Язык Java зародился как часть проекта создания передового программного обеспечения (ПО) для различных бытовых приборов. Реализация проекта была начата на языке С++, но вскоре возник ряд проблем, наилучшим средством борьбы с которыми было изменение самого инструмента - языка программирования. Стало очевидным, что необходим платформо-независимый язык программирования, позволяющий создавать программы, которые не приходилось бы компилировать отдельно для каждой архитектуры и можно было бы использовать на различных процессорах под различными операционными системами. Язык Java потребовался для создания интерактивных продуктов для сети Internet. Фактически, большинство архитектурных решений, принятых при создании Java, было продиктовано желанием предоставить синтаксис, сходный с Си и Cи++. В Java используются практически идентичные соглашения для объявления переменных, передачи параметров, операторов и для управления потоком выполнением кода. В Java добавлены все хорошие черты C++.

Три ключевых элемента объединились в технологии языка Java:

- Java предоставляет для широкого использования свои апплеты (applets) — небольшие, надежные, динамичные, не зависящие от платформы активные сетевые приложения, встраиваемые в страницы Web. Апплеты Java могут настраиваться и распространяться потребителям с такой же легкостью, как любые документы HTML.

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

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

Заключение

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

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

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

Список использованных источников

  1.  Баженова, И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. — М.: ИЦ Академия, 2012. — 368 c.
  2. Бишоп Д. Эффективная работа: Java 2. - СПб.: Питер; К.: Издательская группа BHV, 2012. – 592с.
  3. Бьянкуцци, Ф. Пионеры программирования: Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден; Пер. с англ. С. Маккавеев. — СПб.: Символ-Плюс, 2011. — 608 c.
  4. Вебер Д. Технология Java в подлиннике: пер. с англ. - СПб.: БХВ - Петербург, 2011.– 1104с.
  5. Вычислительная техника и программирование / Под ред. А.В.Петрова -М.: Высш. шк., 2013. – 479с.
  6.  Гавриков, М.М. Теоретические основы разработки и реализации языков программирования: Учебное пособие / М.М. Гавриков, А.Н. Иванченко, Д.В. Гринченков. — М.: КноРус, 2012. — 184 c.
  7. Гергель, В.П. Современные языки и технологии паралелльного программирования: Учебник / В.П. Гергель. — М.: МГУ, 2012. — 408 c.
  8. Голицына, О.Л. Языки программирования: Учебное пособие / О.Л. Голицына, Т.Л. Партыка, И.И. Попов. — М.: Форум, НИЦ ИНФРА-М, 2013. — 400 c.
  9. Головин, И.Г. Языки и методы программирования: Учебник для студентов учреждений высшего профессионального образования / И.Г. Головин, И.А. Волкова. — М.: ИЦ Академия, 2012. — 304 c.
  10. Довек, Ж. Введение в теорию языков программирования / Ж. Довек, Ж.-Ж. Леви. — М.: ДМК, 2016. — 134 c.
  11. Дорогов, В.Г. Основы программирования на языке С: Учебное пособие / В.Г. Дорогов, Е.Г. Дорогова; Под общ. ред. проф. Л.Г. Гагарина. — М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2013. — 224 c.
  12. Касторнова, В.А. Структуры данных и алгоритмы их обработки на языке программирования Паскаль: Учебное пособие / В.А. Касторнова. — СПб.: BHV, 2016. — 304 c.
  13. Кауфман, В.Ш. Языки программирования. Концепции и принципы / В.Ш. Кауфман. — М.: ДМК, 2015. — 464 c.
  14. Керниган, Б.У. Язык программирования С / Б.У. Керниган, Д.М. Ритчи; Пер. с англ. В.Л. Бродовой. - М.: Вильямс, 2013. - 304 c.
  15. Материалы интернет-сайта: www.sun.ru
  16. Страуструп, Б. Язык программирования C++: Специальное издание / Б. Страуструп; Пер. с англ. Н.Н. Мартынов. - М.: БИНОМ, 2012. - 1136 c.
  17. Троелсен, Э. Язык программирования С# 5.0 и платформа .NET 4.5 / Э. Троелсен; Пер. с англ. Ю.Н. Артеменко. - М.: Вильямс, 2013. - 1312 c.
  18. Ушкова В. Новые языки программирования и тенденции их развития - 2012. – 335с.
  19. Хейлсберг, А. Язык программирования C#. Классика Computers Science / А. Хейлсберг, М. Торгерсен, С. Вилтамут. - СПб.: Питер, 2012. - 784 c.
  20. Шохирев, М.В. Язык программирования Perl 5: Учебное пособие / М.В. Шохирев. - М.: БИНОМ. ЛЗ, ИНТУИТ.РУ, 2013. – 279
  1. Вычислительная техника и программирование / Под ред. А.В.Петрова -М.: Высш. шк., 2013. – 479с.

  2. Головин, И.Г. Языки и методы программирования: Учебник для студентов учреждений высшего профессионального образования / И.Г. Головин, И.А. Волкова. — М.: ИЦ Академия, 2012. — 304 c.

  3. Довек, Ж. Введение в теорию языков программирования / Ж. Довек, Ж.-Ж. Леви. — М.: ДМК, 2016. — 134 c.

  4. Вычислительная техника и программирование / Под ред. А.В.Петрова -М.: Высш. шк., 2013. – 479с.

  5. Баженова, И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. — М.: ИЦ Академия, 2012. — 368 c.

  6. Роберт У. Себеста. Основные концепции языков  программирования . — 5-е изд.. — М.: Вильямс, 2001. — 672 с.

  7. Ушкова В. Новые языки программирования и тенденции их развития - 2012. – 335с.

  8. Джефф Коч, Изобретение многоядерных процессоров: расширение преимуществ закона Мура, Журнал Technology@Intel, 2005