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

Классификация языков программирования. Критерии выбора среды и языка разработки программ ( ТЕОРЕТИЧЕСКИЕ АСПЕКТЫ ИССЛЕДОВАНИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ)

Содержание:

ВВЕДЕНИЕ

Сегодня программирование является одной из наиболее бурно развивающихся отраслей производства программных продуктов. Еще в конце прошлого столетия общение с компьютерами реализовывалось исключительно с помощью программирования, именно поэтому программирование стали изучать фактически во всех учебных заведениях. Шло время, информационные технологии развивались, общение с компьютерами стало происходить при помощи готовых компьютерных программ. Современные прикладные пакеты программ содержат также дополнительные средства, при помощи которых пользователи могут расширять функциональные возможности имеющегося программного обеспечения. Так, например, практически в любом пакете MicrosoftOfficeимеется среда программирования языка VBA (VisualBasicforApplications). Таким образом, под программированием понимается принципиально новый подход, который является обязательным пунктом в процессе подготовки специалистов информационных технологий [7].

В настоящее время профессиональному программисту для решения поставленных задач приходится оперировать сразу несколькими языками программирования. Поэтому выпускники высших учебных заведений должны владеть программированием на разных языках и в различных инструментальных средах [2].

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

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

  • операторы присваивания;
  • операторы ввода и вывода информации;
  • операторы перехода;
  • операторы выбора;
  • операторы циклов.

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

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

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

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

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

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

При написании работы в качестве опорных источников были использованы следующие: М.А. Ревенко – «Практикум по программированию на языке TurboPascal» и Л.И. Долинер – «Основы программирования в среде PascalABC.NET».

ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ АСПЕКТЫ ИССЛЕДОВАНИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

1.1 История развития

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

Первым программистом в истории человечества принято называть Аду Лавлейс, которая составила предписания для аналитической машины Чарльза Бэббиджа. Стоит отметить, что данное вычислительное устройство существовало лишь в проекте. В его основе лежали не электрические сигналы, а механические узлы. Кроме того, машина Бэббиджа должна была быть оснащена паровым двигателем (в 1830-е годы это было вершиной техники). Для ввода программы предполагалось использование перфокарт. Однако данная машина так и не была спроектирована.

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

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

Следующим этапом стало появление языка Фортран, основным предназначением которого была реализация математических вычислений. Он отличался хорошим качеством получаемых программ, а также развитыми средствами ввода-вывода информации. Кроме того, Фортран содержал собственную библиотеку стандартных программ. Данный язык разрабатывался в 1954-1956 годы крупной группой специалистов компании IBM под руководством Дж. В. Бэкуса. В июне 1956 г. была выпущена вторая версия данного языка – Фортран II, которая отличалась наличием подпрограмм, а также операторов связи между программными единицами [11].

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

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

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

Последнее десятилетие XX века ознаменовалось развитием глобальной сети Internet, что также послужило толчком к созданию новых технологий. В этот период максимальную популярность обрел язык Java, который позволяет в кратчайшие сроки писать крупные приложения без опасений навредить системе. Данный язык характеризуется переносимостью своих программ [18].

1.2 Классификация языков программирования

Существует несколько признаков классификации языков программирования, рассмотрим лишь основные из них.

По степени абстракции от аппаратуры принято выделять следующие виды языков:

  • низкого уровня:
    • машинно-зависимые – представляют собой команды, записанные непосредственно на языке конкретного процессора. Эти команды состоят из нулей и единиц. Фактически, команды таких языков представляют собой свод правил кодирования инструкций для определенного типа ЭВМ при помощи чисел;
    • машинно-ориентированные – команды, записанные на языке близком к процессору. Основное отличие от машинно-зависимых языков заключается в том, что машинные коды в таких языках заменены буквенными обозначениями;
  • высокого уровня – машинно-независимые языки, имитирующие естественный человеческий язык. Данные языки используют некоторые слова разговорного языка, а также общепринятые математические символы. Языки высокого уровня ближе к человеку, а не к компьютеру. Они позволяют записывать команды в текстовом режиме, а также предоставляют возможность определять сложные структуры данных;
  • сверхвысокого уровня – еще один вид машинно-независимых языков программирования. Команды таких языков исполняются на абстрактных машинах, при этом доступ к памяти полностью скрыт.

