Источник всех утверждений статьи взят из данной видео-конференции Левика. В ней язык живой, а не "доклад под бумажку". Не поленитесь послушать, чтобы заранее не писать глупости (про теорию заговора и аргессивного продвижения).
Независимо от того, сколько вложений компании-разработчики могут потратить на инструментарий и обучение своих разработчиков, «C++, по своей сути, не является безопасным языком», сказал Райан Левик (Ryan Levick) 'cloud developer advocate' из Microsoft на виртуальной конференции AllThingsOpen в прошлом месяце, объясняя в виртуальной беседе почему Microsoft постепенно переходит с C/C++ на Rust для создания своего инфраструктурного программного обеспечения. И вдохновляет других гигантов индустрии программного обеспечения задуматься о том же.
«Мы используем языки, которые не дают нам возможности защитить себя от подобных уязвимостей, потому, что они довольно стары и происходят из другой эпохи», — сказал он. «C++ не является безопасным для памяти языком и никто не притворялся бы, что это не так», — сказал он.
Фактически, Microsoft сочла C++ менее приемлемым или менее подходящим для написания критически важных программ. Отрасль крайне нуждается в переходе на производительный язык, безопасный в плане работы с памятью для низкоуровневой разработки систем. А лучший выбор на рынке сегодня — это Rust, сказал Левик.
C/C++ не могут быть исправлены
Сегодня C и C++ являются популярными языками для написания системного программного обеспечения. Они быстрые, только с ассемблером между кодом и самой машиной.
Но отрасль страдает от всех ошибок, связанных с памятью многие из которых представляют угрозу безопасности. Сейчас по словам Левика, 70% CVE созданных в Microsoft, являются проблемами безопасности памяти. «Нет никакой реальной тенденции, это соотношение не растёт и не убывает, оно просто остается неизменным», — сказал он. «Несмотря на огромные усилия с нашей стороны, чтобы решить эту проблему, это все еще кажется обычным делом».
С финансовой точки зрения этот переход имеет смысл, учитывая растущую стоимость исправления этого нескончаемого потока ошибок, связанных с памятью. Еще в 2004 году ошибка связанная с памятью, стоила отрасли около 250.000 долларов каждая и эта оценка Microsoft, вероятно, находится на более низком уровне, сказал Левик.
Конечно, есть ряд попыток повысить безопасность C++, но несмотря на то, что каждая из них эффективна, они не решают проблему полностью.
Один из подходов, который давно используется, состоит в том, чтобы больше обучать программистов написанию более безопасного кода. Но «нет никаких доказательств того, что комплексное обучение разработчиков на C и C++ действительно решит эту проблему любым существенным способом», — сказал Левик, сославшись на собственные наработки в Microsoft, предназначенные для внутреннего обучения разработчиков.
Статический анализ упоминается, как еще одно возможное решение. Но статический анализ требует слишком много времени: его необходимо подключить к системе сборки. «Так что есть большой стимул не использовать статический анализ» — сказал Левик. «Если он не включен по умолчанию, он не поможет».
То же самое касается проверок времени выполнения: «Невозможно или по крайней мере, чрезвычайно трудно понять, когда используются контракты проверки во время выполнения, а когда нет», — сказал он, добавив, что они также сопряжены с эксплуатационными накладными расходами.
Лучший шанс для отрасли
В ответ на проблему ошибок связанных с использованием памяти Центр реагирования Microsoft Security запустил инициативу «Microsoft's Safe Systems Programming Languages Effort | BDL198» (видео-интерью с Левиком, где он подтверждает свои утверждения изложенные в данной статье). В ней некоторая работа была посвящена укреплению C/C++. Язык Verona — новый язык программирования, создаваемый для безопасного низкоуровневого программирования, также был создан здесь. Но третий аспект стратегии этого проекта, в которую они верят больше всего, заключается в том, чтобы поддержать «наилучшие шансы отрасли для непосредственного решения этой проблемы».
«И мы считаем, что это Rust», — сказал он.
По производительности Rust находится на одном уровне с C/C++ и, возможно, даже немного быстрее. Rust повышает производительность труда разработчиков благодаря менеджеру управления пакетами, современным средам тестирования и тому подобному. И программисты за это любят Rust.
Но главная причина, по которой Microsoft так увлечена Rust, заключается в том, что это язык безопасный для памяти, с минимальными проверками во время выполнения. Rust выделяется в создании корректных программ. Корректность означает примерно то, что программа проверяется компилятором на небезопасные операции, что приводит к меньшему количеству ошибок во время выполнения. Ключевое слово 'unsafe' является опцией, но не используется по умолчанию. Небезопасный код в Rust почти всегда является подмножеством большего объема безопасного кода. Небезопасный 'unsafe' режим необходим для задач по выделению памяти, например для написания драйверов устройств. Но даже здесь небезопасные части заключены в безопасный API.
По словам Левика, эту способность безопасно программировать не следует воспринимать легкомысленно. Фактически, Rust может обеспечить более чем 10-кратное улучшение, что делает его полезным для инвестиций. Во многом это связано с тем, что практически весь код C/C++ нуждается в аудите на предмет небезопасного поведения, в то время как небезопасный код написанный на Rust, который необходимо будет проверить, является лишь небольшим подмножеством основной кодовой базы.
Хотя Microsoft оптимистично настроена на Rust, Левик признает, что разработчики ядра Microsoft не прекратят использовать C/C++ в ближайшее время.
«У нас в Microsoft много C++ и этот код никуда не денется» — сказал он. «Фактически, Microsoft продолжает писать на С++ и будет писать некоторое время».
Много инструментария построено на C/C ++. В частности, двоичные файлы Microsoft сейчас почти полностью собраны компилятором Microsoft Visual C++, который собирает двоичные файлы MSVC, тогда как Rust использует LLVM.
Возможно, самая большая проблема, тем не менее, является культурной. «Есть некоторые люди, которые хотят выполнить свою работу на языке, который они уже знают», — признался Левик.
Тем не менее, индустрия, похоже, движется в сторону Rust. Amazon Web Services использует его, в частности для развертывания безсерверной среды выполнения (Lambda serverless runtime), а также для некоторых частей EC2. Facebook начал использовать Rust как и Apple, Google, Dropbox и Cloudflare.
Объявлены даты All Things Open 2020: 20-22 октября.
Ресурс "The New Stack" не позволяет оставлять комментарии непосредственно на сайте. Мы приглашаем всех читателей, которые хотят обсудить историю или оставить комментарий, посетить нас в Twitter или Facebook. Мы также приветствуем ваши новостные советы и отзывы по электронной почте: **feedback@thenewstack.io.
Amazon Web Services является спонсором The New Stack.
amarao
Радоваться или бояться? А то Майкрософт, помнится, любила java и Интернет...
Mingun
А с джавой или интернетом разве что-то случилось?
NChechulin
С джавой случился C#. И, кажется, это даже неплохо.
SadOcean
Более того, несмотря на то, что случился C# и это очень хорошо, с джавой тоже все очень даже неплохо.
В этом смысле даже котлин воспринимается, как позитивная тенденция мира джавы.
DistortNeo
Именно благодаря C# с джавой всё хорошо. Всё дело в том, что Java очень неповоротлива в плане добавления нового функционала, а C# её расшевелил. Конкуренция всегда идёт на пользу обеим сторонам.
mrbaranovskyi
Так, а при чём здесь? Вы про джаву или JVM? Я не сведущ в джаве, но судя по релиз ноутам последних версий, язык, как-то не очень в последнее время развивается, сравнивая с шарпом. (Может я что-то пропустил). А вот Котлин прекрасен, здесь нечего добавить.
Hixon10
Вы что-то пропустили. В последнее время (после появления нового релизного цикла) java развивается очень быстро. Застой был до java 9.
PrinceKorwin
Так этот цикл и ускорение выпусков и пришло в Java благодаря наличию конкуренции в лице C#.
Hixon10
Наверное, не только C#, но и Kotlin.
mrbaranovskyi
Значит пропустил. Ну, это отлично. Здоровая конкуренция еще никому не вредила.
zagayevskiy
Если бессмысленное напихивание несвязных уродливых фичей называть развитием, то да…
Hixon10
Если records, sealed classes, project loom, начала паттерн матчинга — это бессмысленное напихивание несвязных уродливых фичей, то да…
Gorthauer87
В общем-то именно, что да, потому что они как бы сверху приделываются бантиком, поэтому они получаются слишком частными и хрупкими.
Вот например records. Пришлось аж целое новое ключевое слово вводить, в то время как в Rust это просто частный случай обычной структуры, на которую просто добавили некоторые дополнительные derive'ы.
zagayevskiy
Да, я именно это и имею в виду, спасибо.
Sealed классы без smart cast-ов будут выглядеть уродско. Новый instanceOf тут не замена, имхо, получается ужасный код.
Лямбды имеют уродский синтаксис, да ещё и _ запрещено. И похерили проверяемые исключения.
switch-expression сделали «чтобы был», добавив отдельный кусок синтаксиса для него.
Gorthauer87
Видимо языки мейнстримные нужно как и президентов, иногда менять
AnthonyMikh
> Менять
> Как президентов
Да ну, бред какой-то.
</sarcasm>
mrbaranovskyi
Читаю комментарий и не знаю, о шарпы Вы или о джаве)
Я не вижу проблемы в большом количестве сахара и не вижу большой проблемы в том, что код может стать короче. Разумеется, что иногда это ведёт к удару по производительности, но никто не заставляет использовать сахар. На том же шарпе, условно, можно писать как на си даже без вызовов (практически) к ГК. Главное, чтобы вы понимали, как этот сахар работает.
Более того. Если вы мего-зануда и не хотите чтобы кто-то использовал в вашем коде определённые вещи — уделите полчаса и напишите анализатор (имеется в виду выбросить ошибку или ворнинг).
Правда, для тех кто начинает сейчас только изучать шарп… это наверное катастрофа. Куча всего. Почему это можно сделать 10 разными способами?
BD9
Для любителей есть C++/CLI.
mrbaranovskyi
Верно. Не скажу, что это выглядит супер… но, порой приходилось юзать.
maxzh83
Java в последнее время начала догонять Котлин по сахару, насколько это возможно, разумеется
zagayevskiy
и близко не стоит. Котлин продуманный язык, в отличие от.
TheKnight
С Java случились несовместимые расширения в Microsoft JVM. Потом суд, развод и никакой любви.
С Интернетом случился Internet Explorer.
Siemargl
Кто сказал, что здесь история не повторится? NIH-синдром
P.S.Кроме MS JVM еще был J#.
Fenzales
blandger Автор
«Чукча — писатель, чукча не читатель». Ссылка «тухлая» — December 2, 2019
И проект «Verona» о котором вы нам по секрету поведали, то о нем Левик говорит в своем видео, которое указано. И там он говорит, что не знает статуса и планов этого эксперимента. Но Verona лежит на гитхаб-е — да.
Fenzales
spanasik
Они по-другому никогда и не делали. Всё своё.
webkumo
С java случился эпичный батл в суде, после чего Sun запретило MS делать свою JVM (которая отличалась от задаваемых Sun стандартов)… собственно тогда Sun вообще задалась вопросом более жёсткого контроля выпускаемых JVM. Впрочем я бы сказал что в данном случае это успех, а вот если бы Sun потупило ещё пару лет, то проблем в Java было бы столько же, сколько было в вебе с ie6 в эпоху chrome-ff-ie8. А так поимело проблем ограниченное количество java-девелоперов + некоторая часть кода внезапно превратилась в тыкву.
Sonnenwendekind
Если большая корпорация с кучей лишних денег сейчас использует технологию X — это ещё не значит, что завтра эту технологию не закопают, а команду промоутеров — не переведут на другие проекты, или что эту технологию вообще используют для реальных проектов, а не для того, чтобы насолить конкурентам.
Жалко наивных людей, которые «хотят быть как Microsoft» и ведутся на этот промоушен, а потом остаются без реального опыта в востребованных технологиях.
khim
Это вы про C#? Вот там уж точно всё, как вы описали: язык придуман в Microsoft, реализаций не то одна, не то полторы, на других платформах всё грустно…
Срочно все забываем C#!
xfaetas
C# был официально выпущен Microsoft в комплекте со средствами разработки и фреймворками. Что выпущено ими по Rust? Предлагаете считать заявление какого-то подметайла официальной позицией Microsoft? Тогда что за язык Verona? Я запутался: что мне выбирать для проекта следующего космического корабля: Rust или Verona?
Sonnenwendekind
Наверное пишете с компьютера под Singularity? Когда собираетесь переходить с IronRuby на Rust?