Хабрахабр

[Перевод — recovery mode ] Какой язык — D, Go или Rust имеет лучшие перспективы заменить C и почему?

Несмотря на мой статус и очевидную предвзятость как одного из создателей D, я постараюсь отвечать откровенно; Я следовал путям Go и Rust, и я абсолютно точно знаю, где стирают грязное белье в D. Я поощряю людей на аналогичных позициях в сообществах Rust и Go чтобы и они делились своим мнением. Так вот.

Должен ли он быть заменен вместе с С, или же он один из кандидатов на замещение С, но в любом случае С++ это ключевой элемент уравнения. Для начала, где то в вопросе должен фигурировать и C++. Учитывая возраст С++, я в дальнейшем полагаю в этом вопросе что С++ вместе с С является целью для замены.
Каждый язык имеет ряд фундаментальных преимуществ (я называю их «преимуществом на порядок», далее «10х-бонус», поскольку они квалифицируются в высшую лигу относительно типичных подходов), и ряд проблем. Это ближайший язык к С и очевидный шаг вперед. Будущее этих языков и их успех в вытеснении С, зависит от того, как они стратегически задействуют свои 10х-бонусы и как преодолеют свои проблемы.

Позвольте мне для начала разделаться с D

Очевидно это демонстрация моего собственного дома, так что я знаю, куда надо ходить, чтобы подобающим образом показать только то, что нужно и скрыть грязные закутки. Я также могу рассказать про D больше, чем про оставшуюся пару, по той простой причине, что я знаю его гораздо лучше. Говоря с грубой прямолинейностью, основными проблемами D являются:

  • Плохой прием публикой после многих лет номинального существования. Долгожители комьюнити могут раскритиковать такое заявление (D в его текущей форме относительно молод, популярность растет, итд). Но такое отношение сохраняется и влияет на дальнейший рост популярности и это факт. В итоге менеджеры и инженеры скептически относятся к популяризации языка, который был неудачником так долго. Более того, время работает против D до тех пор, пока не будет очевидного прироста популярности.
  • Печальная история в связи D со сборкой мусора (GC). GC великое изобретение, но решение его использовать в D мгновенно изолировало его от основной целевой аудитории – программистов на С и С++. Для них линия партии выглядела так «Не хотите GC? Не проблема! Можете также использовать D с RAII или с ручным управлением!». Несмотря на то, что в целом это верно, такой подход был практически бесполезным из-за отсутствия поддержки такого стандартной библиотекой, что означало для предполагаемого пользователя оказаться раздетым до трусов и начинать с создания базовой инфраструктуры. Даже для тех, кто не возражал против GC, качество его реализации было довольно невзрачным. В общем можно сказать, что D получил все недостатки GC, но не воспользовался преимуществами.
  • Исторические сложившееся отсутствие визионеров. Лишенный корпоративной поддержки, D вело вперед сообщество, в котором проще найти проницательного инженера, нежели проектного управленца или харизматичного лидера. В течение долгого времени успешность попыток D в продвижении и саморекламе имела отрицательный результат. Первый документ о планировании датирован 1 января 2015, а следующая итерация (Vision/2015H2 — D Wiki) вышла на четыре месяца позже запланированного, что является прекрасным примером самоиронии с точки зрения планирования

Также были конечно, и другие неприятности, но они либо являлись следствием вышеперечисленных, либо имели гораздо меньшие последствия.

