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

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

Содержание:

ВВЕДЕНИЕ

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

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

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

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

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

Задачи и цели курсовой работы:

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

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

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

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

С древнейших времен люди пытались создать устройства, облегчающие и ускоряющие процессы вычислений. Создание компьютерной техники было положено в механических вычислительных машинах. В то же время начали разрабатываться принципы программирования. Исторически первой программой считается программа, написанная в 1843 г. Адой Лавлейс для машины Чарльза Бэббиджа[1].

Большой вклад в развитие информационных технологий внес английский математик Джордж Буль когда опубликовал монографию «Исследование законов мышления, на которых основаны математические теории логики и вероятностей», тем самым стал создателем «Булевой алгебры»[2]. На основе этой алгебры была построена теория релейно-контактных схем и конструирования сложных дискретных автоматов. Алгебра, являясь инструментом разработки и анализа сложных схем, а также инструментом оптимизации логических элементов, оказала влияние на развитие вычислительной техники.

Дальнейшее развитие вычислительных машин привело к замене механических частей электронными компонентами.

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

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

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

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

В конце 1940-х гг. Дж. Фон Нейман, Г. Гольдстайн и А. В. Беркс разработали логические схемы вычислительных машин. Особый вклад в эту работу внес Джон фон Нейман – американский математик, принимавший участие в создании ЭНИАК (первый электронный компьютер общего назначения).

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

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

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

1.2. Общие сведения.

Языки программирования — это формальные искусственные язы­ки. Как и естественные языки, они имеют алфавит, словарный запас, грамматику и синтаксис, а также семантику.

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

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

Грамматика - это конечная система правил, определяющих язык.

Грамматика определяет способы построения изменения и сочетания слов.

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

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

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

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

Существуют следующие виды трансляторов:

- компиляторы;

- интерпретаторы;

- эмуляторы.

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

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

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

Трансляторы, в общем случае, содержат несколько блоков.

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

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

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

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

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

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

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

Программы должны быть:

- надежными (содержать как можно меньше ошибок);

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

- заботливыми (уметь объяснять ошибки пользователя и свои действия).

Несмотря на то, что аппаратура современного компьютера очень сложна, считается что сложность программного обеспечения на порядок сложнее. Известнейший авторитет, американский ученый в области теории вычислительных систем Фредерик Брукс, утверждает: «Сложность программного обеспечения является существенным, а не второстепенным свойством»[3].

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

  1. Ясность, простота и единообразие языка. Язык программирования должен стать помощником программиста задолго до начала кодирования. Он должен предоставить ясный, простой и единообразный набор понятий, которые могут быть использованы в качестве базисных элементов при разработке алгоритмов. Синтаксис языка влияет на удобство и простоту написания и тестирования программы, а в дальнейшем способствует ее пониманию и модификации. Хороший язык характеризуется тем, что конструкции, обозначающие различные понятия должны и выглядеть совершенно по-разному, то есть семантические отличия должны отражаться в синтаксисе.
  2. Ортогональность, т.е. осмысленность любых возможных комбинаций любых языковых конструкций. Ортогональность облегчает изучение языка и написание программы, т.к. язык имеет мало исключений и случаев, когда требуется запоминание. Но ортогональность имеет и значительное отрицательное свойство – программа не будет выдавать ошибки при компиляции, когда содержит комбинацию возможностей, которые логически не согласованы или неэффективны при выполнении.
  3. Удобство верификации программы. Основным требованием является надежность программы, написанной на том или ином языке. Правильность выполнения программой своих функций проверяется разными методами, такими как чтение текста и исправление ошибок, выполнение с тестовыми исходными данными и сравнением полученных выходных результатов с соответствии со спецификацией и т.д.
  4. Естественность для приложений. Является одной из важнейших причин распространения того или иного языка программирования. Язык, соответствующий определенному классу приложений, может значительно облегчить создание отдельных программ в конкретной области.
  5. Поддержка абстракций. В идеале, язык должен определять структуры данных, типы данных и операции и поддерживать их как самостоятельные абстракции. Важной задачей программиста является разработка конкретных абстракций для решения задачи и их последующая реализация с использованием базовых возможностей реального языка программирования. В этом случае программист сможет использовать их в других частях программы, зная только их абстрактные свойства и не вникая в их фактическую реализацию.
  6. Среда программирования. Наличие подходящей среды программирования может сделать технически слабый язык более легким в применении, нежели сильный язык при незначительной внешней поддержке. Специализированные текстовые редакторы и тестирующие пакеты, которые отражают специфику языка и работы с ним, могут сильно ускорить написание и тестирование программ.
  7. Переносимость программ. Одним из важнейших критериев для многих программных проектов является переносимость разработанных программ с компьютера, на котором они были написаны, на другие компьютерные системы. Удобным средством создания переносимых программ являются широкодоступные языки, определение которых не зависит от возможностей различных машин.
  8. Стоимость использования является существенным компонентом оценки языка программирования и складывается из нескольких составляющих:

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

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

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

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

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

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

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

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

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

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