Еще одним признаком классификации является парадигма программирования. С этой точки зрения все языки программирования делятся на:

  • процедурные – проблемно-ориентированные языки, облегчающие исполнение процедур. Они бывают нескольких видов:
    • структурные – один оператор позволяет записывать целые алгоритмические структуры – циклы, ветвления и т.п.;
    • операционные – используют несколько операторов для записи одной алгоритмической конструкции. Неструктурное программирование позволяет использовать в явном виде оператор безусловного перехода;
    • параллельные – языки реального времени, поддерживающие параллельные вычисления. Программа, написанная на одном из таких языков, представляет собой совокупность описаний процессов, которые могут исполняться одновременно;
  • непроцедурные – описывают саму задачу. Делятся на:
    • функциональные – программы на таких языках обычно вычисляют значение некоторой функции, задающейся в виде композиции более простых функций. Одним из ключевых элементов данного языка является наличие рекурсии;
    • логические – языки, базирующиеся на классической логике. Основным их применением является логический вывод, например, экспертные системы. С точки зрения логического подхода программа представляет собой совокупность логических высказываний и правил[3];
  • объектно-ориентированные – языки, в основе которых лежит понятие объектов и их свойств, а также отношений между этими объектами [4].

1.3 Алгоритмы языков программирования

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

  • конечность – после определенного числа шагов алгоритм должен завершаться;
  • определенность – каждый шаг алгоритма должен быть четко и однозначно определен;
  • ввод – алгоритм может иметь некоторое количество входных данных, определяемых до начала работы;
  • вывод – алгоритм может иметь некоторое количество выходных данных, получаемых в результате исполнения;
  • эффективность – все операции, подлежащие реализации в рамках алгоритма, должны быть достаточно простыми, чтобы их в принципе можно было точно выполнить за конечный отрезок времени [9].

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

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

Характерные черты исполнителя алгоритма (см. рисунок 1):

Рисунок 1 – Характерные черты исполнителя алгоритма

  • среда – «место обитания» исполнителя;
  • система команд – конечный набор команд, которые исполнитель может понять (умеет выполнять). Каждая команда обладает своими условиями применимости (условиями среды) и результатами;
  • элементарные действия – действия, совершаемые исполнителем после вызова команды;
  • отказы – ситуация, возникающая в том случае, когда вызывается команда в недопустимых условиях среды.

Важно отметить, что исполнитель не вникает в смысл выполняемых им действий – его действия формальны, отвлечены от содержания поставленной цели и строго соответствуют алгоритму [8].

В настоящее время существует несколько форм записи алгоритмов (см. рисунок 2):

  • словесное описание;
  • построчная запись;
  • блок-схема;
  • запись на языке программирования.

Рисунок 2 – Формы представления алгоритмов

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

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

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

Приведем пример записи алгоритма вычисления НОД двух чисел в построчной записи:

  1. ВводA, B
  2. ЕслиA = B, переход к шагу 8
  3. Если A>B, переход к шагу 6
  4. B = B – A
  5. Переход к шагу 2
  6. A = A – B
  7. Переход к шагу 2
  8. НОД = А
  9. Вывод НОД
  10. Конец

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

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

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

На территории нашей страны действует единая система программной документации (ЕСПД), сформировавшаяся в 1981 г. Данная система описывает условные графические изображения, которые применяются в алгоритмах (ГОСТ 19.003-80 «Схемы алгоритмов и программ. Обозначения условные графические»), а также набор правил, которые следуют соблюдать при записи блок-схем (ГОСТ 19.002-80 «Схемы алгоритмов и программ. Правила выполнения»).

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

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

Рисунок 3 – Блок ввода/вывода

Рисунок 4 – Вычислительный блок (блок обработки данных)

Рисунок 5 – Блок принятия решения (проверки условия)

Рисунок 6 – Блок начала/конца программы

Рисунок 7 – Блок начала цикла

Рисунок 8 – Блок конца цикла

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

ГЛАВА 2. ВЫБОР ЯЗЫКОВ ПРОГРАМИРОВАНИЯ

2.1 Самых востребованные языки программирования 2016 года

SQL

