Хотите дальше читать devby? 📝
Support us

Агентство национальной безопасности призвало разработчиков отказаться от С/С++

Специалисты АНБ США посоветовали разработчикам по возможности использовать при написании ПО языки программирования, которые более безопасны с точки зрения доступа к памяти. В агентстве считают, что вместо таких языков, как C или C++, следует отдавать предпочтение C#, Rust, Go, Java, Ruby или Swift.

53 комментария
Агентство национальной безопасности призвало разработчиков отказаться от С/С++

Специалисты АНБ США посоветовали разработчикам по возможности использовать при написании ПО языки программирования, которые более безопасны с точки зрения доступа к памяти. В агентстве считают, что вместо таких языков, как C или C++, следует отдавать предпочтение C#, Rust, Go, Java, Ruby или Swift.

В сообщении АНБ говорится, что злоумышленники могут использовать проблемы управления памятью, возникающие при применении языков C и C++ — например переполнение буфера или ошибки распределения памяти, — для получения несанкционированного доступа к целевым системам.

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

В сентябре отказаться от создания новых проектов на C/C++ ради «безопасности и надёжности» призвал технический директор Microsoft Azure Марк Руссинович.

HCL — самый быстрорастущий язык GitHub самый популярный — JavaScript. И другое из ежегодного репорта
HCL — самый быстрорастущий язык GitHub, самый популярный — JavaScript. И другое из ежегодного репорта
По теме
HCL — самый быстрорастущий язык GitHub, самый популярный — JavaScript. И другое из ежегодного репорта
TIOBE: из новых языков в топе удерживается только Rust
TIOBE: из новых языков в топе удерживается только Rust
По теме
TIOBE: из новых языков в топе удерживается только Rust
Помогаете devby = помогаете ИТ-комьюнити.

Засапортить сейчас.

Читайте также
12 онлайн-курсов по языку Java для новичков и профессионалов (август, 2023)
12 онлайн-курсов по языку Java для новичков и профессионалов (август, 2023)
12 онлайн-курсов по языку Java для новичков и профессионалов (август, 2023)
Java по-прежнему входит в список самых популярных языков программирования. Вместе с Digitaldefynd мы составили список курсов по Java, которые подойдут как новичкам, так и людям с опытом программирования, чтобы освоить этот востребованный язык.
8 актуальных и интересных курсов по Rust (июнь 2023) + бонус от GitHub
8 актуальных и интересных курсов по Rust (июнь 2023) + бонус от GitHub
8 актуальных и интересных курсов по Rust (июнь 2023) + бонус от GitHub
Рассмотрели преимущества и особенности языка Rust, а также сделали подборку курсов по нему, которые будут интересны как новичкам, так и опытным программистам.
7 комментариев
10 курсов по C++ (июнь 2023)
10 курсов по C++ (июнь 2023)
10 курсов по C++ (июнь 2023)
С++, несмотря на свой солидный возраст, остается одним из основных языков программирования, который применется очень широко: от разработки ПО до создания игр. В сети много ресурсов, которые помогут освоить этот язык. Советуем обратить внимаение на подборку команды Digitaldefynd, котрую мы дополнили. В ней как платные, так и бесплатные ресурсы для людей с разным уровнем подготовки и знаний С++.
1 комментарий
10 курсов по SQL для лучшего понимания работы с большими данными (май, 2023)
10 курсов по SQL для лучшего понимания работы с большими данными (май, 2023)
10 курсов по SQL для лучшего понимания работы с большими данными (май, 2023)
Собрали 10 платных и бесплатных онлайн-курсов для изучения SQL. Программы рассчитаны на слушателей, которые только начинают или продолжают знакомство с языком.

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

alekseyrr
alekseyrr Дегустатор смузи в ООО "Смузи-много-не-бывает"
6

Ruby? Они серьезно? Дайте ему уже умереть :)
Откопали г мамонта :)

kakoy-to-tam-dev
kakoy-to-tam-dev
-3

видимо о количестве заказов из Запада вы не в курсе) это радует

alekseyrr
alekseyrr Дегустатор смузи в ООО "Смузи-много-не-бывает"
4

