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

Современные языки программирования (Понятие. Сущность)

Содержание:

ВВЕДЕНИЕ

Несмотря на существование огромного количества языков, лишь немногие массово применяются. Самыми популярными являются С, C++, Java, Fortran, Ada, Tcl.
Список существующих «зрелых» языков невелик для вычислительных сред современности. Их создатели совершенствуют их чтобы они применялись во многих сферах. Но даже при этом они не являются оптимальным вариантом для решения некоторых задач. В результате таких усовершенствований языки усложняются и их использование в разработке ПО для решения определённых задач становится невыполнимо. В связи с этим создаются новые языки, так как добавление дополнительных возможностей к существующим языкам программирования считается трудной и дорогостоящей задачей.
В сфере IT наблюдаются значительные изменения в языках, созданных в последнее время.

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

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

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

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

Цели исследования:
Разработать систему классификаций для языков программирования.
Доказать необходимость создания современных языков программирования.

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

Изучить общие сведения о языках программирования.
Проанализировать классификации языков программирования.
Рассмотреть современные языки программирования.
Рассмотреть причину создания современных языков программирования. Исследовать необходимость их создания.

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

1.1 Понятие. Сущность

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

Хронология данных языков представлена в Таблице 1.

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

1.2 Поколения языков программирования

Языки программирования принято делить на пять поколений:

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

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

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

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

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

Вывод:

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

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

Глава 2. Новое поколение универсальных языков 

2.1 Язык Go

Go был создан компанией Google в 2009 году. Ведущими разработчиками являются Роберт Гризмер, Роб Пайк и Кен Томпсон.

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

C;

Limbo;

Modula;

Oberon;

Pascal.

Go повлиял на Sparkel.

Парадигма Go: 

императивная;

на уровне значений;

процедурная;

скалярная;

структурная.

Типизация Go: 

безопасная;

вывод типов;

статическая;

строгая;

типизированная.

В качестве примера приведём программу Hello, World!

package main
import "fmt"

func main() {
fmt.Println("Hello, World!")
}

Код Go организован в виде пакетов, которые подобны библиотекам или модулям других языков. Пакет состоит из одного или нескольких файлов исходных текстов (.go) в одном каталоге, которые определяют, какие действия выполняет данный пакет. Каждый исходный файл начинается с объявления package (в данном случае- package main), которое указывает, к какому пакету принадлежит данный файл. Затем следует список других пакетов, которые этот файл импортирует, а после него- объявления программы, хранящейся в этом исходном файле.

Стандартная библиотека Go имеет более сотни пакетов для распространённых задач, таких как ввод и вывод, сортировка, работа с текстом и т.д. Например, пакет fmt содержит функции для форматированного вывода и сканирования ввода. Функция Println является одной из основных функций в пакете fmt; она выводит одно или несколько значений, разделённых пробелами и с добавлением символа новой строки в конце, так что выводимые значения располагаются в одной строке.

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

Необходимо указать компилятору, какие пакеты нужны для данного исходного файла; эту задачу решают объявления import, следующие за объявлением package. Программа “hello, world” использует только одну функцию из одного стороннего пакета, но большинство программ импортируют несколько пакетов. Необходимо импортировать только необходимые пакеты.

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

Объявления import должны следовать за объявлением package. После этого в программе располагаются объявления функций, переменных, констант и типов (вводимые с помощью ключевых слов func, var, const и type); по большей части порядок объявлений не имеет значения. Приведенная программа максимально короткая, так как объявляет только одну функцию, которая, в свою очередь, также вызывает только одну функцию.