Не удивительно что SQL возглавляет список, так как он применяется практически везде и в широком диапазоне. Технологии баз данных, такие как MySQL, PostgreSQL и Microsoft SQL используются на серверах больших и малых предприятий, больниц, банков, университетов и т.д. Действительно, почти каждый компьютер и человек с доступом к базе данных в конечном счете, касается SQL. Например, все Android телефоны и айфоны имеют доступ к базе данных SQL называемой SQLite и многие мобильные приложения, разработанные в Google, Skype и Dropbox используют ее напрямую.  

Java

Техническое сообщество не так давно отпраздновало 20-летний юбилей Java. Это один из наиболее широко принятых языков программирования, используемый около 9 миллионами разработчиков, и работает на 7 млрд устройств по всему миру. Это язык программирования, используемый для разработки всех родных приложений Android. Популярность Java-разработчиков исходит из того, что этот язык имеет долгосрочную совместимость, которая гарантирует, что старые приложения продолжат работать и сейчас и в будущем. Единственная сложность заключается в том, что этот язык достаточно сложен в освоении особенно для новичков.   JavaScript

JavaScript – это еще один из самых популярных и мощных языков программирования, и используется, чтобы оживлять веб-страницы, делая их интерактивными. Например, JavaScript может быть использован для добавления эффектов на веб-страницы, отображения всплывающих сообщений или создания игр с базовым функционалом. Стоит также отметить, что JavaScript - это скриптовый язык Всемирной паутины, который по умолчанию встроен во все основные веб-браузеры, включая Internet Explorer, FireFox и Safari. Почти каждый сайт включает в себя некоторые элементы JavaScript, что добавляет спрос на JavaScript-разработчиков. В последние годы JavaScript также начал использоваться в качестве основы Node.js, серверной технологии, которая помимо всего прочего позволяет осуществлять связь в режиме реального времени. [11]

C#

C# (произносится как Си-Шарп) - это относительно новый язык программирования, разработанный компанией Microsoft для широкого спектра корпоративных приложений, которые работают на .NET Framework. Эволюция C и C++, язык C# простой, современный, безопасный и объектно-ориентированный.   C++ С++ (произносится как Си-плюс-плюс) - это объектно-ориентированный язык программирования общего назначения, основанный на языке "С". Разработан Бьерном Страуструпом в лабораториях Белла, C++ был впервые выпущен в 1983 году. Страуструп поддерживает обширный список приложений, написанных на C++. Список включает в себя Adobe и Microsoft приложения, базы данных MongoDB, большую часть Mac OS/X и это лучший язык для изучения производительности критически важных приложений, таких как «twitch» разработка игр или аудио/видео обработка.  [5]

Python Python - это язык программирования общего назначения, который был назван в честь "Монти Пайтона". Python является простым и легко читаемым (для тех, кто знает английский язык). Это отличный язык для начинающих, и опытных профессионалов. Для Python существует множество курсов программирования, 8 из 10 факультетов информатики обучают кодированию с помощью Python. Из-за использования языка Python в сфере образования, есть много библиотек, созданных для Python, относящиеся к математике, физике, естественной переработки и т.д.  

PHP Созданный датско-канадским программистом Расмусом Лердорфом в 1994 году, PHP не был предназначен, чтобы быть новым языком программирования. Вместо этого он был создан, чтобы служить набором инструментов, помогающим своему создателю поддерживать его личную страницу в интернете (на PHP). Сегодня РНР – это скриптовый язык программирования, выполняемый на сервере, который может быть использован для создания веб-страниц, написанных в HTML формате. РНР очень популярный язык, поскольку его легко использовать начинающим программистам, но он также предлагает множество передовых функций для более опытных.  [8]

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

Он используется многими компаниями, начиная от небольших стартапов до крупных предприятий. Hulu, Twitter, Github и Living Social используют Ruby on Rails по крайней мере для одного из своих веб-приложений.  

iOS/Swift В 2014 году Apple решили изобрести свой собственный язык программирования. Результатом стал Swift – это новый язык программирования для iOS и OS X для разработчиков. Разработчики утверждают, что многие части Swift знакомы им по опыту работы на C ++ и Objective-C. Многие компании на западе, в том числе American Airlines, LinkedIn и Duolingo, перешли на Swift, и в ближайшие годы этот язык будет набирать все больше популярности.   Любой мастер имеет полный набор инструментов, каждый из которых подходит для определенной задачи. Также и с программированием, никогда не будет только одного языка, и каждый язык будет развиваться и улучшаться с течением времени, чтобы идти в ногу с инновациями. Именно поэтому, если вы заинтересованы в том, чтобы стать разработчиком, важно хорошо разбираться в нескольких языках программирования, так что бы вы могли быть универсальным и быстро адаптируемым, и продолжали, изучить языки на протяжении всей вашей карьеры. 

