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

Современные языки программирования (С++ )

Содержание:

ВВЕДЕНИЕ

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

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

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

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

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

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

  1. Ознакомиться с ЯП и рассмотреть их основные концепции.
  2. Исследовать историю развития ЯП.
  3. Сделать обзор современных ЯП.

ГЛАВА 1. Исследование истории и анализ основных понятий языков программирования

1.1. История развития языков программирования

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

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

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

В 1950-х годах был создан Fortran (FORTRAN от FORmula TRANslator - переводчик формул). Как и первые компьютеры, этот язык был в основном предназначен для выполнения естественных наук и математических расчетов. В улучшенном виде этот язык сохранился до наших дней [4]. Среди современных языков высокого уровня он является одним из наиболее часто используемых в научных исследованиях.

После Fortran в 1957 году появился язык Алгол (ALGOL от ALGOrithmic Language). Этот язык, как и Фортран, должен был решать научно-технические проблемы. Кроме того, этот язык использовался как средство обучения основам программирования [2].

Лисп (LISP от LISt Processing - List Processing), созданный в 1960 году Джоном Маккарти. Этот язык широко используется для обработки символической информации и используется для создания ПО, которое имитирует деятельность человеческого мозга.

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

PL / I (Programming Language One) был создан в 1967 году. По своим возможностям PL / I намного мощнее, чем многие другие языки (C, Pascal).

В конце 60-х - начале 70-х гг. появился Форт (FORTH - четвертый). Этот язык начал использоваться для управления различными системами после того, как его автор Чарльз Мур написал на нем программу, предназначенную для управления радиотелескопом Обсерватории Аризоны [5].

Язык Pascal, появившийся в 1971 году, был назван в честь великого французского математика XII-го века, изобретателя первой в мире арифметической машины Блеза Паскаля. Этот язык был создан швейцарским ученым, специалистом по компьютерам Никлаусом Виртом [6].

На Pascal в конце 1970-х гг. был создан язык Ада, названный в честь одаренного математика Ады Лавлейс [10].

В настоящее время C является популярным языком среди программистов. Этот язык был создан в лаборатории Белла в 1972 году и изначально не считался массовым. Планировалось заменить ассемблер, чтобы иметь возможность создавать одинаково эффективные и компактные программы и в то же время не зависеть от конкретного типа процессора. На этом языке в 70-х годах было написано много прикладных и системных программ, а также ряд известных операционных систем (например, UNIX) [1].

Другой язык был создан в начале 70-х годов. Группой специалистов из Университета Марселя. Это язык Пролог. Он получил свое название от слов «Программирование на языке LOGIC». Этот язык основан на законах математической логики [2].

Еще один из самых популярных языков программирования – C ++, который является объектно-ориентированным расширением языка C, созданным Бьяром Страуструпом в 1980 году [8].

Java – этот язык был создан компанией Sun в начале 90-х годов на основе C++. Его цель – упростить разработку приложений на C++, удалив все низкоуровневые функции. Но основной характеристикой этого языка является не компиляция в машинном коде, а в независимом от платформы байт-коде (каждая команда занимает байт) [9].

C # (Sea Sharp). В конце 1990-х годов Microsoft разработала язык C # под руководством Андерса Хейлсберга. Он воплотил в себе лучшие идеи C и C ++, а также их преимущества [13].

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

Большинство современных языков программирования являются объектно-ориентированными. Среди них самые последние версии Turbo Pascal, C ++, Ada и другие.

В настоящее время Visual Basic, Visual C ++, Delphi и др. являются широко используемыми системами визуального программирования. Они позволяют создавать сложные пакеты приложений с простым и удобным пользовательским интерфейсом [3].

1.2. Основные понятия и классификация языков программирования

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

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

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

Алфавит – это авторизованный набор символов, из которого можно составить слова и значения из данного языка.

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

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

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

Классификация ЯП [16]:

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

  1. Скомпилированные языки. Эта группа включает ЯП, исходный код которого преобразуется специальным компилятором в объектные модули, которые затем собираются с использованием компоновщика в один загружаемый модуль. Это исполняемая программа. Скомпилированные языки: C, C ++, Object Pascal.
  2. Интерпретируемые языки. Эта группа включает ЯП, исходный код которого читается и исполняется специальной инструкцией программы интерпретатора в соответствии с инструкциями. Большинство версий языков Basic и Forth интерпретируются.
  3. Языки, скомпилированные на основе псевдокода («зашитый» код). На этих языках исходный код программы компилируется и выполняется как последовательность вызовов подпрограмм из существующих библиотек. Это некоторые базовые версии Basic.
  4. Комбинированные языки. На комбинированных языках исходный код проходит две стадии обработки.
    1. На первом этапе исходный код компилируется в промежуточный язык (байт-код в Java или MSIL в технологии .NET).
    2. На втором этапе интерпретируется промежуточный код (в Java это выполняется виртуальной машиной Java) или промежуточный код перекомпилируется в исполняемый машинный код (эта функция выполняется средой выполнения CLR в технологии .NET).

