Enot Pk
@ 16-02-2007, 10:07
В процессе создания ИИ вышла у меня палемика с одним кадром по поводу, и в качестве примера было приведено следующее:
QUOTE (Quark) |
ООП уже много раз сравнивали с более традиционным подходом, сейчас начинают сравнивать безопасные языки с более традиционными и выводы показывают, что безопасные языки не только могут быть безопаснее, но и быстрее |
QUOTE (Quark) |
быстрее не в плане оптимизации, а в плане принципов работы, распараллеливании и т.п. В частности, новая экспериментальная ОС от микрософта выполняет безопасный код без аппаратной защиты, что ускоряет межпроцессорное взаимодействие в 5-10 раз и обращение к памяти до 33% |
оттуда 2 вопроса:
1) можно попросить ссылку на исследование? Желательно с кодом и условиями. (Сложно переоценить моё недоверие к этому источнику:) )
2) Что сие значит? Код-таки работает медленнее?
3) Можно ли этот текст использовать для террора автора по поводу того, что "код должен быть оптимизирован" до предела?
Ни на один из вопросов ответа от автора добиться не удалось.
-------
[:||||||||:] без ссылки - не [:||||||||:]
PinkPa
@ 16-02-2007, 19:10
ИИ - искусственного интеллекта? Безопасные языки - это что? CLR или что-то еще?
Что есть "аппаратная защита"? Если код - блок команд в машинных кодах, размещенных определенным образом в памяти и помеченный как модуль в GDT (таблице сегментов, адрес которой находится в соответствующем регистре процессора i386 и выше), этот блок автоматически "защищен" адресными рамками кода/данных и типом операций, допустимых в нем (например, только чтение). Язык программирования не оказывает на код никакого влияния, в итоге получится либо машинный код, либо псевдо-код для интерпретации, которая априори тормознее, т.к. требует дополнительных действий на разных стадиях. Правда, если этот блок машинных команд, допустим, создан через хитрозакрученную задницу каким-нибудь мелко-мягким (или крупно-твердым) компилятором, то, конечно, при желании конечный код может быть оснащен чем угодно, включая бонусной игрой "тетрис" и пультом управления боеголовками. Т.е. может быть дополнительно "защищен" таким образом, что исполнение программы замедлится в десятки раз и БЕЗ этого программа, даже реализованная интепретируемым путем, будет работать быстрее. :)
Если таки речь о CLR, то единственный аргумент в пользу скорости интерпретации, который доводилось слышать - это возможность генерить код под конкретный процессор с учетом его архитектуры. Но это довольно слабый аргумент - выигрыш от оптимизации под камень, как правило, не слишком велик, а если велик, разработчик, как правило, вкладывает несколько вариантов исполняемого кода в инсталляционный пакет и после выяснения CPUID выбирает подходящий вариант для установки.
Чтобы прибить оппонента окончательно, лучший, ИМХО, способ - предложить проанализировать, насколько будут отличаться блоки машинных команд, продукт компиляции примитивов. Например, цикл, или инициализация переменной в памяти, обнуление или обработка матрицы - короче, все те операции, из которых строятся обычные программы.
Безопасный язык уже безопасен, "безопаснее" он уже быть не может. :D:
Про аппаратную защиту тоже ниасилил... :actu:
PinkPa
@ 16-02-2007, 19:43
Перечитал текст Енота, и, кажется, понял, в чем дело. :) Речь идет не об ускорении работы кода как такового (за счет каких-то особых методов оптимизации), а о том, что его исполнение операционка будет прерывать в реже и на более короткое время, чем "небезопасный" код. Операционка, прерывающая код с целью защиты его и других участков - это, безусловно, очередное детище БГ. Очевидно, это детище - еще одна забота Майкрософта о пользователях компьютеров с процессорами x86, у которых такая непродуманная система команд! :laugh:
Только я вот чего не могу понять. Эта экспериментальная ось от M$ что, работает не в protected mode что ли? Я не очень понимаю -- в реальном режиме --- ради бога, а вот как быть с PM, таки неясно. Ведь в конечном итоге OS всё равно контролирует работу с памятью и т.п. средствами защищённого режима, как правильно сказал PinkPa -- нарушение вызывает исключение, которое потом обрабатывается.
Никакого дополнительного контроля по сути не проводится. Так вот мне не ясно, а как они собираются плевать на привилегии-то? Это что за архитектура такая? Если не x86, ну тады другое дело.
И вот эта самая фраза меня тем более смущает: "ускоряет межпроцессорное взаимодействие в 5-10 раз". Что-то тут нечисто, видать не про x86 тута речь. А тогда это вообще всё "не к нам" :)
Lord KiRon
@ 17-02-2007, 01:29
Читал , дуамал , ещё раз читал и так раз 5 ... вроде я и програмист но о чём речь хоть убейте не понял - то ли это должно быть понятно специлиалисту то ли это вообще набор терминов сваленный в кучю .
Пока не будет конкретных ссылок, ничего сказать нельзя (имхо). Домысливать уже почти все попробовали -- я думаю, и на 10 процентов к истине не подошли. Ждём-с. Мне просто уж интересно стало, неужто я так от жизни отстал...
Enot Pk
@ 24-02-2007, 00:31
Ссылку таки дали!
http://rsdn.ru/article/singularity/singularity.xml и ещё поиздевались поймём ли оригинал на аглицком.
http://research.microsoft.com/os/singularity/------
Чем больше я узнаю настоящее, тем лучше я представляю себе будущее и тем сильнее хочу вернуться в прошлое.
PinkPa
@ 24-02-2007, 17:58
Прочел, в целом смешно. Видоизмененный CLR. О чем и писал. Вообще в последнее время наблюдается капитальная каша в головах. В то время как базовый вопрос - о языках программирования и скорости исполнения - легко бьется на три составляющие:
1) Исполняемый процессором (процессорами) код;
2) Компилятор (+оптимизатор), обеспечивающий перевод текста на языке высокого уровня в машинный код;
3) Язык высокого уровня как надстройка, упрощающая разработку ПО.
Машинный код, фактически, имеет константную скорость исполнения - скорость исполнения каждой команды известна, как частота тактового генератора компьютера, на котором исполняется данная программа. Она не зависит от того, на чем была написана программа и какой компилятор ее переводил в маш. коды. Только машинные команды, которые можно посмотреть и оценить их эффективность "в миниатюре", насколько экономятся такты и место.
Компилятор может в той или иной степени справиться с задачей создания кода, близкого по скорости исполнения программы, написанной на "хорошем" ассемблере, т.е. написанной экономично. Пока в этой области лидировал Watcom C.
Сам по себе язык высокого уровня не имеет никакого отношения к производительности. Высокоуровневая надстройка отвечает исключительно за способ удобного в той или иной степени расположения данных в программе, определения доступа к ним и манипуляции ими - по-сути, это рабочий стол программиста, его верстак. В конце же мы имеем, как и следовало предположить, тот же машинный код - память, регистры и стэк - но этим занимается не сам язык, а компилятор + оптимизатор, т.е. уровень 2. При большом желании можно написать компилятор бейсика, создающий PM-приложения и обеспечивающий за счет удачной оптимизации высочайшую производительность.
Защищенность НЕ ИМЕЕТ никакого отношения к быстродействию. Защита позволяет устранить неудобства от запуска плохо написанных программ, и все. Реализация защищенности сверх защиты, предоставляемой на уровне процессора программиста, как правило, не требуется - система команд i386 и выше предоставляет все средства для создания хорошей ОС без модификации языков программирования, сред разработки и исполнения. Ядро ОС должно просто ликвидировать зависшее приложение, и все, а не дать ему развернуться - дело процессора. Рассказы о "защищенном коде", "бла-бла-бла", а также о том, что интерпретируемый MSIL будет работать быстрее ассемблерного кода - не более, чем попытка заморочить голову себе и людям, рекламный ход ох.....го монополиста, старика-демагога, рассказывающего молодой девушке о том, что мягкий член лучше твердого.