2.2 Перспективные языки программирования

Пять языков программирования, о которых пойдёт речь, весьма новы (не исключено, что о каком-то вы услышите впервые), и они явно имеют отличные шансы пробиться во второй эшелон в ближайшие 2-3 года. Может быть, когда-нибудь один из этих языков сможет потеснить и языки первого эшелона.

Elm набирает популярность в сообществе JavaScript, в первую очередь среди тех, кто предпочитает функциональное программирование, которое находится на подъеме. Как и TypeScript или Dart, Elm транспилируется в JavaScript.

Rust является языком системного программирования, предназначенным в основном для ниш, где применяют С и С++. Поэтому удивительно видеть, что популярность этого языка быстрее растёт среди веб-разработчиков. Этот факт становится более осмысленным, когда вы выясняете, что язык был создан в Mozilla, которая хотела дать лучший вариант веб-разработчикам, которые вынуждены писать низкоуровневый код, и при этом более производительный, чем PHP, Ruby, Python или JavaScript. Rust был также признан лучшим в номинации ”сама любимая технология” по результатам опроса разработчиков, проведённом StackOverflow в 2016 году (это означает, что большинство пользователей хотели бы продолжать использовать этот язык). [9]

Kotlin существует уже около пяти лет, но только в этом году он достиг production-ready версии 1.0. Несмотря на то, что он ещё не достиг популярности Scala, Groovy или Clojure — три самых популярных и зрелых (не считая Java) языков под JVM — он выделяется из множества других JVM-языков и, кажется, готов занять свое место среди лидеров этой группы. Язык возник в JetBrains (создатель популярной IntelliJ IDEA IDE). Так что он продуман с упором на производительность труда разработчиков.

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

Elixir также черпал вдохновение из экосистемы Ruby, но вместо того, чтобы пытаться принести C-подобные преимущества, он ориентирован на создание высокодоступных, отзывчивых систем, т.е. на то, с чем Rails имеет проблемы по мнению критиков. Elixir достигает этих преимуществ при помощи Erlang VM, которая имеет прочную репутацию, основанную на 25 годах успешного применения в телекоммуникационной отрасли.  Phoenix  (веб-фреймворк для Elixir), наряду с большой и цветущей экосистемой, придаёт этому языку дополнительную привлекательность.

Теперь взгляните, как четыре из этих пяти языков карабкаются по лестнице популярности (на основе данных StackOverflow и GitHub):

Рисунок 9 Популярность языков

Каждый из этих языков может похвастаться увлечённым сообществом и собственной еженедельной новостной рассылкой. Если вы подумываете об изучении молодого языка с захватывающими возможностями для будущего, прочитайте краткие презентации для каждого из этих пяти языков, написанные опытными энтузиастами и лидерами соответствующих экосистем. [2]

Elm

Elm — функциональный язык программирования, ориентированный на удобство и простоту использования, который компилируется в высокопроизводительный JavaScript-код. Вы можете использовать его, в том числе и совместно с JavaScript, для создания пользовательских интерфейсов в интернете. Основными преимуществами Elm по сравнению с JavaScript являются надёжность, лёгкость в поддержке и нацеленность на удовольствие от программирования. Более конкретно:

Семантическое версионирование: elm-package  обеспечивает соблюдение семантических версий автоматически. Если автор пакета пытается сделать ломающие API изменения, не поднимая основной номер версии, elm-package обнаружит это и откажет в публикации новой версии пакета. Ни один другой известный менеджер пакетов не обеспечивает соблюдение семантического версионирования настолько надёжно.

Быстрый и функциональный: Elm является чистым функциональным языком, который гарантирует отсутствие мутаций и побочных эффектов. Это не только обеспечивает прекрасную масштабируемость Elm-кода, но также помогает ему рендерить UI приложения быстрее, чем React, Angular или Ember.

