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

Современные языки программирования (Понятие языков программирования и их свойства)

Содержание:

Введение

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

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

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

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

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

Для достижения цели необходимо решение следующих частных задач:

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

- описать и свойства языков программирования и критерии их оценки;

- рассмотреть историю развития языков программирования;

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

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

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

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

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

Глава 1. Общие аспекты о языках программирования

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

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

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

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

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

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

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

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

Обычно такие языки включают не только конструкции дня представления алгоритма (собственно программ), по и некоторые средства, облегчающие разработку, отладку и эксплуатацию программы.

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

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

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

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

Языки программирования, пригодные (практичные) для использования в обеих указанных областях, часто называют «универсальными».

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

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

Далее можно рассматреть почти исключительно языки высокого уровня, (процедурно- ориентированные языки). Это понятие относительно и неформально, оно предполагает, во всяком случае, что:

- для программирования на таком языке не требуется знания машинных команд;

- в принципе возможен перенос написанных на таком языке программ

с одной вычислительной системы на другую;

- используемая в таком языке нотация «человечнее» (ближе к языку формулирования задачи), чем допускаемая ассемблером.

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

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

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

1.2 Роль языка в процессе программирования

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

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

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

Далее последовали наиболее плодовитые 1958-1959 гг., характеризующиеся в частности:

- появлением IAL, или Algol58;

- сообщением в 1959 г, о бэкусовом формализме для описания Алгола;

- образованием в мае 1959 г, комитета КОДАСИЛ, создавшего язык Кобол;

- началом работы над Лиспом (1959 г.).

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

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

Все еще в круге тех же идей конца 50-х - начала 60-х годов начал разрабатываться ПЛ/ 1 25 первый выживший язык общего назначения, являющийся синтезом идей, заложенный в структуре Алгола 60 и Кобола.

При этом разработчики языка руководствовались причудливой смесью «теоретических» и прагматических соображений. И хотя многие его черты (циклы, передача параметров, классы памяти) регулярнее, чем их аналоги в Алголе 60, в целом язык выглядит менее стройным из-за многочисленных исключений, и отчасти, из-за принципа «все проходит», который продолжает то, что было неудачно в Алголе 60, и затрудняет понимание и отладку программы. Однако в целом ПЛ1 остается наиболее мощным и (потенциально) наиболее эффективным из существующих языков общего назначения, весьма полезным в областях, требующих универсального языка. Не заменив Фортран или Кобол, Пл 1 занял прочное место в ряду «стандартных» языков программирования.

Продолжением той же линии явилась и разработка Алгола 68. Еще в большей степени, чем ПЛ/1, Алгол 68 «статизирует» анализ программы и выявление ошибок. Еще в большей степени, чем ПЛ/1, Алгол 68 выделяет наиболее эффективные и безопасные конструкции (ср. циклы, подвижные массивы). Цели разработки, указанные в сообщении, выглядят более убедительно, чем формулировка исходных установок ПЛ/1 33, и в целом цели эти достигнуты. Хотя Алгол 68 гораздо более простой язык, чем ПЛ/1, использованный в его официальном описании формализм (который многие считают большим шагом вперед в методах описания языка) в целом произвел еще более тяжелое впечатление, чем в свое время бэкусовы нормальные формы, и это впечатление не смогли сгладить даже появившиеся позднее более удобочитаемые пособия. Хотя в настоящее время имеется уже довольно много реализаций Алгола 68, до сих пор его теоретическое значение (как исходной точки многих работ по созданию новых языков) еще, пожалуй, превышает его практические применения.

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

Из специализированных универсальных языков стоит отметить Симулу 67, которая, благодаря понятию класса, наиболее полно представляет идею языка модульного программирования. Концепция класса важна также как прообраз «акторов» в языках искусственного интеллекта; она является ярким выражением тезиса о языке, в своих конструкциях воплощающем определенный подход к задачам данной области как материализованной методике программирования. Шестидесятые годы характеризуются также развитием мультипрограммирования; уже ПЛ/1 претендовал на пригодность для программирования решения задач в реальном времени; появилась и новая линия языков, предназначенных для диалога. Наибольшее распространение получили Бейсик (основанный на подмножестве Фортрана) и язык работы с матрицами APL.