Объявление функции состоит из ключевого слова func, имени функции, списка параметров (пустого списка в случае функции main), списка результатов (также пустого в данном случае) и тела функции- инструкций, которые определяют выполняемые функцией действия- в фигурных скобках. Go не требует точек с запятой в конце инструкции или объявления, за исключением случаев, когда две или более инструкций находятся в одной и той же строке. По сути, символы новой строки после определенных лексем преобразуются в точки с запятой, так что местоположение символов новой строки имеет значение для корректного синтаксического анализа кода Go. Например, открывающая фигурная скобка { функции должна находиться в той же строке, что и конец объявления func, но не в отдельной строке, а в выражении х + у символ новой строки разрешён после, но не до оператора +. Go занимает жесткую позицию относительно форматирования кода. Инструмент gofmt приводит код к стандартному формату, а подкоманда fmt инструмента go применяет gofmt ко всем файлам в указанном пакете или к файлам в текущем каталоге по умолчанию. Формальное объявление стандартного формата устраняет множество бессмысленных споров о мелочах и, что более важно, разрешает целый ряд автоматизированных преобразований исходного кода, которые были бы неосуществимы при разрешенном произвольном форматировании.

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

2.2 Язык Rust

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

Работа над языком началась в 2006 году Грейдоном Хоаром. В 2009 году подключились Mozilla Labs. В январе 2012 года был выпущен первый поддерживаемый релиз.

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

Основные характеристики Rust:  

C-подобный синтаксис и значительно отличающаяся семантика;  

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

контроль изменчивости: по умолчанию значения неизменяемы, и не существует изменяемых значений, общих для нескольких потоков;

безопасность динамического исполнения: ведение логов, обработка исключительных ситуаций “раскручиванием”;  

система “typestate”, позаимствованная из языка NIL: она позволяет определять сложные инварианты, которые должны сохраняться до и после выполнения операций;

явное управление памятью, расположением объектов и выделением памяти; 

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

статическая компиляция, использующая LLVM (в том числе оптимизации) и при необходимости производящая файлы ELF / PE / Mach-O;

простой интерфейс с C; 

поддержка чисто функциональной парадигмы, функции как объекты первого класса;

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

 Создан под влиянием: 

C++;

Erlang; 

Lisp;

ML;

 Парадигма: 

императивная; 

метапрограммирование; 

обобщённая;

объектно-ориентированная; 

параллельная;

структурная;

функциональная; 

 Типизация: 

статическая; 

структурная; 

типизированная. 

 В качестве примера приведём программу Hello, World!

fn main() {

println!("Hello, world!");

}

println! в Rust- это макрос, который отображает текст в консоли.

Исполняемый файл может быть сгенерирован с помощью компилятора Rust - rustc.

rustc создаст исполняемый файл hello, который можно будет запустить.

rustc hello.rs
./hello

2.3 Язык Dart

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

Dart позволяет создавать быстрые и высокопроизводительные веб- приложения.

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

Dart создан под влиянием: 

C#;

CMAScript.

Парадигма Dart: 

императивная;
на уровне значений;

объектно-ориентированная;

скалярная;
структурная. 

Типизация Dart: 

статическая. 
типизированная. 

Ключевые преимущества Dart:


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

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

Поддержка библиотек.

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

В качестве примера приведём программу Hello, World!

main() {

print('Hello World!');

2.4 Язык Swift

Swift- открытый мультипарадигмальный компилируемый язык программирования общего назначения. Создан компанией Apple в первую очередь для разработчиков iOS и macOS. Swift работает с фреймворками Cocoa и Cocoa Touch и совместим с основной кодовой базой Apple, написанной на Objective-C. Swift задумывался как более лёгкий для чтения и устойчивый к ошибкам программиста язык, нежели предшествовавший ему Objective-C[7]. Программы на Swift компилируются при помощи LLVM, входящей в интегрированную среду разработки Xcode 6 и выше. Swift может использовать рантайм Objective-C, что делает возможным использование обоих языков (а также С) в рамках одной программы.

Swift вобрал в себя лучшее из таких языков, как C, Objective-C и Java.

Apple разделила код Swift на несколько открытых репозиториев:

Компилятор и стандартная библиотека:

Swift: основной Swift репозиторий, который содержит исходный код для компилятора Swift, стандартная библиотека и SourceKit;

Swift-Evolution: документы, относящиеся к продолжающемуся развитию Swift, включая цели для предстоящих выпусков, предложения для изменений и расширений Swift;

Библиотеки ядра:

Swift corelibs-foundation: исходный код для Foundation, который предоставляет общую функциональность для всех приложений;

Swift corelibs-libdispatch: исходный код для libdispatch, который предоставляет примитивы параллелизма для работы на многоядерном аппаратном обеспечении;

Swift corelibs-xctest: исходный код для XCTest, который обеспечивает фундаментальную инфраструктуру тестирования для Swift-приложений и библиотек;

Менеджер пакетов:

Swift package-manager: исходный код для менеджера пакетов Swift;

Swift llbuild: исходный код для llbuild, система низкого уровня, который использует Swift package-manager;

Клонированные репозитории:

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

Swift llvm: исходный код LLVM, с кусочками Swift-дополнений;

Swift clang: исходный код для Clang, с кусочками Swift дополнений;

Swift lldb: исходный код Swift-версии LLDB, для отладки Swift программ;

 В качестве примера приведём программу Hello, World!

print("Hello, world")

let peoples = ["Anna": 67, "Beto": 8, "Jack": 33, "Sam": 25]

for (name, age) in peoples {

print("\(name) is \(age) years old.")
}

За последние годы Swift стал более популярен, чем Objective-C. Кроме того, этот язык программирования имеет наибольший потенциал для изменения будущего. Было обнаружено, что нативные приложения превосходят кросс-платформенные гибридные приложения, а движок SpriteKit при этом упрощает создание 2D-игр. На деле Swift опирается на успехи C и Objective-C, но при этом без ограничений совместимости.

2.5 Язык Ceylon

Ceylon- императивный язык программирования, ориентированный на командную разработку крупных приложений.

Ceylon создан в 2011 году под влиянием:

C#;

Java.

Парадигма:

императивная;

на уровне значений;

объектно-ориентированная;

процедурная;

скалярная.

Типизация:

статическая;

типизированная.

Первый релиз языка Ceylon M1 был выпущен 17 декабря 2011 года и охватывает примерно 80% запланированных возможностей языка.

Принципы дизайна языка:

читабельность кода- параметр, значение которого возрастает с ростом размера команды разработчиков;

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

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

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

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

Синтаксис языка похож на Java и C#. Ceylon в значительной мере основан на Java, но использует только лучшие решения, исправляя и улучшая неудачные.

 В качестве примера приведём программу Hello, World!

Допустим, эта программа принадлежит модулю helloworld.progopedia.com. Тогда сам код программы должен находиться в файле /source/com/progopedia/helloworld.ceylon (относительно главной директории программы, из которой она будет запускаться). Кроме того, в файле /source/com/progopedia/module.ceylon должно находиться описание модуля, например, такое:

Module module {

name = 'com.progopedia.helloworld';

version = '1.0.0';

by = {"Mariia Mykhailova"};

dependencies = {};

doc = "Hello, World!";

license = 'Public domain';

}

После этого программу можно скомпилировать командой ceylonc com.progopedia.helloworld и запустить командой ceylon com.progopedia.helloworld/1.0.0 (указание версии при запуске обязательно).

void run() {

print("Hello, World!");

}

2.6 Язык Entropy

Entropy- неточный эзотерический язык программирования. Entropy создан в 2010 году Дениелом Темкиным.

Исходный код программ на Entropy выглядит вполне обычно. Основная особенность этого языка заключается в том, что в процессе выполнения программы данные, которыми она оперирует, ветшают и постепенно приходят в негодность. Основной тип данных- real- числа с плавающей точкой, которые немного изменяются каждый раз, когда к ним обращаются. Символьный тип char построен на real: когда “символ” нужно вывести на печать, его значение округляется до ближайшего целого, и выводится соответствующий символ.

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

Парадигма:

императивная;

эзотерическая.

Типизация:

бестиповая.

 В качестве примера приведём программу Hello, World!

Программа может выдать правильное сообщение или текст, несколько отличающийся от него за счет ветшания строки “Hello, World!”.

Program Hello HelloWorld

{

print "Hello, World!";

}

2.7 Язык Foma

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

Парадигма:

автоматное программирование.

 В качестве примера приведём программу Hello, World!

echo Hello, World!

2.8 Язык Opa

Opa- веб-ориентированная платформа разработки, состоящая из языка программирования (со средой исполнения), веб-сервера и СУБД. Opa создан в 2010 году.

На одном и том же языке Opa пишется и клиентская, и серверная части веб-приложения (клиентский код компилируется в JavaScript).

Компилятор и библиотеки Opa написаны на Objective CAML.

Платформа Opa — свободное программное обеспечение (код открыт в 2011 году), разрабатывается компанией MLstate.

Парадигма:

функциональная.

Типизация:

статическая;

строгая.

2.9 Язык Grocery List

Grocery List- эзотерический язык программирования, в котором все программы выглядят как списки покупок для супермаркета. Каждый пункт списка выполняет определенное действие в зависимости от его первой буквы.

Grocery List создан в августе 2009 года.

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

Парадигма:

на уровне значений;

скалярная;

стек-ориентированная;

эзотерическая.

Типизация:

бестиповая.

2.10 Язык Picat

Picat создан Neng-Fa Zhou и Jonathan Fruhman в 2013 году под влиянием Prolog.

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

Парадигма:

декларативная;

императивная;

логическая.

Типизация:

динамическая.

В качестве примера приведём программу Hello, World!

main =>

println("Hello, World!").

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

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

Каждый из представленных языков входит во временные границы начиная с 2009 и заканчивая 2018 годом.

ЗАКЛЮЧЕНИЕ

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

Их актуальность различается по сферам занятости. Так, например, финансовые и корпоративные программные продукты должны выполнять сложные функции и быть высокоорганизованными, в связи с этим им необходимы следующие языки: Java, C#.

Ruby, PHP, JavaScript, Objective-C используются веб-страницами и программами, ориентированными на мультимедию и дизайн.

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

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

Цель и задачи проведённого исследования достигнуты.

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

Ссылки

http://progopedia.ru/

https://ru.wikipedia.org/wiki/Хронология_языков_программирования

https://golang.org/

https://www.dartlang.org/guides/get-started

Литература

А. А. Тюгашев. Основы программирования. Часть 1. Санкт-Петербург 2016 г.

Язык программирования Go. Алан А. А. Донован, Брайан У. Керниган ; [пер. с англ. и ред. И. В. Красикова]. Москва [и др.]: Вильямс, 2016 г.

Swift. Основы разработки приложений под iOS и macOS. Василий Усов. Санкт-Петербург, Москва. 2018

ПРИЛОЖЕНИЕ

Таблица 1

Хронология языков программирования 2009-2018 гг.

Год

Название

Разработчик

Предшественник(и)

2009

Go

Google

C, Oberon, Limbo

2009

CoffeeScript

Джереми Ашкенас

JavaScript, Ruby, Python

2009

Idris

Эдвин Брейди

Haskell, Agda, Coq

2010

Chapel

Brad Chamberlain, Cray Inc.

HPF, ZPL

2010

RPG Open Access

IBM

FARGO, RPG, RPG II, RPG III, RPG 400, RPG IV (RPGLE, ILE RPG, RPG Free)

2010

Rust

Грэйдон Хор, Mozilla

Alef, C++, Camlp4, Common Lisp, Erlang, Haskell, Hermes, Limbo, Napier, Napier88, Newsqueak, NIL, Sather, OCaml, Standard ML, Cyclone, Scheme

2011

C++11 (ISO C++ 2011)

ISO/IEC JTC1/SC22/WG21 КомитетСтандартизации C++

ISO C++ 2003

2011

Ceylon

Gavin King, Red Hat

Java, Scala, Smalltalk

2011

Dart

Google

Java, JavaScript, CoffeeScript, Go

2011

Elm

Evan Czaplicki

Haskell, Standard ML, OCaml, F#

2011

Kotlin

JetBrains

Java, Scala, Groovy, C#, Gosu

2011

Opa

MLstate

OCaml, Erlang, JavaScript

2011

Red

Nenad Rakocevic

REBOL, Scala, Lua

2012

Ada 2012

ARA и Ada Europe (ISO/IEC 8652:2012)

Ada 2005, ISO/IEC 8652:1995/Amd 1:2007

2012

Elixir

José Valim

Erlang, Ruby, Clojure

2012

Julia

СтефанКарпински, ДжеффБезансон, ВиралШах

Си, NumPy, Matlab, R, Scheme, Lisp, Python, Perl, Ruby

2012

TypeScript

Андерс Хейлсберг, Microsoft

JavaScript

2014

C++14 (ISO C++ 2014)

ISO/IEC JTC1/SC22/WG21 КомитетСтандартизации C++

ISO C++ 2011

2014

Crystal

Арье Боренвейг (Ary Borenszweig, Manas Technology Solutions)

Ruby, C, Rust, Go, C#, Python

2014

Hack

БрайанО’Салливан, ДжулиенВерлаге и АлокМенгхраджани / Facebook

PHP, C++, Java

2014

Swift

Apple

C, Objective-C

2015

Perl 6

Ларри Уолл

Perl, Haskell, Python, Ruby

2016

Ring

Mahmoud Fayed

Lua, Python, Ruby, C, C#, Бейсик, QML, xBase, Supernova

2017

C++17 (ISO C++ 2017)

ISO/IEC JTC1/SC22/WG21 КомитетСтандартизации C++

ISO C++ 2014

2018

Dart2[3]

Google

Dart