На самом деле процесс создание ЯП делится на создание процессов и сценариев [17].

  • Языки, создающие процесс. После запуска программы создается отдельный процесс для запуска этой программы. Это происходит в C, C ++, Object Pascal.
  • Сценические языки. Сценарий или скрипт – это программа, запущенная другой программой. Примеры включают в себя скрипт оболочки для UNIX, программы на PHP, Python и Ruby.

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

  • Автономные языки программирования (C, C ++, Java) являются независимым инструментом для создания программ.
  • Интегрированные языки программирования являются частью системы и позволяют создавать программы, которые работают только в этой системе. Примером самого известного интегрированного языка является VBA (Visual Basic для приложений), который используется только в приложениях Microsoft Office для автоматизации и расширения его функциональных возможностей. Язык программирования системы 1С и язык JavaScript, который выполняется только в интернет-приложениях, также интегрированы.

По уровню отдаленности ЯП от естественных языков они делятся на языки низкого и высокого уровня.

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

Согласно парадигмам, ЯП делятся на императивные (процедурные), функциональные, логические и объектно-ориентированные (ООП).

  • Императивные (процедурные) языки описывают решение проблемы как последовательность процедур. Большинство современных ЯП являются обязательными.
  • Функциональные языки описывают желаемый результат как набор вложенных функций (Haskell).
  • Логические языки описывают желаемый результат как сумму логических операций (Prolog).
  • Объектно-ориентированные языки (ООП) способны определять абстрактные типы данных и реализовывать основные парадигмы (ООП): инкапсуляция, наследование и полиморфизм (C ++, Java, Object Pascal и т. д.).

На основе нашего исследования сделаем сводную таблицу сравнения по самым популярным языкам программирования (Таблица 1).

Составим рейтингово-балльную оценку, где 10 – самая высока оценка, а 0 – самая низкая.

Таблица 1

Сравнительный анализ ЯП

Скорость обработки

Читабельность

Простота

GUI (Графический интерфейс пользователя)

Графика (2D)

Графика (3D)

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

Спец.процессоры

С

8

6

2

3

5

8

7

10

С++

8

6

3

4

6

8

7

7

Java

6

7

6

7

7

6

10

0

Python

2

5

10

8

10

1

10

0

Assembler

10

0

0

0

0

0

0

5

PHP

6

10

8

10

5

2

10

10

C#

8

6

5

4

6

8

10

10

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

ГЛАВА 2. Виды современных языков программирования

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

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

Правила написания команд на определенном языке называются синтаксисом языка. Синтаксис определяет, какая команда будет считаться действительной, а какая - нет. Например, в Basic команды CLS и FOR I = 1–10 считаются действительными, а команды CLERSCREEN и FOR I FROM 1–10 считаются недействительными.

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

У каждого языка есть алфавит – набор символов, который можно использовать при написании программ на этом языке. Различные версии одного и того же языка могут незначительно отличаться в алфавитном порядке [18].

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

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

По способу трансляции языки делятся на [1]:

  • Компиляторы
  • Интерпретаторы

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

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

По уровню (особенности построения) языки делятся на [1]:

  • Машинно-ориентированные (ассемблеры)

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

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

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

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

Кроме того, впервые в истории разработки программ появились два представления программы: в исходном и скомпилированном виде.

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

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

  • Универсальные

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

2.1. С++

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

C ++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. В его сферу входит создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов и игр. Существует множество реализаций языка C ++, как бесплатных, так и коммерческих, и для различных платформ. Например, на платформе x86 это GCC, Visual C ++, Intel C ++ Compiler, Embarcadero (Borland) C ++ Builder и другие. C ++ оказал огромное влияние на другие языки программирования, в основном Java и C #.

Синтаксис C ++ унаследован от языка C. Одним из принципов разработки было сохранение совместимости с C. Многие программы, которые могут быть успешно переведены как компиляторами C, так и компиляторами C ++. Они довольно большие, но не содержат все возможные программы на C [22].