В целом по влиянию на «вычислительное сообщество» наиболее выделяются (по-прежнему) Фортран, Алгол 60, Лисп, APL, Несколько слабее (пока) влияние новшеств Алгола 68 и Паскаля.

Работы по описанию и реализации языков программирования составили целую дисциплину «программистскую лингвистику». Исследования в этой области ведутся в интересах:

- систем построения трансляторов (СПТ), т, е, автоматизированных систем, генерирующих по описанию языка (при более или менее активном участии системного программиста –«реализатора языка», а иногда и по описанию машины, транслятор с данного языка для этой машины;

- разработки расширяемых языков, т, е, языков со встроенным механизмом описания некоторого «нового языка» и автоматической генерацией трансляции для так созданных языков; тема эта, очень популярная в 60-х гг., в настоящее время полностью растворилась в некоторых средствах новых языков программирования (описываемые виды и операции Алгола 68, например), и работах по СПТ;

- теоретических исследований и систем доказательства правильности алгоритмов (программ).

В конце 60-х и начале 70-х гг. стали появляться языки очень высокого уровня. Здесь следует упомянуть (появившуюся еще в 1962 г., но долго остававшуюся чисто экспериментальной) Кодасиловскую информационную алгебру, языки моделирования с их ассоциативностью и встроенным механизмом упорядочения и планирования процессов, языки искусственного интеллекта (Плэннер, Коннайвер, Сейл и проч.), характеризующиеся автоматическим бэктрэкингом, возможностями поиска в базах данных по образцам и вызовом процедур по образцам, и более теоретические работы над так называемыми теоретико-множественными языками, например, СЕТЛ.

Число живых языков программирования очень велико. Дж. Сэммит приводит список таких языков для США на 1973 г., состоящий из 171 языка (из них 85 суть языки численных методов, символьной и строковой обработки, аналитических преобразований и языки общего назначения; остальные 86 лежат в менее традиционных языках). Отметим, что на 1972 г. Дж. Сэммит насчитала 184 языка, и что в промежутке в ее списке появилось 33 новых языка. Причины появления новых языков она резюмирует так:

- появляются действительно новые изобразительные средства, или обнаруживается, что еще одна (новая) область приложений заслуживает собственного языка;

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

- удобно соединить средства нескольких языков в одном языке;

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

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

- воспользоваться уже существующим языком для данной области приложений мешают антипатии или предрассудки;

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

1.3 Критерии оценки

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

Универсальность особо ценилась в конце 50-х - начале 60-х гг. и сильно повлияла на Алгол 60 и II. I 1: стремление к универсализации, обобщению приводило порой к предпочтению наиболее общих (не всегда самых эффективных) вариантов конструкций (ср. циклы и подстановку параметров в Алголе 60).

Полный доступ ко всем возможностям вычислительной системы.

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

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

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

Лаконизм, в частности отсутствие избыточности, особенно такой, которая затрудняет модификации программы.

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

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

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

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

Наглядность или удобочитаемость программ.

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

Универсальность применений: ПЛ/1; Алгол 68, Симула 67; Паскаль, Полнота доступа к возможностям, машины: ПЛ/1 (события, упаковки, ситуации и проч.); Паскаль (упаковки), Алгол 68 (длины в видах, параллелизм); Симула 67, Переносимость программ: Кобол; Паскаль; ПЛ/1; Симула 67, Алгол 68, Модульность языка: ПЛ/1, Симула 67, Паскаль; Алгол 68 (много зарезервированных служебных слов).

Легкость изучения: Паскаль (язык скромен и логичен); Алгол 68, Симула 67 (языки побольше, но весьма логичны); ПЛ/1 (язык велик и довольно нерегулярен). Ортогональность: Алгол 68; ПЛ/1; Паскаль, Симула 67, Лаконичность: Алгол 68; Симула 67; ПЛ/1; Паскаль, Защита от ошибок: Алгол 68; Симула 67, Паскаль; ПЛ/1,

Эффективная, реализуемость: Паскаль, Алгол 68 (не считая сборки мусора!); ПЛ/1; Симула 67.

Эффективность программирования: Симула 67 (особенно в моделировании!), Паскаль; Алгол 68, ПЛ/1.

Легкость структурирования: Симула 67; ПЛ/1; Паскаль, Алгол 68, Легкость модификации программ: Паскаль; ПЛ/1; Алгол 68,Симула 67, Наглядность (удобочитаемость программ); Паскаль; ПЛ/1; Алгол 68, Симула 67.

Глава 2. Современные языки программирования

2.1 Наиболее востребованные языки программирования

В сегодняшнем рейтинге самых популярных языков программирования 2018 учитывались результаты нескольких международных опросов, опубликованных Tiobe Programming Index, Indeed, GitHub и др. Эти рейтинги и развернутые комментарии сформируют у вас представления о нынешних тенденциях кодинга.

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

Таблица 1 - Наиболее востребованные языки программирования

по Tiobe Index

по GitHub

- Java

- C

- C++

- Python

- C#

- JavaScript

- VB.NET

- R

- PHP

- MATLAB

-  Swift

- Objective-C

- Assembly

-  Perl

-  Ruby

- Delphi

-  Go

- Scratch

- PL/SQL

- Visual Basic

-  JavaScript

- Python

-  Java

- Ruby

- PHP

-  C++

-  CSS

- C#

-  Go

-  C

-  Typescript

- Shell

- Swift

- Scala

- Objective-C

Java признается одним из наиболее популярных языков программирования различными авторитетными изданиями. Он занимает первое место в индексе Tiobe и третью позицию по GitHub. Язык действительно заслуживает наград и признания.

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

Вот некоторые преимущества Java:

- Портабельность. Java – очень портабельная платформа, которая может использоваться на различных устройствах, включая настольные компьютеры, смартфоны, планшеты, карманные устройства и т.д. Виртуальная машина Java (JVM) индифферентна к системе, и работает практически везде.

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

- Обратная совместимость. Язык Java обратно совместим, и даже после обновления приложений с более новой версией продолжает поддерживаться старая версия языка. Следовательно, разрабам не нужно беспокоиться о переписывании кода каждый раз, когда выпускается обновление.

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

Язык программирования Kotlin в последние годы стал неожиданно популярным и, вполне возможно, возглавит рейтинг по итогам 2018 года.

Kotlin – новый статически типизированный язык от JetBrains.

Один из официальных языков разработки приложений для Android.

Самое сладкое в Kotlin – 100% совместимость, даже с виртуальной машиной Java (JVM). Компилируется в JavaScript, что делает его универсальным как для фронтенд, так и для бэкэнд-разработки. Следовательно, если вы планируете изучать восходящий язык, то Kotlin – это лучший выбор для вас.

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

Он разработан, чтобы быть интересным и легким в освоении — поэтому весь функционал Scratch основан на перетаскивании мышью, без ввода скучного кода.

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

За последние 15 лет популярность Python значительно возросла, а в числе его пользователей - много известных компаний и организаций, который применяют этот язык для создания современного функционала сайтов. Он занимает четвертое место на Tiobe и второе место в рейтинге GitHub.

Язык Python может использоваться для управления удивительными технологиями, такими как машинное обучение, искусственный интеллект (AI), Big Data, робототехника, кибербезопасность и т. д.

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

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

РНР занимает девятое место на Tiobe и пятое на GitHub. Его можно использовать для создания динамических и интерактивных веб-страниц. РНР может быть встроен в код HTML, использоваться в сочетании с системами шаблонов, системами управления контентом и веб-фреймворками. Работает как через интерфейс командной строки, так и с автономными приложениями. 

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

Язык Go используется рядом крупных компаний, таких как Dropbox, Google, Netflix, CloudFlare, Caddy и т. д. Занимает девятое место по популярности в мире.

Ruby – это динамический язык программирования с открытым исходным кодом. Рефлексивный, объектно-ориентированный язык общего назначения.

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

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

Ruby – очень популярный язык программирования для технологических стартапов. Мировые топ-стартапы, такие как Airbnb, Twitch и Twitter, активно используют его в качестве основного языка.

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

Однако разработанные на Ruby приложения трудно поддерживать, так как он не обладают должной масштабируемостью. Это одна из важнейших причин, по которым в свое время социальная сеть Twitter перешла на Java.

R – язык программирования с открытым исходным кодом, используемый для разработки бесплатного программного обеспечения. R-язык очень популярен среди статистиков и майнеров данных для разработки статистического программного обеспечения. Широко применяется в соцопросах, клинических исследованиях, анализе баз научной литературы. Идеален для Big Data.

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

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

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

Язык C является одним из старейших и известнейших языков программирования. Многочисленные версии этого языка делают его популярной основой самого разного программного обеспечения и поддерживают высокую популярность. C и C++ являются, как ни странно, основным языком для устройств IoT.

Широко применяются для разработки ПО носимой электроники. Быстрый отклик оказывается полезным для игровых приложений. Язык Objective-C незаменим при разработке приложений для устройств Apple на OSX и iOS.

C# разработан Microsoft, и работает в среде Common Language Runtime (CLR). Он может использоваться для разработки служб Windows, веб-приложений, приложений Windows, игр, консольных приложений, приложений WokFlow и др. 

Популярный язык программирования, на котором обычно разрабатывают приложения для устройств Apple. Изначально предназначен для работы с фреймворками Apple Cocoa и Cocoa Touch.

Swift считается одним из лучших языков для новичков.

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

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

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

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

разработчикам, которые вынуждены писать низкоуровневый код, и при этом более производительный, чем PHP, Ruby, Python или JavaScript.

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

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

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

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

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

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

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

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

2) Kotlin

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

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

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

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

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

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

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

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

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

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