Типы программирования.

Алгоритмическое (модульное) программирование

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

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

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

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

В таком программировании используются следующие элементы:

- Переменные и константы.

- Типы данных числовой, логический, строковый.

- Арифметические операции и выражения.

- Логические выражения (результат – только истина или ложь).

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

Структурное программирование

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

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

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

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

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

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

Событийно-ориентированное программирование

С активным распространением системы Windows и появлением визуальных RAD-сред широкую популярность приобрел событийный подход к созданию программ — событийно-ориентированное программирование.

Идеология системы Windows основана на событиях. Щелкнул человек на кнопке, выбрал пункт меню, нажал на клавишу или кнопку мыши - в Windows генерируется подходящее сообщение, которое отсылается окну соответствующей программы. Структура программы, созданной с помощью событийного программирования, следующая. Главная часть представляет собой один бесконечный цикл, который опрашивает Windows, следя за тем, не появилось ли новое сообщение. При его обнаружении вызывается подпрограмма, ответственная за обработку соответствующего события (обрабатываются не все события, их сотни, а только нужные), и подобный цикл опроса продолжается, пока не будет получено сообщение «Завершить работу».

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

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

Объектно-ориентированное программирование

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

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

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

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

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

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

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

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

Визуальное программирование

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

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

 2.1 Fortran (Фортран). 

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

Последняя версия появилась в 2010 году, её название Fortran 2008. Новый стандарт добавляет несколько избранных новых возможностей:

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

расширение Coarray Fortran (ранее известное как F—) для поддержки параллельных вычислений;

конструкция DO CONCURRENT для циклов без взаимных зависимостей;

атрибут CONTIGUOUS для задания ограничений на размещение в памяти хранимых данных;

конструкция BLOCK для объявления объектов;

рекурсивные размещаемые компоненты.

В дополнение к стандарту разрабатывается техническая спецификация 29113 «Дальнейшая совместимость Fortran и C».

2.2 Basic (Бейсик).

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

При проектировании языка были сформулированы восемь требований к нему:

простота в использовании для начинающих;

общность назначения (отсутствие специализации);

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

интерактивность;

четкие и понятные сообщения об ошибках;

высокая скорость работы на небольших программах;

отсутствие необходимости понимания работы аппаратного обеспечения для написания программ;

эффективное посредничество между пользователем и операционной системой.

Язык был основан частично на Фортран II и частично на Алгол-60, с добавлениями, делающими его удобным для работы в режиме разделения времени, обработки текста и матричной арифметики.

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

В 1975 году компания Microsoft выпустила Altair BASIC. После этого был выпущен ряд операционных систем, использующих Basic в качестве основного языка. Для операционной системы CP/M был создан диалект BASIC-80, надолго определивший развитие языка.

В этот период было создано множество новых компиляторов и интерпретаторов Бейсика. Майкрософт продавала несколько версий BASIC для MS-DOS/PC-DOS, включая BASICA, GW-BASIC и QuickBASIC (QBASIC). Компания Borland в 1985 выпустила Turbo BASIC 1.0 (более поздние его версии впоследствии продавались другой компанией под именем PowerBASIC). На домашних компьютерах появились различные расширения Бейсика, обычно включающие средства для работы с графикой, звуком, выполнением DOS-команд, а также средства структурного программирования.

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