Достоинства и недостатки

Достоинства

  • C++ содержит средства разработки программ контролируемой эффективности для широкого спектра задач, от низкоуровневых утилит и драйверов до весьма сложных программных комплексов. В частности:
  • Высокая совместимость с языком Си: код на Си может быть с минимальными переделками скомпилирован компилятором C++. Внешне языковой интерфейс является прозрачным, так что библиотеки на Си могут вызываться из C++ без дополнительных затрат, и более того — при определённых ограничениях код на C++ может экспортироваться внешне не отличимо от кода на Си (конструкция extern "C").
  • Как следствие предыдущего пункта — вычислительная производительность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Один из базовых принципов C++ — «не платишь за то, что не используешь» (см. Философия C++) — то есть ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования. Имеется возможность работы с памятью на низком уровне.
  • Поддержка различных стилей программирования: традиционное императивное программирование (структурное, объектно-ориентированное), обобщённое программирование, функциональное программирование, порождающее метапрограммирование.
  • Автоматический вызов деструкторов объектов в адекватном порядке (обратном вызову конструкторов) упрощает и повышает надёжность управления памятью и другими ресурсами (открытыми файлами, сетевыми соединениями, соединениями с базами данных и т. п.).
  • Перегрузка операторов позволяет кратко и ёмко записывать выражения над пользовательскими типами в естественной алгебраической форме.
  • Имеется возможность управления константностью объектов (модификаторы const, mutable, volatile). Использование константных объектов повышает надёжность и служит подсказкой для оптимизации. Перегрузка функций-членов по признаку константности позволяет определять выбор метода в зависимости цели вызова (константный для чтения, неконстантный для изменения). Объявление mutable позволяет сохранять логическую константность при виде извне кода, использующего кэши и ленивые вычисления.
  • Шаблоны C++ дают возможность построения обобщённых контейнеров и алгоритмов для разных типов данных. Попутно шаблоны дают возможность производить вычисления на этапе компиляции.
  • Возможность встраивания предметно-ориентированных языков программирования в основной код. Такой подход использует, например библиотека Boost.Spirit, позволяющая задавать EBNF-грамматику парсеров прямо в коде C++.
  • Доступность. Для C++ существует огромное количество учебной литературы, переведённой на всевозможные языки. Язык имеет высокий порог вхождения, но среди всех языков такого рода обладает наиболее широкими возможностями.

Недостатки

К числу обычно упоминаемых недостатков языка можно отнести:

  • Отсутствие системы модулей. C++ унаследовал от Си подключение заголовочных файлов с помощью препроцессора. Это вынуждает дублировать описания объектов, порождает неочевидные требования к коду (см. правило одного определения) и увеличивает объём компилируемого текста, а значит и время компиляции.
  • Наличие более чем одного механизма для выполнения одних и тех же задач, что усложняет язык и приводит к неоптимальному и небезопасному кодированию.
  • Унаследованные от Си опасные и провоцирующие ошибки возможности (макроопределения, адресная арифметика, неявное приведение типов, возможность прямого управления распределением памяти).
  • Отсутствие встроенных механизмов статической валидации времени жизни объектов, приводящее к внезапному краху программ из-за обращения к уничтоженной переменной, или из-за неправильной многопоточной работы с объектами.
  • Шаблоны порождают объёмный и не всегда оптимальный код. Частичное определение шаблонов усложняет как сам язык, так и программы, где он используется.
  • Множественное (в том числе виртуальное) наследование приводит к созданию громоздких иерархий классов, которые при любом изменении требований к программе могут потребовать серьёзного пересмотра.
  • Сложный синтаксис и объёмная спецификация языка затрудняют его изучение.
  • Язык не поощряет создание надёжного, легко читаемого и удобного в сопровождении кода, вместо этого зачастую предлагая выбор между короткими и простыми, но опасными средствами, унаследованными от Си, и новыми, объёмными и сложными, но более безопасными механизмами.
  • Сложная и постоянно разрастающаяся стандартная библиотека, затрудняющая изучение языка.

2.2. С# (Sharp)

C # принадлежит к семейству языков с C-подобным синтаксисом, который наиболее близок к C ++ и Java. Язык имеет статистическую типизацию, поддерживает полиморфизмы, перегрузку операторов (включая явные и неявные операторы преобразования типов), делегаты, атрибуты, события, свойства, обобщенные типы и методы, итераторы, анонимные функции с поддержкой закрытия, LINQ, исключения, комментарии в формат XML [5].

