На самом деле нет, вы поймать момент, который я делаю, но не хватает его. Криптографические системы в целом имеют свойство, что вы жить или умереть, основываясь на косвенных деталей. Криптографическая консенсус делает дело хуже только в том, что в более широком класс сюрпризов, которые оказываются фатальная уязвимость. Это вполне возможно, и наблюдается на практике, чтобы идти в конечный итоге с эксплуатируемыми системами, поскольку некоторые заусениц / абстрагировать поведение отличается, чем вы ожидали. Типичный пример распространяется ошибки до к дальней стороне, когда аутентификация завершается неудачно, и утечка данных о сбое позволяет постепенно восстанавливаются секретные данные. Другие примеры, что неявное поведение набивки утечки информации о ключах (есть пример этого в ядре Bitcoin:. Симметричные криптографические процедуры OpenSSL имели неявное поведение обивки, которые делают бумажник шифрование быстрее взломать, чем было предназначено)
Я в основном озабочен ли не с помощью C (++) с ручным управлением памятью является приемлемой практикой. Щуря ручное управление памятью подвергает вас к царю всех неявных деталей: что мусор случается в памяти в тот самый момент.
Учитывая, что у нас есть по крайней мере, C ++ доступны, которые могут оградить вас от ручного управления памятью (1), там просто нет оправдания, чтобы писать код, путь больше по умолчанию. Одинаково писать C ++ таким образом, что выставляет вас к этому классу ошибок, как правило, неприемлемо.
Bitcoin само по себе является прекрасным примером того, где некоторые простые "не быть идиотом" практика развития привела к целому классу ошибок они никогда не была проблемой для нас, позволяя сосредоточиться на развитие остальных типов ошибок.
1) Где ручное управление памятью == вещи, которые могут привести к повреждению памяти и недействительные доступы. Есть, конечно, другие значения термина, относящиеся к практике, когда память еще "удалось" вручную на определенном уровне, например, распределение, но коррупция и недействительные доступы не представляется возможным.
Я, конечно, фанат умных инструментов, которые делают программное обеспечение более безопасным (я концептуально большой поклонник Руст, например). Но что я вижу развертывается в более широком мире является то, что более актуально развернуто слабое программное обеспечение криптография в результате причин, не имеющих отношения к языку. Это не обязательно означает, что ничего о не-криптографического программного обеспечения. И некоторые из них, вероятно, просто отношение корреляции; вы не получите далеко в C, если вы не готовы обращать внимание на детали. Таким образом, мы можем ожидать, что другие языков, чтобы быть более плотными в небрежных подходах. Но это не означает, что кто-то одинаково внимательны не могли бы сделать лучше, в общем, в чем-то с лучшими свойствами. (Я предполагаю, что это в основном ваша демографическая корреляция). Так что я, конечно, не соглашаясь с этими точками; но я не согласен с волшебной пули мышления, которая доказуемо не соответствует действительности: Запись в FooLang будет абсолютно не сделать ваши программы безопасны для людей, чтобы использовать. Это _may_ быть полезным, на самом деле, но это не является ни необходимым, ни достаточным, как показано с помощью программного обеспечения, размещенного в этой области.
И с тех пор, когда я говорил что-нибудь о "волшебные пули"? Я говорю о приемлемой босой минимальной практике. Снова и снова мы видим, что делать ручное управление памятью требует титанических усилий, чтобы получить права, но люди
делать получить достаточно далеко в C (++), чтобы вызвать серьезные проблемы, делая это.
Это не удивительно, что более легкие языки привлекают даже менее опытных программистов, которые делают больше ошибок, но это глупо думать, что предоставление квалифицированных программистов инструмент, кроме footgun собирается привести к более ошибок. Я думаю, что несчастную вещь - может быть, причина этой проблемы в отрасли - это вы определенно должны научить программистов С в какой-то момент в их образование, чтобы они понимали, как компьютеры действительно работают. В этом отношении мы должны научить их ассемблер тоже. Проблема в том, С достаточно хорош, чтобы реально использовать - даже самые хорошие архитектуры машины не - и люди обучены таким образом, как правило, достичь этого footgun снова и снова в остальной части своей карьеры, когда на самом деле язык должен поставить на полки и только вывели для решения узкоспециализированных задач - как ассемблере.
Точно так же, как многие компьютерные науки выпускников закончить свое образование с хорошим пониманием того, что язык программирование принципиально интерфейс пользователя слой между ними и машинным кодом?