Re[13]: А чего молчим про Crowdstrike
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.07.24 17:48
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Да ложь это.

Нет, это вы не понимаете.
V>Проверка индекса при доступе к массивам — это фича конкретного объекта, а не среды исполнения.
Смотря как реализован доступ к массивам. Например, в дотнете это специальная инструкция байт-кода, за проверку в ней отвечает среда исполнения.
Не получится руками сделать такой же "объект" и не сделать проверку.
V>Запросто в опкодах получай ссылку на данные и лезь по произвольному индексу, гадя в произвольную память, бгг...
Это зависит от конкретной среды исполнения. Можно убрать unmanaged pointers, и возможность "лезть по произвольному индексу" исчезнет.

V>Проверка на null перед вызовом метода объекта?

V>Это и вовсе фича компилятора конкретного языка, который подставляет callvirt вместо call.
Вы почему-то думаете, что дотнетом исчерпывается мир виртуальных машин. Нет, это не так. Дотнет — компромиссная технология, в нём пришлось принять ряд спорных решений.
Это не означает, что сама по себе идея управляемых сред неверна.

V>Но VM тут не при чём, такие же есть и нейтивные технологии, которые тоже разменивают производительность на подстраховку.

Да без проблем. Давайте, расскажите мне про эти нейтивные технологии. А лучше — не мне, а разработчикам CrowdStrike. А, и ещё авторам видеокодеков, а то Adobe Premiere до сих пор нет-нет, да и упадёт при редактировании видео. Где-то в недрах кодека у него NRE происходит.

V>Потому что не оттуда и не туда копали, я тебе когда-то объяснял — копать надо было в сторону зависимых типов.

V>Безопасность будущих программ кроется именно там, а не в байт-коде или нейтивном.
V>Это вообще условности. ))
Да, всё верно.

V>Плюс ранее в подветке рассуждал о необходимости некоего особого режима для подгружаемого для исполнения кода.

Чего?

V>Да кароч, в 2024-м с этим глобальным враньём можно было бы уже и закончить. ))

Ну так заканчивайте.

V>Ты ведь не вникал, как компиляторы обслуживают потенциальные UB?

Конечно же вникал. У нас тут как раз курс лекций читался на эту тему — я походил, послушал

V>Нифига себе ожидания...

V>Пипец махровое нубство. ))
Учитесь, коллега, никогда не поздно разобраться, как это работает.

V>А на деле происходит обратное — компилятор предполагает, что никакого UB нет.

Нет.
V>И у него есть такое право — из-за допущения расширения типов промежуточных значений.
Нет.

V>Ну ты реально тогда считаешь компилятор "черным ящиком", и на этом основании мысленно приписываешь ему любые магические св-ва. ))

Нет, я как раз случайно знаю, как работает компилятор

V>И о каком "понимании устройства" ты сейчас говоришь?

V>На уровне Ахо+Ульмана? Вирта? Хантера?


V>В отличие от тебя, у меня достаточно богатый опыт в парсинге, синтаксическом и лексическом анализе, кодогенерации и оптимизации.

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


V>Код открыт, иди изучай.

Отметим, что ссылки на стандарт по-прежнему нет. Ну, можете ссылку на код с if-else мне показать.

V>А светить конторы, в которых работаем, в нашей области не принято из-за другого — процветающего HH на уровне хождения на грани порядочности.

Не переживайте, HH вам не грозит.

S>>За истекшее время можно было сходить и найти соответствующий пункт стандарта. Заодно понять, почему он неприменим к рассматриваемому примеру.


V>Ты про плавучку? ))

Нет, я про int256.

V>Т.е. ты не знал, что есть фаза оптимизации при конечной кодогенерации?

Естественно знал.
V>И что эта фаза чуть ли не основная по эффективности сегодня?
Нет, она там в последнюю очередь
V>Семантические, это, надо понимать, альфа, бета и эта-преобразования? ))
Я же вам говорил — разработчики компиляторов этими терминами не пользуются. Вы опять выдаёте себя с головой — нет у вас никакого опыта в "парсинге, синтаксическом и лексическом анализе, кодогенерации и оптимизации". В лучшем случае в ВУЗе 30 лет тому назад курсовик делали с разбором Паскаля.


V>__int256 пока что не стандартный тип, тикетов и багов в компиляторах, его поддерживающих, пока хватает.

Ну, пусть будет int128
V>Вот когда все компиляторы подтянутся, тогда этот тип войдёт в стандарт, а пока что это попытка убежать. ))
Не убежите вы никуда. Компилятор все типы обрабатывает одинаково — потыкайте палочкой да убедитесь. Особенности возникают только с типами short и signed char — потому, что для них в стандарте оговорены integral promotions. Никогда компилятор ничего не расширяет шире инта — стандарт ему это запрещает. И сохранение в память тоже не имеет никакого отношения — если так получилось, что на целевом процессоре нет int32 операции, то кодогенератор, естественно, сгенерирует код для int64. Но потом он обрежет результат — даже если этот результат промежуточный, и в память напрямую он никогда не попадёт.

И эзотерика тут ни при чём — обычная инженерная логика.

V>Предположу, что пока что "тупо" использовали ту же ветку, что для других целых.

Ваши предположения были бы хороши, если бы вы их подавали с меньшим апломбом и большей скромностью.
Нет, так не работает. Если бы компилятор произвольно расширял сложение, скажем, int64 до __int128, то тогда у нас бы (a+b)/2 работало корректно. Но ведь нет — вы не найдёте компилятора, который бы вам расширил аргументы, сложил, поделил, и потом сузил. Как вы думаете, почему? И зачем он, по-вашему, делает это для случая int64+1?

V>А ты подтвердить свои рассуждения ничем не можешь, заметь, только позицией "А баба Яга против!"

Могу подтвердить ссылкой на стандарт. Но сейчас — ваша очередь.

V>Но озвучить эти причины, показав хотя бы схематически рассуждения компилятора, ты не в состоянии, верно? ))

Я схематически их уже озвучивал.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.