Если вы изучили много предыдущих языков C ++, Delphi, Module, Smalltalk и особенно Java, то с C #, вы исключите некоторые модели, которые оказались проблематичными при разработке программных систем, например, в отличие от C ++, C # не поддерживает множественное наследование классов (между тем, множественное наследование интерфейсов разрешено).

C # был разработан как язык программирования прикладного уровня для CLR и, как таковой, зависит в первую очередь от возможностей самого CLR. Это в основном относится к системе типов C #, которая отражает BCL. Наличие или отсутствие определенных выразительных характеристик языка продиктовано возможностью перевода конкретной языковой характеристики в соответствующие конструкции CLR. Таким образом, с развитием CLR с версии 1.1 до 2.0, сам C # значительно вырос.

Существует несколько реализаций C# [5]:

  • Реализация C# в виде компилятора csc.exe включена в состав .NET Framework (включая .NET Micro Framework, .NET Compact Framework и его реализации под Silverlight и Windows Phone 7).
  • В составе проекта Rotor (Shared Source Common Language Infrastructure) компании Microsoft.
  • Проект Mono включает в себя реализацию C# с открытым исходным кодом.
  • Проект DotGNU также включает компилятор C# с открытым кодом.
  • DotNetAnywhere[21] — ориентированная на встраиваемые системы реализация CLR, поддерживает практически всю спецификацию C# 2.0.

2.3. Python

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

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

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

Возможности и особенности языка [8]:

  • Классы являются одновременно объектами со всеми нижеприведёнными возможностями.
  • Наследование, в том числе множественное.
  • Полиморфизм (все функции виртуальные).
  • Инкапсуляция (два уровня — общедоступные и скрытые методы и поля). Особенность — скрытые члены доступны для использования и помечены как скрытые лишь особыми именами.
  • Специальные методы, управляющие жизненным циклом объекта: конструкторы, деструкторы, распределители памяти.
  • Перегрузка операторов (всех, кроме is, '.', '=' и символьных логических).
  • Свойства (имитация поля с помощью функций).
  • Управление доступом к полям (эмуляция полей и методов, частичный доступ, и т. п.).
  • Методы для управления наиболее распространёнными операциями (истинностное значение, len(), глубокое копирование, сериализация, итерация по объекту, …)
  • Метапрограммирование (управление созданием классов, триггеры на создание классов, и др.)
  • Полная интроспекция.
  • Классовые и статические методы, классовые поля.
  • Классы, вложенные в функции и классы.

Наиболее часто Python сравнивают с Perl и Ruby. Эти языки также являются интерпретируемыми и обладают примерно одинаковой скоростью выполнения программ. Как и Perl, Python может успешно применяться для написания скриптов (сценариев) [1].

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

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

В отличие от некоторых ООЯП (Java, Object Pascal, Ruby, …) в Python нет реального общего базового класса, от которого все объекты наследуют общие методы. Хотя формально новый класс в Python наследует (прямо или косвенно) тип object, это является только синтаксическим приёмом, так как методы, которые являются общими для всех объектов — id, type, isinstance, issubclass, str, repr, getattr, … не наследуются от object, а реализованы в виде глобальных функций. Такое решение приводит к тому, что изменение поведения этих методов производится не перегрузкой, а определением специальных методов класса [7].

В среде коммерческих приложений скорость выполнения программ на Python часто сравнивают с Java-приложениями.

Python — стабильный и распространённый язык. Он используется во многих проектах и в различных качествах: как основной язык программирования или для создания расширений и интеграции приложений. На Python реализовано большое количество проектов, также он активно используется для создания прототипов будущих программ. Python используется во многих крупных компаниях: Dropbox, Google (например некоторые части Youtube и Youtube API написаны на Python), Facebook, Instagram.

2.4. PHP

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

Язык и его интерпретатор (Zend Engine) разрабатываются группой энтузиастов в рамках проекта с открытым кодом. Проект распространяется под собственной лицензией, несовместимой с GNU GPL.

В области веб-программирования, в частности серверной части, PHP - один из популярных сценарных языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) [10].

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

