Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Компиляция происходит при инсталляции приложения. И верификация тоже.
Эта подробность на что-нибудь влияет?
Pzz>>Однако, не из чего не следует, что качество кода при использовании этой технологии лучше, чем у JIT.
НС>Хуже или лучше, это второй вопрос. Ты тут нам рассказывал про интерпретатор.
Мне тут рассказывают, что аппаратная защита не нужна. Аппаратная защита, как и все аппаратное — это способ чего-нибудь ускорить по сравнению с чисто софтверной реализацией. Так можно договориться и до того, что графические акселераторы не нужны, и рисовать все по точкам.
Поэтому при обсуждении вопроса о нужности или ненужности чего-нибудь аппаратного вполне уместен вопрос о производительности.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Вот в том то и проблема, что ты не понимаешь. Текущий JIT уже, к примеру, умеет выкидывать проверки границ массива в цикле.
Которые евонный же компилятор туда и вставил. Хотел бы я посмотреть, как он выкинет мой инвариант, а не свой собственный.
Вообще, я в этом вопросе вполне верю мелкософту, который в FAQ про DirectShow прямо утверждает, что DirectShow не будет managed по причине производительности. Ссылку я уже приводил, лень повторяться, но гугль никто не отменял.
Здравствуйте, Cyberax, Вы писали:
Pzz>>Но как, видя байткод, а не синтаксическое дерево, сделать data flow analysis или вынос инварианта из цикла, я ума не приложу. C>А какие проблемы? Строим дерево и делаем анализ. Байткод для этого вполне адекватен.
Байткод это ассемблер некоторой абстрактной машины. К тому времени, когда программа стала байткодом, много существенной информации об исходном коде уже утеряно.
Здравствуйте, Pzz, Вы писали:
Pzz>Вообще, я в этом вопросе вполне верю мелкософту
Нет никакого мелкософта, есть куча разных команд, каждая из которых в определенных пределах имеет возможность маневра. И я не одну такую команду знаю. Ровно как знаю и другие команды, например HPC team, которые считают не так. Бывает даже совсем забавно, когда команду, работавшую над первым Лонгхорном, заменяют на толпу индусов и менеджеров, почти все наработки выкидывают, Олчина уволняют, и в итоге выпускают совсем другой Лонгхорн. Делать из этого какие то технологические выводы, имхо, не стоит.
Здравствуйте, Pzz, Вы писали:
НС>>Компиляция происходит при инсталляции приложения. И верификация тоже.
Pzz>Эта подробность на что-нибудь влияет?
Эта подробность отвечает на твой вопрос. как обойтись без подписи всех экзешников.
НС>>Хуже или лучше, это второй вопрос. Ты тут нам рассказывал про интерпретатор.
Pzz>Мне тут рассказывают, что аппаратная защита не нужна.
Верно.
Pzz> Аппаратная защита, как и все аппаратное — это способ чего-нибудь ускорить по сравнению с чисто софтверной реализацией.
Софтверная защита в исполнении Сингулярити не заменяет, а устраняет большую часть защиты. Вот и весь фокус.
Pzz> Так можно договориться и до того, что графические акселераторы не нужны, и рисовать все по точкам.
Здравствуйте, Pzz, Вы писали:
Pzz>Ну да. Вы утверждаете, что в природе существует некоторое чудо.
Мы с этими "чудесами" регулярно имеем дело.
Pzz>Вполне справедливо, что на вас лежит бремя доказательства. По дефолту чудес не бывает
Если не веришь возьми тот же C# и попробуй проехаться по памяти без использования unsafe и нативного кода.
А мы похихикаем.
Таже фигня с еще очень большим колличеством языков.
Ибо создать правила написания доказательств (систему типов) и их проверяльщик для столь тривиальных гарантий как отсутствие порчи памяти задача тривиальная.
Pzz>За счет чего осуществляется гарантия того, что программа не вылезет из своей песочницы?
При правильной системе типов по памяти она проехаться не сможет.
Как следствие получить доступ ни к чему кроме того что ей дала ОСь не сможет.
А ОСь ее никуда кроме песочници не пустит.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Pzz, Вы писали:
Pzz>Байткод это ассемблер некоторой абстрактной машины. К тому времени, когда программа стала байткодом, много существенной информации об исходном коде уже утеряно.
Неправда. Байт-код .NET/Java восстанавливается до исходника почти на 100%. Код LLVM так не всегда позволяет делать, но для анализа в нём информации вполне достаточно.
Здравствуйте, Pzz, Вы писали:
Pzz>Байткод это ассемблер некоторой абстрактной машины. К тому времени, когда программа стала байткодом, много существенной информации об исходном коде уже утеряно.
Рефлектор доказывает, что никакая существенная для control flow анализа информация при компиляции в IL не теряется.
Здравствуйте, Pzz, Вы писали:
Pzz>Байткод это ассемблер некоторой абстрактной машины. К тому времени, когда программа стала байткодом, много существенной информации об исходном коде уже утеряно.
Скажи это рефлектору.
А если байткод можно декомпилировать в человекочитаемый код... то это твой утверждение как бы это по мягче сказать...
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Софтверная защита в исполнении Сингулярити не заменяет, а устраняет большую часть защиты. Вот и весь фокус.
OK, пойдем по 25-му кругу.
За счет чего конкретно сингулярити обеспечивает софтверную защиту, делая это надежно и эффективно?
НС>Аналогии не годятся в качестве доказательства.
Здравствуйте, Pzz, Вы писали:
Pzz>За счет чего конкретно сингулярити обеспечивает софтверную защиту, делая это надежно и эффективно?
За счет системы типов.
Указание типов суть доказательство того что нет проездов по памяти.
Проверка того что типы совпадают тривиальна.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
Pzz>>Вполне справедливо, что на вас лежит бремя доказательства. По дефолту чудес не бывает WH>Если не веришь возьми тот же C# и попробуй проехаться по памяти без использования unsafe и нативного кода. WH>А мы похихикаем.
C# делает кучу проверок в рантайме. Что дороже, чем использовать аппаратную защиту памяти.
Pzz>>За счет чего осуществляется гарантия того, что программа не вылезет из своей песочницы? WH>При правильной системе типов по памяти она проехаться не сможет.
У оси нет гарантии, что при получении байткода использовалась правильная система типов.
WH>Как следствие получить доступ ни к чему кроме того что ей дала ОСь не сможет. WH>А ОСь ее никуда кроме песочници не пустит.
Это при условии, что ось в состоянии защитить свою собственную память.
Здравствуйте, Pzz, Вы писали:
Pzz>У оси нет гарантии, что при получении байткода использовалась правильная система типов.
Есть. Оно доказывается с помощью процедуры, называемой "верификация".
Pzz>Это при условии, что ось в состоянии защитить свою собственную память.
Способна, способна. Можешь мне поверить — я далеко не сторонник Сингулярности.
Здравствуйте, Pzz, Вы писали:
Pzz>C# делает кучу проверок в рантайме.
1)Не такую уж кучу.
2)Большинство из них можно устранить немного более умным оптимизатором.
Из кода вида:
for (int i = 0; i < arr.Length; ++i)
{
...arr[i]...
}
Уже научились устранять проверки.
Pzz>Что дороже, чем использовать аппаратную защиту памяти.
Даже учитывая что еще очень много чего можно устранить это не правда.
Pzz>У оси нет гарантии, что при получении байткода использовалась правильная система типов.
Есть.
Система типов прошита в байткод.
Pzz>Это при условии, что ось в состоянии защитить свою собственную память.
Как нефиг делать.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>За счет системы типов. WH>Указание типов суть доказательство того что нет проездов по памяти. WH>Проверка того что типы совпадают тривиальна.
Здравствуйте, WolfHound, Вы писали:
Pzz>>Что дороже, чем использовать аппаратную защиту памяти. WH>Даже учитывая что еще очень много чего можно устранить это не правда.
И это тоже неправда. Я уже показывал способы получить очень дешовое переключение контекстов с аппаратной защитой, если её слегка усовершенствовать.
Здравствуйте, Pzz, Вы писали:
WH>>За счет системы типов. WH>>Указание типов суть доказательство того что нет проездов по памяти. WH>>Проверка того что типы совпадают тривиальна. Pzz>Статически или в рантайме?
Статически.
В рантайме только явные привидения от базы к потомку.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Cyberax, Вы писали:
C>И это тоже неправда. Я уже показывал способы получить очень дешовое переключение контекстов с аппаратной защитой, если её слегка усовершенствовать.
Она всеравно не позволяет получить такую же гранулярность защиты что и софтварная защита.
Ну не сможешь ты аппаратно контролировать кто что куда пишет и читает с точностью до бита и проверками типов.
К тому же не факт что тот способ будет гарантированно дешевле.
ЗЫ Кстати я придумал систему типов в которой можно доказать отсутствие рейскондишенев имея расшаренные изменяемые данные между потоками.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Статически. WH>В рантайме только явные привидения от базы к потомку.
Я тогда не очень понимаю. Если я могу использовать массивы и могу вычислять индекс в массиве, каким образом статически можно доказать, что я не выскочу за пределы массива?
Здравствуйте, WolfHound, Вы писали:
C>>И это тоже неправда. Я уже показывал способы получить очень дешовое переключение контекстов с аппаратной защитой, если её слегка усовершенствовать. WH>Она всеравно не позволяет получить такую же гранулярность защиты что и софтварная защита. WH>Ну не сможешь ты аппаратно контролировать кто что куда пишет и читает с точностью до бита и проверками типов.
Да. Но другой вопрос: а нужно ли нам это? Практически оказалось, что гранулярности с точностью до процесса нам вполне достаточно. В конце концов, в самом .NET тоже мало кто использует CAS внутри прикладного кода для чего-то своего — обычно просто есть разделение на "системный" и прикладной код.
WH>К тому же не факт что тот способ будет гарантированно дешевле.
Ну так он уже на ARMах реализован.
WH>ЗЫ Кстати я придумал систему типов в которой можно доказать отсутствие рейскондишенев имея расшаренные изменяемые данные между потоками.
С какой строгостью? Тупую проверку, что они все обязательно будут под локом не считаем.