Файл: Современные языки программирования (Понятие языков программирования и их свойства).pdf
Добавлен: 24.04.2023
Просмотров: 279
Скачиваний: 1
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 миллионов пользователей.