Основные из них [11]:

  • автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;
  • взаимодействие с большим количеством различных систем управления базами данных через дополнительные модули (MySQL, MySQLi, SQLite, PostgreSQL, Oracle (OCI8), Oracle, Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape и Apache Derby, Informix, Ovrimos SQL, Lotus Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, Firebird / InterBase, MaxDB, Интерфейс PDO), Redis;
  • автоматизированная отправка HTTP-заголовков;
  • работа с HTTP-авторизацией;
  • работа с cookies и сессиями;
  • работа с локальными и удалёнными файлами, сокетами;
  • обработка файлов, загружаемых на сервер;
  • работа с XForms.

В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу корпорации TIOBE, базирующемся на данных поисковых систем, в мае 2016 года PHP находился на 6 месте среди языков программирования. К крупнейшим сайтам, использующим PHP, относятся Facebook, Wikipedia и др.

Входит в LAMP — распространённый набор программного обеспечения для создания и хостинга веб-сайтов (Linux, Apache, MySQL, PHP).

Язык автоматически поддерживает HTTP Cookies, в соответствии с стандартами Netscape. Это позволяет проводить установку и чтение небольших сегментов данных на стороне клиента. Работа с Cookies организована посредством сеансов (сессий). У сессий есть срок действия (после его истечения, данные удаляются), в сессиях можно хранить и редактировать разные типы данных, в том числе сериализованные - пропущенные через serialize (процесс происходит автоматически), PHP-объекты.

Создание GUI-Приложений

PHP не ориентирован на создание приложений, но есть потребность в создании интерфейсов для настройки серверов, беспрерывного выполнения, отладки скриптов (сценариев), управления локальными и тестовыми серверами, и т.п. Из-за этого и возникли решения данной проблемы.

Расширения

Основное использование расширений — надстройки библиотек интерфейсов пользователя (UI-библиотек).

Расширения условно делятся на три группы:

  • Расширения:PHP: WxPHP (Windows, Linux, macOS), Winbinder (Windows).
  • Обёртки, использующие системные функции средствами FFI: Win32Std, Tk ( реализация для Python).
  • Консольные обёртки для использования командного интерфейса (CLI): PHP-UI, PHP-XCB.

Разработаны расширения как двусторонняя обёртка для использования других языков при написании расширений PHP, и наоборот. Например, PSV Component Library, - проект, состоящий из трёх подпроектов:

  • PHP4Delphi реализует соединения PHP с программами, написанными на Delphi средствами WinAPI. Разрабатывался с 1999 года, но не обновлялся c 2009 года, из-за чего появились ответвления - форки -сторонние обновления, например,  PHP4Lazarus.
  • PHP extensions development framework - средство создания расширений PHP, VCL-компоненты — неотъемлемая часть PHP4Delphi, базовые компоненты которой нужны для создания приложений.
  • php4Applications - расширение для использования PHP в других языках, базирующееся на PHP4Delphi, дающее доступ к макросам и упрощающее использование PHP, избавляя от создания обёртки.

Среды разработки (IDE)

Есть место и полноценным средам разработки для GUI PHP:

  • DevPHP

Первопроходцем в этой категории является студия DevPHP-IDE, которая использовала Kylix(Delphi) в качестве основы интерфейса и php-cli для создания пользовательских программ.

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

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

  • CodeGear Rad Studio (Расширение)

После DevPHP IDE появилось расширение - набор компонентов для CodeGear Rad Studio 2009 на базе php4delphi с некоторыми улучшениями (веб-элементы, инспектор, отладчик), поддержка её длилась в течение четырёх версий, вторая из которых вошла в платное расширение Rad Studio 2010: была возможность использовать скрипты, задавать стиль веб-компонентам, просматривать стили и веб-страницы до сборки программы, запускать локальный сервер, собирать программу, как отдельное приложение и отлаживать код. С выходом Delphi XE, расширение получило название RADPHP Xe. Далее, сама студия стала называться Embarcadero Delphi, и работа над данным расширением была приостановлена на неопределённый срок.

  • DevelStudio (RAD)

В 2009 году на базе php4delphi началась разработка среды для создания графических PHP-приложений, к разработке которой позже присоединился Ростислав Романов. Среда получила название PHP DevelStudio, первой опубликованной версией стала 0.1.7. DevelStudio имела небольшое количество компонентов в наборе инструментов и работала на устаревшем PHP 4. Во второй версии, DevelStudio получила поддержку PHP 5. Были добавлены потоки, произведены множественные изменения и улучшения. Код сборки программ стал закрытым, предыдущие версии программы и сообщения на форуме были удалены с целью воспрепятствования злоумышленникам.

