Пять перспективных языков программирования со светлым будущим. Какие отечественные языки программирования разработаны для учебных целей
9. ЯЗЫКИ ПРОГРАММИРОВАНИЯ СОВРЕМЕННЫХ ЭВМ. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММ
48
9.1. Понятие программы
Общение людей друг с другом не отличается большой конкретностью, так, если кто-нибудьна улице спросит вас, где находится «Булочная», вы можете ответить: «Пройдите вон до того дома, и поверните налево». Или, показав рукой направление, сказать: «Вон за тем домом» и спрашивающему, в большинстве случаев, будет достаточно этого , чтобы найти нужный объект. Если бы мы обладали компьютерным мышлением, то нам нужно было бы объяснять дорогу более подробно, учитывая последовательность выполнения этой задачи. Например: «Вам необходимо сделатьтакое-токоличество шагов, чтобы дойти до конца пятого дома, считая от того места, где мы находимся, затем совершить поворот на 90о влево и пройти еще 10 метров, затем, прочтя вывески на здании, которое окажется у вас по правую руку, идентифицировать (т.е. определить) «Булочную». и т.д.
С компьютером общение происходит примерно также, т.е. для того чтобы он выполнял необходимые операции, для него необходимо составлять программы. По определению, которое дано в «Математической энциклопедии», понятие программы определяется так: «Программа - план действий, подлежащих выполнению некоторым устройством, чаще всего ЭВМ. Предписание, алгоритм программы представляется в виде конечной совокупности команд (инструкций), каждая из которых побуждает выполнить некоторую элементарную операцию над данными, хранящимися в памяти исполнителя и имена которых являются параметрами команды».
Пока не созданы компьютеры пятого поколения, программы компьютеру нужно переводить на понятный ему язык. Мы уже знаем, что информация в компьютере содержится в виде 0 и 1, значит и человеку необходимо было научиться передавать данные и команды компьютеру на этом, понятном ему машинном языке.
9.2. Машинный язык и языки программирования высокого уровня
Машинный язык – это язык команд, которые может выполнять данная машина. Машинный язык определяется устройством и схемой компьютера. Каждый новый компьютер порождает новый машинный язык.
Если нам надо сложить два числа, хранящиеся в ячейках А и В, команду на машинном языке мы должны записать в виде трех элементов КАВ, где К - код (номер) операции «сложить», А и В (номера) ячеек памяти (ОЗУ), где хранятся слагаемые (операнды).
Но одних команд для работы ЭВМ мало, так как ЭВМ сама «не знает» никаких чисел, то все требуемые программой числа (константы), должны быть введены в память вместе с программой (это называется описанием констант). Например, при необходимости умножить что-либона 5, в программе должен
49
быть указан адрес ячейки памяти, где хранится число 5, числа которое нужно умножить на 5 и адрес ячейки, в которую следует занести результат. При обращении к этой ячейке, константа становится операндом, т.е. числом, с которым работает оператор. Программа для ЭВМ, написанная на машинном языке, представляет собой длинную колонку команд, каждая из которых состоит из трех элементов-чисел:номера кода, оператора и адресов первого и второго операндов, над которыми производится операция. Результат отправляется либо по первому адресу (А) или в специальный регистр – хранилище промежуточных результатов.
Чтобы программировать на машинном языке, следует знать не только всю систему команд той ЭВМ, для которой пишется программа, но и ее устройство. Это нужно, прежде всего, для того, чтобы представлять, как будет она реагировать на ту или иную команду. Следует также следить, чтобы не «затереть» нужную информацию в памяти при отсылке результата в ОЗУ, ведь при этом уничтожается прежнее содержимое ячейки, куда записывается новое значение.
Поэтому так трудно программировать на машинном языке, такая программа точно описывает весь вычислительный процесс переработки информации данной ЭВМ при решении поставленной задачи. Однако, располагая машинной программой, всегда можно узнать состояние всех блоков ЭВМ, а также составить оптимальные программы, которые отличаются тем, что занимают минимальный объем памяти или позволяют получить результат за кратчайшее для данной ЭВМ время.
Написание программ в машинных кодах требует высокой квалификации от программиста. Для обеспечения его работы, в начале 50-хгодов были разработаны системы, позволяющие писать программы не на машинном языке, а с использованием мнемонических обозначений машинных команд, имен точек программы и т.д. Такой язык для написания программы называетсяАвтокодом или языкомАссемблера, т.е Ассемблер– это символическое представление машинного языка. Программы на Ассемблере очень легко переводятся на машинный язык специальной программой, называемой тоже Ассемблером.
Ассемблер и сейчас широко используется, если необходимо написание быстродействующих программ. Однако, написание программы на языке Ассемблера тоже очень трудоемкое занятие, поэтому, для работы программиста были созданы более удобные языки общения человека с компьютером, так называемые языки программирования высокого уровня (ЯВУ).
Мы уже знаем, что ЭВМ, какие бы различные задачи они не решали, служат для единой цели – для переработки информации, которая в них поступает. Переработку же информации машина может произвести только тогда, когда четко изложена постановка задачи – что машина должна делать и точно дан метод ее решения – как машина должна поступать.
Словесное описание тут не подходит т.к. это очень громоздко, неточно и нестрого. Машина требует однозначности, конкретности, точности, поэтому задачи переводят на специальный машинный язык, удобный для общения
50
между человеком и машиной и между машинами, но хотя перед программистами и стала задача выработать единый машинный язык для всех классов машин и для всех задач, но создать такой язык не удалось и на сегодняшний день. Например, к 1970 году существовало уже 4700 искусственных языков.
Языки общения с компьютером делятся на языки низкого и высокого уровня. Языки низкого уровня это машинный и символический язык, им пользуются системные программисты - опытные пользователи, разработчики операционных систем. Языки высокого уровня приближены к естественным языкам человека и не требуют знаний об устройстве и функционировании компьютера. В связи с тем, что языки высокого уровня и первые программы появились в англоязычных странах, то они используют английский алфавит и английские слова.
Рис.9.1
Все языки общения с компьютером подразделяются на два больших класса языков программирования имоделирования. В первом случае используется в основном вычислительная функция компьютера. Но компьютерная функция используется не только для вычислительных задач. В настоящее время невычислительных функций, выполняемых компьютером значительно больше. И одной из важнейших невычислительных функций компьютера является моделирование. Процесс компьютерного моделирования
51
связан с воспроизведением (воссозданием, имитацией) поведения интересующего нас объекта, процесса, явления, системы. Программа такого моделирования может быть составлена на любом языке программирования, но лучше использовать для этого специальные языки - языки моделирования. Эти языки отличаются от языков программирования своей узкой специализацией. Вновь создаваемые языки являются развитием других языков. Приведем краткие характеристики наиболее известных языков высокого уровня.
ФОРТРАН. Этот язык первый из самых распространенных и на сей день языков программирования. Создание этого языка было обусловлено необходимостью привлечения пользователей к составлению программ
Название этого языка составлено из сокращения двух слов ФОРмульный ТРАНслятор, т.е. формульный переводчик. Он был создан в 1956 году..
За более, чем сорокалетнюю историю ФОРТРАНА на нем было написано огромное количество прикладных программ, поэтому отказываться от этого языка нецелесообразно. Существует даже такой лозунг: «Настоящие программисты пишут только на ФОРТРАНЕ».
ВФОРТРАН-программеоператоры не нумеруются и выполняются в порядке следования в программе. При необходимости изменения этого порядка, используются метки, поставленные перед соответствующими операторами.
Язык ФОРТРАН очень хорош для опытных программистов, хорошо владеющих математическим аппаратом, поэтому для тех, кто только осваивает азы программирования на основе языка ФОРТРАН был разработан язык Бэйсик (BASIC).
БЭЙСИК. Многоцелевой язык символических инструкций для начинающих. Научиться работе на языке Бэйсик можно за час. Но, несмотря на свою простоту, он позволяет решать сложные программы. Проблемы с применением этого языка могут возникнуть из-забольшого количества его диалектов. Поэтому, переходя от одной машины к другой всегда нужно интересоваться особенностями Бэйсика для этой машины.
Все операторы Бэйсика нумеруются, и выполнение их происходит в порядке нумерации.
Внастоящее время существуют расширенные Бэйсики для решения очень сложных задач, имеющие, например, матричные операции, которые позволяют
спомощью одного оператора преобразовывать большие таблицы (матрицы). Есть версии Бэйсика, работающие в режиме компиляции, что значительно ускоряет выполнение программ, на этом языке.
АЛГОЛ. Этот язык был создан в 1960 году, поэтому его иногда называют Алгол-60,оказал большое влияние на развитие языков программирования. Этот язык применяют внаучно-техническихрасчетах инаучно-исследовательскихработах.
Существует более поздняя разработка Алгола - Алгол-68.К алголоподобным языкам относятся языки Паскаль и Ада.
ПАСКАЛЬ. Этот язык - прямое развитие направлений Алгола, создан в 1969 г. Очень популярен в настоящее время. В связи с его простотой, его часто
52
используют для обучения приемам программирования. Транслятор с Паскаля также прост и занимает мало места в памяти, что особенно важно для мини- и микроЭВМ, имеющих оперативную память малой емкости. Кроме того, в Паскале есть достаточно сильные средства для написания так называемых системных программ, для чего обычно используют язык ассемблера. Такая универсальность и компактность Паскаля сделала его наряду с Бэйсиком очень популярным, особенно для персональных компьютеров.
АДА. Это язык создан в 1979 году, является следующим продолжением направления Алгола программировании. Его основное назначение программирование работы самых разнообразных систем управления на ЭВМ и вообще сложных программных систем. Создание больших программных систем затрудняется тем, что они ненадежны ввиду неизбежных ошибок, допускаемых при программировании. В Аде большое внимание уделяется обеспечению надежности программ даже в ущерб легкости их написания. Поэтому основным элементом программы на язык Ада являются подпрограммы. В отличие от других языков, где подпрограммы играют вспомогательную, в Аде они играют главную роль.
К более поздним разработкам алголоподобных языков относятся С и С++. КОБОЛ. COBOL – означает – Common Business-OrientedLanguage. .
Создан в 1960 году. COBOL - язык, ориентированный на экономическое применение, для обработки больших массивов данных. Кобол-программавыглядит как ряд предложений из английских слов, что значительно облегчает его применениепользователям-экономистам,администраторам и др., поэтому он пригоден для обработки деловой информации и используется в правительственных учреждениях, страховых компаниях, банках.
PL/1. Родился в результате попытки создания единого универсального языка программирования. Разработчики этого языка стремились совместить в нем все лучшее, что есть в АЛГОЛЕ и КОБОЛЕ. Главная цель его создания - иметь в языке средства, необходимые всем категориям программистов. Это очень мощный, но очень громоздкий язык. Этот язык может обслуживать программирование как экономических, так и научно-техническихзадач.
GPSS. GPSS означает «общецелевая система моделирования». Это язык высокого уровня, позволяет моделировать поведение вероятностных систем, например, систем массового обслуживания, вычислительных. Моделирование производится путем изменения состояния моделируемого объекта и сводится к генерации этих изменений, обычно, случайных. Например, моделируя процесс обслуживания в магазине, достаточно генерировать случайные времена появления покупателей и окончание их обслуживания.
Язык программирования состоит из двух составляющих синтаксиса исемантики. Переход от языковых конструкций к машинным командам осуществляет транслятор. Языки высокого уровня можно также разделить на
декларативные (Пролог, ЛИСП) и процедурно-ориентированные(СИ, Бэйсик, Паскаль, Ада). Процедурно-ориентированные языки развиваются в
объектно-ориентированные.
Системы программирования
Процесс создания программы включает:
Составление исходного кода программы на языке программирования.
Этап трансляции исходного кода программы и построение загрузочного модуля, готового к исполнению.
Все перечисленные действия требуют наличия специальных программных средств.
Совокупность этих программных средств входит в состав системы программирования:
Текстовый редактор (необходимый для создания и редактирования исходного кода программы на языке программирования).
Компилятор.
Редактор связей.
Отладчик.
Библиотеки функций.
Справочная система.
Классификация и обзор языков программирования
Современное состояние языков программирования можно представить в виде следующей классификации (рис. 1).
Рис. 1. Классификация языков программирования
Процедурное программирование
Процедурное или императивное (от лат. impemtivus – повелительный) программирование есть отражение фон Неймановской архитектуры компьютера. Программа на процедурном языке состоит из последовательности команд, определяющих процедуру решения задачи. Основным является оператор присваивания, предназначенный для определения и изменения содержимого памяти компьютера. Концепция памяти как места хранения данных, значения которых можно изменять операторами программы, является фундаментальным в императивном программировании.
Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, т.е. программа последовательно обновляет содержимое памяти, изменяя его от исходного состояния до результирующего.
Одним из первых процедурных языков программирования высокого уровня стал Фортран (FORmula TRANslation), созданный и начале 50-х гг. в США фирмой IBM. Первая публикация о нем появилась в 1954 г. Основное назначение языка – программирование научно-технических задач. Объектами языка являются целые и вещественные числа и числовые переменные. Выражения в нем формируются с помощью четырех арифметических действий: возведения в степень, логических операций И, ИЛИ, НЕ, операций отношения и круглых скобок. Основные операторы Фортрана – ввод, вывод, присваивание, условный и безусловный переход, цикл, вызов подпрограмм. Долгие годы он был одним из самых распространенных языков в мире. За это время накоплена огромная библиотека программ, написанных на Фортране. И сейчас ведутся работы над очередным стандартом Фортрана. Многие средства Фортрана использованы в языках PL-1 и Бейсик.
Кобол (COmmon Business Oriented Language – общепринятый деловой язык) — язык программирования, ориентированный на решение задач обработки данных. Широко используется для решения учетно-экономических и управленческих задач. Разработан в США в 1958—1960 гг. Программа на Коболе имеет вид ряда предложений на английском языке и напоминает обычный текст. Группы последовательно записанных операторов объединяются в предложения, предложения — в параграфы, параграфы — в секции. Программист присваивает параграфам и секциям имена (метки), что облегчает непосредственное обращение к нужному участку программы. В СССР был принят русский вариант языка. В Коболе были реализованы мощные средства работы с большими объемами данных, хранящимися на различных внешних носителях. На этом языке создано много приложений, некоторые из них активно эксплуатируются и сейчас. Достаточно сказать, что одной из высокооплачиваемых категорией граждан в США являются программисты на Коболе.
Алгол (AZGOrithmic Language) разработан группой зарубежных специалистов в 1960 г., явился результатом международного сотрудничества конца 50-х гг. (Алгол-60). Алгол предназначался для записи алгоритмов, построенных в виде последовательности процедур, применяемых при решении поставленных задач. Специалисты-практики воспринимали этот язык неоднозначно, но тем не менее, он как признанный международный язык сыграл большую роль в становлении основных понятий программирования и для обучения программистов. В нем впервые введены понятия «блочная структура программы», «динамическое распределение памяти». Внутри блока в Алголе можно вводить локальные обозначения, которые не зависят от остальной части программы. Несмотря на свое интернациональное происхождение, Алгол-60 подучил меньшее распространение, чем Фортран. Например, не на всех зарубежных ЭВМ имелись трансляторы с Алгола-60. В 1968 г. в результате дальнейшего развития и усовершенствования Алгола-60 была создана версия Алгол-68. Это многоцелевой универсальный расширенный язык программирования. Последнее свойство позволяло с помощью одной и той же программы транслятора осуществлять трансляцию с различных расширенных версий языка без дополнительных затрат на приспособление этого языка к различным категориям пользователей, на получение проблемно-ориентированных диалектов языка. По своим возможностям Алгол-68 и сегодня опережает многие языки программирования, однако из-за отсутствия эффективных компьютеров для него не удалось своевременно создать хорошие компиляторы. В нашей стране в те годы под руководством академика Андрея Петровича Ершова был создан транслятор Альфа, который представлял достаточно удачную русифицированную версию Алгола.
В середине 60-х гг. сотрудники математического факультета Дартмутского колледжа Томас Курц и Джон Кемени создали специализированный язык программирования, который состоял из простых английских слов. Новый язык назвали универсальным символическим кодом для начинающих (Beginners All-purpose Symbolic Instruction Code) или сокращенно BASIC (Бейсик). 1964 г. считают годом рождения этого языка. Он получил самое широкое распространение при работе на персональных компьютерах в режиме интерактивного диалога. Популярность Бейсика объясняется как простотой его освоения, так и наличием достаточно мощных универсальных средств, пригодных для решения научных, технических и экономических задач, а также задач бытового характера, игровых и т.д. Согласно концепциям, заложенным в Бейсике, в нем широко распространены различные правила умолчания, что считается плохим тоном в большинстве языков программирования подобного типа. Возникло множество версий языка, зачастую мало совместимых друг с другом. Однако, зная одну из версий, можно без особого труда освоить любую другую. Бейсик активно поглощает многие концепции и новинки из других языков. Первоначально интерактивный режим осуществлялся с использованием интерпретатора, в настоящее время для этого языка имеются также и компиляторы.
В начале 60-х гг. каждый из существующих языков программирования был ориентирован на разные классы задач, но в той или иной мере привязан к конкретной архитектуре ЭВМ. Были предприняты попытки преодолеть этот недостаток путем создания универсального языка программирования. ПЛ/1 (PL/1 – Programming Language One) — первый многоцелевой универсальный язык, разработан в США фирмой IBM в 1963—1966 гг. Это один из наиболее распространенных универсальных языков, он хорошо приспособлен для решения задач в области вычислительной техники: исследования и планирования вычислительных процессов, моделирования, решения логических задач и исследования логических схем, разработки систем математического обеспечения. При разработке PL/1 были широко использованы основные понятия и средства языков Фортран, Алгол-60, Кобол. PL/1 – богатый и гибкий язык, дает возможность производить вставки, исправлять текст программы в процессе ее отладки. Язык получил широкое распространение, трансляторы с него имеются для многих типов компьютеров. Компания IBM и сегодня продолжает поддерживать этот язык.
Паскаль (Pascal) является одним из наиболее популярных процедурных языков программирования, особенно для персональных компьютеров. Созданный как учебный язык программирования в 1968—1971 гг. Никлаусом Виртом в Высшей технической школе в Цюрихе (Швейцария), он был назван в честь французского математика и философа Блеза Паскаля (1623—1662). Целью работы Н. Вирта было создание языка, который
строился бы на небольшом количестве базовых понятий;
имел простой синтаксис;
допускал перевод программ в машинный код простым компилятором.
Лингвистическая концепция Паскаля пропагандирует системный подход, выражающийся, в частности, в расчленении крупных задач на меньшие по сложности и размеру, легко поддающиеся решению. К основным принципам Паскаля следует отнести:
Структурное программирование. Суть его заключается в оформлении последовательности команд как замкнутых функций или процедур и в объединении данных, связанных по смыслу, в сложные структуры данных. Благодаря этому повышается наглядность текста и упрощается его отладка.
Программирование сверху вниз, когда задача разбивается на простые, после чего каждая решается в отдельности. Затем компонуются результаты проектирования простых задач, и поставленная задача решается сверху вниз в целом.
В основу разработки языка Паскаль был положен Алгол-60, но в нем ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его для создания крупных проектов, например, программ-трансляторов. Паскаль реализован для всех типов компьютеров, в настоящее время используется во многих учебных заведениях для обучения программированию, а также для создания больших реальных проектов.
Период с конца 60-х до начала 80-х гг. характеризуется бурным ростом числа различных языков программирования, сопровождавшим, как это ни парадоксально, кризис программного обеспечения. Этот кризис особенно остро переживало военное ведомство США. В январе 1975 г. Пентагон решил навести порядок среди бесчисленного множества трансляторов и создал комитет для разработки одного универсального языка. На конкурсной основе комитет рассмотрел сотни проектов и выяснил, что ни один из существующих языков не может удовлетворить их требованиям, для окончательного рассмотрения было оставлено два проекта. В мае 1979 г. был объявлен победитель – группа ученых во главе с Жаном Ихбиа. Победивший язык назвали АДА, в честь Ады Лавлейс, дочери великого поэта Байрона. Она в юности была увлечена идеями Чарльза Бэббиджа и помогала ему составлять описание машины, а в начале 40-х гг. ХIХ в. разработала первую в мире программу для вычислительной машины. Язык АДА – прямой наследник Паскаля. Он предназначен для создания и длительного сопровождения больших программных систем, управления процессами в реальном масштабе времени. В языке четко выражена модульность его конструкций, причем обеспечивается удобство организации разнообразных связей между модулями. Важным его достоинством является возможность параллельного программирования ветвей программы, которые затем могут реализоваться на многопроцессорных компьютерах. Язык АДА сложен для изучения.
Язык программирования С (Си)был разработан в лаборатории Bell для реализации операционной системы UNIX в начале 70-х гг. и не рассматривался как массовый. Он планировался для замены Ассемблера, чтобы иметь возможность создавать столь же эффективные и компактные программы, и в то же время не зависеть от конкретного типа процессора. В Си сочетаются достоинства современных высокоуровневых языков в части управляющих конструкций и структур данных с возможностями прямого доступа к аппаратным средствам компьютера. Синтаксис языка Си обеспечивает краткость программы, его компиляторы генерируют эффективный объектный код. Одна из наиболее существенных особенностей Си состоит в том, что различия между выражениями и операторами нивелируются, это приближает его к функциональным языкам. Например, выражение может обладать побочным эффектом присваивания, а также может использоваться в качестве оператора. Нет четкого различия между процедурами и функциями, более того, понятие процедуры вообще не вводится. Синтаксис языка затрудняет программирование и восприятие составленных программ. Отсутствует строгая типизация данных, что предоставляет дополнительные возможности программисту, но не способствует созданию надежных программ. Язык Си приобрел большую популярность среди системных и прикладных программистов. В настоящее время этот язык реализован для большинства компьютерных платформ.
studfiles.net
Пять перспективных языков программирования со светлым будущим / Хабр
Если разделять языки программирования по популярности, то они делятся на три эшелона. Первый эшелон включает мейнстрим-языки, такие как Java, JavaScript, Python, Ruby, PHP, C#, C++ и Objective-C. Несмотря на то, что некоторые из ведущих языков возможно увядают, вам лучше знать один или несколько из них, если вы хотите иметь возможность легко найти работу.
Языки второго эшелона пытаются пробиться в мейнстрим, но ещё не добились этого. Они доказали свою состоятельность путем создания сильных сообществ, но они до сих пор не используются большинством консервативных IT-компаний. Scala, Go, Swift, Clojure и Haskell — языки, которые я бы отнёс ко второму эшелону. Некоторые компании используют эти языки для отдельных сервисов, но широкое применение встречается редко (за исключением Swift, который начинает обгонять Objective-C в качестве основного языка для iOS). Go и Swift имеют хорошие шансы на переход из второго эшелона в первый в течение ближайших двух-трёх лет.
Большинство языков в первом эшелоне прочно укоренились на своих позициях. Поэтому выпадение языка с лидирующих позиций занимает ощутимое время, а для языка второго эшелона очень трудно пробиться в первый.
Перспективные языки из данной статьи относятся к третьему эшелону, и они только начинают свой путь наверх. Некоторые языки пребывают в третьем эшелоне на протяжении многих лет, не получая популярности, в то время как другие врываются на сцену всего за пару лет. Как, например, языки, про которые пойдёт речь в статье.
Перспективные языки: почему эти пять?
Пять языков программирования, о которых пойдёт речь, весьма новы (не исключено, что о каком-то вы услышите впервые), и они явно имеют отличные шансы пробиться во второй эшелон в ближайшие 2-3 года. Может быть, когда-нибудь один из этих языков сможет потеснить и языки первого эшелона.
Вот почему эти пять языков были выбраны для этого списка:
Elm набирает популярность в сообществе JavaScript, в первую очередь среди тех, кто предпочитает функциональное программирование, которое находится на подъеме. Как и TypeScript или Dart, Elm транспилируется в JavaScript.
Rust является языком системного программирования, предназначенным в основном для ниш, где применяют С и С++. Поэтому удивительно видеть, что популярность этого языка быстрее растёт среди веб-разработчиков. Этот факт становится более осмысленным, когда вы выясняете, что язык был создан в Mozilla, которая хотела дать лучший вариант веб-разработчикам, которые вынуждены писать низкоуровневый код, и при этом более производительный, чем PHP, Ruby, Python или JavaScript. Rust был также признан лучшим в номинации ”сама любимая технология” по результатам опроса разработчиков, проведённом StackOverflow в 2016 году (это означает, что большинство пользователей хотели бы продолжать использовать этот язык).
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):
Каждый из этих языков может похвастаться увлечённым сообществом и собственной еженедельной новостной рассылкой. Если вы подумываете об изучении молодого языка с захватывающими возможностями для будущего, прочитайте краткие презентации для каждого из этих пяти языков, написанные опытными энтузиастами и лидерами соответствующих экосистем.
Elm
Elm — функциональный язык программирования, ориентированный на удобство и простоту использования, который компилируется в высокопроизводительный JavaScript-код. Вы можете использовать его, в том числе и совместно с JavaScript, для создания пользовательских интерфейсов в интернете. Основными преимуществами Elm по сравнению с JavaScript являются надёжность, лёгкость в поддержке и нацеленность на удовольствие от программирования. Более конкретно:
- Нет runtime-исключений: Elm-код имеет репутацию никогда не выбрасывающего исключений во время выполнения. Совсем не то, что "undefined is not a function."
- Легендарно любезный компилятор: компилятор Elm часто хвалят за наиболее полезные сообщения об ошибках среди конкурентов. "Если он компилируется, то, как правило, всё просто работает" — это распространённое мнение, даже после серьёзного рефакторинга. Это делает большие проекты на Elm гораздо легче в поддержке, чем соразмерные проекты на JS.
- Семантическое версионирование: elm-package обеспечивает соблюдение семантических версий автоматически. Если автор пакета пытается сделать ломающие API изменения, не поднимая основной номер версии, elm-package обнаружит это и откажет в публикации новой версии пакета. Ни один другой известный менеджер пакетов не обеспечивает соблюдение семантического версионирования настолько надёжно.
- Быстрый и функциональный: Elm является чистым функциональным языком, который гарантирует отсутствие мутаций и побочных эффектов. Это не только обеспечивает прекрасную масштабируемость Elm-кода, но также помогает ему рендерить UI приложения быстрее, чем React, Angular или Ember.
- Мощные инструменты: elm-format форматирует исходный код в соответствии со стандартом сообщества. Нет больше споров по конвенциям оформления кода. Просто нажимаете кнопку “Сохранить” в вашем редакторе и ваш код становится красивым. elm-test поставляется с “батарейками” для поддержки как модульного, так и случайного тестирования. elm-css позволяет писать Elm-код, который компилируется в css-файл, так что вы можете разделять код между приложением и таблицами стилей, чтобы гарантировать, что ваши константы никогда не рассинхронизируются.
Elm код также может взаимодействовать с JavaScript. То есть вы можете вводить его в малых дозах в ваш JS код, и вы всё ещё можете использовать огромную экосистему JS и не изобретать колесо.
Посмотрите 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 пытается смягчить эти проблемы путем предоставления гарантий на уровне типа какие значения могут быть разделены между потоками и как именно.
Rust также имеет несколько отличительных особенностей:
- Проверка владения: прославленная возможность Rust — инструмент статического анализа, который считывает код и прекращает компиляцию, если он может привести к ошибке памяти. Это работает путем закрепления понятия, что значения либо принадлежат одному месту, либо используются во многих местах, и последующего анализа того, как владение значением меняется во время выполнения программы. Проверка владения также исключает состояние гонки в конкурентном коде, используя тот же набор правил.
- Композиция вместо наследования: Вместо того, чтобы использовать систему наследования классов подобно C++ или Java, Rust использует трейты или компонуемые интерфейсы для поддержки модульного программирования. Вместо того, чтобы указывать, что конкретный тип является частью иерархии классов, программист может описать тип на основе его возможностей, например, говоря о том, что тип должен быть Printable и Hashable вместо наследования от класса PrintableHashable.
- Крутые инструменты: Любой C/C++ ветеран знает боль установки зависимостей, компиляции кода на нескольких платформах и борьбы с тайнами конфигурации CMake. Rust экономит бесконечные часы, проведенные в криках на GCC, предоставляя разумный менеджер пакетов и кросс-платформенные API.
Для получения дополнительной информации, ознакомьтесь с The Rust Book и Rust by Example.
Этот раздел написал Will Crichton — аспирант Стэнфордского университета, который специализируется на параллельных и конкурентных системах, визуальных вычислениях и архитектуре компиляторов и языков программирования. Он часто пишет о Rust в своем блоге.
Kotlin
Kotlin представляет собой статически типизированный язык, который ориентирован на JVM и JavaScript. Kotlin родился из потребности JetBrains, которая искала новый язык для разработки своего набора инструментов (который был в основном написан на Java). Что-то, что позволило бы им использовать существующую кодовую базу и в то же время решить некоторые проблемы, которые возникали из-за Java. И именно решения этих распространенных недочётов, встречающихся при написании программного обеспечения, определили большую часть характеристик Kotlin.
- Лаконичность: уменьшить количество шаблонного кода, необходимого для выражения определенных конструкций.
- Универсальность: создать язык, который подходит для любого типа промышленного применения, будь то веб, мобильная разработка, desktop или серверные приложения.
- Безопасность: пусть язык сам обрабатывает некоторые из распространенных ошибок, связанные с такими вопросами, как null reference exceptions.
- Взаимодействие: разрешить языку взаимодействие с существующими базами кода на Java, библиотеками и фреймворками, что обеспечивает возможность постепенного внедрения и использования результатов уже вложенных инвестиций.
- Инструменты: JetBrains делает инструменты и делает их, исходя из убеждения, что многие рутинные задачи можно автоматизировать и привести к более эффективной и продуктивной разработке. Таким образом, язык должен легко позволять применять вспомогательные инструменты.
Kotlin был и всегда будет нацелен на прагматизм — выискивая распространённые проблемы, с которыми мы часто сталкиваемся при написании кода, и пытаясь помочь в их решении. Это проходит красной нитью через различные языковые особенности, такие как:
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.
Бонус:
Выразительность: Код читают гораздо чаще, чем пишут. Благодаря 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.
Синтаксис Elixir и набор инструментов черпали вдохновение от Ruby. В то время как синтаксические сходства только поверхностны, набор инструментов будет ощущаться знакомым каждому, кто знает Ruby. Команды хорошо продуманы, просты в использовании и обеспечивают прекрасную производительность труда разработчиков.
Цели языка:
- ”Дружественное” функциональное программирование: сила и преимущества функционального языка программирования с ясным и доступным синтаксисом.
- Высококонкурентный и масштабируемый: язык не должен создавать проблем на пути решения серьёзных задач для высоконагруженных систем.
- Отличные средства разработки: для компиляции, управления зависимостями, тестирования и развёртывания.
Пример Phoenix-контроллера, написанного на Elixir
Отличительные особенности:
- Иммутабельные структуры данных и отсутствие побочных эффектов помогают сделать большие системы проще в обслуживании и понимании.
- Супервизоры позволяют определить внутреннее дерево процессов и установить правила для автоматического восстановления от ошибок.
- Сопоставление с образцом обеспечивает альтернативу условными и сторожевым операторам.
- Конкурентность, основанная на акторах и отсутствии разделяемых данных, хорошо подходит для решения сегодняшних проблем конкурентности при масштабировании. См. Путь к 2 миллионам подключений.
- Очень эффективное управление ресурсами означает, что вы можете обслуживать множество пользователей ограниченными аппаратными средствами. См. Почему WhatsApp требуется только 50 инженеров для обслуживания 900 миллионов пользователей.
- Горячая замена кода позволяет проводить деплои без даунтайма.
- Lisp-подобная система макросов позволяет напрямую манипулировать AST, обеспечивая очень широкие возможности метапрограммирования, вплоть до поддержки кастомного синтаксиса. (этот пункт добавлен переводчиком)
Elixir и Phoenix набирают популярность, поскольку это сочетание позволяет легко создавать сложные надёжные веб-приложения и API с хорошей поддерживаемостью, отличной производительностью и масштабируемостью. Вот почему Pinterest, Bleacher Reports и многие другие компании выбирают Elixir для ключевых частей инфраструктуры своих продуктов. Вы можете получить продуктивность без ущерба для производительности (или наоборот), чего не скажешь о большинстве других языков.
Этот раздел написан Christian Nelson — партнер и директор по разработке в Carbon Five.
P.S. Каков ваш Top-5 перспективных языков программирования? P.P.S. От переводчика: На мой взгляд в список перспективных языков можно было бы включить ещё Nim. Если кто-то из хабровчан уже применяет этот ЯП и готов написать о нём подобное краткое эссе, то я с удовольствием добавлю его в статью (само собой, с указанием авторства). Если Вы нашли неточность в переводе, относительно своего любимого ЯП, — пишите в личку, всё поправим.
habr.com