Вторую жизнь Бейсик получил с появлением в 1991 году Visual Basic от Microsoft. Этот язык напоминал оригинальный только синтаксисом, но был значительно более современным. Visual Basic и его варианты стали одним из наиболее часто используемых языков на платформе Windows. Позже был создан вариант под названием WordBasic, используемый в MS Word до появления Word 97. Visual Basic for Applications(VBA) был встроен в Excel 5.0 в 1993 году, затем в Access 95 в 1995-ом, а после и во все остальные инструменты, входящие в пакет Office — в 1997-ом. Internet Explorer 3.0 и выше, а также поставки Windows включали интерпретатор скриптового языка VBScript. В полный вариант пакета OpenOffice также включён интерпретатор Бейсика.

В настоящее время Basic — это не один язык, а целое семейство языков, отличающихся временем создания, парадигмами программирования и синтаксисом, зачастую до полной потери совместимости программ. Ранние версии не поддерживали даже структурное программирование; со временем структурное и процедурное программирование стали общепринятыми парадигмами, и появились версии, поддерживающие их. Ряд современных компиляторов во главе с Visual Basic и VB.NET реализуют объектно-ориентированное и событийное программирование.

2.3 «С»

«C» — стандартизированный процедурный язык программирования.

Язык «C» был разработан в начале 1970-х годов сотрудниками Bell Labs Кеном Томпсоном и Денисом Ритчи как наследник языка B.

«C» был создан для использования в операционной системе UNIX, в том числе и для написания ядра системы. С тех пор он был портирован на многие другие операционные системы и стал одним из самых широко используемых языков программирования.

В 1978 году была опубликована книга “Язык программирования C” Ритчи и Кернигана; описанный в ней язык стал неформальным стандартом языка, известным как K&R C.

Первый официальный стандарт языка был создан в 1989 году ANSI X3.159-1989 и в следующем году с незначительными изменениями принят как ISO/IEC 9899:1990; он известен как ANSI C. Следующими стандартами стали ISO 9899:1999 (C99) и ISO/IEC 9899:2011 (C11).

«C» ценят за его эффективность; он является самым популярным языком для создания системного программного обеспечения. Его также часто используют для создания прикладных программ.

Особенности языка:

минимальное количество ключевых слов.

большинство возможностей языка вынесено в библиотеки.

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

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

разрешено определение пользовательских типов и составных типов.

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

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

файлы можно компилировать отдельно и линковать друг с другом, контролируя видимость функций и данных ключевыми словами static и extern.

2.4 С++

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

Разработка языка началась в 1979 году. Целью создания C++ было дополнение «C» возможностями, удобными для масштабной разработки ПО, с сохранением гибкости, скорости и портабельности «C». Вместе с тем создатели C++ стремились сохранить совместимость с «C»: синтаксис первого основан на синтаксисе последнего, и большинство программ на «C» будут работать и как C++. Изначально новый язык назывался “C с классами”, но затем имя было изменено на C++ — это должно было подчеркнуть как его происходжение от «C», так и его превосходство над последним.

Первый выпуск C++ для коммерческого использования состоялся в 1985 году, вместе с публикацией книги “The C++ Programming Language”, которая на долгое время стала его неофициальным стандартом. В 1989 году вышла вторая версия языка в сопровождении книги “The Annotated C++ Reference Manual”.

В 1990-х годах язык стал одним из наиболее широко используемых языков программирования общего назначения. Первым официальным стандартом языка стал ISO/IEC 14882:1998, более известный как C++98. В 2011 году был принят текущий стандарт, C++11.

Нововведениями C++ в сравнении с «C» являются:

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

поддержка обобщённого программирования через шаблоны функций и классов;

стандартная библиотека C++ состоит из стандартной библиотеки «C» (с некоторыми модификациями) и библиотеки шаблонов (Standard Template Library, STL), которая предоставляет обширный набор обобщенных контейнеров и алгоритмов;

дополнительные типы данных;

обработка исключений;

виртуальные функции;

пространства имён;

встраиваемые (inline) функции;