Вторая версия DevelStudio так же получила набор компонентов AlphaControls, вследствие чего её стали использовать для создания вредоносных программ, в силу её простоты и понятности. Популярные на то время антивирусы (MacAffee, AVG, Avira) стали распознавать любые скомпилированные в DevelStudio программы, как вирусы.

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

На момент 2012 года вышла последняя версия среды - 3.0.2, где появился новый набор компонентов, в том числе браузер Chromium вместо IE, что привлекло внимание веб-разработчиков и пользователей среды «Алгоритм». На тот момент, компиляция программ в «Алгоритме» была платной, поэтому DevelStudio как новая и бесплатная среда разработки, переманила на себя большую часть аудитории.

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

В 2015 году пользователь Xoren сделал 2 версии протектора для DevelStudio, после этого известные рэперы - Бажмитос и Гопович сделали свои декомпиляторы и протекторы, которые позже слили в сеть. Остальные люди, работающие в этой среде, скачали исходники и продолжили активно этим заниматься. В итоге Гопович собрал ПК за 200 000 руб, а Бажмитос депортировался в Майями.

В 2019 году сообщество обратилось к создателю DevelStudio с целью изменения политики распространения среды, вследствие чего она стала доступной для обновления и редактирования. Из-за жалоб на отсутствие ссылок на использованные библиотеки (DCEF, PHP4Delphi, TSizeCtrl, SynEdit) форум был удалён, а одна из страниц с описанием среды была перенаправлена на главную страницу сайта. С этого момента DevelStudio официально принадлежит сообществу.

  • DevelNext (DN)

Параллельно с этим, главный разработчик DevelStudio начал создавать "реинкарнацию" предыдущей среды. Он взял за основу графическую библиотеку JavaFX, в результате вышла полностью новая среда, с поддержкой CSS, но без полной поддержки PHP - проект был основан на собственном языке jPHP. Его особенностью является JIT компилятор и работа на JVM.

В 16-й версии среда DevelNext получила поддержку php 7 и была расширена энтузиастами для разработки под платформу OS Android.

На данный момент автор и энтузиасты трудятся над 19 версией (ранее 17-я).

  • PHPQt

В 2015 году Александр Казанцев начал изучать алгоритмы разработки интерфейсов и создал расширение php_qml, что давало возможность использовать виджеты из библиотеки QT, но имело поддержку лишь одной платформы – Windows.

С этого началась разработка PHPQt, первые версии не обратили особого внимания со стороны веб-разработчиков, поэтому автор начал углублённо улучшать расширение.

28-го июля 2015 года был опубликован первый вариант компилятора проектов, на тот момент это был простой исполнитель скриптов(сценариев), который прикреплял php-код к стабу (подобно DevelStudio), и имел зависимость от Windows API, на этой стадии поддерживались уже почти все виджеты и многопоточность, была лёгкая оптимизация php-кода. С этого момента движок стали называть PQEngine, 

3-го августа 2016 года вышла пятая версия компилятора приложений (PqBuilder), что перешёл на базу PlastiQ, и имел поддержку уже новейшего, на тот момент, php 7, проекты получили более полноценный компилятор и уже не требовали наличия PqEngine.dll вблизи с исполняемым файлом, вместо этого визуальные библиотеки стали добавляться динамично - как файлы, а не вшиваться в PQEngine.dll. Такой шаг был предпринят для совместимости с другими системами и оригинальными библиотеками Qt.

С появлением шестой версии, проект стал дополнением для среды Qt Studio, а компилятор стал всего-навсего оптимизатором кода перед конечной сборкой программы. Появился полноценный редактор интерфейса, подсказки в редакторе кода и начала создаваться документация. С этого момента сделали анонс про создание среды PqStudio, но её разработка не зашла далеко.

2.5. Java

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

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

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

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

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

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

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

Внутри Java существует несколько основных семейств технологий:

  • Java SE — Java Standard Edition, основное издание Java, содержит компиляторы, API, Java Runtime Environment; подходит для создания пользовательских приложений, в первую очередь — для настольных систем.
  • Java EE - Java Enterprise Edition, представляет собой набор спецификаций для создания программного обеспечения уровня предприятия. В 2017-м проект Java EE был передан Eclipse Foundation, после чего был переименован в Jakarta EE. Модули Java EE удалены из Java SE, начиная с 11-й версии.
  • Java ME - Java Micro Edition, создана для использования в устройствах, ограниченных по вычислительной мощности, например, в мобильных телефонах, КПК, встроенных системах;
  • Java Card  - технология предоставляет безопасную среду для приложений, работающих на смарт-картах и других устройствах с очень ограниченным объёмом памяти и возможностями обработки.

