![](/stc/img/evkova.png)
Классификация языко в программирования. Критерии выбора среды и языка разработки программ
Содержание:
ВВЕДЕНИЕ
Актуальность темы исследования: Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов – языков программирования. Смысл появления такого языка – оснащенный набор вычислительных формул дополнительной информации, превращает данный набор в алгоритм.
Язык программирования — формальная знаковая система, предназначенная для описания алгоритмов в форме, которая удобна для исполнителя (например, компьютера). Язык программирования определяет набор лексических, синтаксических и семантических правил, используемых при составлении компьютерной программы. Он позволяет программисту точно определить то, на какие события будет реагировать компьютер, как будут храниться и передаваться данные, а также какие именно действия следует выполнять над этими при различных обстоятельствах.
Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко.
Со времени создания первых программируемых машин человечество придумало уже более двух с половиной тысяч языков программирования. Каждый год их число пополняется новыми. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
Целью данной работы является изучение языков программирования.
Предметом работы являются виды языков программирования.
Объектом исследования послужили языки программирования
Задачи работы:
Дать понятие языка программрования:
Привести классификацию языков программрования;
Изучить популярные языки программирования.
Методами исследования является общенаучный диалектический метод познания и вытекающие из него частнонаучные методы: исторический, социологический, логический, системно-структурный
ГЛАВА 1. ОБЩЕЕ ПОНЯТИЕ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
1.1.Понтие и классификация языков программирования
Программирование - процесс и искусство создания компьютерных программ с помощью языков программирования.
Программирование сочетает в себе элементы искусства, науки, математики и инженерии.
В узком смысле слова, программирование рассматривается как кодирование - реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования.
В более широком смысле, программирование - процесс создания программ, то есть разработка программного обеспечения.
Большая часть работы программиста связана с написанием исходного кода на одном из языков программирования.[4]
Различные языки программирования поддерживают различные стили программирования (так называемые парадигмы программирования).
Отчасти искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи.
Язык программирования - формальная знаковая система, предназначенная для записи программ.
Программа обычно представляет собой некоторый алгоритм в форме, понятной для исполнителя (например, компьютера).
Язык программирования определяет набор лексических, синтаксических и семантических правил, используемых при составлении компьютерной программы.
Процедурное программирование - есть отражение фон Неймановской архитектуры компьютера. Программа, написанная на процедурном языке, представляет собой последовательность команд, определяющих алгоритм решения задачи. Основная идея процедурного программирования - использование памяти для хранения данных. Основная команда- присвоение, с помощью которой определяется и меняется память компьютера. Программа производит преобразование содержимого памяти, изменяя его от исходного состояния к результирующему.
Различают такие языки процедурного программирования:
Язык Фортран создан в начале 50-х годов 20-го века для программирования научно-технических задач;
Кобол – создан в конце 60-х годов 20-го века для решения задач обработки больших объемов данных, хранящихся на различных носителях данных;
Алгол (1960 год) – это многоцелевой расширенный язык программирования. В нем впервые введены понятия «блочная структура программы» и «динамическое распределение памяти»;
В середине 60-х годов 20-го века был создан специализированный язык программирования для начинающих – BASIC. Характеризуется простотой освоения и наличием универсальных средств для решения научных, технических и экономических задач, а также задач, например, игровых.
Все перечисленные выше языки были ориентированы на различные классы задач, но они в той или иной мере были привязаны к конкретной архитектуре ЭВМ. [2]
В 1963-1966гг был создан многоцелевой универсальный язык PL-1. Этот язык хорошо приспособлен для исследования и планирования вычислительных процессов, моделирования, решения логических задач, разработки систем математического обеспечения.
К языкам процедурного программирования можно отнести язык АДА (1979 г) Язык назван в честь первой программистки Ады Лавлейс- дочери Байрона. Его отличает модульность конструкций.
Язык СИ (начало 70-х годов) также относится к языкам процедурного программирования. Первоначальный его вариант планировался как язык для реализации операционной системы Unix вместо языка Ассемблера. Одной из особенностей языка СИ является то, что различия между выражениями и операторами сглаживаются, что приближает его к функциональным языкам программирования. Кроме того, в языке СИ отсутствует понятие процедуры, а использование подпрограмм основано на понятии функции, которая может сочетать в себе возможности процедуры. С одной стороны, по набору управляющих конструкций и структур данных его можно отнести к языкам высокого уровня, а с другой – он имеет набор средств прямого обращения к функциональным узлам компьютера, а это означает, что его можно использовать как операционный язык.
1.2. Декларативные языки программирования
К ним относятся функциональные и логические языки программирования. Функциональное программирование- это способ составления программ, в которых единственным действием является вызов функции. В функциональном программировании не используется память, как место для хранения данных, а, следовательно, не используются промежуточные переменные, операторы присваивания и циклы. Ключевым понятием в функциональных языках является выражение. Программа, написанная на функциональном языке, представляет собой последовательность описания функций и выражений. Выражение вычисляется сведением сложного к простому. Все выражения записываются в виде списков. Первым языком стал язык Лисп (LISP, LIST Processing- обработка списков) создан в 1959г. [12] Этот язык позволяет обрабатывать большие объемы текстовой информации. Логическое программирование- это программирование в терминах логики. В 1973 году был создан язык искусственного интеллекта Пролог (PROLOG) (Programming in Logic). Программа на языке Пролог строится из последовательности фактов и правил, затем формулируется утверждение, которое Пролог пытается доказать с помощью правил. Язык сам ищет решение с помощью методов поиска и сопоставления, которые в нем заложены. Логические программы не отличаются высоким быстродействием, так как процесс их выполнения сводится к построению прямых и обратных цепочек рассуждений разнообразными методами поиска.
1.3 Языки программирования общего назначения
Fortran
На Fortran 77 трудились математики и инженеры оборонных КБ и военных заводов. Текст программ несколько напоминал язык Basic – один оператор в строке, но Фортран был еще строже – каждая строка, каждая метка должна была начинаться с определенной позиции – издержки работы с перфокартами. Но такой язык был удобен, так как имел 40-летний архив математических библиотек, «вылизанных», вычислявших с огромной точностью. А ведь мы тогда не только ракеты строили, были еще и станки, и калибры, и гражданская точная продукция. С тех пор язык и не думал умирать – появились версии 90, 95, 2003. Одно время компиляторы Фортрана выпускались Майкрософтом, но это было не очень прибыльно. В итоге язык получился весьма перспективным, мощным и простым. В него были добавлены ООП, работа с многомерными массивами и файлами в оперативной памяти, параллельные вычисления. Исчезали операторы переходов, структура и вид программ стали похожи на Java. Есть и свободные версии компиляторов, так что изучать его будет легко и полезно. [6]
Языки Паскаль и Си появились примерно в одно и то же время, но Паскаль, разработанный исключительно для обучения студентов правильному стилю программирования, все же проиграл своему конкуренту. Достоинства Си по прежнему высоко ценимы программистами: это и высокий язык “низкого” уровня, и большое количество компиляторов, и возможность эффективно программировать любые задачи: от драйверов до операционных систем. К примеру, практически все операционные системы сейчас пишутся на Си с элементами С++ и включением ассемблера; это же касается и большей части пользовательских программ. Главным достоинством Си было то, что в нем были реализованы неплохой препроцессор, компактная нотация записи операторов, мощная поддержка указателей. Сам язык был простым, поэтому компиляторы с него разрабатывали многие – до сих пор известны открытые проекты SmallC, Sphinx C—и т.д. Кроме Borland и Microsoft, отличные компиляторы выпускают Watcom, Intel и другие софтверные гиганты. Пробрался Си и во встроенные (бортовые) системы. Но со временем его ограничения давали о себе знать, поэтому в 1983 году Бьерн Страуструп из лаборатории Bell решил создать новый язык С++, взяв за основу нотацию записи Си. Это важный момент: С++ не является надстройкой языка С, он «просто похож», да так, что многие простые программы на Си можно компилировать на С++ без изменений. В новый язык была включена полноценная поддержка объектно-ориентированного программирования (ООП): классы, иерархия объектов, конструкторы и деструкторы, виртуальные классы, множественное наследование, потоки ввода-вывода, защита памяти, сборка мусора в памяти и т.п. При этом язык не потерял своей внешней простоты и лаконичности, хотя уж где-где, а в С-подобных языках программист мог написать такое, что и в кошмаре не приснится – все дело в стиле. Позднее начали появляться новые языки, но по традиции они почти все были похожи на обычный Си – С-шарп, Java и т.д. Знание С++ в любой программистской команде стало нормой, без которой практически невозможно стало получить хорошую работу. [10]
Basic
Язык Бейсик появился в 1963 году как средство программирования для начинающих, хотя его аббревиатуру пытались расшифровать и иными способами. Но заявленной цели он соответствовал полностью, за что и был тепло встречен сообществом программистов-непрофессионалов. Язык постарались воплотить максимально просто. К примеру, в нем не нужно было заранее декларировать переменные и их типы – они инициировались прямо в ходе программы. В первых версиях языка существовали циклы, работа со структурами DATA, с массивами, но функции были реализованы очень слабо. Зато интерпретаторы, создающие шитый код, были такими крохотными, что занимали 4-8 Кб памяти или ПЗУ, что позволило Бейсику распространиться на сотни платформ – от больших ЭВМ до микрокомпьютеров и домашних компьютеров. К слову сказать, домашние компьютеры и персоналки значительно оживили довольно скудный по функционалу язык, позволив включить в него графику, генерацию музыки, возможность работы с портами и памятью напрямую. Классикой тех времен долгое время оставался Turbo Basic, на котором и сейчас кое-где учат школьников. Но с тех пор возможности языка сильно увеличились: кроме интерпретаторов, появились оптимизирующие компиляторы, библиотеки работы с точной математикой. Графические возможности «исправила» Windows, для которой были написаны версии компилятора с визуальным конструктором окон, с системой обработки прерываний. Так как язык было довольно легко реализовать, появились тысячи его вариантов – для научных расчетов, для создания игр, для работы с музыкой. Майкрософт расширила ареал присутствия языка, включив его в продукты Office и Windows (VBScript, VBA и более ранний Word Basic). Создатели Corel тоже начали включать этот язык в свои продукты. Более достойные, как раньше казалось, языки давно отправились на свалку истории, а Бейсик и сейчас остается одним из самых востребованных языков. Говорят, что в виде обучающего языка на Западе он даже успешно теснит C++![12]
Modula-2
Мы старательно обходили молчанием Паскаль-подобные языки, так как о Паскале знает каждый и так. Гораздо более интересно проследить за другой ветвью развития этого языка. Да, первый Паскаль был именно учебным языком, что давало повод программистам на Си издеваться над ним. Уже гораздо позже фирма Borland сотворила чудо и создала линейку компиляторов Turbo – это был прогресс, выведший Паскаль в один ряд с другими «приличными» языками. Но автор оригинального Паскаля Никлаус Вирт отреагировал намного раньше, заявив, что каждой задаче должен соответствовать свой инструмент. Не годится Паскаль для системных задач? Так не надо его мучить! И создал язык Modula-2, предназначенный для задач системного программирования. Язык очень напоминал по записи Паскаль, но имел массу интересных возможностей: битовые поля, разделение программы на модули (модули определения и модули реализации), элементы параллельного программирования на основе стандартных библиотек, отражение структур данных на память и т.д. Возможно, это был первый язык, в котором не было оператора Goto. Идею с модулями потом все же реализовали в Turbo Pascal, но непоследовательно: в одном модуле хранились секции interface и implementation, но даже этого хватило, чтобы Modula-2 не пошла в народ. Точнее, она нашла своих поклонников, но только мало их было. И, в основном, были они в погонах – Modula-2 до сих пор используется в спутниках, в системе ГЛОНАСС. А сердце все равно вздрагивает при словах Turbo Modula-2, JPI TopSpeed Modula-2, Logitech Modula-2… Но это был еще не конец языка – он был взят за основу, чтобы создать действительно мощные и перспективные языки программирования – Oberon, Ada, Modula-3 и Zonnon. [15]
Этим список языков не заканчивается – их еще много. Но сразу бы хотелось посоветовать тем, что желает изучать их или их потомков – изучать языки по книгам то же самое, что учить китайский язык – через неделю все забудется. Для изучения нужно самому себе ставить задания и обязательно выполнять их, охватывая и привлекая все аспекты языка. И заниматься языком нужно постоянно. Только тогда время на изучение будет потрачено не зря.
ГЛАВА 2. ВЫБОР СРЕДЫ И ЯЗЫКА ПРОГРАММИРОВАНИЯ
2.1 Преимущества и недостатки средств разработки
Важнейшим элементом в процессе разработки приложения является выбор правильной IDE, зависящий не только от платформы, но и уровня собственной подготовки. Давайте познакомимся с наиболее популярными из них методом «от противного», представляя не столько их преимущества, сколько наиболее часто встречаемые укоры со стороны разработчиков.
Начнём с официальных представителей лидеров мобильного рынка: Windows, Google и Apple.
Описание: один из старейших программных продуктов для создания как консольных приложений, так и обладающие графическим интерфейсом. Добавление сторонних плагинов позволяет серьёзно расширить функциональность среды, в том числе до кроссплатформенного состояния.
Недостатки: новичку будет просто невозможно самостоятельно разобраться с Visual Studio без прохождения специальных курсов и чтения литературы. Это продукт скорее для опытных разработчиков, обращающих внимание на качество редактора и функции тестирования.
Описание: относительно молодая и стремительно развивающаяся IDE, ориентированная на разработчиков приложений для Android.
Недостатки: скупые возможности персонализации проявляются в редакторе кода и общих настройках. Мелочь, а неприятно.
Описание: IDE, ориентированная на создание приложений для OS X и iOS. Для использования языков Objective C и Swift на сегодня это лучшее, а для некоторых задач и вовсе единственное решение.
Недостатки: многие разработчики жалуются на стабильность среды, вынуждающую вносить дополнительные изменения в свои проекты после выхода очередной версии. Кроме того, XCode относительно сложная IDE для самопознания новичком. Именно поэтому рекомендуем вам пройти наш бесплатный интенсив по основам языка Swift. На нем мы рассмотрим тонкости работы с этой IDE.
От официальных представителей перейдём к универсальным кроссплатформенным средам разработки:
Описание: популярный инструмент разработки приложений под Windows, Phone, Android и iOS, использующий по сути только один язык — C#. Помимо непосредственно Xamarin Studio вы также можете пользоваться плагином для Visual Studio.
Недостатки: незначительные, но тем не менее регулярные ошибки, как непосредственно в самой IDE, так и в выходном коде. Также, несмотря на репутацию кроссплатформенной среды, портировать уже готовые приложения на Xamarin достаточно затруднительно.
Описание: IDE, разработанная компанией JetBrains, позволяющая создавать программы на множестве популярных языков, среди которых Java, JavaScript, Python, Ruby, Groovy, Scala, PHP, C, C++.
Недостатки: производительность. Томительное ожидание выполнения компиляции, перекомпиляции, тестирования порой действительно раздражает.
Описание: платформа для быстрого создания консольных и графических приложений для всех подручных устройств.
Недостатки: возможности, предоставляемые Appcelerator Titanium имеют и обратную сторону: генерируемые ошибки в коде, искусственные ограничения, недостаточно качественная документация.
Описание: среда разработки, изначально ориентированная на работу с Java, прославилась большим количеством внешних модулей, существенно расширяющих её функциональность (в том числе, это касается количества поддерживаемых языков).
Недостатки: существенная нехватка документации, нет единого сообщества разработчиков.
Описание: мощная IDE для разработки приложений на Java, JavaScript, Python, PHP, C, C++ и даже Ада.
Недостатки: невысокое быстродействие из-за концепции «всё в одном». Некоторые плагины (в том числе для разработки приложений для Android) имеют существенные ограничения функциональности.
Описание: необычная среда разработки кроссплатформенных приложений, не требующая знания «родных» языков. То есть для того, чтобы создать приложение для Android, знание Java вам не потребуется. Используются JavaScript в связке с HTML5 и CSS3.
Недостатки: ограниченная функциональность вызванная непосредственно основной идеей нецелевой среды разработки.
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):
Рис. 1 Популярность языков
Каждый из этих языков может похвастаться увлечённым сообществом и собственной еженедельной новостной рассылкой. Если вы подумываете об изучении молодого языка с захватывающими возможностями для будущего, прочитайте краткие презентации для каждого из этих пяти языков, написанные опытными энтузиастами и лидерами соответствующих экосистем. [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 для ключевых частей инфраструктуры своих продуктов. Вы можете получить продуктивность без ущерба для производительности (или наоборот), чего не скажешь о большинстве других языков.
ЗАКЛЮЧЕНИЕ
Конечно, в те времена не было компьютеров в современном понимании. Не было языков программирования, кроме машинного, не было даже приличных операционных систем. Да и машинные коды было возможно вводить лишь с пульта, так что появление первого в мире компилятора языка Фортран казалось фантастикой. Начало было положено – компьютеры становились все мощнее и портативнее, а математики с разработчиками писали все новые и новые языки программирования. Своего апофеоза «зоопарк» языков программирования достиг в России в 90-х годах, и тому были причины. Во-первых, появились первые персоналки – новые и красивые игрушки; во-вторых, софт традиционно был бесплатным, что давало возможность «попробовать все»; и, наконец, самое главное – было много свободного времени на работе, чтобы развлекаться и получать зарплату. До кризисов оставалось еще долго. В то время программисты от мала до велика изучали компиляторы языков, делали для себя вывод и выбор. А выбирать было из чего – в 2000 году в мире насчитывалось около 7000 языков программирования. И большинство из них – студенческие самоделки или языки, далеко ушедшие от нужд народа в науку. Хотя в то время еще были живы и здравы корифеи-разработчики и теоретики языков, программисты мало обращали внимания на строгую классификацию языков. В их понятии, категории были такими: системные языки, языки общего назначения и те, которые интересны лишь военным и ученым. В последнюю категорию сваливали все, что не давалось изучить за пару часов – Ada, APL, Prolog, Forth, Smalltalk и т.п.
Для освоения «системных» языков нужно было какое-никакое, а математическое образование, так как с их помощью писались операционные системы, драйверы, резидентные программы, компиляторы и первые хакерские программы вместе с вирусами. Это было сложно, но некоторым о большем и мечтать не хотелось.
А остальным осталась категория языков общего назначения, с помощью которых писали программы насущные, полезные и не очень сложные: расчет зарплаты, управление заводскими установками, создание утилит, расчетные и инженерные программы. Иногда даже игры, если после работы оставалось свободное время. Напомним, что персоналки в основном стояли на работе, а дома оккупировали бытовые компьютеры. Именно в то время и начались первые «холивары» – священные войны на тему «какой язык лучше». Ответов тогда никто ни от кого не ждал, поэтому предлагается объективно взглянуть на эти языки того времени.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
- Александреску, А. Язык программирования D / А. Александреску. - СПб.: Символ-плюс, 2014. - 544 c.
- Ашарина, И.В. Основы программирования на языках C и C++ / И.В. Ашарина. - М.: ГЛТ, 2012. - 208 c.
- Баженова, И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. - М.: ИЦ Академия, 2012. - 368 c.
- Белоусова, С.Н. Основные принципы и концепции программирования на языке VBA в Excel: Учебное пособие / С.Н. Белоусова, И.А. Бессонова. - М.: БИНОМ. ЛЗ, 2010. - 200 c.
- Бьянкуцци, Ф. Пионеры программирования: Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден; Пер. с англ. С. Маккавеев. - СПб.: Символ-Плюс, 2011. - 608 c.
- Бьянкуцци, Ф. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден. - М.: Символ, 2011. - 608 c.
- Головин, И.Г. Языки и методы программирования: Учебник для студентов учреждений высшего профессионального образования / И.Г. Головин, И.А. Волкова. - М.: ИЦ Академия, 2012. - 304 c.
- Довек, Ж. Введение в теорию языков программирования / Ж. Довек, Ж.-Ж. Леви. - М.: ДМК, 2016. - 134 c.
- Керниган, Б. Язык программирования C. / Б. Керниган, Д.М. Ритчи. - М.: Вильямс, 2016. - 288 c.
- Опалева, Э.А. Языки программирования и методы трансляции. / Э.А. Опалева. - СПб.: BHV, 2005. - 480 c.
- Орлов, С. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения / С. Орлов. - СПб.: Питер, 2013. - 688 c.
- Пирс, Б. Типы в языках программирования / Б. Пирс. - М.: КДУ, 2012. - 680 c.
- Серебряков, В.А. Теория и реализация языков программирования / В.А. Серебряков. - М.: Физматлит, 2012. - 236 c.
- Фридман, А.Л. Основы объектно-ориентированного программирования на языке Си++ / А.Л. Фридман. - М.: Гор. линия-Телеком, 2012. - 234 c.
- Хейлсберг, А. Язык программирования C#. Классика Computers Science / А. Хейлсберг, М. Торгерсен, С. Вилтамут. - СПб.: Питер, 2012. - 784 c.
- Цуканова, Н.И. Теория и практика логического программирования на языке Visual Prolog 7: Учебное пособие для вузов / Н.И. Цуканова, Т.А. Дмитриева. - М.: Гор. линия-Телеком, 2013. - 232 c.
- Разработка конфигурации «Продажи» в среде 1СПредприятие 8.3
- Офис управления проектами: функции, структура, особенности формирования
- Аттестация персонала. Оценка результативности деятельности персонала организации (Понятие и цели оценки персонала)
- Методы управления инновационными проектами
- Международный валютный фонд: цели, функции, особенности
- Особенности налогообложения РФ
- МОТИВАЦИЯ И ЕЕ ТЕОРИИ
- Менеджмент человеческих ресурсов
- Бухгалтерская отчетность организации: порядок ее составления и анализ
- Учет поступления основных средств (Теоретические основы бухгалтерского учета поступления основных средств)
- Особенности коммерческой деятельности в сфере малого бизнеса
- Моделирование предметной области «Ведение договоров по страхованию автотранспортных средств» с помощью UML