перегрузка (overloading) операторов;

перегрузка имён функций;

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

2.5 Java

объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems с 1991 года и официально выпущенный 23 мая 1995 года. Изначально новый язык программирования назывался Oak (James Gosling) и разрабатывался для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания апплетов, приложений и серверного программного обеспечения.

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

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

Язык Java потребовался для создания интерактивных продуктов для сети Internet. Фактически, большинство архитектурных решений, принятых при создании Java, было продиктовано желанием предоставить синтаксис, сходный с «C» и C++. В Java используются практически идентичные соглашения для объявления переменных, передачи параметров, операторов и для управления потоком выполнением кода. В Java добавлены все хорошие черты C++.

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

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

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

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

2.6 C# (произносится си-шарп)

Язык программирования, сочетающий объектно-ориентированные и контекстно-ориентированные концепции. Разработан в 1998—2001 годах группой инженеров под руководством Андерсa Хейлсбергa в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств вроде Visual Studio.

C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков C++, Delphi, Modula и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++) или вывода типов.

2.7 Pascal

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

Pascal был разработан Никлаусом Виртом в 1970; вопреки расхожему мнению, он не был исключительно учебным языком, а предназначался для практического применения. Прототипом послужил Algol. Первоначально язык компилировался в байт-код, подобно языку Java.

В 1983 году был принят первый стандарт языка, ISO 7185:1983, который также называют Standard Pascal. Этот стандарт не добавлял в язык новые элементы, а только формально описывал существующие особенности языка. В 1990 году был принят стандарт ISO/IEC 10206, определяющий так называемый Extended Pascal. Основным изменением стало добавление модульности.

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

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

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

Диалект Object Pascal, разработанный в 1985 году, поддерживает объектно-ориентированное программирование. Существует ряд современных компиляторов, и в настоящее время язык достаточно популярен.

2.8 LISP (Лисп).

LISP, (от англ. LISt Processing — «обработка списков») — семейство языков программирования, основанных на представлении программы системой линейных списков символов, которые притом являются основной структурой данных языка. Лисп считается вторым после Fortran старейшим высокоуровневым языком программирования.

Язык Лисп был предложен Дж. Маккарти в работе в 1960 году и ориентирован на разработку программ для решения задач не численного характера. Английское название этого языка – LISP является аббревиатурой выражения LISt Processing (обработка списков) и хорошо подчеркивает основную область его применения. Понятие “список” оказалось очень емким. В виде списков удобно представлять алгебраические выражения, графы, элементы конечных групп, множества, правила вывода и многие другие сложные объекты. Списки являются наиболее гибкой формой представления информации в памяти компьютеров. Неудивительно поэтому, что удобный язык, специально предназначенный для обработки списков, быстро завоевал популярность.

После появления Лиспа различными авторами был предложен целый ряд других алгоритмических языков ориентированных на решение задач в области искусственного интеллекта. Однако это не помешало Лиспу остаться наиболее популярным языком для решения таких задач. На протяжении почти сорокалетней истории его существования появился ряд диалектов этого языка: Common LISP, Mac LISP, Inter LISP, Standard LISP и др. Различия между ними не носят принципиального характера и в основном сводятся к несколько отличающемуся набору встроенных функций и некоторой разнице в форме записи программ. Поэтому программист, научившийся работать на одном из них, без труда сможет освоить и любой другой.

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

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

2.9 Prolog (от “PROgramming in LOGic”).

Декларативный язык программирования общего назначения.

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

Стандарт языка дан в ISO/IEC 13211-1 (1995 год).

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

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

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

Пролог (Prolog) — язык логического программирования, основанный на логике дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка. Начало истории языка относится к 70-м годам XX века. Будучи декларативным языком программирования, Пролог воспринимает в качестве программы некоторое описание задачи, и сам производит поиск решения, пользуясь механизмом бэктрекинга и унификацией.

Пролог относится к так называемым декларативным языкам, требующим от автора умения составить формальное описание ситуации. Поэтому программа на Прологе не является таковой в традиционном понимании, так как не содержит управляющих конструкций типа if … then, while … do; нет даже оператора присваивания. В Прологе задействованы другие механизмы. Задача описывается в терминах фактов и правил, а поиск решения Пролог берет на себя посредством встроенного механизма логического вывода.

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