Компанией Microsoft была разработана собственная реализация JVM под названием Microsoft Java Virtual Machine (англ.)русск. (MSJVM), включавшаяся в состав различных операционных систем, начиная с Windows 98 (также входила в Internet Explorer от версии 3 и выше, что позволяло использовать MSJVM в ОС Windows 95 и Windows NT 4 после установки IE3+ на данные ОС).

MSJVM имела существенные отличия от Sun Java, во многом ломающие основополагающую концепцию переносимости программ между разными платформами:

  • отсутствие поддержки программного интерфейса вызова удалённых методов (RMI);
  • отсутствие поддержки технологии JNI;
  • наличие нестандартных расширений, таких, как средства интеграции Java и DCOM, работающих только на платформе Windows.

Тесная интеграция Java с DCOM и Win32 поставила под вопрос кроссплатформенную парадигму языка. Впоследствии это явилось поводом для судебных исков со стороны Sun Microsystems к Microsoft. Суд принял сторону компании Sun Microsystems. В конечном счёте между двумя компаниями была достигнута договорённость о возможности продления срока официальной поддержки пользователей нестандартной Microsoft JVM до конца 2007 года.

В 2005 году компанией Microsoft для платформы .NET был представлен Java-подобный язык J#, не соответствующий официальной спецификации языка Java и исключённый впоследствии из стандартного инструментария разработчика Microsoft Visual Studio, начиная с Visual Studio 2008.

Язык Java активно используется для создания мобильных приложений под операционную систему Android. При этом программы компилируются в нестандартный байт-код, для использования их виртуальной машиной Dalvik (начиная с Android 5.0 Lollipop виртуальная машина заменена на ART). Для такой компиляции используется дополнительный инструмент, а именно Android SDK (Software Development Kit), разработанный компанией Google.

Разработку приложений можно вести в среде Android Studio, NetBeans, в среде Eclipse, используя при этом плагин Android Development Tools (ADT), или в IntelliJ IDEA. Версия JDK при этом должна быть 5.0 или выше.

8 декабря 2014 года Android Studio признана компанией Google официальной средой разработки под ОС Android.

Основные возможности:

  • Автоматическое управление памятью.
  • Расширенные возможности обработки исключительных ситуаций.
  • Богатый набор средств фильтрации ввода-вывода.
  • Набор стандартных коллекций: массив, список, стек и т. п.
  • Наличие простых средств создания сетевых приложений (в том числе с использованием протокола RMI).
  • Наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы.
  • Встроенные в язык средства создания многопоточных приложений, которые потом были портированы на многие языки (например Python).
  • Унифицированный доступ к базам данных:
  • на уровне отдельных SQL-запросов — на основе JDBC, SQLJ;
  • на уровне концепции объектов, обладающих способностью к хранению в базе данных - на основе Java Data Objects (англ.) и Java Persistence API.
  • Поддержка обобщений (начиная с версии 1.5).
  • Поддержка лямбд, замыканий, встроенные возможности функционального программирования.

По проведенному исследовании можно сделать следующий вывод.

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

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

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

Также составим сравнительную таблицу по исследованным ЯП. Рассмотрим самый интересный и популярный момент – объектно-ориентированные возможности (Таблица 2).

Таблица 2

Сравнение рассмотренных ЯП

С++

С#

Java

PHP

Python

Интерфейсы

+

+

+

+

+

Мультимтоды

-

-

-

-

+

Переименование членов при наследовании

-

-

-

-

-

Множественное наследование

+

-

-

-

+

Решение конфликта имен при множественном наследовании

-

+

+

+

+

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

ЗАКЛЮЧЕНИЕ

В данной курсовой работе мы рассмотрим наиболее распространенные языки программирования, такие как: С++, Python, PHP, C# и Java, которые используются для научных вычислений, обучения программированию начинающих программистов, создания все возможных сайтов и программного обеспечения.

