![](/stc/img/evkova.png)
Современные языки программирования (Теоретические основы языков программирования)
Содержание:
Введение
Данная работа посвящена современным языкам программирования.
В современном мире информационные ресурсы стали такой же ценностью как финансовые ресурсы. Практически в любое время и в любом месте человек взаимодействует с различными автоматизированными устройствами, персональными компьютерами, терминалами для заказа и оплаты различных услуг.
Основой работы таких устройств являются программы, записанные на определенных языках программирования.
Выбор языка программирования для решения определенной задачи является важнейшим фактором. Зачастую скорость решения той или иной задачи сокращается в десятки раз при удачном выборе языка программирования.
Современный мир немыслим без компьютеров и мобильных устройств, которые стали неотъемлемой частью нашей жизни. Для решения задач автоматизации на производстве используются специальные компьютеры. В науке и для решения сложных технических проблем используются очень мощные суперкомпьютеры.
Безусловно, работа данных устройств немыслима без использования программ, которые могут быть созданы только на специальных языках программирования.
Все это обуславливает актуальность данной работы.
Современное состояние вычислительной техники характеризуется огромным разнообразием языков программирования.
Целью работы является теоретическое и практическое исследование современных языков программирования. Для достижения данной цели в работе должны быть решены следующие задачи:
- рассмотрение и анализ истории ЯП;
- описание современного состояния ЯП;
- рассмотрением и сравнение программ, написанных на различных ЯП;
- охарактеризовать тенденции в развитии ЯП.
Объектом исследования являются языки программирования. Предметом исследования является современное состояние языков программирования.
Глава 1. Теоретические основы языков программирования
1.1 Способы записи алгоритмов
Алгоритмы имеют большое значение во многих областях человеческой деятельности. Однако, со времени первых опытов по созданию устройств для проведения автоматических вычислений алгоритмы стали особенно важны.
Алгоритм – это последовательность действий, которые необходимо выполнить для достижения поставленной цели или решения некоторой задачи [2]. С алгоритмами мы постоянно встречаемся в нашей обыденной жизни, порой даже не задумываясь об этом. Например, программа проведения конференции является таким алгоритмом. Также, примером алгоритма может быть правила перехода по пешеходному переходу. Сначала пешеходу необходимо посмотреть налево, чтобы убедиться, что проезжающие машины заметили его и готовы остановиться, чтобы пропустить его. Тогда можно идти до второй половины проезжей части. На второй половине также необходимо становиться и посмотреть направо, пропускают ли вас машины, едущие по данной полосе. После этого можно завершить переход. Инструкция по эксплуатации бытовой техники, например, телевизора, также содержит множество алгоритмов. Алгоритмы включения различных функций и режимов, алгоритмы действий при неисправностях.
Современное определение понятия «алгоритм» появилось в середине XX век на основании работ Тьюринга, Маркова, Винера и некоторых других.
Слово «алгоритм» происходит от имени среднеазиатского учёного Абу Абдуллаха Мухаммеда ибн Муса аль-Хорезми. Около 825 годаон написал сочинение, в котором впервые дал описание придуманной в Индии позиционной десятичной системы счисления [4].
В вычислительной технике наибольшее применение получили вычислительные алгоритмы. Такие алгоритмы применяются для обработки данных. Результатом выполнения таких алгоритмов является получение новых данных или выполнение определенных команд устройствами компьютера.
В вычислительной технике наибольшее применение получили вычислительные алгоритмы. Такие алгоритмы применяются для обработки данных. Результатом выполнения таких алгоритмов является получение новых данных или выполнение определенных команд устройствами компьютера. Новые данные получаются в результате выполнения арифметических и логических операций над данными.
Можно привести пример алгоритма вычисления значения некоторой вещественной функции вещественной переменой в заданной точке. Например, пусть функция задана уравнением:
и необходимо вычислить значение данной функции в точке x=2.
Алгоритм выполнения таких вычислений может быть таким.
- Вычислить значение функции в точке x=2. Для этого мы должны трижды умножить число 2 на само себя. Получаем значение 8.
- Далее к полученному в пункте 1) значению мы должны прибавить число 3.
8+3=11; - В качестве ответа приводим полученное в предыдущем пункте значение. Записываем ответ y(3)=11.
Такого алгоритма может придерживаться человек при решении соответствующей арифметической задачи. Если бы такая же задача решалась с помощью вычислительной машины (компьютера), то алгоритм мог бы быть записан следующим образом.
- Ввод значения для записи в переменную x в память компьютера.
- Выполнение операции возведения числа x в куб (для этого число x трижды умножается на само себя) и прибавление к результату числа 3.
- Вывод на экран результата вычислений в пункте 2.
Этот алгоритм обладает свойством массовости (он позволяет вычислять значение функции y(x) в любой точке из множества вещественных значений). Для решения конкретной, более узкой задачи по вычислению значения данной функции в точке x=2 необходимо в пункте 1) алгоритма ввести в память компьютера число 2.
Для решения конкретной, более узкой задачи по вычислению значения данной функции в точке x=2 необходимо в пункте 1) алгоритма ввести в память компьютера число 2. Далее обсудим свойства алгоритмов.
Для того, чтобы последовательность действий могла быть названа алгоритмом, она должна отвечать вполне определенным требованиям (или обладать определенными свойствами), которые излагаются ниже. Впрочем, некоторые из этих свойств присуще не всем алгоритмам, использующимся для решения реальных задач, однако их ценность от этого, как правило, не уменьшается.
Детерминированность (определенность). Данное свойство означает, что на каждом шаге выполнения алгоритма должны выполняться строго определенные действия, инструкции должны быть однозначными, не допускать двух и более толкований.
Результативность означает, что алгоритм должен приводить к определенному результату для всех допустимых входных значений.
Массовость. Это свойство предполагает, что алгоритм должен быть пригоден для решения не одной конкретной задачи, а целого класса подобных задач. Или, другими словами, один и тот же алгоритм можно использовать с разными исходными данными.
Дискретность означает расчлененность определяемого алгоритмом вычислительного процесса на отдельные этапы.
Конечность – алгоритм в целом и любая его часть должны выполняться за конечное число шагов.
Рассмотрим с этих позиций алгоритм решения задачи из предыдущего раздела (алгоритм для вычислительной машины). Алгоритм обладает всеми указанными выше свойствами.
Данный алгоритм обладает свойством массовости, так как с помощью него можно посчитать значение функции в любой точке на вещественной оси.
Алгоритм обладает свойством результативности, так как для любого действительно числа x можно получить соответствующее значение функции. Замечание: в программах для компьютера, написанных с помощью языков программирования высокого уровня, для переменных используются конкретные типы данных. Использование определенных типов данных накладывает ограничения на те значения, которые можно ввести в программу и те значения, которые можно получить в качестве результата работа программы. Стоит отметить, что в современных языках программирования можно использовать значения из очень широкого интервала, достаточного для решения большинства вычислительных задач.
Каждый шаг алгоритма, это определенная команда исполнителю. Для того, чтобы она была выполнена компьютером, необходимо записать программу на языке программирования. В любом языке высокого уровня существуют команды соответствующие командам из данного алгоритма. Если программа будет записана правильно, то каждая команда будет воспринята транслятором однозначно. Таким образом, алгоритм обладает свойством однозначности.
Алгоритм обладает свойством дискретности. Он разбит на три этапа, обозначенных соответствующими цифрами.
Любая часть приведенного алгоритма может быть выполнена за конечное число шагов, так как за конечное число шагов может быть выполнены соответствующие команды [2].
Алгоритмы могут быть записаны самыми разными способами. Мы будем рассматривать способы записи алгоритмов для вычислительных машин, то есть вычислительных алгоритмов.
Первый способ записи – это запись на естественном языке. Под естественными языками понимаются языки, на которых общаются люди в разных странах мира. Например, английский, немецкий, китайский языки. В качестве основных особенностей, важных для записей алгоритмов, можно отметить следующее:
- многозначность слов и выражений;
- огромное количество слов, грамматических и синтаксических конструкций;
- неоднозначность применения этих конструкций.
Благодаря этим особенностям такой способ записи становится не очень удобным. Такие особенности языков появляются от того, что развитие естественных языков происходит под влиянием различных культурных, социальных и общественных явлений. Для записи алгоритмов нужно добиться полной однозначности для исполнителя тех действий, которые ему необходимо выполнить. Поэтому для записи вычислительных алгоритмов предпочтительнее использовать другие способы.
Записи с помощью, так называемого, псевдокода являются более предпочтительными по сравнению с естественным языком. Это запись алгоритмов с помощью условного алгоритмического языка, общепринятых формул и математических обозначений, элементов какого-нибудь языка программирования. Понятно, что записи принципиально одного и того же алгоритма разными людьми на псевдокоде могут очень сильно отличаться. Скажем так, псевдокод, используемый конкретными программистами для записи алгоритмов, это результат их договоренности о том, как этот язык должен выглядеть. Тот псевдокод, который использует конкретная группа программистов, есть результат их владения некоторыми языками программирования, опыта, их представления о том, какие детали алгоритма важны, а какие (обычно машинно-зависимые) детали можно опустить. Основная цель использования псевдокода, это облегчить понимание человеком алгоритма, сделать его максимально независимым от конкретного языка программирования. Синтаксис языка псевдокод не формализован.
Например, конструкции псевдокода, используемые в статьях, как минимум могут зависеть от того языка (естественного) на котором они написаны. Обычно, в псевдокоде, для стандартных команд (начало алгоритма, конец алгоритма, условные операторы) используют слова естественного языка, на котором написана статья вообще. Хотя это является совсем необязательным. Одним из частых применений псевдокода является разработка алгоритма программы до кодирования (записи программы на конкретном языке программирования)[2].
При обучении информатики в школе часто используется алгоритмический язык, или учебный алгоритмический язык. Его можно рассматривать как вариант псевдокода. С другой стороны он имеет вполне четкую документированную реализацию в некоторых учебных средах разработки алгоритмов, например «Кумир».
С точки зрения качества получаемой программы только такой подход является единственно правильным. Именно псевдокод служит средством обмена кодом между программистами, владеющими разными языками программирования. Конечно блок-схемы, о которых речь пойдет далее, являются значительно более стандартизированными записями, по сравнению с записями на псевдокоде, однако программы, имеющие сложную структуру и (или) большой объем исходного кода (именно такие программы появляются при решении реальных, а не учебных задач) получаются на псевдокоде слишком громоздкими.
1.2 История развития языков программирования
Языки программирования — это искусственные языки, специально созданные для записи компьютерных программ. В свою очередь под компьютерной программой понимают алгоритм, созданный для выполнения устройствами компьютера.
Для передачи, хранения и обработки информации люди используют различные устройства. В начале это были механические устройства, например суммирующая машина Паскаля, которая была создана в середине XVIIвека и могла производить простейшие вычисления. В XIXпоявлялись более сложные механические устройства, такие как разностная машина Чарльза Беббиджа (рис. 1), которая выполняла действия в соответствии с инструкцией, записанных на перфокартах, которые были первыми носителями данных и программ. Перфокарта представляет собой картонную карточку, в которой в определенных местах могут быть сделаны отверстия [2].
Рисунок 1. Разностная машина Ч. Беббиджа
В первых компьютерах использовались двоичные, троичные и десятичные системы счисления для хранения данных. Однако, вскоре стали очевидны преимущества двоичного кода. Двоичный код представляет собой систему для кодирования информации с помощью двух типов сигналов. При реализации кодирования и обработки такой информации в компьютерных устройствах, используется два типа сигналов, один соответствует нулю, а другой единице.
Первые программы писались на машинном коде, то есть сочетании единиц и нулей. Однако, программы, написанные на таком языке, было очень трудно писать. Было легко ошибиться, сложно найти и исправить ошибку. Программист должен был быть выдающимся профессионалом, так как он должен был досконально особенности работы каждого блока устройства.
Кроме того, такие программы были машинно-зависимые, что означало, что программы были непереносимы. Каждая программа писалась под конкретную ЭВМ (электронно-вычислительную машину). Таким образом, создание программ в машинных кодах было очень трудоемким и сложным процессом, который также требовал от программиста огромного внимания и сосредоточенности.
Для того, чтобы упростить процесс разработки программного обеспечения уже в 1950 году был создан язык Acceмблер. Этот язык значительно упростил создание новых программ и доработки имеющихся. В этом языке для команд, которые раньше записывались в машинном коде были введены осмысленные названия. Например, команда ADR[2]для получения адреса переменной.
Для реализации такого подхода используются программы, которые также называются ассемблеры. Они переводят программу, написанную на ассемблере в машинный код.
Однако, ассемблер все еще является машинно-зависимым языком программирования. Программы на ассемблере пишутся для каждого конкретного процессора (в данный момент для конкретной архитектуры, операционной системы). На самом деле, синтаксис ассемблера специфичен для каждого компьютера. Таким образом, нет единого языка ассемблера, а есть группа подобных языков. Ассемблеры называют языками программирования низкого уровня. В этом названии выражается близость текстов программ к машинному коду, зависимость от архитектуры процессора. Особенности машинно-зависимых языков показаны в табл. 1.
Таблица 1 - Достоинства и недостатки машинно-зависимых языков программирования
Достоинства |
Недостатки |
Скорость выполнения |
Зависимость от архитектуры процессора |
Сложность написания программ |
|
Сложность тестирования и отладки |
Следующее поколение языков программирования характеризуется независимостью языка от конкретных аппаратных особенностей компьютера. Это поколение называется языками программирования высокого уровня. Первый язык высокого уровня был создан в 60-х годах группой программистов под руководством Джона Бэкуса из IBM. Язык получил название FORTRAN, что является сокращением от FORmulaTRANslator(переводчик формул)[2].
В 1957 году была выпущена первая версия данного языка программирования. Было представлена документация языка, то есть описание конструкций языка, правила их использования и выпущен транслятор языка. Под транслятором понимают специальную программу, которая переводит текст программы с языка программирования высокого уровня на язык программирования низкого уровня. Отметим, что существует два вида трансляторов.
Интерпретатор —транслятор, переводящий текст программы поэтапно (покомандно), и сразу же (то есть параллельно) выполняющий оттранслированную команду исходной программы.
Компилятор транслирует текст программы в модуль на машинном языке, затем программа переписывается в оперативную память и лишь после этого исполняется процессором компьютера. Именно с использованием трансляторов такого типа осуществляется перевод программы на многих языках программирования в машинный код. Поэтому рассмотрим его чуть подробнее.
Фортран не сразу заслужил должное доверие уважение в среде программистов. Компании-разработчики не хотели пользоваться языком программирования, программы на котором исполнялись бы медленнее, чем на ассемблере. Многие не верили в то, что разработка программ на языках программирования высокого уровня может быть эффективнее, чем на ассемблере.
Эффективность достигается благодаря тому, что программист тратит существенно меньше времени на разработку и отладку программы. При разработке программы тестирование и отладка программы, то есть поиск ошибок и их исправление являются очень трудоемким процессом. Зачастую эти процессы занимают в несколько раз больше времени, чем разработка первоначальной версии программы. Это особенно характерно для масштабных проектов. Схематически такой процесс показан на рис. 2.
Рисунок 2. Циклическая часть разработки ПО
Кодирование
Тестирование
Отладка
При разработке языка программирования Фортран, создатели старались сделать его максимально удобным для программиста, то есть, чтобы написание программ требовало как можно меньше внимания к системным особенностям компьютера.
Уже через 3 года после выхода Фортрана появились версии компиляторов языка для 4 видов компьютеров IBM.Вскоре Fortranстал первым широко распространенным языком программирования высокого уровня[3].
Его широко использовали ученые по всему миру для автоматизации сложных расчетов.
Джон Кемени и Томас Курц, сотрудники математического факультета Дармутского колледжа, написали простой и легкий в изучении язык, который назвали Бейсик (BasicBeginner'sAll-purposeSymbolicInstructionCode— универсальный код символических инструкций для начинающих).
В конце 1975 г. Был создан первый интерпретатор Крошки-Бейсика, состоящий примерно из 20 страниц восьмеричного кода. Его создали два программиста-любителя Дик Уиппл и Джон Арнольд. В США выпускался журнал “Dr. Dobb's Journal of computer Calisthenics & Orthodonta: Running Light without Overbyte”, посвященный исключительно Крошке-Бейсику. В это же время изготовитель “Альтаира” фирма MITS (Micro Instrumentation and Telemetry Systems) начала продавать собственную версию языка Бейсик. Эту версию в 1975 г. написал первокурсник Гарвардского университета Бил Гейтс и его друг Пол Аллен, молодой программист фирмы “Хониуэл”.
Эпоха Крошки-Бейсика завершилась в конце 70-х годов. Микрокомпьютеры выпускались теперь в полностью собранном виде, изготовители встраивали интерпретаторы версий Бейсика непосредственно в ПЗУ компьютера. Вскоре наибольшую популярность завоевал М-Бейсик, с продажи которого Гейтс и Ален начали деятельность созданной ими компании Microsoft Corporation. На протяжении многих лет Кемени и Курц периодически пересматривали первоначальную версию Бейсика и даже заменили оператор GOTO более сложными управляющими структурами.
Однако, в языке Basicне было реализована концепции программы, как последовательности программ, имеющую четкую структуру. Поэтому язык оказался не очень пригоден для обучения программированию.
В конце 60-х годов язык программирования FORTRAN стал настолько популярен, что представители европейских компаний стали опасаться, что IBMбудет доминировать в компьютерной индустрии.
Ответом на данный вызов явилось создание на недельной конференции в Цюрихе универсального языка с очень широким кругом применения, который получил название Алгол. В создании языка принимали ведущие европейские и американские инженеры, такие как Джон Бэкус, Джон Маккарти, Эдсгер Дейкстра.
В Алголе появилось представление о программе не как о свободной последовательности команд, а как о блочной структуре, состоящей из чётко описанных и отделённых друг от друга частей. Основной блок программы на Алголе — это сама главная программа. Она содержит свою исполняемую часть, заключённую в блок, ограниченный парой ключевых слов begin и end, а также описания подпрограмм. Каждая подпрограмма — это программа в миниатюре, имеющая собственные, описанные внутри неё данные, однозначно определённый интерфейс в виде имени и списка формальных параметров, и блок кода.
При этом в блоке могут выделяться подблоки.
Были выделены структурные управляющие конструкции: ветвления, циклы, последовательные участки, исполняющие условно или многократно вложенные наборы операторов, также ограниченные теми же ключевыми словами begin и end.
Язык ЛИСП появился в 1965 году. Основным в нем служит понятие рекурсивно определенных функций. Поскольку доказано, что любой алгоритм может быть описан с помощью некоторого набора рекурсивных функций, то ЛИСП по сути является универсальным языком. С его помощью ПК может моделировать достаточно сложные процессы, в частности – интеллектуальную деятельность людей.
Особым направлением в развитии языков программирования стало появление логических языков, таких как пролог. Пролог разработан во Франции в 1972 году для решения проблем «искусственного интеллекта». Пролог позволяет в формальном виде описывать различные утверждения, логику рассуждений и заставляет ПК давать ответы на заданные вопросы.
Следующим важным этапом в развитии языков программирование стало появление языка программирования Паскаль. Он был разработан в 1971 швейцарским ученым Никлаусом Виртом для обучения структурному программированию студентов. В этой роли он оказался настолько удачным, что язык до сих пор используется во многих университетах и школах мира для обучения программированию.
Язык имеет четкую структуру и строгую типизацию. Иными словами, перед тем как использовать некоторую переменную, программист должен указать к какому типу данных относится данная переменная. В соответствии с выбранным типом данных с переменной можно осуществлять те или иные операции, также тип данных определяет какие результаты и с какой точностью могут быть получены.
Большой отпечаток на современное программирование наложил язык Си (первая версия появилась в 1972 году), который стал очень популярным в середе разработчиков систем программного обеспечения (включая операционные системы). Этот язык создавался как инструментальный язык для разработки операционных систем, трансляторов, баз данных и других системных и прикладных программ. Си сочетает в себе как черты языка высокого уровня, так и машинно-ориентированного языка, допуская программиста ко всем машинным ресурсам, чего не обеспечивают такие языки как Бейсик и Паскаль.
Кроме того, язык Си стал основой для создания одного из самых популярных современных языков программирования C++.
В данный момент многие современные языки программирования имеют черты, характерные для синтаксиса языка C. Есть даже класс C-подобных языков.
1.3 Современное состояние языков программирования
Существуют различные классификации языков программирования. По наиболее распространенной классификации все языки программирования делят на языки низкого, высокого и сверхвысокого уровня.
В группу языков низкого уровня входят машинные языки и языки символического кодирования: (ассемблеры). Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, а в качестве операндов используются не конкретные адреса, а символические имена. Все языки низкого уровня ориентированы на определенный тип компьютера, т. е. являются машинно-зависимыми. Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).
Следующую, существенно более многочисленную группу составляют языки программирования высокого уровня. Это Фортран, Алгол, Кобол, Паскаль, Бейсик, Си, Пролог и т.д. Эти языки машинно-независимы, т.к. они ориентированы не на систему команд той или иной ЭВМ, а на систему операндов, характерных для записи определенного класса алгоритмов. Однако программы, написанные на языках высокого уровня, занимают больше памяти и медленнее выполняются, чем программы на машинных языках.
К языкам сверхвысокого уровня можно отнести лишь Алгол-68 и APL. Повышение уровня этих языков произошло за счет введения сверхмощных операций и операторов.
Языки высокого уровня делятся на:
- процедурные (алгоритмические) (Basic, Pascal, C и др.), которые предназначены для однозначного описания алгоритмов; для решения задачи процедурные языки требуют в той или иной форме явно записать процедуру ее решения;
- логические (Prolog, Lisp и др.), которые ориентированы не на разработку алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания;
- объектно-ориентированные (ObjectPascal, С++,C#, Java и др.), в основе которых лежит понятие объекта, сочетающего в себе данные и действия над нами. Программа на объектно-ориентированном языке, решая некоторую задачу, по сути описывает часть мира, относящуюся к этой задаче. Описание действительности в форме системы взаимодействующих объектов естественнее, чем в форме взаимодействующих процедур.
Современный программист должен иметь хорошее представление об объектно-ориентированном программировании. Так как данная концепция является одной из самых востребованных и эффективных.
Для создания программ для мобильных устройств и программ, работающих на разных типах устройств, используются платформо-независимые языки. Самым известным представителем данного класса языков является Java. Независимость от операционной системы и вида устройства осуществляется за счет того, что программа выполняется на виртуальной машине Java.Такая виртуальная машина должна быть установлена на компьютере пользователя. Такая универсальность является несомненным плюсом, однако программы на Javaчасто работают значительно медленнее, чем на других языках.
Одним из самых популярных языков программирования в данный момент является С#. Язык позволяет быстро решать задачи разработки сложных приложений, веб-разработки, программ с мощной 3Dграфикой. При этом программы оказываются высокопроизводительными.
Одним из самых популярных современных языков программирования является JavaScript.Этот язык является скриптовым (или языком сценариев), то есть, как правило, используется для описания действий, которые необходимо выполнить системе или некоторым объектам, созданными сторонними средствами программирования или просто программными средствами. Популярность данного языка осуществляется его применением для веб-разработки. JavaScript позволяет создавать сценарии, которые обрабатываются прямо в браузере. На сегодняшний день большинство сайтов во Всемирной Паутине используют данный язык.
Pythonпредставляет собой интерпретируемый язык, синтаксис которого устроен так, чтобы создание программ требовало от программиста как можно меньше усилий. Код на данном языке выглядит компактно и понятно[2,4]. Язык появился еще в 1991 году, однако особую популярность получил в последние годы. Этот язык широко используется разработчиками компании Google.Его создатель Гвидо Ван Россум даже получает деньги от компании. Язык может быть использован в качестве языка для создания веб-приложений (как правило, для серверной части). Особой популярностью для создания веб-приложений на основе Pythonявляется фреймворк Django[3].
Наряду с Python одним из наиболее простых в освоении является язык Ruby. Язык ориентирован на разработку веб-приложений, является интерпретируемым языком с динамической типизацией. Наиболее известным фреймворком для веб-разработки на основе Ruby является RubyonRails.
PHP — это один из наиболее широко используемых языков для написания сценариев, выполняемых на сервере. Язык первоначально (в 1994 году) представлял набор скриптов для учета посетителей личной веб-страницы. В дальнейшем появлялись новые версии языка программирования, в которых происходило существенное расширение возможностей его использования программистом.
В третьей версии языка программированияPHPбыл заложен его современный облик, поддерживающий многие современные концепции, в частности поддерживает возможность расширять ядро с помощью дополнительных модулей.
В 1999 году вышел. PHP 4.0. Он имел улучшенную производительность сложных приложений, предлагались более безопасные способы ввода пользовательской информации
В 2004 году была выпущена пятая версия языка. В ней была существенно увеличена производительность интерпретатора. Объектно-ориентированная модель была полностью переработана и стала похожа на ООП модель, используемую в Java. В частности, появились конструкторы и деструкторы, разделение методов на открытые, закрытые и защищенные методы.
В 1986 году был разработан С++, который является одним из самых распространенных языков в мире. Язык является компилируемым статически типизируемым языком программирования общего назначения. Главным отличием языка С++ от его предка, языка С, является реализация ООП [6]. Кроме того, С++ поддерживает такие концепции как процедурное программирование и обобщенное программирования.
Язык имеет большую стандартную библиотеку, в которую включено большое количество функций и алгоритмов, позволяющих разрабатывать программы для самых различных сфер применения гораздо быстрее и проще. Кроме того, язык сочетает в себе свойства высокоуровневых и низкоуровневых языков программирования, что объясняет его популярность при написании операционных систем, драйверов устройств и другого системного ПО. Наряду с этим на данном языке программирования успешно разрабатываются компьютерные игры и высокопроизводительных программы, веб-серверы.
Google Chrome, Mozilla Firefox, Winamp и линейка продуктов Adobe были разработаны с помощью С++. Кроме того, некоторые современные игры и операционные системы были разработаны на С++ из-за быстрого процессинга и компиляции.
Ruby — один из самых молодых языков программирования. Его создатель Юкихиро Мацумото (также известный под псевдонимом Matz), профессиональный японский программист.
Ruby— это мощный и динамический объектно-ориентированный язык с открытым исходниками. Главная особенность Ruby — эффективность разработки программ, простота и понятность его синтаксиса и структуры.
Язык Rubyобладает динамической типизацией. Его программы обрабатываются интерпретатором, который является свободно распространяемым кросс-платформенным программным продуктом. Это позволяет использовать данный язык на разных операционных системах, как начинающим программистам, так и компаниям, занимающимся разработкой сложных программных продуктов.
Наибольшее внимание в языке уделено частности обыденным задачам (обработка текстов, администрирование). Для этих целей язык является очень хорошим.
Очень известное и широко используемое применение языка для веб-разработки — это использование фреймворка Ruby On Rails, который позволяет создавать веб-приложения различной степени сложности. Характерными чертами данного фреймворка является:
- Используется механизм повторного использования, позволяющий пользователю не дублировать исходный код
- Используется соглашение о том, что скорее всего будет реализовано в приложении (то есть явная конфигурация спецификации приложения необходима только в нестандартных случаях).
Глава 2. Практическое исследование языков программирования
2.1 Примеры программ на разных языках программирования
В начале рассмотрим решение некоторых распространенных задач с помощью языков программирования Pascal и С++.
В качестве иллюстрации рассмотрим решение следующей задачи на языке C++: программа реализует вычисление квадрата большего из двух действительных чисел[6].
Листинг программы.
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian"); //Русскийязыквконсоли
floatx,y;
cout<< "Программа вычисляет квадрат большего числа\nВведите два числа" <<endl;
cin>>x>>y;
if (x>=y){cout<<x*x;} else {cout<<y*y;}
return 0;
}
В данной задаче происходит выбор наибольшего числа с помощью условного оператора.
Далее, рассмотрим решение такой типичной задачи.
Вводится точка с координатами X,Y. Определить, принадлежит введенная точка фигуре или нет. Фигуры изображены на рисунке 3.
Рисунок 3. Условие задачи в графическом виде
Для решения задачи будем использовать язык Pascal.
varx,y,a:real;
begin
write('Введите координаты точки через пробел');
readln(x,y);
if (y>=8-8*x) and (y>=-2.5*x+5) and (y>=x-2) and (y<=-0.25*x+8) and (sqr(x-5.5)+sqr(y-2.5)>=sqr(2.5)) then
writeln ('Точка входит в область') else
writeln('Точка не входит в область');
end.
Результат.
Вводим 2 ; 3 Выводится: Точка входит в область
Вводим 5 ;2 Выводится: Точка не входит в область'
В начале продемонстрируем решение простой задачи с помощью цикла на языке С++. Пускай программа реализует вычисление первых n четных чисел.
Листинг программы:
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian"); //Русскийязыквконсоли
cout<<"Введите n"<<endl;
int n;
cin>>n;
int s=0;
for (int i=0; i<n;i++)
{int k=2*i; s=s+k;}
cout<<s;
return 0;
}
Результат работы программы:
Если вводим 3, программа выдает 6 (то есть 0+2+4).
В данном примере используется цикл с параметром, так как пользователь вводит число четных чисел.
Одним из важных направлений использования структурного программирования является решение задач численными методами. Пусть, например, нам нужно решить сложное нелинейное уравнение [6].
на отрезке [1;3]
Один из самых известных методов решения данной задачи называется методом Ньютона.
Метод Ньютона (метод касательных) состоит в том, что приближенным значением корня считается точка пересечения касательной к кривой f (x) и оси 0X.
Рабочая формула метода
позволяет найти последовательность x0, x1, x2, …, xn, сходящуюся к точному значению корня ξ уравнения (1.1). Критерием окончания вычислительного процесса является выполнение условия:
|x n+1 - x n| < ε (2)
Была разработана программа на языке Pascal в среде разработки PascalABC.Net.
Листингпрограммы:
usescrt;
varx,a,b,e: real;
function f1(z: real): real; {Основнаяфункция}
begin
f1:= 3*sqr(ln(z))+6*ln(z)-5;
end;
function f2(z:real): real; {Производная от основной функции}
begin
f2:=6*(ln(z))/z+6/z;
end;
begin
Clrscr;
a:=1;b:=3;
e:=0.00001;
clrscr;
if f1(a)*f2(a)>0 then x:=a
else x:=b;
while abs(f1(x)/f2(x))>e do
begin
x:=x-f1(x)/f2(x);
end;
Writeln (' В интервале от ',a:0:0,' до ',b:0:0,' с погрешностью ',e:0:5);
Writeln ('x=',x:0:5,' f(x)=',f1(x):0:5);
end.
Программа выдает результаты, представленные на рисунке 4.
Рисунок 4. Результаты решения уравнения методом Ньютона
2.2 Сравнение программ, написанных на различных языках программирования
Далее, рассмотрим примеры создания различных программ в языках Pythonи Pascal.
Рассмотрим решение одной и той же задачи, вычисление значения функции
на этих языках программирования.
Это простая линейная программа. С помощью Python данная программа может быть представлена в следующем виде[3]:
import math
x=float(input("Введитечисло "))
print(“y =", math.sqrt(x)/math.cos(x))
Для сравнения запишем данный алгоритм на языке Pascal.
var a:real;
begin
write('Введитечисло ');
readln(a);
write('y = ',sqrt(a+5)/cos(a));
end.
Как видно из приведенного примера, код программы на языке Pythonсостоит из трех строк, а код на языке Pascalиз 5.
Таким образом, во многих случаях, код программы на Python содержит меньше строк, чем код на Pascal.
Линейные алгоритмы позволяют выполнять преобразование данных по заданным формулам, содержащих связанные параметры без проведения аналитических преобразований (упрощения формулы).
Рассмотрим решение следующей задачи на языке Pascal.
Пускай необходимо вычислить
при
Блок-cхема
Рисунок 5.Блок-схема линейной программы программы на Pascal
Начало алгоритма
y=2.25;
c=4*sqrt(0.8/y);
b=sin(c)/cos(y);
gamma:=sin(y/b)/cos(y/b)+sin(b/c)/cos(b/c)+sin(c/y)/cos(c/y)
Конец алгортима
Вывод gamma
Текст программы на языке Паскаль:
vary,b,c,gamma:real;
begin
y:=2.25;
c:=4*sqrt(0.8/y);
b:=sin(c)/cos(y);
gamma:=sin(y/b)/cos(y/b)+sin(b/c)/cos(b/c)+sin(c/y)/cos(c/y);
writeln(gamma:0:4);
end.
Результат выполнения программы: 3.1732
Аналогичный код программы на языке Python.
import math
y=2.25
c=4*math.sqrt(0.8/y)
b=math.sin(c)/math.cos(y)
gamma=math.sin(y/b)/math.cos(y/b)+math.sin(b/c)/math.cos(b/c)+math.sin(c/y)/math.cos(c/y)
print("{:.4f}".format(gamma))
Таким образом, программы, записанные на современном языке программирования Python, как правило, требуют написания меньшего количества строчек кода, чем на устаревшем языке Pascal.
Заключение
Мы провели теоретическое и практическое исследование языков программирования. Для достижения данной цели в работе были решены следующие задачи
- рассмотрение и анализ истории ЯП;
- описание современного состояния ЯП;
- рассмотрение и сравнение программ, написанных на различных ЯП;
- охарактеризованы тенденции в развитии ЯП.
На основании проведенного исследования можно сделать вывод, что языки программирования оказали огромное влияние на развитие информационных технологий. Современные популярные языки программирования, как правило, имеют сферу применения, в которой они используются чаще всего. В современных языках программирования сделан акцент на понятность, читаемость кода для разработчика. Также важным является возможность использования ЯП и созданных программ на разных платформах.
Кроме того, для современных языков программирования важно применение для различного рода задач. Особое значение имеет возможности реализации веб-технологий.
Список использованной литературы
- Грызлов, В. И. Турбо Паскаль 7.0. М.: ДМК, 2016. - 416 c
- Угринович, Н.Д. Информатика 10-11 класс. М.: Бином. Лаборатория знаний, 2017. - 511 c
- Саммерфилд, М. Программирование на Python 3. Подробное руководство. - М.: Символ, 2016. - 608 c.
- Информационные системы и технологии. Научное издание. Под ред. Ю.Ф. Тельнова. - М.: ЮНИТИ, 2016. - 303 c.
- Абрамов, В. Г. Введение в язык паскаль. М.: Наука, 2018. - 320 c.
- Альфред, В. Ахо Структуры данных и алгоритмы. М.: Вильямс, 2016. - 400 c
- Секунов, Н. Программирование на C++ в Linux. М.: БХВ-Петербург, 2016. - 425 c.
- Средства товарной экспертизы (выбрать из ОКП) товаров (Общая характеристика средств товарной экспертизы и методы)
- Мотивация и ее теории (Теоретические основы мотивации труда в современных условиях)
- «Понятие социального обеспечения.»
- Юридическая ответственность (Понятие юридической ответственности, ее цели и функции)
- Понятие и признаки государства (Место роль государства в политической системе общества)
- Понятие социального обеспечения (Понятие и предмет права социального обеспечения)
- Нотариат в РФ ( Возникновение нотариата)
- Реформа электроэнергетики в России (Зарубежный опыт институциональных преобразований в электроэнергетике)
- Контроль за оперативно-розыскной деятельностью (Правовая характеристика органов, осуществляющих оперативно-розыскную деятельность)
- Современные политические режимы (ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ФОРМИРОВАНИЯ ПОЛИТИЧЕСКОГО РЕЖИМА)
- Понятие и виды государственных пенсий
- Характеристика общей теории права и государства как науки и учебной дисциплины (Понятие науки теории государства и права, ее предмет и функции)