LINUX.ORG.RU

История изменений

Исправление byko3y, (текущая версия) :

Ну да. С проверками в рантайме половина уязвимостей будет «маршрутизатор ложится на 3.5 пакетах в секунду». И?

Ты сильно преувеличиваешь стоимость проверок. Основные тормоза на современных x86 и arm берутся от неугаданных условных переходов и кэш мисов, а не от операций в регистрах, которыми обычно реализовываются эти самые проверки в рантайме. Я не помню, что там по флагам, но по-моему на обоих архитектурах есть флаг переполнения после арифметики, то есть, проверка переполнения вообще простейше реализуется на уровне машинных кодов и не занимает кэш.

Тебя снова понесло мимо темы. Даже не буду спрашивать, как как ты умудрился сравнить стэктрейсы в лицо пользователю(падение скрипта на питон) и бессимптомную порчу данных(НЕ упавшую прогу на c/c++). Это лол

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

Я ж говорю - тебе просто знаний не достаёт, вот ты и веришь во всякие байки про «можно». За это время мог бы уже попробовать написать, что я тебе предлагал, и убедиться сам

Каких еще знаний? Я тебе пишу про воображаемый язык, которым должен был бы быть Си — ты можешь читать мои мысли? Может расскажешь тогда мне сразу, насколько реально мой воображаемый язык реализовать?

Данные по ссылке тоже «неподконтрольны коду», точно так же могут быть изменены «ОС-ью, другим потоком, вызовом функции в этом же потоке»

Для этого они должны стать указателем, потому что в противном случае весь доступ к ним находится под контролем и формально у этих данных нет адреса. То есть, ссылка не передает адрес ячейки в функцию — ссылка на уровне синтаксиса связывает ячейку формального параметра с ячейкой фактического параметра, будь то некий регистр, стэк, или память из кучи. Возврат указателя на такую ссылку — это предупреждение или ошибка, примерно как это и трактует Rust.

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

Самое смешное то, что даже Free Pascal, в котором крайне мало оптимизаций, умеет в контроль указателей, засовывая локальные переменные в регистры, но выкидывая их в оперативу, если кто-то берет адрес переменной. А Си не может, из-за фундаментального изъяна архитектуры компилятора.

Во-первых, я не знаю, зачем ты делаешь столько неиспользуемых переменных. Во-вторых, неиспользуемые переменные к UB(а именно о нём речь, если ты забыл) имеют малое отношение

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

Исходная версия byko3y, :

Ну да. С проверками в рантайме половина уязвимостей будет «маршрутизатор ложится на 3.5 пакетах в секунду». И?

Ты сильно преувеличиваешь стоимость проверок. Основные тормоза на современных x86 и arm берутся от неугаданных условных переходов и кэш мисов, а не от операций в регистрах, которыми обычно реализовываются эти самые проверки в рантайме. Я не помню, что там по флагам, но по-моему на обоих архитектурах есть флаг переполнения после арифметики, то есть, проверка переполнения вообще простейше реализуется на уровне машинных кодов и не занимает кэш.

Тебя снова понесло мимо темы. Даже не буду спрашивать, как как ты умудрился сравнить стэктрейсы в лицо пользователю(падение скрипта на питон) и бессимптомную порчу данных(НЕ упавшую прогу на c/c++). Это лол

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

Я ж говорю - тебе просто знаний не достаёт, вот ты и веришь во всякие байки про «можно». За это время мог бы уже попробовать написать, что я тебе предлагал, и убедиться сам

Каких еще знаний? Я тебе пишу про воображаемый язык, которым должен был бы быть Си — ты можешь читать мои мысли? Может расскажешь тогда мне сразу, насколько реально мой воображаемый язык реализовать?

Данные по ссылке тоже «неподконтрольны коду», точно так же могут быть изменены «ОС-ью, другим потоком, вызовом функции в этом же потоке»

Для этого они должны стать указателем, потому что в противном случае весь доступ к ним находится под контролем и формально у этих данных нет адреса. То есть, ссылка не передает адрес ячейки в функцию — ссылка на уровне синтаксиса связывает ячейку формального параметра с ячейкой фактического параметра, будь то некий регистр, стэк, или память из кучи. Возврат указателя на такую ссылку — это предупреждение или ошибка, примерно как это и трактует Rust.

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

Самое смешное то, что даже Free Pascal, в котором крайне мало оптимизаций, умеет в контроль указателей, засовывая локальные переменные в регистры, но выкидывая их в оперативу, если кто-то берет адрес переменной. А Си не может, из-за фундаментального изъяна архитектуры компилятора.

Во-первых, я не знаю, зачем ты делаешь столько неиспользуемых переменных. Во-вторых, неиспользуемые переменные к UB(а именно о нём речь, если ты забыл) имеют малое отношение

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