Были рассмотрены следующие задачи:

  1. Ознакомились с ЯП и рассмотрели их основные концепции.
  2. Исследована история развития ЯП.
  3. Сделан обзор современных ЯП.

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

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

  • В 1970-х самым популярным языком общего применения был Pascal, но в 1980-х его применение резко сократилось. 
  • Язык C, разработанный компанией Bell Laboratories, является очень эффективным, но низкоуровневым языком программирования. Язык C — это основа современных языков.
  • Самым большим преимуществом языка C++ над его предшественником является поддержка объектно-ориентированного программирования. 
  • Visual Basic, наследник языка BASIC, обеспечивает наилучшую базу программирования для начинающих. 
  • Выбор используемого языка определяется многими факторами.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Александреску, А. Язык программирования D / А. Александреску. — М.: Символ, 2013. — 536 c.
  2. Ашарина, И.В. Основы программирования на языках С и С++: Курс лекций для высших учебных заведений / И.В. Ашарина. — М.: Гор. линия-Телеком, 2012. — 208 c.
  3. Баженова, И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. — М.: ИЦ Академия, 2012. — 368 c.
  4. Белоусова, С.Н. Основные принципы и концепции программирования на языке VBA в Excel: Учебное пособие / С.Н. Белоусова, И.А. Бессонова. — М.: БИНОМ. ЛЗ, 2010. — 200 c.
  5. Бьянкуцци, Ф. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден. — СПб.: Символ-плюс, 2011. — 608 c.
  6. Гавриков, М.М. Теоретические основы разработки и реализации языков программирования: Учебное пособие / М.М. Гавриков, А.Н. Иванченко, Д.В. Гринченков. — М.: КноРус, 2010. — 184 c.
  7. Гергель, В.П. Современные языки и технологии паралелльного программирования: Учебник / В.П. Гергель. — М.: МГУ, 2012. — 408 c.
  8. Голицына, О.Л. Языки программирования: Учебное пособие / О.Л. Голицына, Т.Л. Партыка, И.И. Попов. — М.: Форум, НИЦ ИНФРА-М, 2013. — 400 c.
  9. Головин, И.Г. Языки и методы программирования: Учебник для студентов учреждений высшего профессионального образования / И.Г. Головин, И.А. Волкова. — М.: ИЦ Академия, 2012. — 304 c.
  10. Довек, Ж. Введение в теорию языков программирования / Ж. Довек, Ж.-Ж. Леви. — М.: ДМК, 2016. — 134 c.
  11. Дорогов, В.Г. Основы программирования на языке С: Учебное пособие / В.Г. Дорогов, Е.Г. Дорогова; Под общ. ред. проф. Л.Г. Гагарина. — М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2013. — 224 c.
  12. Касторнова, В.А. Структуры данных и алгоритмы их обработки на языке программирования Паскаль: Учебное пособие / В.А. Касторнова. — СПб.: BHV, 2016. — 304 c.
  13. Кауфман, В.Ш. Языки программирования. Концепции и принципы / В.Ш. Кауфман. — М.: ДМК, 2011. — 464 c.
  14. Керниган, Б. Язык программирования C. 2-е изд. / Б. Керниган, Д.М. Ритчи. — М.: Вильямс, 2016. — 288 c.
  15. Маслов, В.В. Основы программирования на языке Perl / В.В. Маслов. — М.: Радио и связь, 2000. — 144 c.
  16. Монахов, В.В. Язык программирования Java и среда NetBeans. 3-е изд., пер. и доп. + DVD / В.В. Монахов. — СПб.: BHV, 2012. — 704 c.
  17. Новичков, В.С. Начала программирования на языке QBASIC. Учебное пособие / В.С. Новичков, А.Н. Пылькин. — М.: ГЛТ, 2007. — 268 c.
  18. Троелсен, Э. Язык программирования С# 5.0 и платформа .NET 4.5 / Э. Троелсен; Пер. с англ. Ю.Н. Артеменко. — М.: Вильямс, 2013. — 1312 c.
  19. Фридман, А.Л. Основы объектно-ориентированного программирования на языке Си++ / А.Л. Фридман. — М.: Гор. линия-Телеком, 2012. — 234 c.
  20. Хейлсберг, А. Язык программирования C#. Классика Computers Science / А. Хейлсберг, М. Торгерсен, С. Вилтамут. — СПб.: Питер, 2012. — 784 c.
  21. Цуканова, Н.И. Теория и практика логического программирования на языке Visual Prolog 7: Учебное пособие для вузов / Н.И. Цуканова, Т.А. Дмитриева. — М.: Гор. линия-Телеком, 2013. — 232 c.
  22. Цуканова, Н.И. Теория и практика логического программирования на языке Visual Prolog 7. Учебное пособие для вузов. / Н.И. Цуканова, Т.А. Дмитриева. — М.: РиС, 2013. — 232 c.