Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Cyberax, Вы писали:
C>>Программист. Если хочет — пусть пишет хоть на brainfuck'е в новой C>>супербезопасной EverFuckVirtualMachine от MS. Главное, чтобы остальным C>>это не мешало. WH>Практика показывает что какбы программист этого не хотел у него это всеравно не получится. Ибо человек не может работать совсем без ошибок.
+1.
Как вы думаете, какую систему выберет банк?
Быструю на C++, с 96% гарантией от неявных ошибок повреждения данных (от обращения по неверному адресу)
или на C# со 100% гарантией.
C>>Как ты думаешь, а почему они популярны там, где пофиг на объемы C>>сжираемой памяти и быстродействие? WH>Памяти они действительно жрут несколько больше, а вот тормоза сильно преувеличины.
+1.
Посмотрите на сравнение Java с С++ (да и с другими) здесь.
Особенно при росте N.
(С# там работает плохо из-за недоделок Mono).
WH>Болие того обемы памяти будут продолжать рости им в отличии от мощности процессоров ничто не мешает.
Ну тут ньюансы есть.
Дело еще и в скорости передачи данных по системной шине, объеме кеша и эффективности его работы.
Здравствуйте, Cyberax, Вы писали:
C>WolfHound wrote: >> C>То что у меня будет выскакивать красивый stacktrace вместо Access >> Violation — меня не особо привлекает. >> Проблема в том что AV может и не выскочить, а программа будет делать >> что-то не то. C>То же самое может замечательно и с .NET-программами случится.
В .NET ошибки обращения по неверному адресу и висящих указателей исчезают как класс.
От ошибок в логике никто не застрахован, но их труднее сделать и они быстрее всплывают.
C>Переписывать ВЕСЬ (причем абсолютно весь) софт ради крайне редких C>случаев, в которых из-за наведенных ошибок портятся данные? Нафиг такое C>надо.
А этого и не будет.
ИМХО Будет работать в своей виртуальной машине под управляемой ОС.
Как сейчас DOS и Win16 приложения.
>> К томуже имея трассировку стека разработчики смогут быстрее исправить >> ошибку. Болие того до пользователей дейдет гораздо меньше ошибок ибо они >> будут отлавливаться на этапе тестирования. C>Трассировка стека замечательно делается и без .NET, причем еще со времен C> 70-х годов (core dump'ы).
Core Dump, если я правильно понимаю, снимок памяти процесса в тот момент, когда он упал.
Ковырять его — удовольствие, я думаю, много ниже среднего .
C> На Винде есть: C>http://www.codeproject.com/debug/XCrashReportPt4.asp
Ага, если сам стек не запорчен, что сделать проще простого:
#include <stdio.h>
void func()
{
int num[5];
for(int i = 0; i < 10; ++i )
{
num[i] = i*i;
printf("num %i %i\n",i,num[i]); // включил, чтобы компилятор не поскипал неисп код.
}
}
int main()
{
func();
return 0;
}
Адрес возврата запорчен и переход происходит непонятно куда
(точнее внизу видно, что на 0x0000024 ),
а так этим и злоумышленники пользуются.
Программа была скомпилирована с отладочной информацией в VS8.
Вот что показал отладчик в call stack после того как программа упала:
> 00000024()
kernel32.dll!7c816d4f()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
kernel32.dll!7c8399f3()
Это здесь ошибку просто найти, а если между объявлением массива и его использованием много кода?
>> C>Подтверждает. Например, отсутствие .NET/Java программ на обычных >> десктопах.
C>2. Крупных десктопных приложений.
В Visual Studio 2005 много .NET кода (7,5M LOC): здесь.
Здравствуйте, Андрей Хропов, Вы писали:
АХ>Но для небольшого числа применений (в ядре ОС и драйверах).
В драйверах не нужно. Прочтиай про сингулярити Re[8]: Управляемая ОС
Здравствуйте, WolfHound, Вы писали:
WH>Доведение слов до абсурда -> демагогия.
Реальность, однако, всякой выдумки смешней. http://www.lenta.ru/news/2006/05/23/flexgo/
WH>В нормальных ОС можно задавать ограничения на колличество выделяемой памяти процессом.
Можно. Но толку-то? Если не обеспечивается соблюдение закона, то это фуфельный закон.
WH>По существу есть что сказать? Или не нравится мне то что нельзя память испортить и точка?
Мне очень нравится что нельзя испортить память. Но мне не нравится, что для этого при каждом обращении выполняются проверки. Только не надо говорить, что все это ерунда по сравнению с мировой революцией. Это очень не ерунда и примером тому — многомерные массивы. Замечательная штука! Просто мечта для ряда задач. И... совершенно бесполезная по причитне диких тормозов.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Мне очень нравится что нельзя испортить память. Но мне не нравится, что для этого при каждом обращении выполняются проверки. Только не надо говорить, что все это ерунда по сравнению с мировой революцией. Это очень не ерунда и примером тому — многомерные массивы. Замечательная штука! Просто мечта для ряда задач. И... совершенно бесполезная по причитне диких тормозов.
Максим, а вы не знали что это есть ерунда по сравнению с мировой революцией!!!
Большинство проверок на правильность делается не в runtime а JIT компилятором. Проверки выхода за границы массива, часто также вполне хорошо оптимизируется. Поэтому диких тормозов в этой связи нет и не будет.
Здравствуйте, McSeem2, Вы писали:
MS>Реальность, однако, всякой выдумки смешней. MS>http://www.lenta.ru/news/2006/05/23/flexgo/
Как я понимаю это что-то типа покупки компьютера в рассрочку.
Причем платить можно хоть сто лет. И никаких процентов, штрафов, пени итп...
Что в этом плохого?
WH>>В нормальных ОС можно задавать ограничения на колличество выделяемой памяти процессом. MS>Можно. Но толку-то? Если не обеспечивается соблюдение закона, то это фуфельный закон.
Это ты о чем?
MS>Мне очень нравится что нельзя испортить память. Но мне не нравится, что для этого при каждом обращении выполняются проверки.
Это очень легко оптимизируется при помощи анализа потока исполнения.
Для одномерных массивов при использовании циклов вида
for (int i = 0; i < arr.Length; ++i)
arr[i] = i;
такая оптимизация уже есть в .NET. MS>Только не надо говорить, что все это ерунда по сравнению с мировой революцией. Это очень не ерунда и примером тому — многомерные массивы. Замечательная штука! Просто мечта для ряда задач. И... совершенно бесполезная по причитне диких тормозов.
Это проблема конкретной реализации конкретной виртуальной машины. Это все можно оптимизировать.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
MS>>Реальность, однако, всякой выдумки смешней. MS>>http://www.lenta.ru/news/2006/05/23/flexgo/ WH>Как я понимаю это что-то типа покупки компьютера в рассрочку. WH>Причем платить можно хоть сто лет. И никаких процентов, штрафов, пени итп... WH>Что в этом плохого?
Нет, мой наивный друг — так просто ничего не бывает. (Масяня)
..."оборудованы специальными микросхемами со встроенными функциями FlexGo". Вот в этом-то весь смысл "акции" и заключается — под видом благих намерений приручить население, чтобы потом была возможность держать своих пользователей на коротком поводке. Тебе нравится, когда тебя за хомячка держат? Мне — нет, даже если обеспечено сытое и комфортное сушествование.
MS>>Можно. Но толку-то? Если не обеспечивается соблюдение закона, то это фуфельный закон. WH>Это ты о чем?
О том, что нет ни малейшего смысла в том, что "можно задать". Вот ты устанавливаешь некую приблуду — и что, устанавливаешь ей лимит по памяти? Не верю! А приблуда оказывается вредной бомбой.
MS>>Только не надо говорить, что все это ерунда по сравнению с мировой революцией. Это очень не ерунда и примером тому — многомерные массивы. Замечательная штука! Просто мечта для ряда задач. И... совершенно бесполезная по причитне диких тормозов. WH>Это проблема конкретной реализации конкретной виртуальной машины. Это все можно оптимизировать.
Вот! Эти слова я слышу с навязчивой периодичностью. Пора сделать их пожизненным девизом и выбить на логотипе.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, GlebZ, Вы писали:
GZ>Большинство проверок на правильность делается не в runtime а JIT компилятором. Проверки выхода за границы массива, часто также вполне хорошо оптимизируется. Поэтому диких тормозов в этой связи нет и не будет.
"Нет и не будет". Почему же тогда двумерные массивы-то так тормозят?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Нет, мой наивный друг — так просто ничего не бывает. (Масяня) MS>..."оборудованы специальными микросхемами со встроенными функциями FlexGo". Вот в этом-то весь смысл "акции" и заключается — под видом благих намерений приручить население, чтобы потом была возможность держать своих пользователей на коротком поводке. Тебе нравится, когда тебя за хомячка держат? Мне — нет, даже если обеспечено сытое и комфортное сушествование.
Там же написано после того как ты сделал энное колличество выплат ограничения снимаются. И если этот чип торлько и делает что блокирует комп если не внесена плата то и черт с ним.
Не хочешь покупать комп с этим чипом плати сразу всю сумму за нормальный компьютер с нормальной виндой если не можешь заплатить все сразу бери потребительский кредит (с процентами, пени и прочеми радостями).
В чем проблема то?
MS>О том, что нет ни малейшего смысла в том, что "можно задать". Вот ты устанавливаешь некую приблуду — и что, устанавливаешь ей лимит по памяти? Не верю! А приблуда оказывается вредной бомбой.
Опятьже это решаемо. В тойже сингулярити приложение первоклассная сущьность. И без установки не работает. И это правильно. При установки приложения проверяется совместимость с окружением и требуемые приложением права. Кто мешает тудаже добавить максимальный объем памяти которое требует приложение? При этом скажем если этот объем меньше 100М (число можно настраивать) метров то ставить его молча, а если больше то спрашивать пользователя ставить или нет.
В любом случае максимум что произойдет система начнет свопить что система может легко засеч и спросить пользователя что-то типа: Тут есть зарвавшаяся программа... жрет память тоннами да так что я вся торможу. Может ее пристрелить?
MS>Вот! Эти слова я слышу с навязчивой периодичностью. Пора сделать их пожизненным девизом и выбить на логотипе.
Ну а я вижу как .НЕТ с каждой версией работает все быстрее и быстрее.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
C>>Переписывать ВЕСЬ (причем абсолютно весь) софт ради крайне редких случаев, в которых из-за наведенных ошибок портятся данные? Нафиг такое надо. WH>Ну можно начать с серверов и банков. Там итак очень много софта написано на safe языках.
Сервера и банки давным давно сидят на safe-языках и платформах. Многие писали и продолжают писать на Oracle Forms'ах, PowerBuilder (от Sybase) и подобных средствах. Сейчас переходят на более современные платформы вроде той же жабы.
Так что серверно-банковская сфера не соприкасается с клиенской. И не факт, что если в банках ставят жабу, то значит скоро начнут ее применять на клиентах. И не надо приводить в пример специфические средства, которые используются разработчиками )))
Андрей Хропов wrote: > C>Программист. Если хочет — пусть пишет хоть на brainfuck'е в новой > C>супербезопасной EverFuckVirtualMachine от MS. Главное, чтобы остальным > C>это не мешало. > Ответил здесь <http://rsdn.ru/forum/Message.aspx?mid=1912518&only=1>
.
А как насчет D, например? Он тоже под SuperManagedOS работать не будет.
>> > Как ты думаешь почему так популярны всякие жабы и дотнеты? > C>Как ты думаешь, а почему они популярны там, где пофиг на объемы > C>сжираемой памяти и быстродействие? > Почему же их все-таки используют если они так плохи?
Так ведь и не используют почти нигде, кроме корпоративных приложений.
> А вообще есть классический пример: Re: Частые вычисления по > неопределенной формуле!!! > <http://rsdn.ru/forum/Message.aspx?mid=630887&only=1>
.
Ну и как часто это надо? Я в своей практике не помню ни разу, когда
такое понадобилось.
>> > Значит они сделали что-то не так. Посмотри на отчет о сингулярити она >> > работает плюс/минус с тойже скоростью что современные винда и линух. И >> > это при том что сингулярити практически не оптимизировали. > C>Сингулярити не позволяет использовать нативный код. > Какая разница? > Ну будет скомпилировано из MSIL JIT или AOT компилятором в тот же > машинный код.
Сингулярити не позволяет НАПРЯМУЮ использовать:
1. Машинный код и языки компилирующие в него.
2. Ручное управление памятью.
3. Виртуальную память (хотя, возможно, и добавят).
Андрей Хропов wrote: >> > А как виртуальныя машина отменяет разнообразие языков? Единственное что >> > правильная ВМ отменяет всякие низкоуровневые языки которые не >> > контролируют то что делает программист. Но вот нужны ли такие языки? > C>Нужны. > Но для небольшого числа применений (в ядре ОС и драйверах).
А так же в:
1. Desktop-приложениях (оффисы, браузеры и т.п.)
2. Требовательных приложениях (CAD-системы, графические редакторы и т.п.)
3. Мелких утиллитах.
> C>В качестве Fully Managed OS — уже сейчас у IBM есть AS/400, там как раз > C>ВЕСЬ код в виртуальной машине выполняется. Хотя там набор инструкций VM > C>больше напоминает классические процессорные команды и не является > C>"безопасным" (хотя AS/400 и гарантирует, что приложение не вырвется за > C>пределы логического раздела). Работает все это очень медленно. > Так там наверное интерпретация, а не JIT.
Нет, там JIT. Иначе оно бы совсем не жило.
> В Java и .NET перешли на JIT модель.
В Java — уже на HotSpot.
Андрей Хропов wrote: > C>То же самое может замечательно и с .NET-программами случится. > В .NET ошибки обращения по неверному адресу и висящих указателей > исчезают как класс.
И что? Я не понимаю почему все должны от этого петь и танцевать.
Лично в моем проекте такие ошибки не создают ну абсолютно никаких проблем.
> От ошибок в логике никто не застрахован, но их труднее сделать и они > быстрее всплывают.
Вот как раз обращения по неверному адресу всплывают сразу при тестировании.
> C>Переписывать ВЕСЬ (причем *абсолютно весь*) софт ради крайне редких > C>случаев, в которых из-за наведенных ошибок портятся данные? Нафиг такое > C>надо. > А этого и не будет. > ИМХО Будет работать в своей виртуальной машине под управляемой ОС. > Как сейчас DOS и Win16 приложения.
При миграции DOS->Windows можно было использовать старый код без особых
проблем. В данном случае старый код придется переписать полностью весь.
> C>Трассировка стека замечательно делается и без .NET, причем еще со времен > C> 70-х годов (core dump'ы). > Core Dump, если я правильно понимаю, снимок памяти процесса в тот > момент, когда он упал. > Ковырять его — удовольствие, я думаю, много ниже среднего .
Ага. Ведь приходится запускать отладчик и открывать его. А потом в
отладчике смотреть на все эти stacktrace'ы для всех потоков, фреймы
функций, значения локальных переменных.
> C> На Винде есть: > C>http://www.codeproject.com/debug/XCrashReportPt4.asp > Ага, если сам стек не запорчен, что сделать проще простого:
А это находится при первом тестировании с включеной проверкой стека. Или
с включеным Rational Purify.
> Адрес возврата запорчен и переход происходит непонятно куда > (точнее внизу видно, что на 0x0000024 ), > а так этим и злоумышленники пользуются.
И это элементарно отслеживается кучей тулзов.
> Это здесь ошибку просто найти, а если между объявлением массива и его > использованием много кода?
Берется Purify или Valgring (намного лучше, но не работае на Винде) и
находится за минуту.
Вдобавок, Valgrind еще умеет и места race condition'ов находить в
многопоточных программах.
> C>2. Крупных десктопных приложений. > В Visual Studio 2005 много .NET кода (7,5M LOC): > здесь <http://weblogs.asp.net/JackieG/archive/2006/03/17/440456.aspx>.
Ну не являются средства разработки приложениями для обычных конечных
пользователей.
Здравствуйте, Cyberax, Вы писали:
C>Сингулярити не позволяет НАПРЯМУЮ использовать: C>1. Машинный код и языки компилирующие в него. C>2. Ручное управление памятью. C>3. Виртуальную память (хотя, возможно, и добавят).
Kluev wrote: > C>Сингулярити не позволяет НАПРЯМУЮ использовать: > C>1. Машинный код и языки компилирующие в него. > C>2. Ручное управление памятью. > C>3. Виртуальную память (хотя, возможно, и добавят). > А файлы она в память умеет отображать?
Нет, так как защиты памяти там нет (все в нулевом кольце сидит и
работает с физическими адресами).
Здравствуйте, McSeem2, Вы писали:
MS>Почему же тогда двумерные массивы-то так тормозят?
Ты главное никому об этом не рассказывай. Это самый большой секрет.
А вообще, все можно написать чтобы тормозило. И массивы, и работу с типами.
Lloyd wrote: >> > В Java и .NET перешли на JIT модель. > C>В Java — уже на HotSpot. > А в чем отличие HotSpot-а от JIT-а?
HotSpot производит постоянный мониторинг кода и производит адаптивную
оптимизацию. То есть один и тот же код может быть JIT-скомпилирован
несколько раз.
Здравствуйте, Cyberax, Вы писали:
C>А как насчет D, например? Он тоже под SuperManagedOS работать не будет.
В сад этот D. Кому он нужен? Я еще понимаю С/С++ на них куча кода написано... но D...
C>Так ведь и не используют почти нигде, кроме корпоративных приложений.
А чем корпоративные приложения плохи?
C>Сингулярити не позволяет НАПРЯМУЮ использовать: C>1. Машинный код и языки компилирующие в него. C>2. Ручное управление памятью. C>3. Виртуальную память (хотя, возможно, и добавят).
Осталось понять зачем это нужно. Ты же не объясняешь, а только говоришь что никак без этого нельзя.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
WolfHound wrote: > C>А как насчет D, например? Он тоже под SuperManagedOS работать не будет. > В сад этот D. Кому он нужен? Я еще понимаю С/С++ на них куча кода > написано... но D...
А почему "в сад" должен отправляться D, а не C#?
> C>Так ведь и не используют почти нигде, кроме корпоративных приложений. > А чем корпоративные приложения плохи?
У них (как и у приложений для разработчиков) немного другой фокус.
Корпоративные приложения используются для обеспечения работы компании и
обычно неважно, что они занимают на 30Мб больше памяти — прибыль для
корпорации важнее.
> C>Сингулярити не позволяет НАПРЯМУЮ использовать: > C>1. Машинный код и языки компилирующие в него. > C>2. Ручное управление памятью. > C>3. Виртуальную память (хотя, возможно, и добавят). > Осталось понять зачем это нужно. Ты же не объясняешь, а только говоришь > что никак без этого нельзя.
А зачем вообще нужен .NET?