Пролог реализован практически для всех известных операционных систем и платформ. В число операционных систем входят OS для мэйнфреймов, всё семейство Unix, Windows, OS для мобильных платформ.

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

Этот язык быстро приобрел популярность в Европе как инструмент практического программирования. В Японии вокруг языка Prolog были сосредоточены все разработки компьютеров пятого поколения. С другой стороны, в США этот язык в целом был принят с небольшим опозданием в связи с некоторыми историческими причинами. Одна из них состояла в том, что Соединенные Штаты вначале познакомились с языком Microplanner, который также был близок к идее логического программирования, но неэффективно реализован. Определенная доля низкой популярности Prolog в этой стране объясняется также реакцией на существовавшую вначале “ортодоксальную школу” логического программирования, представители которой настаивали на использовании чистой логики и требовали, чтобы логический подход не был “запятнан” практическими средствами, не относящимися к логике. В прошлом это привело к широкому распространению неверных взглядов на язык Prolog. Например, некоторые считали, что на этом языке можно программировать только рассуждения с выводом от целей к фактам. Но истина заключается в том, что Prolog — универсальный язык программирования и на нем может быть реализован любой алгоритм. Далекая от реальности позиция “ортодоксальной школы” была преодолена практиками языка Prolog, которые приняли более прагматический подход, воспользовавшись плодотворным объединением нового, декларативного подхода с традиционным, процедурным.

2.10 Python

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

Python в настоящее время является бурно развивающимся и популярным сценарным языком программирования.

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

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

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

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

Создание Python, было начато Гвидо Ван Россумом (Guido van Rossum) в 1991 году, когда он работал над распределенной ОС Амеба. Ему требовался расширяемый язык, который бы обеспечил поддержку системных вызовов. За основу были взяты ABC и Модула-3. С тех пор Python развивался при поддержке организаций, в которых Гвидо работал. Особенно активно язык совершенствуется в настоящее время, когда над ним работает не только команда создателей, но и целое сообщество программистов со всего мира.

Питон имеет реализации под все самые распространенные платформы: Windows, UNIX (GNU/Linux, FreeBSD и др.) и даже для Mac OS. Более того, программы написанные в одной операционной системе, будут успешно выполняться в любой другой при наличии установленного интерпретатора Питона!

ЗАКЛЮЧЕНИЕ

С момента появления вычислительной техники человек пытается создать лучший язык программирования. В рамках курсовой работы нет возможности рассмотреть все самые распространенные языки программирования. Даже если мы продолжим обзор, выявить лучший язык не представится возможным. Это связано с тем, что любой из них содержит свои плюсы и минусы в каждой выбранной программной сфере. То есть для системного программирования лучше подойдут С, С++, Ассемблер.., для программ искусственного интеллекта, языки логического программирования, такие как Лисп или Пролог, для веб-программирования – JavaScript, PHP…

С целью познакомиться с основами программирования можно порекомендовать языки с несложным синтаксисом, к примеру, Basic или Python, которые также позволяют создавать серьезные программные продукты. Но если программирование интересует как специальность, тогда лучше изучать С#, С++, Java, VB.NET.

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

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

  1. . Казак В. М. Великие женщины-математики, ObjectWatch, Inc. 2012 – [Электронный ресурс] – URL: http://nsportal.ru/shkola/algebra/library/2012/03/10/velikie-zhenshchinymatematiki

  2. . Владимиров Д. А. Булевы алгебры. — М.: «Наука», 1969. — 320 с.

  3. . Брукс Ф. Мифический человеко-месяц, или как создаются программные системы. – СПб.: Символ-Плюс, 1999. – 304 с.

  4. . Пратт Т., Зелковиц М. Языки программирования: разработка и реализация / Под общей ред. А. Матросова. – СПб.; Питер, 2002 г. – 688с.

  5. . Алексеев Е.Г., Богатырев С.Д. Информатика: учебник – Саранск: Морд. гос. ун-т, 2009.