Мощные инструменты:  elm-format форматирует исходный код в соответствии со стандартом сообщества. Нет больше споров по конвенциям оформления кода. Просто нажимаете кнопку “Сохранить” в вашем редакторе и ваш код становится красивым.  elm-test  поставляется с “батарейками” для поддержки как модульного, так и случайного тестирования. elm-css  позволяет писать Elm-код, который компилируется в css-файл, так что вы можете разделять код между приложением и таблицами стилей, чтобы гарантировать, что ваши константы никогда не рассинхронизируются.

Elm код также может взаимодействовать с JavaScript. То есть вы можете вводить его в малых дозах в ваш JS код, и вы всё ещё можете использовать огромную экосистему JS и не изобретать колесо. [12]

Посмотрите guide.elm-lang.org, чтобы начать, Elm in Action для более глубокого ознакомления и How to Use Elm at Work, если вам интересно, как можно было бы использовать Elm на работе.

Этот раздел написал Richard Feldman — автор Elm in Action и создатель elm-css, CSS-препроцессора для Elm.

Rust

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

Основными целями при проектировании языка были:

Безопасность: Многие C-подобные языки открывают путь к ошибкам в результате ручного управления памятью (например, висячие указатели или двойные освобождения). Rust перенимает передовые практики современного C++, такие как RAII и смарт-указатели и делает их применение обязательным, систематически гарантируя, что чистый код на Rust безопасен по памяти.

Скорость: Почти все языки работают медленнее, чем C, поскольку они обеспечивают абстракции, которые упрощают разработку программного обеспечения. Но это даётся ценой существенного увеличения накладных расходов во время выполнения (например, сборка мусора и динамическая диспетчеризация). Rust фокусируется на "абстракциях нулевой стоимости”, т.е. таких методах упрощения программирования, которые не требуют дополнительных затрат во время выполнения. Например, Rust управляет памятью во время компиляции и использует статическую диспетчеризацию для дженериков (по аналогии с шаблонами C++, но более безопасно по отношению к типам).

Конкурентность: Конкурентный код в системных языках часто хрупок и подвержен ошибкам, учитывая нетривиальность многопоточного программирования. Rust пытается смягчить эти проблемы путем предоставления гарантий на уровне типа какие значения могут быть разделены между потоками и как именно. [12]

Rust также имеет несколько отличительных особенностей:

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

Композиция вместо наследования: Вместо того, чтобы использовать систему наследования классов подобно C++ или Java, Rust использует трейты или компонуемые интерфейсы для поддержки модульного программирования. Вместо того, чтобы указывать, что конкретный тип является частью иерархии классов, программист может описать тип на основе его возможностей, например, говоря о том, что тип должен быть Printable и Hashable вместо наследования от класса PrintableHashable.

Крутые инструменты: Любой C/C++ ветеран знает боль установки зависимостей, компиляции кода на нескольких платформах и борьбы с тайнами конфигурации CMake. Rust экономит бесконечные часы, проведенные в криках на GCC, предоставляя разумный менеджер пакетов и кросс-платформенные API.

Для получения дополнительной информации, ознакомьтесь с The Rust Book и Rust by Example.

Этот раздел написал Will Crichton — аспирант Стэнфордского университета, который специализируется на параллельных и конкурентных системах, визуальных вычислениях и архитектуре компиляторов и языков программирования. Он часто пишет о Rust в своем блоге. [7]

Kotlin

Kotlin представляет собой статически типизированный язык, который ориентирован на JVM и JavaScript. Kotlin родился из потребности JetBrains, которая искала новый язык для разработки своего набора инструментов (который был в основном написан на Java). Что-то, что позволило бы им использовать существующую кодовую базу и в то же время решить некоторые проблемы, которые возникали из-за Java. И именно решения этих распространенных недочётов, встречающихся при написании программного обеспечения, определили большую часть характеристик Kotlin.

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

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

Безопасность: пусть язык сам обрабатывает некоторые из распространенных ошибок, связанные с такими вопросами, как null reference exceptions.

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

Kotlin был и всегда будет нацелен на прагматизм — выискивая распространённые проблемы, с которыми мы часто сталкиваемся при написании кода, и пытаясь помочь в их решении. Это проходит красной нитью через различные языковые особенности, такие как:

