Файл: «Современные языки программирования»(ТЕОРЕТИЧЕСКИЕ ОСНОВЫ РАЗВИТИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 30.03.2023

Просмотров: 166

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

В языках объектно-ориентированного программирования переменные и функции группируются в классы, благодаря чему достигается высокий уровень структуризации программы. Объекты, порождённые от классов, вызывают методы (функции) друг друга и, таким образом, меняют состояние свойств (переменных). С формальной стороны объектно-ориентированное программирование базируется на процедурной модели, но с содержательной – оно базируется не на функции, а на объекте, как на целостной системе [19].

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

ГЛАВА 2. СОВРЕМЕННОЕ СОСТОЯНИЕ И ПЕРСПЕКТИВЫ РАЗВИТИЯ СОВРЕМЕННЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

2.1. Возможности современных языков программирования

Одним из ярких представителей языков нового времени является язык Elm. Ключевая особенность этого языка - отладчик реального времени: можно изменять код в реальном времени и наблюдать, как меняется тот или иной параметр. Все действия записываются, перематываются и переигрываются.

Elm - функциональный язык программирования для создания GUI – Graphical User Interface , использующий синтаксис в стиле функционального языка программирования «Haskell». Родственные связи этих языков показаны на схеме (рис. 1).


Рис. 1 - Связи языка Elm

Этот функциональный язык удобен и прост – программный код в несколько строк обеспечивает пользователю возможность рисования мышью любой фигуры в клиентской программе или в окне браузера. Интересна вычислительная модель реактивного функционального программирования – Functional Reactive Programming (FRP), положенная в основу данного языка. Данная парадигма ориентирована на работу с динамическими потоками данных и позволяет создавать приложения с высокой степенью интерактивности. Концепция FRP впервые была предложена Коналом Эллиоттом (Conal Elliott) при разработке функционального предметно-ориентированного языка для программирования анимации [11].

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

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

Если рассмотреть генеалогические связи этого языка (рис. 2), то можно выделить конкретные преимущества данного языка программирования высокого уровня.

Рис. 2 – Структурные связи Swift

Swift сочетает в себе понятность именованных параметров и мощь динамической объектной модели Objective-C, а также открывает доступ к уже существующим интерфейсам прикладного программирования для различных операционных систем [17].

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

Кроме того, скорость реализации некоторых алгоритмов на Swift в 3,9 раза выше, чем на Python, и лаконичней, ввиду того, что в языке максимально искоренен такой недостаток как многословность, присущая Objective-C [9].

Если рассмотреть программные продукты ведущих корпораций – разработчиков современного программного обеспечения, то интересен для исследования обучаемыми язык программирования высокого уровня «Go» от корпорации Google (рис.3).


Рис. 3–Связи языка Go

Go –компилируемый, многопоточный язык программирования. Первоначальная разработка Go началась в сентябре 2007 года, а его непосредственным проектированием занимались авторы, стоявшие у истоков создания языка C и операционной системы UNIX: Роберт Гризмер, Роб Пайк и Кен Томпсон [12].

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

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

Как показывает анализ родственных связей, язык программирования высокого уровня «Go» опирается на мощный фундамент языков С и С++, а также поддержку компании Google, одной из самых крупных ИT-компаний на сегодняшний день.

Веб-программирование – тот раздел программирования, к которому студенты испытывают огромный интерес, поэтому стоит обратить внимание на современные языки программирования высокого уровня Dart и TypeScript, как альтернативу уже широко известному языку программирования JavaScript.

Dart – действительно новый язык и при его разработке были учтены следующие аспекты, которые так или иначе мешали его «родственникам» (рис. 4).

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

Во-вторых, он приемник уже существующих языков JavaScript, Go – которые популярны среди разработчиков программного кода, и переход к Dart и обучение ему, естественно, упрощается. Как и в JavaScript, в Dart используется синтаксис похожий на язык C. Но различие в том, что JavaScript основывается на прототипах, тогда как объекты в Dart определяются при помощи классов и интерфейсов(как в C++ или Java). Также Dart позволяет дополнительно задать переменные со статическими типами.

Рис. 4 – Генеалогические связи языка Dart


Как показывает короткий промежуток существования этого языка, он становится столь же привычным, динамичным и гибким языком, как и JavaScript, а написанные на нем коды – быстрее и легче в выполнении. Кроме того, созданные на этом языке программы – высокопроизводительны и успешно работают на вычислительных устройствах широкого класса: от смартфонов до серверов. Очень важен для любого языка программирования высокого уровня стандарт, и 4 июля 2014Ассоциацией стандартизации информационных и коммуникационных технологий была одобрена первая редакция стандарта языка [15].

Кроме компании Google, компания Microsoft представила свой аналог JavaScript – TypeScript (рис. 5).

Рис. 5 - Связи языка TypeScript

TypeScript – язык программирования, как уже было отмечено выше, может позиционироваться как средство разработки веб-приложений, расширяющее возможности JavaScript. Разработчиком языка TypeScript является Андерс Хейлсберг, создавший ранее Tur-boPascal, Delphi и C#.

Язык работает в любом браузере, поддерживается в таких популярных средах визуального программирования, как Microsoft Visual Studio, и совместим с некоторыми JavaScript-библиотеками, среди которых jQuery. Язык TypeScript является обратно совместимым с JavaScript (может легко компилироваться в этот язык) [10].

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

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

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

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

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


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

2.2. Потенциальное направление развития языков программирования на сближение с моделями естественного языка

Если проследить всю историю развития парадигм программирования, то можно заметить постепенное увеличение описательных возможностей языков, позволяющих не просто задавать последовательность выполнения команд для ЭВМ, но моделировать таким образом реальность. Языки машинных команд в этом смысле являются отправной точкой, поскольку они не содержат никакой семантики, кроме устройства ЭВМ, для которой они предназначены. Язык ассемблера, по сути, является более удобным способом написания машинных команд. Однако это удобство заключается в добавлении некоторой семантики на уровне операций, использовании осмысленных имен вместо кодов. На следующем этапе – этапе процедурного и модульного программирования – семантика заключается в представлениях алгоритмической декомпозиции и структурного анализа. То есть, мир представляется в виде набора операций, процессов, действий, которые преобразуют некоторые входные информационные потоки в выходные. В явном виде моделирование мира с данной точки зрения представлено в методологии SADT [4, c.103]. Однако после появления ООП от этого подхода отказались в связи с преимуществами последнего [1, c.283].

Концепция ООП заключается в использовании объектной декомпозиции, т.е. представления действительности как набора независимых объектов, у каждого из которых имеются известные общедоступные каналы для взаимодействия и некоторая внутренняя скрытая «начинка». Данные объекты обмениваются друг с другом сообщениями через открытые каналы, в результате чего изменяют свое внутреннее состояние. При этом предполагается, что большинство объектов имеют некоторое существенное сходство, благодаря которому их можно объединить в иерархическую систему классификации, так что свойства этих классов в полной мере описывают каждый конкретный объект [1, c.292].

Данная модель в концептуальном смысле имеет претензию на соответствие структуре естественного языка и способу человеческого мышления. Классы в данном случае соответствуют понятиям языка, а объекты конкретным проявлениям этих понятий в реальном мире. Например, Буч приводит методику объектно- ориентированного анализа, при которой понятия, взятые непосредственно из словаря пользователя, преобразуются в классы и объекты (микропроцесс анализа и проектирования [1, c.307-337]).