3) Elixir

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

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

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

Цели языка:

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

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

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

Отличительные особенности:

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

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

- Сопоставление с образцом обеспечивает альтернативу условными и сторожевым операторам.

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

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

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

- Lisp-подобная система макросов позволяет напрямую манипулировать AST, обеспечивая очень широкие возможности метапрограммирования, вплоть до поддержки кастомного синтаксиса.

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

4) Crystal

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

Java, JS, C, Python, PHP и Ruby предсказуемо остаются лидерами веб-разработки, однако нужно смотреть за горизонт. В связи с универсальностью и совместимостью стоит обратить внимание на изучения языка Kotlin, стремительно набирающего популярность у разработчиков за рубежом.

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

Список использованной литературы

  1. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. - СПб.: Питер, 2007. – 368 c.
  2. Головин И.В. Языки и методы программирования. – 2012. - 304.
  3. Зыков С.П. Основы современного программирования. Учебное пособие. 2012. - 444 с.
  4. Кауфман В.В. Языки программирования. Концепции и принципы. 2017. - 464 с.
  5. Попов И.А. Языки программирования. 2018. - 400 с.
  6. Рапаков Г.Д. Turbo Pascal для студентов и школьников. 2012. - 352 с.
  7. Орлов С.К. Теория и практика языков программирования. – 2013. - 688 с.
  8. Ставонин А.С. Ключевые возможности Rust. – RSDN Magazine, 2013. № 1-2.
  9. Томас Д. Программирование Elixir. – Pragmatic Bookshelf, 2014. – 340 c.