Пишу не на одном языке, но конкретно руби какой-то корявый, если так можно выразиться :)
А легаси, да есть. Но это не значит, что нужно тянуть в новые проекты. Я пробовал и мне не понравилось :)

kakoy-to-tam-dev
kakoy-to-tam-dev
-1

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

Пользователь отредактировал комментарий 13 ноября 2022, 23:48

alekseyrr
alekseyrr Дегустатор смузи в ООО "Смузи-много-не-бывает"
5

По всем рейтингам руби умирает: количество репозитариев, популярность, «любимость» разработчиками и тд. По любимости скриптовый руби в конце, что говорит о его косяках.
Пытались сделать модный язык, а получился почти Perl 2 :)

fallinmyhand
fallinmyhand Патриот в Мерси Софтваре
-1

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

cray
cray
2

LOL! Чот я вот не помню когда последний раз на плюсах врукопашную в буферах ковфырялся или память выделял, всё завёрнуто, всё на автомате.

wistful
wistful
-2

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

Александр Черноокий
Александр Черноокий Rocket Science в Noosphere Ventures
1

язык с++ имеет два плюса, по сравненю с остальными языками программирования, и он все в названии

wistful
wistful
-2

Имхо как язык, т.е. синтаксически С++ это полное убожество, впихнуть в Си с десяток костылей поверх и назвать это языком это нужно ещё постараться. Единственная причина его успеха это популярность Си который пресеклась с популярностью ООП в момент появления С++, что собственно и было причиной его задумки.
Но как высокопроизводительная платформа в которую вложено очень много сил это безусловно лидер.
К сожалению сегодня альтернатив нет. Rust не вижу причин что бы взлетел, потому что из за наличия трэйтов в языке и стремления программистов к оверинженерингу все что полявляется на этом языке - тихий ужас с которым может работать только автор уверовавший в гениатность своего перетипизированного кода. D там же, слишком переусложненный. Хотелось бы что-то вроде низкоуровневого Go без GC, лучше бы с автоматической проброской ошибок что бы без ужаса в виде if err != nil..
Вообще статья странная где С/С++ а где языки со сборщиком мусора, сегодня это разные цели, суть первых уменьшение потребления памяти, в первую очередь, и как в таких случая можно заменить С/С++ не понятно.)

Пользователь отредактировал комментарий 14 ноября 2022, 05:38

johnlepikhin
johnlepikhin
-3

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

Не очень понимаю как вы себе представляете язык с ручным управлением памяти и одновременно с исключениями. А память кто будет освобождать, когда исключение выкинуло нас в стеке вниз на 10 функций?
Интересно, что вы называете го низкоуровневым, хотя он проектировался наоборот как максимально простой высокоуровневый язык для студентов, который позволит им гонять джсоны без понимания как работает память, треды, кооперативная многозадачность, системные вызовы и т.д.
Также интересно, что вы плюетесь от трейтов раста, но при этом почему-то ничего не сказали про интерфейсы в го или плюсах. Мне кажется, рядом же называя код на расте перетипизированным, вы путатете унаследованную из ocaml/haskell алгебру типов в трейтами. Но даже здесь спешу вас разочаровать: чем дальше будет двигаться мейнстрим-индустрия, тем активнее будут использоваться языки с развитой системой типов, и в первую очередь - с алгеброй типов. И чем точнее типами описана программа, тем доказано меньше в ней потенциальных багов. Вплоть до формально верифицированных программ в каких-нибудь coq/idris, где верификация работает как раз на тотальном знании компилятора о теореме, описанной через систему типов. Короче говоря, с типами придется смириться :)

В статье не только языки со сборщиком мусора, есть и сравнимые с плюсами по методу работы с памятью.

Nick McLaughlin
Nick McLaughlin
0

прежде чем писать много букв нужно почитать букварь джонлепихин

Пользователь отредактировал комментарий 14 ноября 2022, 08:55

johnlepikhin
johnlepikhin
-3

слив засчитан.

wistful
wistful
0

Ну только если ваш самослив в некомпетентности по базовым понятиям.)

johnlepikhin
johnlepikhin
0

Жду конструктива.

Например, как вы себе представляете низкоуровневый язык без gc, очевидно без плюсовых умных указателей (и без растового доказательства безопасности памяти), но с исключениями? Вы осознаёте какой неуправляемый адище с malloc/free ждет программиста, когда исключение в любой вызванной функции создаёт в нашей пусть даже синхронной функции весь букет UB? Никакие defer не спасут.