Null-safe по умолчанию: типы Kotlin по умолчанию не обнуляемы, что позволяет избежать назойливых исключений, связанных с пустыми ссылками/указателями.

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

Соглашения: ряд соглашений, которые позволяют писать выразительный код, открывая путь к созданию сильно типизированного DSL, который улучшает читабельность и упрощает рефакторинг[9]

html {

head { title

{+"XML encoding with Kotlin"}

}

body {

p { + "This is some HTML" }

}

}

Kotlin 1.0 был выпущен в феврале 2016 года, спустя более пяти лет разработки и тщательного тестирования в реальных проектах. В настоящее время более десяти продуктов JetBrains используют Kotlin. Также его используют такие компании, как Amex, NBC Digital, Expedia и Gradle.

Для получения дополнительной информации посетите kotlinlang.org

Этот раздел написал Hadi Hariri — вице-президент JetBrains, редактор блога Kotlin и главный докладчик на темы, посвящённые этому языку.

Crystal

Crystal является языком программирования общего назначения с девизом “Быстр как C, привлекателен как Ruby."

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

Архитектурные цели Crystal:

Синтаксис похожий на Ruby (но совместимость с ним не является целью).

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

Возможность вызывать C-код, написав биндинги к нему на Crystal.

Возможность выполнения и генерации кода во время компиляции, чтобы избежать шаблонного кода (boilerplate).

Компиляция в эффективный машинный код.

Crystal имеет уникальные функции, такие как:

Каналы: Crystal использует каналы, вдохновленные CSP (так же, как Go) для достижения конкурентности. Он использует согласованные легковесные потоки, называемые Fibers, для достижения этой цели. Fiber легко создать с помощью ключевого слова spawn и сделать выполнение асинхронным/неблокирующим.

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

crystal: Команда crystal сама по себе полнофунциональна и поставляется с большим количеством встроенных инструментов. Она используется для создания нового проекта, компиляции, запуска тестов и многого другого. Там также есть встроенная утилита для автоматического форматирования кода. А ещё crystal play представляет интерактивную среду для быстрого прототипирования, подобно irb. [9]

Бонус:

Выразительность: Код читают гораздо чаще, чем пишут. Благодаря Ruby, Crystal действительно выразителен и лёгок для понимания. Это облегчает обучение для новичков и окупается в долгосрочной перспективе, благодаря упрощению сопровождения кода.

Для получения дополнительной информации вы можете обратить внимание на официальную Crystal Book и Crystal for Rubyists.

Этот раздел был написан Serdar Doğruyol — автор Crystal for Rubyists, создатель Kemal, веб-фреймворка для Crystal, куратор Crystal Weekly.

Elixir

Впервые представленный в 2012 году, Elixir является функциональным языком общего назначения, предназначенным для повышения производительности, масштабируемости и эксплуатационной надежности. В то время как язык является относительно новым, он компилируется в байт-код, который выполняется на виртуальной машине Erlang (BEAM). Erlang VM родилась в телекоммуникационной отрасли, развивается в течение почти 25 лет и стоит за многими сложными системами с высокой доступностью и низкой задержкой.

В настоящее время Elixir в основном используется для создания веб-приложений с использованием как Cowboy (низкоуровневый HTTP-сервер), так и Phoenix (полнофункциональный фреймворк для разработки веб-приложений). Кроме того, Elixir пробивается в нишу встраиваемых систем благодаря фреймворку Nerves.

Цели языка:

”Дружественное” функциональное программирование: сила и преимущества функционального языка программирования с ясным и доступным синтаксисом.

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

Отличные средства разработки: для компиляции, управления зависимостями, тестирования и развёртывания.

Иммутабельные структуры данных и отсутствие побочных эффектов помогают сделать большие системы проще в обслуживании и понимании.

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

Очень эффективное управление ресурсами означает, что вы можете обслуживать множество пользователей ограниченными аппаратными средствами. См. Почему WhatsApp требуется только 50 инженеров для обслуживания 900 миллионов пользователей.

Горячая замена кода позволяет проводить деплои без даунтайма.

