Файл: Обзор языков программирования высокого уровня на примере языков Elm, Swift, Scala.pdf
Добавлен: 04.04.2023
Просмотров: 285
Скачиваний: 3
СОДЕРЖАНИЕ
Глава 1. Языки программирования: особенности становления и развития
1.1 История развития языков программирования
1.2. Уровни языков программирования
Глава 2. Обзор языков программирования высокого уровня
2.1. Язык программирования Elm
2.2. Язык программирования Swift
Языки группы C/Фортран (средний/высокий уровень)
С развитием возможностей вычислительной техники объём функциональности и сроки реализации кода на ассемблере уже не устраивали. Затраты для написания, тестирования и сопровождения программ росли на порядок быстрее их возможностей. Необходимо было снизить требования от программиста в плане знаний функционирования аппаратуры, дать ему инструмент, позволяющий писать на языках, приближенных к человеческой логике. Перейти к новому уровню типов языков программирования. Предоставить возможность разбивать на разнообразные модули с дальнейшим последовательным вызовом (парадигма процедурного программирования), предоставить различные типы данных с возможностью их конструирования и т. п.
Дополнительно эти меры привнесли улучшенную переносимость кода на другие платформы, более комфортную организацию командной работы. Одним из первых языков, поддерживающий всё вышеперечисленное был разработанный в 50-е годы прошлого века Фортран. Возможность создавать в текстовом виде с описанием логики выполнения используя циклы, ветвления, подпрограммы и оперируя массивами и представляя данные в виде вещественных, целых и комплексных чисел привела к тому, что за короткое время были созданы научные «фреймворки» и библиотеки. Всё это и стало следствием того, что Фортран имеет актуальность и развивается, пусть и в узкой научной среде.
Другая ветка развития языков этого уровня – C. Если Фортран стал инструментом учёных, то C создавался в помощь программистам, создающим прикладное ПО: операционные системы, драйвера и т. д. Язык позволяет вручную управлять распределением памяти, даёт прямой доступ к аппаратным ресурсам. C-программистам приходится контролировать низкоуровневые сущности, поэтому многие придерживаются мнения, что язык C – усовершенствованный ассемблер и его часто называют языком «среднего» уровня. Привнеся в ассемблер типизацию данных, элементы процедурного и модульного программирования язык C и сегодня является одним из основных для системного программирования, чему также способствует и бурное развитие микроэлектроники в последнее время. Всевозможные гаджеты, контроллеры, сетевые и прочие устройства нуждаются в драйверах, реализации протоколов для совместной работы и прочем относительно низкоуровневом ПО для реализации взаимодействия с аппаратурой. Все вышеперечисленное способствует востребованности языка и в настоящее время. Объектно-ориентированные и функциональные принципы получили дальнейшее развитие в виде C++, C#, Java, взяв многое от синтаксиса C.
Плюсы:
- Упрощение процесса создания кода: введение типов, разбивка на модули, сокращение листинга программ.
- Прозрачная логика заложенного алгоритма вследствие ухода от машинных кодов к более понятным для человека командам в семантически описательном стиле.
- Переносимость. Стало достаточно перекомпилировать текст программы для выполнения на другой платформе (возможно, с небольшой модификацией).
- Скорость откомпилированных программ.
Минусы:
- Отсутствие автоматического управления памятью и необходимость постоянного её контроля.
- Отсутствие реализации концепций объектно-ориентированного и функционального программирования.
Глава 2. Обзор языков программирования высокого уровня
2.1. Язык программирования Elm
Функциональный язык программирования Elm, представленный американским программистом Эваном Чаплицким в 2012 году в ходе работы над своим дипломным проектом в Гарварде, обладает ключевой особенностью. Системы программирования, поддерживающие этот язык, содержат отладчик реального времени, с помощью которого легко можно изменить программный код в реальном режиме времени и проследить реакцию на внесённые изменения по выбранным параметрам. Подобные действия по изменению параметров записываются, могут быть просмотрены и проанализированы, а также тщательно и многократно оттестированы и проверены.
Этот современный язык программирования относится к парадигме функционального программирования, с поддержкой принципов функционального реактивного программирования (ФРП). Парадигма ФПР ориентирована на параллельную обработку данных, обеспечивает чёткую работу с динамическими потоками данных и позволяет создавать высоко-интерактивные приложения. Концепция, положенная в основу ФПР, была предложена и сформирована в конце прошлого века для упрощения технологии создания пользовательских интерфейсов, анимации, динамических систем. Поэтому программы, написанные на этом языке программирования, легко конвертируются в JavaScript – код, что немало важно для современных условий работы с браузерами всех категорий пользователей. Кроме того, ЯП ВУ Elm удобен и прост в использовании: небольшой по объёму программный код обеспечивает разработчику приложения возможность работать с мышью для воспроизведения любой (даже сложной) фигуры в приложениях или в браузере. Тем не менее, язык изначально – функциональный, о чём говорят его родственные связи с семейством языка Haskell. На рисунке 3 показаны взаимовлияния традиционных языков программирования и новых, ровесников двадцать первого столетия.
Elm, не смотря на ярко выраженную принадлежность к функциональной парадигме, может быть использован для создания различного уровня сложности веб-приложений, практически всегда имеется возможность встроить написанный на этом языке программный код в блок тегов на странице сайта, так как Elm-программа без труда компилируется в коды HTML, CSS JavaScript.
Рисунок 3 – Связи языков программирования высокого уровня
Проведенный анализ популярных языков программирования данной парадигмы, показал, что функциональное программирование и его основные идеи получили в настоящее время новый виток развития.
2.2. Язык программирования Swift
Рассмотрим новый язык с интересными связями, и, являющийся представителем вычислительной модели высокого уровня – язык Swift от компании Apple. Данный язык служит отличным полигоном для создания интерактивных приложений для мобильных устройств и в этом отчасти совпадает с предназначением ЯП ВУ Elm.[4]
Если рассмотреть генеалогические связи этого языка (рис. 3), то становится понятно, почему Swift такой яркий и его синтаксис вполне лёгкий для освоения современными прикладными программистами.
Во-первых, на его появление оказали влияние Си-подобные языки программирования, которые на протяжение десятков лет широко востребованы и освоены разработчиками ПО: это Java, Ruby, C++, Objectiv-C.
Во-вторых, масштабность решаемых экономических задач, массовый охват всех сфер экономики сетевыми структурами диктует строгие требования к создаваемым приложениям: быстрота, интерактивность, динамичность, инкапсуляция, масштабируемость. Все эти качества присущи тем языкам, о которых упоминалось выше.
ЯП ВУ Swift сочетает в себе понятность Си-подобных языков, опирается на мощную динамическую объектную модель Objective-C, не уступает по быстродействию C++ и Java, обладает доступностью по отношению к интерфейсам прикладного программирования для различных операционных систем.
Первая программа на новом языке должна выводить на экран слова “Hello, world”. С помощью Swift это делается так:
Простые типы данных:
Типы константы и переменной должны совпадать с типами присваиваемых им соответствующих значений. Компилятор автоматически определит тип константы и переменной при присваивании им значения. Так, в приведенном примере компилятор определит, что myVariable имеет целочисленный тип.
Если же инициализатор отсутствует или не предоставляет достаточной информации, можно указать тип самостоятельно после переменной, разделив название и тип двоеточием:
При работе с массивами и ассоциативными массивами (словарями, dictionary) используются квадратные скобки ([]):
Чтобы создать пустой массив или dictionary, используется следующий синтаксис:
С помощью этого нового языка программирования пользователи быстрее проверяют свои концепты и в целом быстрее создают свои приложения, так как в реализацию данного языка входит отладчик реального времени, который позволяет экспериментировать с кодом, наблюдать результаты изменений и вычислений мгновенно, без компиляции и запуска приложения.
Кроме того, тенденция настоящего времени – это многопарадигмальность языков программирования высокого уровня, и Swift – не исключение. Этот язык обладает направленностью и характерными особенностями объектно-ориентированного, функционального, императивного программирования.
2.3. Язык программирования Scala
Следующий представитель мультипарадигменной направленности – язык программирования начала века – Scala, хотя по прошествии более десятка лет с момента выхода его в свет, он занимает в рейтинге популярности не самое видное место, но с точки зрения вклада в другие языки, такие как Swift, заслуживает внимания.
Язык программирования Scala является «симбиозом» Java и C#. Это не первый язык, комбинирующий ООП с функциональным подходом, но он начал набирать обороты в тот момент, когда развитие Java замедлилось. Более того, создатели Scala решили, что язык должен работать на виртуальной машине JVM и предоставлять доступ к Java-библиотекам.
Мартин Одерски начал разрабатывать Scala в начале 2000-х в стенах Лаборатории методов программирования EPFL. Он же ранее занимался разработкой Generic Java и компилятора Java фирмы Sun.
Внутренний релиз Scala появился в 2003 году. Первый публичный релиз вышел в начале 2004 года на Java-платформе, а в июне того же года – на .NET Framework (правда, с 2012 года эта платформа не поддерживается). Scala 2.0 увидела свет в 2006 году. Его компиляторы и библиотеки распространяются под лицензией BSD.
Язык Scala объединяет три вещи: статическую типизацию, объектно-ориентированный и функциональный подход.
Scala работает на виртуальной машине Java. Совместимость («свободное смешивание») этого языка с Java дает возможность писать на Scala Android-приложения. Кроме того, возможность компиляции в JavaScript позволяет разрабатывать веб-приложения на Scala.
Помимо упомянутых выше Java и C#, на Scala оказали влияние другие языки и технологии. Способ выражения свойств во многом заимствован из Sather. Из Smalltalk перекочевала концепция унифицированной объектной модели. Beta поделился идеей о вложенности всего подряд, включая классы. Абстрактные типы в Scala напоминают абстрактные типы сигнатур в SML и OCaml, обобщенные в контексте полноценных компонентов.
Кроме того, Scala перенял особенности таких функциональных языков, как Scheme, Standard ML и Haskell.
Scala — язык, работающий на JVM, поэтому для работы требует установленную JDK (минимальная версия 1.6). После установки JDK можно приступить к установке самой Scala.
Для того, чтобы все корректно работало из командной строки, рекомендуется прописать переменные среды JAVA_HOME и SCALA_HOME, а также дополнить переменную PATH путями к выполняемым файлам. На Linux и MacOS это делается так:
export JAVA_HOME=<путь к каталогу c установленной Java, в котором есть папка 'bin'>
export SCALA_HOME=<путь к каталогу c установленной Scala, в котором есть папка 'bin'>
export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin
На Windows команда немного другая:
set JAVA_HOME=<путь к каталогу c установленной Java, в котором есть папка 'bin'>
set SCALA_HOME=<путь к каталогу c установленной Scala, в котором есть папка 'bin'>
set PATH=%PATH%;%JAVA_HOME%\bin;%SCALA_HOME%\bin
Прописать эти опции постоянно можно в настройках системы: Control Panel → Advanced System Settings → Environmental Variables.
После выполнения всех манипуляций можно проверить результат, запустив:
> java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
> scala -version
Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL
Простые скрипты и маленькие программы можно, конечно, компилировать и запускать вручную с помощью команд scalac и scala. Однако, по мере того, как количество файлов будет расти, ручная компиляция будет становиться все более нудной. Вместо этого используют системы сборки. Для сборки кода на Scala можно использовать стандартные для Java (неофициально) maven, gradle или ant, но сообщество и сами разработчики рекомендуют sbt (simple build tool)
Scala разрабатывался для простого и быстрого программирования приложений, поэтому в нём органично сочетаются возможности объектно-ориентированного и функционального программирования. На формирование этого языка оказали влияние такие ЯП ВУ, как Lisp, Haskell, Java, C#, он считается языком хорошей поддержки для компонентного программного обеспечения.[5]