В мире насчитывают примерно 7 000 естественных языков и 9 000 языков программирования. Но, в то время как количество первых стабильно сокращается, число вторых продолжает уверенно расти.
Сегодня поговорим о универсальном языке программирования «для всего» и причинах появления новых ЯП. Обсудим несколько свежих разработок — например, Carbon, которому пророчат будущее преемника C++, язык для проектирования нейросетей Mojo, облачный язык программирования Wing.
Почему старые ЯП сохраняют популярность
Почему вообще некоторые языки не уходят в небытие? Тот же COBOL серьезно повлиял на культуру программирования в шестидесятых, но и в наше время остается востребованным. По оценкам аналитиков из Micro Focus, сегодня на этом языке выполняются более 800 млрд строк кода в продакшн системах, по сравнению с 200 млрд в 1997 году. Хотя все же стоит отметить, что язык получил множество обновлений, и нынешний COBOL уже не тот ЯП, что видел перфокарты.
Кроме того, есть еще и FORTRAN, созданный Джоном Бэкусом (IBM) в 1957 году. Это старейший язык программирования, который используется до сих пор.
Языки живут пока получают ключевые обновления, но порой такие инициативы встречают сопротивление со стороны сообщества. Достаточно вспомнить ситуацию с Python, которая вызвала продолжительные дискуссии относительно поддержки второй версии и миграции на третью. Тогда многие ИТ-специалисты выразили мнение, что история с Python — наглядный пример того, как не нужно управлять экосистемой. Однако несмотря на критику и ошибки, этот язык программирования остается одним из наиболее востребованных в мире.
Помимо неугасающей поддержки старых ЯП и последовательного развития устоявшихся решений, в индустрии формируется другой тренд. Появляются свежие языки, авторы которых актуализируют подходы к разработке.
Новые технологии и работа над ошибками
Одна из причин появления новых ЯП — необходимость переосмысления существующих подходов и исправление недостатков языков предыдущего поколения. Даже C++, будучи одним из наиболее распространенных ЯП, имеет определенные недостатки.
В то же время, процесс внесения изменений в C++ сильно затруднен: решения принимает специальная комиссия, структура которой направлена скорее на продвижение стандартов и интересов корпораций. Улучшить его, чтобы предоставить разработчикам тот опыт, который сегодня ожидают от ЯП, сложно отчасти потому, что C++ имеет десятилетия технического долга, накопленного при разработке языка.
Стать преемником C++ может Carbon. Его представил инженер Google Чендлер Каррут в 2022 году. Преемственность достигается за счет интероперабельности. Предполагается, что все библиотеки и кодовые базы можно будет «бесшовно» импортировать в двустороннем порядке. Кроме того, система построена на принципах открытого кода, авторы собираются своевременно делиться своими приоритетами с сообществом, а также быстро принимать решения об изменениях. Предполагается, что разработчики смогут без особых усилий перейти на новый язык. Carbon имеет современную систему дженериков, модульную организацию кода и простой синтаксис, который сокращает период адаптации при переходе на новое решение.
Пока что Carbon находится в экспериментальной стадии, поэтому желающие поближе познакомиться с языком могут столкнуться с определенными трудностями — отсутствие компилятора одна из них.
Но Carbon далеко не единственный проект, стремящийся исправить недостатки прошлых ЯП. Другим примером может быть язык V. Если раньше в фокусе была производительность процессов, то с развитием технологий большую важность обрела продуктивность разработчика. Главная особенность заключается в том, что V мотивирует писать простой и понятный код с минимальным уровнем абстракций. Например, он не содержит глобальных переменных, которые могут создавать неограниченное число зависимостей и усложнять программу.
Кроме того, как указывает автор, все переменные в языке по умолчанию являются неизменяемыми. Такой подход должен улучшить читаемость кода и предотвращать ошибки, вызванные случайной модификацией значений.
Язык для систем ИИ
Согласно опросу, проведенному McKinsey среди полутора тысяч компаний в апреле 2023 года, треть организаций использует модели машинного обучения хотя бы в одной сфере бизнеса. Более того, 40% собираются активно инвестировать в новую индустрию.
Поскольку технология стремительно развивается, возникла потребность в оптимальном языке программирования для разработки систем ИИ. Закрыть её взялись Крис Латтнер, один из ведущих разработчиков Swift, и Тим Дэвис, бывший сотрудник Google — они представили Mojo.
Разрабатывая системы ИИ на Python, инженеры, так или иначе, подключают модули, написанные на более производительных языках. Такой «билингвальный» подход усложняет отладку, обучение и развертывание приложений на базе искусственного интеллекта. Mojo использует MLIR (Multi-Level Intermediate Representation), фреймворк для разработки компиляторов, и значительно обходит Python в вычислительной скорости. Например, для выполнения алгоритма Мандельброта первому нужно 0,03 секунды, а второму — 17 минут.
Помимо этих преимуществ, у Mojo отмечают и другие достоинства: совместимость с библиотеками Python, встроенную автонастройку, которая самостоятельно подбирает значения для параметров исходя из имеющегося оборудования, а также функцию struct, которая упорядочивает атрибуты в памяти для использования в структурах данных.
Mojo может стать наиболее важным достижением в программировании за последнее время. Авторы поступили очень мудро, взяв за основу язык, ограничения и возможности которого спустя десятилетия понятны миллионам разработчиков.
От единого языка к большим данным
До сих пор не существует языка программирования, который мог бы одинаково успешно справляться со всеми задачами. Попытки его создать предпринимались еще в 1960 годах, когда IBM разработала PL/I. Он должен был объединить преимущества FORTRAN, COBOL и ALGOL.
Однако, на что сразу не обратили внимание, с новым языком разработчики должно были прекратить использовать FORTRAN, COBOL и ALGOL. Эту проблему усугублял тот факт, что три языка сами развивались в реальном времени. Языки постоянно эволюционировали, и объединить старые и новые функции в одном инструменте оказалось невыполнимой задачей.
Учитывая неудачи разработчиков универсальных языков, некоторые их коллеги идут в другом направлении, предлагая сообществу предметно-ориентированные ЯП, призванные решать узкие задачи. Например, в области работы с big data появился Logica.
Авторы Logica полагают, что принципы хорошего программирования подразумевают написание небольших фрагментов кода, которые можно называть, тестировать, организовывать в кластеры и использовать для формирования более крупных модулей. Так, в основу проекта положена математическая логика высказываний, которая упрощает сложные выражения. Язык совместим с библиотеками SQL и находится в открытом доступе.
Облачные языки
С развитием облачной индустрии также появляются ЯП, заточенные под разработку облачных сервисов. Один из таких языков — Wing. Он имеет две фазы выполнения: preflight и inflight. Так, на первом этапе генерируется инфраструктурная конфигурация, а на втором — код компилируется в JavaScript и выполняется в облаке в среде Node.js.
Еще одним примером узкоспециализированного языка для разработки в облаке может быть Ballerina. По мнению его автора, основная сложность заключается в интеграции множества API в одно приложение. Ballerina помогает решить эту проблему за счет высокого уровня абстракции, функции моделирования данных и возможности просматривать код в виде диаграмм.
Разумеется, узкоспециализированные языки программирования тоже сталкиваются с критикой. «Облачную» функциональность всегда можно реализовать в виде фреймворка, а не разрабатывать отдельный ЯП. Например, Shuttle — это облачная платформа для разработки приложений на Rust.
Кроме того, не все готовы осваивать новый язык для разработки нескольких корпоративных приложений. С точки зрения компании такой подход может быть финансово невыгодным. С другой стороны, языки вроде Wing куда лучше отражают специфику облака, учитывают контекст и упрощают разработку.
Заключение
Создание универсального языка программирования, который бы одинаково хорошо подходил для всех задач, считается практически невозможным из-за разнообразия требований, сценариев использования и специфики решаемых проблем.
Исходя из этого, языки программирования появляются в зависимости от конкретной задачи, целей и контекста. Один из ярких примеров настоящего времени — быстро развивающая область языков квантового программирования.
В сообществе нет единого мнения на тему того, остановится ли рост новых языков программирования. Хотя возможно мы будем наблюдать определенное замедление прогресса — все новые языки будут выглядеть просто как оптимизация старых ЯП.
Наконец, вполне возможно, что будущее программирования лежит именно в области узкоспециализированных языков. Вероятно, на рынке труда будет высокий спрос на специалистов с опытом разработки новых ЯП. Эти инженеры будут проектировать языки под конкретные отраслевые задачи, что приведет к стремительному росту индустрии.