Файл: Современные языки программирования (Проблематика современных языков программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 12.03.2024

Просмотров: 19

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Решение на JavaScript Рисунок 12.

Рисунок 12. Вывод последовательности Фибоначчи на JavaScript.

Синтаксис здесь на порядок сложнее чем в Python: появляются служебные символы и конструкции с разношерстными скобками, названия функций далеко не всегда раскрывают суть действия, и даже простейший код имеет структурированный вид. Объем кода практически не изменился, зато снизилась читаемость. Экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. В целом, JavaScript незначительно уступает Python по спектру решаемых задач, но его возможности «глубже». JavaScript является мультипарадагменным языком, с динамической типизацией. Поддерживает объектно-ориентированный, императивный и функциональный стили. Используется в веб-разработке, разработке мобильных приложений, игр. На JavaScript пишутся браузерные расширения, кроссплатформенные десктопные приложения.

Решение на C# Рисунок 13.

Рисунок 13. Вывод последовательности Фибоначчи на C#.

Код вновь незначительно усложнился — это связано с использованием ключевого слова static. C# Универсальный инструмент для всех направлений разработки. Объектно-ориентированный язык, позволяет работать с памятью. Язык программирования С# был разработан в 1993—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота как язык разработки приложений для платформы Microsoft. К 2000 году у Microsoft были готовы промышленные версии новых технологий и решений для обмена сообщениями и данными, а также для создания Internet-приложений. Была выпущена и новая платформа для разработки под новые решения — .NET. В ней объединились сразу несколько языков программирования, что было в новинку для того времени. Ещё одним новшеством платформы .NET была технология активных серверных страниц ASP.NET. С её помощью можно было относительно быстро разработать веб-приложения, взаимодействующие с базами данных. Специально для ASP.NET был создан язык программирования C#. Да и сама ASP.NET была полностью написана на нём. C# — это язык с C-подобным синтаксисом. Здесь он близок в этом отношении к C++ и Java. Будучи объектно-ориентированным языком, он много перенял у Java и С++. Как и Java, C# изначально предназначался для веб-разработки, и примерно 75% его синтаксических возможностей такие же, как у Java. C# также называют «очищенной версией Java». Ещё 10% наш герой позаимствовал из C++ и 5% – из Visual Basic. Оставшиеся 10% C# — это реализация собственных идей разработчиков. Объектно-ориентированный подход позволяет строить с помощью C# крупные, но в то же время гибкие, масштабируемые и расширяемые приложения. C# уже давно поддерживает много полезных функций: инкапсуляция, наследование, полиморфизм, перегрузка операторов, статическая типизация. При этом он всё ещё активно развивается, и с каждой новой версией появляется всё больше интересного — например лямбды, динамическое связывание, асинхронные методы и т.д. По сравнению с другими языками C# довольно молод, но в то же время он уже прошёл большой путь. Первая версия языка вышла вместе с релизом Microsoft Visual Studio .NET в феврале 2002 года. Текущей версией языка является версия C# 8.0, которая вышла в сентябре 2019 года вместе с релизом .NET Core 3. Когда говорят C#, нередко имеют в виду технологии платформы .NET (Windows Forms, WPF, ASP.NET, Xamarin). И наоборот, когда говорят .NET, нередко имеют в виду C#. Однако, хотя эти понятия связаны, отождествлять их неверно. Язык C# был создан специально для работы с фреймворком .NET, однако само понятие .NET несколько шире. Когда-то Билл Гейтс сказал, что .NET — это лучшее, что сделала компания Microsoft. У него есть весомые основания так считать. Фреймворк .NET представляет мощную платформу для создания приложений. Вот его преимущества:


- Поддержка нескольких языков. В основе .NET — общеязыковая среда исполнения Common Language Runtime (CLR), благодаря чему платформа поддерживает несколько языков: наряду с C# это VB.NET, C++, F#, а также различные диалекты других языков, привязанные к .NET, например, Delphi.NET. Код на любом из этих языков компилируется в сборку на общем языке CIL (Common Intermediate Language) — своего рода ассемблер платформы .NET. Поэтому можно сделать отдельные модули одного приложения на разных языках;

- Мощная библиотека классов. .NET представляет единую для всех поддерживаемых языков библиотеку классов. Какое бы приложение мы ни собирались писать на C# — текстовый редактор, чат или сложный веб-сайт — так или иначе мы задействуем библиотеку классов .NET;

- Разнообразие технологий. Общеязыковая среда исполнения CLR и базовая библиотека классов — это основа для целого стека технологий, которые разработчики могут задействовать при создании разных приложений. Например, для баз данных в этом стеке имеется технология; - Типы данных имеют фиксированный размер (32-битный int и 64-битный long), что повышает «мобильность» языка и упрощает программирование, так как вы всегда знаете точно, с чем вы имеете дело;

- Автоматическая «сборка мусора»;

- Большое количество «синтаксического «сахара» — специальных конструкций, разработанных для понимания и написания кода. Они не имеют значения при компиляции;

- С помощью Xamarin на C# можно писать программы и приложения для таких операционных систем, как iOS, Android, MacOS и Linux;

ADO.NET и Entity Framework Core. Для графических приложений с насыщенным интерфейсом — технологии WPF и UWP. Для более простых графических приложений — Windows Forms. Для разработки мобильных приложений — Xamarin. Для создания веб-сайтов - ASP.NET и т.д. .NET долгое время развивался под названием .NET Framework — преимущественно как платформа для Windows. Но с 2019 она больше не развивается — последней версией этой платформы стала .NET Framework 4.8. В 2014 Microsoft начал выпускать альтернативную платформу - .NET Core, которая должна была вобрать в себя все возможности устаревшего .NET Framework и добавить новую функциональность. Поэтому следует различать .NET Framework, который предназначен преимущественно для Windows, и кроссплатформенный .NET Core.

Решение на Swift Рисунок 14.

Рисунок 14. Вывод последовательности Фибоначчи на Swift.

Swift не вполне универсален. Четвертая версия Swift вышла в 2017 году: она содержит множество улучшений для работы со строками, коллекциями; возросла надежность и многое другое. Это уже классический представитель верхушки рейтинга TIOBE с планомерным развитием. Swift – это невероятно мощный и простой язык программирования, представленный Apple в 2014 году, благодаря которому для многих программистов открывается возможность создания приложений для iOS, MacOS, Apple TV и Apple Watch. Данный язык унаследовал идеи от Objective-C, Rust, Haskell, Ruby, Python, C# и CLU. Он использует паттерны безопасного программирования и содержит новые функции. Созданный Крисом Латтнером, он вышел надежным, быстрым и открытым языком, благодаря чему стало еще проще создавать приложения. Swift – это современный язык программирования со стабильной релизной версией. Он предотвращает массу ошибок на этапе компиляции, ускоряет процесс разработки и повышает качество кода. Основной философией языка является его простота, быстродействие и защищенность. Apple максимально упростила язык для разработчиков: синтаксис стал чище, что повышает читаемость кода как опытного, так и начинающего программиста. Общее количество кода уменьшилось, в следствии чего повысилась производительность. Были полностью переработаны, переосмыслены и переписаны все методы, которые использовались в Objective C. Swift постоянно развивается и обновляется, что говорит о его надежности и нацеленности на будущее. Ходил даже слух, что Google хочет перенести Android полностью на Swift, всякое может быть. Важным моментом является то, что осенью 2016 года Apple способствовала открытию центра обучения студентов, где каждый может учиться программированию приложений для iOS. Но это еще не все, в штатах Swift уже включен в учебную программу многих ведущих учебных учреждений. У этого языка программирования огромный потенциал. Swift является безопасным языком, который позволит огородить от большинства ошибок в процессе программирования. Он подскажет, где находится ошибка и почему не компилируется программа. Но, с другой стороны, тут кроется жесткая типизация. Язык от Apple не прощает ошибок.


Решение на Java Рисунок 15.

Рисунок 15. Вывод последовательности Фибоначчи на Java.

Java появилась 24 года назад как ответ на потребность в платформенно независимом языке. Иными словами, языке для создания ПО, которое встраивается в любые девайсы: стационарные ПК, бытовые приборы, а впоследствии и мобильные устройства. И вот уже более двух десятков лет этот язык находится в списке самых востребованных. В Java реализованы все принципы ООП, организована работа с памятью и периферией, можно поупражняться с функциональным программированием. Язык относительно безопасный, строго-типизированный. Постоянные улучшения в частых релизах позволили ей быстро распространиться и “захватить мир”. Сегодня Java доминирует в разработке корпоративных приложений, веб-сайтов для больших проектов в e-commerce, мобильных приложений. В мире — более 10 миллионов Java-разработчиков и более 3 миллиардов устройств, на которых используется Java. Этот язык — бессменный лидер среди десятков других. Главный плюс Java — принцип “написано однажды — работает везде”. Это значит, что ПО, написанное на одной платформе, будет запускаться и на других устройствах. В принципе, Java буквально способна “петь из каждого утюга”: она используется для создания приложений для мобильных устройств, удаленных процессоров, беспроводных модулей, датчиков, да и в целом — практически любых электроустройств. Адаптивность — одна из причин, по которой Twitter перешел на JVM. Java — в числе самых популярных языков на GitHub по количеству коммитов. Язык востребован благодаря огромному выбору библиотек под любые задачи. Ну а многомиллионное сообщество постоянно наращивает их количество. Благодаря разнообразию библиотек, этот ЯП — гибкий, поэтому он прекрасно подходит для реализации новых функций. И для больших корпораций, и для компаний меньшего масштаба эти ценно. Так, гибкость языка помогла компании Spotify построить набор модулей для разработки микросервисов Apollo. Перечислить все бренды, которые используют Java, невозможно. Java активно задействуется для построения серверной части. В Amazon практически вся “внутренняя кухня” работает на Java; Oracle использовала Java еще до поглощения Sun Microsystems; даже официальный сайт Пентагона использует Java. Большую роль этот ЯП играет и в поддержке сервиса Netflix. Их инфраструктура работает на Linux, а кодирование видео — на машинах Windows. Благодаря тому, что в Java есть множество инструментов с открытым исходным кодом, мониторинг и обновление данных в разных средах становится гораздо проще. Международная финтех компания LMAX использует Java для того, чтобы операции на фондовой бирже проводились с минимальными задержками. В целом, во множестве крупнейших компаний бекэнд-часть написана Java для решения вопросов, связанных с безопасностью, переносимостью и производительностью. То, что в свое время Google выбрал Java для разработки Android, безусловно подогрело интерес к этому языку среди разработчиков. Сегодня это самая популярная операционная система, и практически все мобильные приложения для нее написаны на Java. Миграция в облако — необратимый процесс на глобальном рынке. Компании переносят на облачные платформы все — от хранилищ данных и отдельно взятых сервисов до IT-инфраструктуры целиком. А самым популярным языком программирования для корпоративных разработок в облаке стал Java. В прошлом году независимая организация Cloud Foundry Foundation (CFF) провела опрос среди 600 ИТ-специалистов и выяснила, что для разработки корпоративных приложений в облаке Java используют 58% респондентов. Java применяют в создании серверов приложений в облаке, сетевого программного интерфейса и т.д. Java нужна не столько для разработки новых приложений в облаке, сколько для гарантии, что приложение будет одинаково успешно работать в современном “платформенном миксе” из облака, мобильных и десктопных устройств. Еще одна привязка Java к облаку — AR/VR разработки. Многие мобильные приложения (и под Android в том числе) с технологией дополненной / виртуальной реальности расположены в облаке. И их гораздо больше, чем кажется: travel- и игровые приложения, соцсети, приложения в сферах моды и красоты, образования и т.д. Именно Java использовалась при создании популярных средств разработки ПО: IntelliJ Idea, Eclipse, Netbeans. А также — бизнес-объектов SAP, системы отслеживания ошибок Jira (которая также используется как система управления проектами) и многого другого. Есть мнение, что для работы с большими данными больше подходят Python и R. Но аналитика данных — это отдельная планета. Для разных задач используются разные языки и Java в их числе. В частности, для внедрения Hadoop (файловая система и набор инструментов для обработки данных) и Kafka (распределенный программный брокер сообщений для показа потоков данных в режиме реального времени, сбора больших данных и их анализа). В Java есть ряд библиотек и фреймворков, заточенных под работу с Big Data. Например, Weka, Rapid Miner, JSAT, Java Machine Learning Library, Java Data Mining Package – JDMP и другие. Чтобы самоуправляемые машины были безопасными, нужно проработать до малейших нюансов решение “компьютером” задач, которые для человека кажутся элементарными. Например, определение типа объекта, расстояния, состояния (движется — стоит на месте), распознавание лиц. И здесь программирование на Java играет важную роль. Есть достаточно много туториалов, которые помогут вникнуть в суть вопроса. Множество популярных игр написаны на Java, и многие из них хорошо знакомы каждому. Примерно с начала двухтысячных началась эпоха расцвета Java-игр, тогда же появились RuneScape, Gangstar, Zuma и многие другие. “Звездными” проектами на Java остаются видеоигра Assassin’s Creed и не теряющий актуальность Minecraft.


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

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

2.5 Проблематика современных языков программирования

Программы написанные на языках программирования могут решать разные задачи разных масштабов. Одним из важных требований, предъявляемых к языку программирования, является способность справляться с ростом сложности и масштаба программы. Ключевыми качествами здесь является разделения программы на компоненты, тестируемость, модифицируемость, возможность использования модулей повторно. В этом смысле динамически-типизируемые языки имеют преимущество над статически-типизируемыми. С развитием языков появились особые (присущие исключительно программированию, не требовавшиеся ранее в математике) категории компонентов и зависимостей:  монады,  классы типов, полиморфные ветвления, аспекты и др. Их использование позволяет выражать бо́льшую функциональность в том же объёме кода, тем самым переводя программирование-по-крупному в более мелкий масштаб.

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


Фредерик Брукс и Ч.Э.Р. Хоар  делают акцент на необходимости обеспечения концептуальной целостности информационных систем вообще и языков программирования в частности, чтобы в каждой части системы использовались сходные синтаксические и семантические формы и не требовалось осваивать помимо собственно состава системы также и правила её идиоматического использования. Хоар предсказывал, что сложность Ады станет причиной катастроф. Алан Кэй отделяет языки, являющиеся «стилем во плоти» от прочих языков, являющихся «склеиванием возможностей». Грэг Нельсон и Эндрю Аппель выделяют в особую категорию «языки, наследованные от математики». Эти акценты призывают к использованию языков, воплощающих некое математическое исчисление, аккуратно адаптированное для того, чтобы быть более практичным языком для разработки реальных программ. Такие языки отличаются оригинальностью, и хотя это означает необходимость вручную реализовывать многие распространённые идиомы, доступные в более популярных языках в качестве примитивов языка, выразительность таких языков в целом может быть существенно выше. Лишь некоторые языки попадают под эту категорию, большинство же языков проектируются приоритетно исходя из возможности эффективной трансляции в машину Тьюринга. Многие языки опираются на общие теории, но при разработке они почти никогда не проверяются на безопасность совместного использования конкретных языковых элементов, являющихся частными приложениями этих теорий, что неизбежно приводит к несовместимости между реализациями языка. Эти проблемы либо игнорируются, либо начинают преподноситься как естественное явление, но в действительности их причиной является то, что язык не был подвергнут математическому анализу.

Примеры математически обоснованных языков и воплощаемых ими математических моделей: Agda, APL, Coq, Erlang, Forth, Haskell, Joy, Lisp, ML, Prolog, Mercury, Smalltalk, SQL, SGML, Unlambda, Регулярные выражения, Рефал.

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

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