Elixir и Phoenix набирают популярность, поскольку это сочетание позволяет легко создавать сложные надёжные веб-приложения и API с хорошей поддерживаемостью, отличной производительностью и масштабируемостью. Вот почему Pinterest, Bleacher Reports и многие другие компании выбирают Elixir для ключевых частей инфраструктуры своих продуктов. Вы можете получить продуктивность без ущерба для производительности (или наоборот), чего не скажешь о большинстве других языков.

ЗАКЛЮЧЕНИЕ

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

Первая глава работы носит теоретический характер, описывая общее понятие языков программирования, их историю развития, которая прошла несколько этапов:

  • машинные коды;
  • ассемблеры;
  • алгоритмические языки;
  • процедурные языки;
  • объектно-ориентированные языки.

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

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

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

Существует несколько способов записи алгоритмов:

  • словесное описание;
  • построчная запись;
  • блок-схема;
  • запись на языке программирования.

Во второй главе описаны основные операторы языка программирования Паскаль:

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

Описание данных операторов сопровождается примерами, демонстрирующими решение простых задач.

СПИСОК ЛИТЕРАТУРЫ

  1. Анисимов А.Е. Практикум по основам программирования. – Ижевск: Изд-во «УУДмуртский университет», 2014. – 95 с.
  2. Баженова И.Ю. Языки программирования. – М.: Издательский центр «Академия», 2012. – 368 с.
  3. Бузыкова Ю.С. Языки и технологии программирования / Ю.С. Бузыкова, Т.А. Жданова, М.А. Шувалова. – Хабаровск: Изд-во Тихоокеан. гос. ун-та, 2014. – 44 с.
  4. Волкова И.А. Основы объектно-ориентированного программирования. Язык программирования С++ / И.А. Волкова, А.В. Иванов, Л.Е. Карпов. – М.: Издательский отдел факультета ВМК МГУ, 2011. – 112 с.
  5. Грациановаа Т.Ю. Программирование в примерах и задачах. – М.: БИНОМ, 2015. – 354 с.
  6. Диканев Т.В. Принципы и алгоритмы прикладного программирования / Т.В. Диканев, С.Б. Вениг, И.В. Сысоев. – Саратов: Изд-во Сарат. ун-та, 2012. – 140 с.
  7. Долинер Л.И. Основы программирования в среде PascalABC.NET. – Екатеринбург: Изд-во Урал. ун-та, 2014. – 128 с.
  8. Дронова Е.Н. Основные алгоритмические модели: учебное пособие. – Барнаул: АлтГПУ, 2016. – 158 с.
  9. Зюзьков В.М. Программирование. – Томск: Эль Контент, 2013. – 186 с.
  10. Котликова В.Я. Введение в Турбо Паскаль. – Курган: Изд-во Курганского гос. ун-та, 2016. – 32 с.
  11. Лучников В.А. Программирование на языке Паскаль. – Иркутск: ИрГУПС, 2014. – 168 с.
  12. Овчинников А.А. Основы программирования на Паскаль ABC. – Волгоград: Изд-во МОУ СОШ № 95, 2012. – 27 с.
  13. Ожикенов К.А. Сборник задач для проведения лабораторно-практических занятий по дисциплине «Программирование». – Алматы: Изд-во УИЯиДК, 2011. – 135 с.
  14. Попов Е.А. Экспресс курс программирования в Lazarus. - СПб.: Университет ИТМО, 2015. – 76 с.
  15. Ревенко М.А. Практикум по программированию на языке TurboPascal. – Воронеж: ВГПУ, 2012. – 65 с.
  16. Стенгач М.С. Лекционный курс электронного курса «Информатика». – Самара: Минобрнауки России, Самар. гос. аэрокосм. ун-т им. С.П. Королева. – 35 с.
  17. Тюгашев А.А. Основы программирования. – СПб.: Университет ИТМО, 2016. – 160 с.
  18. Федоров Д.Ю. Основы программирования на примере языка Python. – СПб.: Питер, 2016. – 176 с.
  19. Цветков А.С. Язык программирования Pascal. Система программирования ABCPascal. – Санкт-Петербург: Павловск, Изд-во Царского лицея, 2016. – 46 с.
  20. Ширяева Е.В. Практикум по курсу «Основы информатики» / Е.В. Ширяева, М.Н. Романов, Т.Ф. Долгих. – Ростов-на-Дону: Изд-во ЮФУ, 2015. – 233 с.