В общем, расскажите своё видение, может я правда чего-то не понимаю.

wistful
wistful
0

очевидно без плюсовых умных указателей (и без растового доказательства безопасности памяти..

Почему очевидно без этого, у вас фантазия разыгралась или это по вашему GC?)

Вы осознаёте какой неуправляемый адище с malloc/free ...

Точто такой же как поставить return до очищения памяти. По этому в том числе, и придумали сборщик мусора. Что бы не забывали очищать память.

Пользователь отредактировал комментарий 15 ноября 2022, 16:06

johnlepikhin
johnlepikhin
0

Вас не смущает, что shared_ptr в плюсах – это примитивный сборщик мусора? Только в большинстве языков, где GC официально заявлен, free() вызывается не сразу при исчезновении последней ссылки на объект, а для оптимизации периодически и массово, что позволяет бороться в т.ч. и с фрагментацией памяти.

Если хотите "что-то вроде низкоуровневого Go без GC", то давайте заодно хотите и без shared_ptr.

wistful
wistful
0

Ну мы уже убедились что вы специалист по выдумывают собственных смыслов четко определенным понятиям. У вас и байт код интерпретируется и умный указатель это примитивный GC.))
Вы самостоятельно ставите авторские границы определений понятий, а потом я должен что-то вам доказать используя их?) Можете дальше утверждать что C++ это язык со встроенным сборщиком мусора. Я все же буду исходить из общепринятых определений, в который умный указатель и др. подобные техники не являются сборщиком мусора.

johnlepikhin
johnlepikhin
0

А, ну да, язык с трейсингом/rc всех значений в куче - это язык без GC. Ага. Передайте привет фрагментированной памяти в своем языке мечты! Потом не забудьте дописать в него полновесные gc cycle, иначе сильно быстрее php работать не получится, увы.

Про байткод вы конечно прекрасно написали. А мужики-то не знали.

wistful
wistful
0

Вы фантазер или читать не умеете не пойму.) Где у меня написано про трэйсинг?
Возвращение кода ошибки в Си/Go это типичная операция, которая есть в каждом коде. Но поскольку вы очевидно не программировали на Си/Go и т.п, об этом не знаете. Автоматизация возврата ошибки никак фундаментально не меняет язык, это все уже сейчас реализовано на макросах и используется в многих проектах, но жутко не удобно по этому хотелось бы иметь удобный механиз в дизайне языка. LOL.)
Как говориться не знаешь, не понимаешь, лучше тихо и молча читать теорию и практиковаться.))

johnlepikhin
johnlepikhin
0

Трейсинг - одна из техник GC. Рассуждение про него идёт в контексте GC, если вы не обратили внимание.

Никто не мешает нахерачить поддержку исключений хоть в голый цэ. Не задумывались почему этого никто до сих пор не сделал за 50 лет? Вот подумайте. Подсказка: посмотрите исходник ядра линукса, найдите там распространенный паттерн с goto exit_bla_bla_bla, где по метке free() и return. Подумайте.

wistful
wistful
0

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

johnlepikhin
johnlepikhin
0

Слив засчитан.

alekseyrr
alekseyrr Дегустатор смузи в ООО "Смузи-много-не-бывает"
3

И чем точнее типами описана программа, тем доказано меньше в ней потенциальных багов.

Спасибо кэп! :)

alekseyrr
alekseyrr Дегустатор смузи в ООО "Смузи-много-не-бывает"
3

Чем точнее описаны типы, тем меньше багов добавят разработчики :)

johnlepikhin
johnlepikhin
-2

Типа того. Только люди, рассуждающие в рамках классических интов, строчек и классов с интерфейсами и темплейтами, не осознают глубину этой кроличьей норы.

wistful
wistful
-3

А на практике тем временем все обстоит по другому, чем больше разботчик пишет типов тем больше багов приносит в код, ну и как сложно не добавить - делает код нечитаемым.
Гладко было на бумаге, да забыли про овраги.)

johnlepikhin
johnlepikhin
-1

Вы сейчас про какую систему типов? В моем мире противоположный опыт. Ocaml за деньги с 2007, хаскель для души с 2011(?), раст за деньги с 2019. Во всех этих языках ADT, и везде активная эксплуатация типов упрощала жизнь, особенно на больших проектах.

Nick McLaughlin
Nick McLaughlin
2

У С++ нет конкурентов сегодня и видимо еще долго не появится.

alekseyrr
alekseyrr Дегустатор смузи в ООО "Смузи-много-не-бывает"
1

Rust, если не заниматься на нем кододро#ерством :)
Хотя, как писали выше, трейты выглядят как зло, но GC они красиво выпилили :) Но нужно немного привыкнуть.

wistful
wistful
0

Проблема раста, в том что сторонними библиотеками невозможно пользоваться. Элементарная бибилиотека в которой должно быть пару функций на Rust будет из 10-100 трэйтов, мне проще взять С/С++ либу и проверить её 10 раз и написать тесты чем разбираться с очередным шедевром на Rust.
Все остальное в языке более менне, хотя работа с памятию через механиз владения вызывает тоже сомнения потому что с ней тоже очень много гемороя, хотя есть более простые решения в виде умных указателей.

deeaitch
deeaitch
0

Это тот у которого ни инфраструктуры, ни инструментов. И на котором за столько его лет так до сих пор ничего толкового и не написали. А то что есть от двух землекопов для трёх лесорубов и версии пре-пре-пре-пре-альфа.

Спасибо, ржавейте сами.

alekseyrr
alekseyrr Дегустатор смузи в ООО "Смузи-много-не-бывает"
3

Хотелось бы что-то вроде низкоуровневого Go без GC

но с классами! :)

wistful
wistful
-1

Так там и так есть все что нужно.)) Чем вам структуры не устраивают?)

fallinmyhand
fallinmyhand Патриот в Мерси Софтваре
0

уверен что компилируются они в тот же c++, так что можно и на c++ все писать нормально)

wistful
wistful
-2

Хорошо бы кроме уверенности ещё иметь минимально знаний. )
Уверен что вы не программист а какой то левый выхухоль, ну не может человек который освоил ЯП с такой периодичностью писать чушь. Должна быть хотя бы минимально развита логика. Может вам на онлайнер вернуться и не засорять этот форум своим "мнением"?

Пользователь отредактировал комментарий 14 ноября 2022, 14:35

fallinmyhand
fallinmyhand Патриот в Мерси Софтваре
-2

а с чего взял что ты обладаешь большими знаниями чем я?)

wistful
wistful
-1

Просто прочитал ваши комментари, из которого следуе что вы обладаете околонулевым уровенем зананий. Пример. - "уверен что компилируются они в тот же c++."
Во первых, элементарно и по определению не может ЯП компилироваться в другой язык. Во вторых в тех ЯП которые мы обсуждаем так не происходит. Применять слова не задумываясь на их смыслом это первый признак "большого" обьема зананий.
На этом пожалуй уроки по информатике я вам больше давать не буду, есть дела поважнее чем подтягивать те кто в университете не учился.))

Пользователь отредактировал комментарий 14 ноября 2022, 21:18

fallinmyhand
fallinmyhand Патриот в Мерси Софтваре
-1

а вот тут ты не прав и сам показал себя что ты полный ноль:

Компилятор это программа, которая переводит из более высокого языка в более низкий. Так что наверняка переводят в C или C++, врятли там будет Pascal или Basic

wistful
wistful
-1

Подловили себя вы и очередной раз, так и не удосужившись поискать и прочитать суть термина, компилятор и отличие от термина транслятор. Все приходится вас учить элементарному.)

Пользователь отредактировал комментарий 14 ноября 2022, 23:55

fallinmyhand
fallinmyhand Патриот в Мерси Софтваре
-1

о5, профакапился и пытаешься выйти.

Транслятор просто переводит на одинаковом уровне языки, например Java -> C#

Компилятор это программа, которая переводит из более высокого языка в более низкий

fallinmyhand
fallinmyhand Патриот в Мерси Софтваре
-1

а вот Typescript -> Javascript это уже компилятор

johnlepikhin
johnlepikhin
0

Всё ещё круче :)

Транслятор - общее название для любых программ, которые что-то делают с исходным кодом.

Компилятор - вариант транслятора, который компилирует исходник в машинный код или байткод.

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

И например интерпретатор - это тоже вариант транслятора, который исполняет исходный код as is. В свою очередь, он может сначала распарсить в AST и ходить уже по асту (большинство современных интерпретируемых языков, которые не компилят в байткод), либо парсить и исполнять построчно (большинство шелл-интерпретаторов).

wistful
wistful
-1

Т.е. вы fallinmyhand настолько дубовый что продолжаете утвержать что термин компилятор, означает не то что вы пишете, вместо того что бы прочитать определение?)
Нет, Typescript в Javascript это не компилятор.)

johnlepikhin
johnlepikhin
0

Никто не компилирует в c++, это не имеет практического смысла.

java компилируется в байткод jvm и затем в jre выполняется. Как есть, инструкция в инструкцию.

ruby последние ндцать лет компилируется в байткод их виртуальной машины, и ей исполняется.

swift компилируется в llvm байткод, который затем llvm-компилятором компилируется в машинный код.

go имеет свой компилятор, но дополнительно имеет экспериментальные фронтенды gcc и llvm.

rust аналогично swift, но также экспериментально поддерживает фронтенд gcc.

fallinmyhand
fallinmyhand Патриот в Мерси Софтваре
0

ну Java и тому подобные, компилируются в байткод для кроссплатформенности, а потом в интерпретаторе выполняются - вот тут и теряют в производительности по сравнению с c++

wistful
wistful
-3

У вас в голове полная каша из понятий. Нет байт код не интерпретируется, по определению. ))

johnlepikhin
johnlepikhin
0

Байткод интерпретируется (исполняется) виртуальной машиной. Последовательно, от инструкции к инструкции. Он всё правильно написал.

wistful
wistful
-3

Ну вам тогда советую все же выучить базовые термины а затем уже пытаться что то писать публично по теме)). Для простоты скину ссылку на вики как самый простой и понятный источник.
In computer science, an interpreter is a computer program that directly executes instructions written in a programming or scripting language, without requiring them previously to have been compiled into a machine language program. https://en.wikipedia.org/wiki/Interpreter_(computing).
Байт код это машинный код, хоть и для виртуальной машины. Он то что так же как машинный, выполняется от инструкции к инстукии. А у понятия интерпритатор есть строгое определение. Надеюсь понятно или дальше будете доказывать что определение не правильное?)
Ну собственно что можно обсуждать с людьми которые жонглируют терминами как хотят, при этом раздувая щеки экспертностью.))

Пользователь отредактировал комментарий 15 ноября 2022, 17:48

johnlepikhin
johnlepikhin
-1

Байткод НЕ МАШИННЫЙ код.

МАШИННЫЙ код - это mov ax bx, add 0x34, jmp и все прочие инструкции, знакомые ПРОЦЕССОРУ. Машинный код как есть отдается процессору, без промежуточной обработки.

БАЙТКОД - это incr(i), goto(1000) и что угодно ещё, что придумается инженеру птичьего "ассемблера" для своей виртуальной машины. Эти инструкции выполняются ИНТЕРПРЕТАТОРОМ байткода, либо в некоторых случаях компилируются в МАШИННЫЙ код JIT-компилятором.

Машинным кодом байткод становится с физическим изобретением процессора, способного исполнять инструкции этого байткода. Как например в 1970-80-х появлялись лисп-машины для исполнения байткода, скомпилированного из лиспа.

Грамотей, блин.

wistful
wistful
0

Так вы все же утверждаете что общеопределнное в computer science, понятие термина интерпретации не правильное - executes instructions written in a programming or scripting language, а то что вы себе придумали правильное я так понимаю?)

johnlepikhin
johnlepikhin
0

Почитайте хоть статью на которую сами ссылаетесь. Хоть до 4-й строчки.

deeaitch
deeaitch
2

Из альтернатив не предложили реального ничего. Что собственно и ожидалось. Как бы не кусалось но аналогов C и C++ нет. Всё названное просто ниочём как по возможностям так и по инфраструктуре.

Лучше бы посоветовали правильных книжек и читать стандарты. В современном C++ всех этих проблем уже нет сто лет в обед. Надо только стандарт открыть и убедиться.