10х-бонусы для D я полагаю следующими (еще раз, когда я говорю в 10 раз, это разговорное «лучше на порядок»):

  • В 10х компиляция быстрее чем С++ для сравнимого кода. Эту дыру нельзя принципиально закрыть в С++, и запредельно сложно перепрыгнуть в любых других языках. (Go компилируется чуть быстрее D, но результирующий код медленнее) Опыт использования системного языка, который так быстро компилирует в быстрый код, является преобразующим старые практики и очень перспективным. В комбинации с мощностью абстракций в D это, по сути, делает D хорошим выбором для написания высокооптимизированного кода по той простой причине, что экспериментирование обходится дешево.
  • В 10х быстрее скриптовых языков со сравнимыми удобствами. D хорошо подходит для удобного скриптования повседневных задач. Цикл компиляции/запуска остается таким же быстрым, а выгода в скорости грандиозна. Также нет проблемы «уперлись в пределы» — если скрипт становится большим, в D всегда хватает языковых средств и модульности. Есть, конечно, и ложка дегтя, например в Python’е гораздо больше готовых библиотек. Но 10х-бонус тут фундаментален – системные языки не имеют столько синтаксического сахара, а скриптовые безнадежно отстают в скорости.
  • В 10х проще интегрироваться с С и С++, чем любой другой язык. D использует такие же структуры в памяти, что и С и С++; и строит свои поверх них, но чтение нижележащих слоев остается бесплатным в плане скорости. Стандартная библиотека С полностью доступна без всяких штрафов — ни в плане скорости, ни в синтаксическом, и хотя еще нужны некоторые доработки для аналогичной простоты в плане библиотеки С++, многие С библиотеки уже доступны (https://github.com/D-Programming...). Можно заявить буквально, что ни один другой язык не сможет достигнуть такого уровня интеграции.
  • В 10х раз лучше любого другого системного языка в дженериках и метапрограмировании. В D статическая интроспекция, вычисления на этапе компиляции (CTFE) и основанная на mixin (примесях) генерация кода составляют коктейль Молотова, который весьма затруднительно корректно смешать в других языках, ни в новых ни в выживших; в этой игре Go настолько не в себе, что даже не сечет фишку; C++17 безнадежно заблудился в темном лесу; а Rust только пытается лепетать.

Вперед к Go

Я должен подчеркнуть, что это исключительно мое мнение, тем не менее стоящее вашего внимания. Проблемы Go в следующем:

  • Фундаментальное замедление по причине косвенных вызовов и сборщика мусора (GC). Практически ни одно существенное приложение на Go нельзя написать, не прибегая к косвенным вызовам и GC, которые являются центровой функциональностью. Это основные препятствия для производительности ядра Go. Ответ команды Go был в основном тактическим – например улучшить работу GC. Однако, маловероятно победить в челлендже по замене С тактически.
  • Политика. Линия партии в Go непропорционально сильна и жестка по ряду вопросов, как маленьких, так и больших. Один из примеров больших проблем — подход к дженерикам был настолько бессмысленным и беспощадным, что сделал дженерики словом на букву «Г»; вся тема превратилась в кровавые слезы, препятствуя любым попыткам наладить конструктивный диалог. Я думаю, что политизация технических вопросов в долгосрочной перспективе является крайне пагубной моделью, и я надеюсь, что Go найдет способ исправить это.
  • Простота хуже воровства. Пойти очень просто (игра слов. Go — ходить, прим.перев) – есть даже анекдоты по этому поводу. Однако со временем это становится проблематичным; Код на Go безнадежно пешеходный — Go-кодеры ловят себя на том, что снова и снова пишут одни и те же вещи с точки зрения муравья, потому что Go не может абстрагировать даже самые простые понятия или алгоритмы. Понятия, которые еще не реализованы библиотеками интеграции, сложно реализовать. Наблюдается негативная реакция со стороны программистов, которые использовали Go для одного проекта и больше не хотят использовать его снова. Было бы неплохо, если бы Go сделал жизнь лучше для постоянных клиентов.

Go 10х-бонусы в моем восприятии следующие:

  • 10x в скилле Стратегия. После краткого периода, когда Go позиционировался как системный язык, было решено позиционировать его для сетевых сервисов. Это было великолепным маркетинговым шагом, который использовал сильные стороны команды Go (одни из лучших инженеров в мире по сетевым сервисам). Это очень горячий рынок и Go просто стал глотком свежего воздуха для мира, в котором прежде доминировала Java EE со своим бюрократизмом и медленные скриптовые языки. Теперь Go – основной игрок в этой области и его будет трудно подвинуть.
  • 10x в скилле Инженерия. Go за собой имеет крепкую команду инженеров, и это основной фактор влияния на качество языка и в частности на сетевую библиотеку и тулсет. До сих пор хороший инжиниринг вполне компенсировал слабосильность языка.
  • 10x в скилле Брэндинг. Многие из нас готовы признать, что главный мотиватор использования Go – это связи с Google. Это придает ему авторитет профессионализма, качества и стабильности. Конечно, брэнд это не все, но это уже делает Go достойным языком; он не должен быть фантастически хорош. Брэнд сделает остальное.

Последний, но не менее важный, Rust

Позвольте мне снова напомнить, что это только мое мнение. Я думаю, что Rust сталкивается с некоторыми интересными проблемами:

  • Дисгармоничная личность. После чтения некоторого количества кода на Rust возникают анекдоты типа «Чувак пропускал дни кача ног», иллюстрируемых комиксами с людьми с перекачанным торсом но ногами-спичками (прим.перев. По-русски, «Колосс на глиняных ногах», но неточно) Rust ставит на первое место точное и безопасное управление памятью и представляет это центром мира. Внезапно, это редко является проблемной областью, что приводит к тому, что большая доля планирования и кодирования уделяется, по сути, канцелярской работе (которую языки с GC автоматизируют не глядя). Безопасное, предопределенное переиспользование памяти — серьезная задача, но не единственная, или как минимум не самая важная в программе. В итоге Rust тратит непропорциональное количество ресурсов языкового дизайна только на это. Было бы интересно посмотреть, насколько Rust разбухнет ради других аспектов языка; единственный вариант это расширение языка, но вопрос в том, насколько абстракции смогут помочь с неприятной необходимостью контролировать ресурсы на всех уровнях.
  • Чуждый синтаксис. Синтаксис Rust’а отличный [от всех], но нет очевидного преимущества в такой экзотичности. Это раздражает людей, пришедших из языков семейства Algol’а, которым приходится иметь дело еще и с кардинально другим синтаксисом, помимо необходимости ручного ведения всей бухгалтерии с ресурсами.

Rust’овские 10х-бонусы такие:

  • В 10х раз лучшие теоретики. Из этой тройки, только у Rust есть теоретики мирового уровня в разработке языков программирования в обойме. Это можно заметить по точности технического описания языка и в глубине технического подхода.
  • В 10х раз больше безопасности, чем в других системных языках. Безусловно это должно быть здесь, мы можем только подискутировать о стоимости такого подхода.
  • В 10х раз лучший PR (пиар, реклама, прим.пер.) Был довольно долгий период, когда Rust был у сообщества любимицей, которая не могла ошибаться: для любой проблемы Rust уже либо имел решение, либо должен был получить его с выходом 1.0. Реальность выхода 1.0 прервала этот медовый месяц и отметилась (в моих измерениях и ожиданиях) резким снижением общего интереса, хотя эти факторы имеют тенденцию к пролонгации. Плюс, в конечном итоге, Rust — это приличный язык с реальными достижениями, и он хорошо спозиционирован, чтобы превратить этот затяжной хайп в стабильный рынок.

Вкратце

Способен ли один из этих языков либо постепенно заменить Си, Си++, либо оба языка в существующих программных системах, и станут ли эти языки приоритетными для проектов, которые сегодня по умолчанию выбирают Си или Си++ — все зависит от способности этих языков использовать свои преимущества и находить творческие решения своих соответствующих проблем.

В Рунете же перевода, да и собственно полноценного обсуждения не нашлось. Прим.переводчика.
Извините за старую статью, просто она мне попалась при завершении своей серии о надежном программировании, и показалась достаточно забавной для цитирования.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть