Не Линус, а Майкрософт, Гугл, Амазон, Фейсбук в своих отчётах об уязвимостях. Точнее, за них сказали их финансовые и репутационные потери. 80% всех уязвимостей это код на Си или Плюсах, приводящий к неопределённому поведению.
По оценке Амазон, всего один такой баг приводит к убытку компании в 300 тысяч долларов и огромным репутационным потерям.
И что же произошло, когда они начали отказываться от плюсов в пользу адекватных безопасных языков? О, чудо, всего за 5 лет с 80% количество уязвимостей упало до 20%!
Даже NSA банит Си и С++ в проектах критической инфраструктуры и настоятельно рекомендует использовать современные языки. Если агентство национальной безопасности США считает, что эти языки являются угрозой национальной безопасности самой защищённой страны мира, а вы говорите, что вам норм, потому что вы пишете всю жизнь, то я уж не знаю, какие вам доводы нужны.
Всю жизнь на плюсах пишу, никаких проблем.
Можно хоть 50 лет на нём писать. Но вот на реальных задачах ещё нужно использовать его. А это адская боль.
Не поверите, я тоже писал на плюсах около 15 лет. Пока не понял, что куда-то не туда телега катится. Когда попробовал другие языки, осознал, что 80% времени я борюсь с языком, а не с задачей.
Попробовав, например, о боже, мерзотнейший Rust около 7 лет назад, я ни разу, буквально ни разу не запустил отладчик. Я даже не знаю, есть ли такой вообще, потому что он тупо не нужен. Всё работает так, как ты написал, а не как решил компилятор. Если это ошибка, то это железно ошибка и твой код даже не соберётся, компилятор спокойно объяснит, где она и, внезапно, даже даст пример того, как её решить!. А в плюсах такой мусор можно успешно собрать, который может покрашиться через годы работы программы! Для чего вообще нужен компилятор тогда, если не помогать программисту?
В плюсах же по 50% времени проводишь в отладчике, пытаясь понять что-то оно там сделало за тебя.
Зато в плюсах есть STL
В который одну фичу могут добавлять 20 лет, добавить, через несколько лет признать неудачной и объявить устаревшей? Да, только в С++ такое есть, вы правы, классная фишка языка, интересная.
Но есть одна проблема: в любом нормальном языке есть стандартная библиотека. Когда я в другом языке могу просто сделать пулл-риквест в гитхаб с какой-то интересной всем нужной фичей и её примут буквально за несколько недель, зачем мне тогда такой STL, где сидят богоподобные седобородые старцы и решают по 20 лет какая фича мне нужна?
А в чистом Си придётся самому писать всё это
Нахрена? Чтобы просто изобрести колесо? На чистом Си такое количество библиотек уже написано под разные нужды, что я бы с большим интересом услышал от вас примеры, когда под какую-то задачу не написано хотя бы 3-5 различных библиотек.
Я не топлю за Си, это такое же убожество как и плюсы, просто с чуть менее мощным футганом. Единственная вещь, которая от Си осталась полезной и всеми используется, это его ABI. Эффективный, лаконичный, до сих пор используется практически всеми языками для FFI. Задумка Си изначально была — сделать переносимый кроссплатформенный ассемблер. Эту задачу язык выполнил, но писать всё на ассемблере, который компилировали под PDP, сейчас — это дурость.
Сейчас плюсы есть от Microsoft, clang, gcc
Не нужно путать реализацию со стандартом. Комитет стандартизации пишет плюсы, а не майкрософты. MS читают спеку, охреневают, и годами пытаются закодить то, что придумали великие умы с деменцией.
gcc? Серьёзно? Сами его мейнтейнеры не раз признавались, что не осталось ни одного человека сейчас, кто бы полностью понимал код этого проекта. Он имеет место быть только потому, что разрабатывается уже 40 лет и аккумулировал очень много всего. Но по качеству кода самого проекта он невероятно отвратительный и нечитаемый. Столько хаков и костылей, сколько у него в коде, нет больше ни в одном проекте.
Было, лет 20 назад. Ничего личного, но по моему мнению, если человек утверждает про крутость ООП спустя такое время, он либо был в анабиозе, либо не развивался, либо всю жизнь писал `class Dog: Animal {}`.
2 области, где всегда топили за ООП — это геймдев и GUI программирование почему-то от боли настолько взвыли, что придумали более адекватные решения типа ECS, успешно применяют и забыли ООП как страшный сон.
ООП подходит для обучения, для построения абстракций в голове, но с реальным решением задач он мало чего общего имеет. Кто сейчас использует ООП кроме погрязшего в болоте Java-энтерпрайса какого-нибудь? Покажите мне их. У гугла вон вообще половину фич из ООП запрещено использовать и забанено на уровне компиляции проектов. А новых успешных ООП языков не появлялось уже десятка полтора лет.
А шаблоны позволяют один раз сделать
Да, утверждение про крутость шаблонов было валидно в начале нулевых примерно. Сейчас, когда подавляющее большинство языков поддерживают хотя бы дженерики, про которые вы упомянули, плюсы остаются если не далеко позади по скорости адаптации этих фич, то как минимум ничем не выделяются.
Шаблоны С++ это не только дженерики, если вы их используете только чтобы сделать вектор разного типа, у меня для вас плохие новости: вы используете примерно 3% от их мощи. Шаблоны это про выразительность через Тьюринг-полное метапрограммирование. Это грубо говоря, язык внутри языка. Раньше только плюсы могли этим худо-бедно похвастаться. Сейчас же, когда даже сраный TypeScript умеет такое, это вообще никак не преимущество плюсов. Вот если бы плюсы за десятилетия своего существования как-то улучшили шаблоны кардинально, например, добавив first-class compile-time, как это успешно сделано в некоторых современных языках, это было бы круто, да. Но плюсам до этого ещё лет 70 примерно.
C15H22N6O5S, если LI — дно, так подскажи людям платформу, где так же можно под пиво вечерком с фаундером в зуме пообщаться часок и получить оффер на 100+, сидя в трусах на острове, смотря в окно на пальмы.
Эффективнее платформы нет, это бесспорный факт. Можно, конечно, если ты Топ, хайриться в Твиттере ещё, кто бы что ни говорил, но нужен раскачанный аккаунт и посты известные.
Причём здесь С++? На любом языке можно их разрабатывать. Изучать надо архитектуру этих устройств, а не С++.
Плюсы под такое не сильно годятся из-за своего зоопарка неопределённого поведения. Чистый Си для этого лучше в разы подходит. А ещё лучше Rust или Zig, а плюсы — на свалку истории.
Чтобы изучать программирование, нужна не математика, а ЖЕЛАНИЕ учиться. Если учишься из-под палки, потому что "бабок много заплатят", ничего не получится.
Во-первых, на ноутах обычно вывод графики идёт через одну карту, даже если рендеринг -- через другую, поэтому, если пробросишь одну, вероятнее всего отвалится и другая.
Во-вторых, для проброса нужно, чтобы чипсет реализовывал IOMMU, видеокарта тоже должна поддерживать ремаппинг ввода-вывода. Очень сомневаюсь, что на ноутах можно такое найти, а даже если оно реализовано аппаратно, биосы ноутбуков обычно насколько кастрированы, что придётся патчить в лучшем случае.
Виктор, а как поможет шифрование памяти, если хост точно так же имеет доступ к ключу этого шифрования и может его перехватить на старте? Это security through obscurity, а никак не панацея.
Не нормально, а НУЖНО!
Разные языки, разные парадигмы программирования, разные взгляды на решение проблем. Изучение множества языков обязательно для расширения кругозора и прокачки мышления.
По оценке Амазон, всего один такой баг приводит к убытку компании в 300 тысяч долларов и огромным репутационным потерям.
И что же произошло, когда они начали отказываться от плюсов в пользу адекватных безопасных языков? О, чудо, всего за 5 лет с 80% количество уязвимостей упало до 20%!
Даже NSA банит Си и С++ в проектах критической инфраструктуры и настоятельно рекомендует использовать современные языки. Если агентство национальной безопасности США считает, что эти языки являются угрозой национальной безопасности самой защищённой страны мира, а вы говорите, что вам норм, потому что вы пишете всю жизнь, то я уж не знаю, какие вам доводы нужны.
Можно хоть 50 лет на нём писать. Но вот на реальных задачах ещё нужно использовать его. А это адская боль.
Не поверите, я тоже писал на плюсах около 15 лет. Пока не понял, что куда-то не туда телега катится. Когда попробовал другие языки, осознал, что 80% времени я борюсь с языком, а не с задачей.
Попробовав, например, о боже, мерзотнейший Rust около 7 лет назад, я ни разу, буквально ни разу не запустил отладчик. Я даже не знаю, есть ли такой вообще, потому что он тупо не нужен. Всё работает так, как ты написал, а не как решил компилятор. Если это ошибка, то это железно ошибка и твой код даже не соберётся, компилятор спокойно объяснит, где она и, внезапно, даже даст пример того, как её решить!. А в плюсах такой мусор можно успешно собрать, который может покрашиться через годы работы программы! Для чего вообще нужен компилятор тогда, если не помогать программисту?
В плюсах же по 50% времени проводишь в отладчике, пытаясь понять что-то оно там сделало за тебя.
В который одну фичу могут добавлять 20 лет, добавить, через несколько лет признать неудачной и объявить устаревшей? Да, только в С++ такое есть, вы правы, классная фишка языка, интересная.
Но есть одна проблема: в любом нормальном языке есть стандартная библиотека. Когда я в другом языке могу просто сделать пулл-риквест в гитхаб с какой-то интересной всем нужной фичей и её примут буквально за несколько недель, зачем мне тогда такой STL, где сидят богоподобные седобородые старцы и решают по 20 лет какая фича мне нужна?
Нахрена? Чтобы просто изобрести колесо? На чистом Си такое количество библиотек уже написано под разные нужды, что я бы с большим интересом услышал от вас примеры, когда под какую-то задачу не написано хотя бы 3-5 различных библиотек.
Я не топлю за Си, это такое же убожество как и плюсы, просто с чуть менее мощным футганом. Единственная вещь, которая от Си осталась полезной и всеми используется, это его ABI. Эффективный, лаконичный, до сих пор используется практически всеми языками для FFI. Задумка Си изначально была — сделать переносимый кроссплатформенный ассемблер. Эту задачу язык выполнил, но писать всё на ассемблере, который компилировали под PDP, сейчас — это дурость.
Не нужно путать реализацию со стандартом. Комитет стандартизации пишет плюсы, а не майкрософты. MS читают спеку, охреневают, и годами пытаются закодить то, что придумали великие умы с деменцией.
gcc? Серьёзно? Сами его мейнтейнеры не раз признавались, что не осталось ни одного человека сейчас, кто бы полностью понимал код этого проекта. Он имеет место быть только потому, что разрабатывается уже 40 лет и аккумулировал очень много всего. Но по качеству кода самого проекта он невероятно отвратительный и нечитаемый. Столько хаков и костылей, сколько у него в коде, нет больше ни в одном проекте.
Было, лет 20 назад. Ничего личного, но по моему мнению, если человек утверждает про крутость ООП спустя такое время, он либо был в анабиозе, либо не развивался, либо всю жизнь писал `class Dog: Animal {}`.
2 области, где всегда топили за ООП — это геймдев и GUI программирование почему-то от боли настолько взвыли, что придумали более адекватные решения типа ECS, успешно применяют и забыли ООП как страшный сон.
ООП подходит для обучения, для построения абстракций в голове, но с реальным решением задач он мало чего общего имеет. Кто сейчас использует ООП кроме погрязшего в болоте Java-энтерпрайса какого-нибудь? Покажите мне их. У гугла вон вообще половину фич из ООП запрещено использовать и забанено на уровне компиляции проектов. А новых успешных ООП языков не появлялось уже десятка полтора лет.
Да, утверждение про крутость шаблонов было валидно в начале нулевых примерно. Сейчас, когда подавляющее большинство языков поддерживают хотя бы дженерики, про которые вы упомянули, плюсы остаются если не далеко позади по скорости адаптации этих фич, то как минимум ничем не выделяются.
Шаблоны С++ это не только дженерики, если вы их используете только чтобы сделать вектор разного типа, у меня для вас плохие новости: вы используете примерно 3% от их мощи. Шаблоны это про выразительность через Тьюринг-полное метапрограммирование. Это грубо говоря, язык внутри языка. Раньше только плюсы могли этим худо-бедно похвастаться. Сейчас же, когда даже сраный TypeScript умеет такое, это вообще никак не преимущество плюсов. Вот если бы плюсы за десятилетия своего существования как-то улучшили шаблоны кардинально, например, добавив first-class compile-time, как это успешно сделано в некоторых современных языках, это было бы круто, да. Но плюсам до этого ещё лет 70 примерно.