![]() |
#1 | ||
Guest
Сообщений: n/a
|
![]() ![]() |
||
|
![]() |
#2 | ||
Заблокирован
Регистрация: 16.09.2006
Адрес: Matrix4x4
Сообщений: 56
Репутация: 10
Предупреждения: 400
|
Что значит "лёгкая и быстродейсвующая"? Молодой человек, XNA ещё очееень далеко до Direct3D 10 и OpenGL 2.0. Может просто С++ выучить не могите? м?
Цитата:
Цитата:
|
||
![]() |
|
![]() |
#3 | ||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
О, да! Еще один "великий программер" пришел всех учить!
Fulcrum абсолютно прав. Добавлю, что я пробовал писать 3D игру на C#. Результат - проект закрылcя в самом начале. К счастью. Так что я имею представление о быстродействии этого чуда. C# - это язык для написания, возможно, офисных программ, но ни в коем случае не требовательных к ресурсам приложений. Отсутствие заботы о памяти - не достоинство, а недостаток. Из него, а также из использования байт-кода, вытекает жутко медленная скорость работы, а также потребление лишней этой самой памяти - ведь объекты удаляются не сразу, а когда до них дойдет функция очистки. А за это время может еще понадобится наплодить объектов... Да и не будем забывать, что все функции в C# виртуальные! Кроме того, пиша программы на C#, Вы ставите себя в зависимость от Framework'. Если там вдруг будет глюк (что у Майкрософта не редкость) - все, программа накрылась медным тазом. Если у Вас код на C# оказался быстрее кода на C++... Уж не знаю, что Вы такое сделали, что так могло получится... Бесконечный цикл, что ли, пытались выполнить ![]() Сейчас долго думал, и все же пришел к выводу, что для обучения программированию C# тоже не очень подходит. То же отсутствие заботы о памяти может здорово навредить программисту, если он после C# возьмется осваивать, например, C++... P.S. А автору темы рекомендую попробовать Prolog или Mercury. Вот уж действительно дружественные к программисту языки! Все подчинено логике, задачи поиска реализуются элементарно, да и все остальные тоже. А если кто-то напишет 3D игру на одном из этих языков (и она будет выдавать больше пары FPS), то напишите мне - любопытно будет посмотреть на это чудо!
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) Последний раз редактировалось pokibor; 25.09.2006 в 21:46. |
||
![]() |
|
![]() |
#4 | ||
Guest
Сообщений: n/a
|
Судя по вашей речи - вы не имеете никакого отношения к программерам. "С++ медленнее С#" - бред! Код исполняемый в интерпритаторе не может быть впринципе быстрее бинарного.
Так похоже вы ничего не знаете о платформе .NET. я сказал же (Если кто несогласен я вам расскажу много нового) вот начнем. C#(.NET вообщем) это не ИНТЕРПРЕТИРУЕМАЯ а компилирумая в оптимизизированый к конкретному процесору и памяти, код прямо на машине клиента(Конечного юзера) среда. Есть два вида компиляции. 1) JIT - just-in-time это значит что вся програма компилируется во время выполнения. Вот это и есть ваши "На 35%". Я использую только для дебага. 2) AOT - Ahead-of-time это значит что прога компилируется прямо в нейтивный код во время устоновки. Времени занимает не очень много.Для увесистой проги это секунд 10 на pIII 800 MHz. "Судя по вашей речи - вы не имеете никакого отношения к программерам." Я прогаю уже 2 года на уже 4 языках и остановил свой выбор на C#. Итог - сам учи матчасть Цитата:
Про бесконечный цикл спасиб ![]() System.Reflection Последний раз редактировалось Mr.Metis; 21.09.2007 в 16:27. |
||
|
![]() |
#5 | ||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Два года????
![]() О, ну тогда не нам, жалким ламерам, программирующим по восемь лет, Вас учить! Не подскажите, какой институт окончили, или Вы еще в школе? А теперь о том, почему C# в принципе не может быть быстрее кода на C++: 1) Уборка памяти: как может код, который постоянно обходит все объекты и проверяет, не достигло ли количество ссылок на них 0, может быть быстрее кода, этого не делающего? 2) Как может код, компилирующийся во время выполнения (почти интерпритация!) может быть быстрее кода, этого не делающего? 3) Как может код, в котором все функции виртуальные, быстрее кода, в котором это не так? 4) Да, и еще вопрос вдогонку: как вообще может программа, использующая куда больше библиотек, чем c-шная, быть быстрее ее?
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) Последний раз редактировалось pokibor; 25.09.2006 в 21:56. |
||
![]() |
|
![]() |
#6 | ||
Guest
Сообщений: n/a
|
Цитата:
1) Ну почему так сразу, ты слыхал про такую штуку как оптимизация. Для .NET она тоже сушествует. Надо соблюдать её и всё будет ок. 2) Ты слыхал про утилиту ngen.exe? NativeGENERATOR переводится. Она делает очень быстрые native'ные файлы. Хотите сравнить две анологичные проги на C# и на С++ - ок я могу это устроить. Да и ктомуже если вы не поняли я хочу подметить что С# код оптимизируется под машину юзера - он будет использовать(Я имею ввиду код) проц на полную. Он учитывает начиная от разрядности до дополнительного набора инструкций. А теперь про С++. Интересно можно ли на С++ сделать такойже оптимизированый код как на С#. Мне интересно кто это будет делать на конечной машине - млжет юзер или святой дух? 3) Ты хоть понял что сам сказал ![]() ЗЫ. Возраст и образование не имеет значения - слыхали про 16 летнего подростка который выпустил свой LiveCD Linux дистрибутив. ЗЫЫ. С++ я знаю, но не имею большого опыта ЗЫЫЫ. Вы сказали что XNA очень далеко до DirectX 10 и OpenGL 2.0. Да до ОпенЖеЛе 2.0 ему еше очень далеко - не думаю что Microsoft опустится до такого ![]() Последний раз редактировалось Knott; 25.09.2006 в 22:25. |
||
|
![]() |
#7 | |||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
Цитата:
![]() Про использовании разрядности процессора: оно приносит пользу только в специфических задачах, и их вполне можно изначально скомпилить в двух вариантах. К тому же я не совсем понимаю, как вообще можно написать, например, сетевое приложение, не зная, сколько в каком типе бит у тебя будет. Будешь слать по сети вроде 32-х битное число, а оно - опа! - 64-х битным станет. А откуда компилятору знать, что в нем у тебя не может быть числа, больше чем 1000000, чисто по конструкции программы? Цитата:
Кстати, оптимизация C++ - программ во многом базируется на вещах, с которыми в C# играться нельзя - например, на адресной арифметике. А ты хоть знаешь, что такое виртуальная функция? Судя по всему, нет. Возраст - да. Образование - нет. Гении всегда есть, но их мало, и не надо приводить единичные примеры. И на вопрос об образовании ты не ответил.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) Последний раз редактировалось pokibor; 25.09.2006 в 22:35. |
|||
![]() |
|
![]() |
#8 | ||
Guest
Сообщений: n/a
|
Набор интструкций, кстати, у современных процессоров почти одинаков. И еще мне интересно, откуда эта утилита будет узнавать о выходе новых процессоров - получается, что она устареет сразу после своего выхода.
Чет ты гониш. Я же не сказал что под конкретную модель подстраивается. Эт происходит так: Win32: я загружаю ехе, тут флаги клр есть. CLR: это флаги джита JIT: нашли самого левого. О юзера 32 risc проц есть SSE,SSE2,MMX,3DNOW! итд. Буду оптимизить под нехо. "Набор интструкций, кстати, у современных процессоров почти одинаков." не спорю - а как насчет расширений? Как об этом узнает прога на С++? "Оптимизация кода на машине юзера теряет смысл хотя бы потому, что ее конфигурация не постоянна. Регулярно меняются драйверы, устройства, ОС, наконец!" Драйверы тут не причем, устройства тоже, и вообще что мешает сделать так что-бы при изменении конфигурации, прога меняла свою нативный образ? Да и почему ты не упомянул статический C++? ![]() "Такая программа перед каждым запуском должна перекомпилироваться, да и во время работы тоже, потому что постоянно меняется окружение, другие программы" Другие программы - нет, дригие либы - да. Только есть одно но - либы в .net на много отличаются от с++. "а, C++-код оптимизироваться не может, но его, во-первых, можно изначально скомпилировать под различные конфигурации, и ставить юзеру в зависимотсти от его конфигурации соответствующий экзешник, а во-вторых, такую оптимизацию на должном уровне написать практически невозможно по причинам, указаным выше." Вот вот оптимизироватся неможет... Хош сказать что ты должен сделать столько версий что-бы удолетворяло обсолютно всем конфигурациям? Да и ктому же про конфигурации. Где ещё как не .net ты можеш одну прогу запускать как на Linux так и на Windows. Да и ктомуже как ты будеш давать всем свои "разные конфигурации" разным пользователям если твоя прога распростроняется посредством диска. Кстати ты смотрел на размер ексешника .NET? Так вот посмотрите. "А ты хоть знаешь, что такое виртуальная функция? Судя по всему, нет." - Судя по всему, нет - это судя по чему? В .NET не так всё "виртулизировано" ![]() "Кстати, оптимизация C++ - программ во многом базируется на вещах, с которыми в C# играться нельзя - например, на адресной арифметике." В С# можно игратся с адресной арфмитикой. Читай доки Последний раз редактировалось Knott; 25.09.2006 в 22:58. |
||
|
![]() |
#9 | |||||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Во-первых, пользуйся цитатой! Невозможно понять, где цитата, а где ответ на нее!
Цитата:
Цитата:
Как я уже говорил, такую оптимизацию сделать нереально хотя бы потому, что эта задача почти приравнивается к искуственному интеллекту. Такие ходы, как при оптимизации на C++, ни одна автоматическая система не повторит. Цитата:
Цитата:
Цитата:
Интересно, как это - при наличии только виртуальных функций "не все виртулизировано"? Да, и тут еще один вопросец назрел: Программа на C# компилируется в байт-код. Даже если он будет у юзера на машине компилироваться в двоичный код, все равно юзеру ты даешь байт-код. А теперь внимание, вопрос: Что мешает юзеру оказаться хакером, перегнать твой байт-код назад в C# (по ассемблерному коду код на C++ восстановить практически нереально, а по байт-коду код на исходном языке - элементарно) и посмотреть в нем все твои программистские секреты, отключить любую самую хитрую регистрационную систему и защиту от копирования, да и просто найти твои ошибки, наконец? И использовать все это в своих грязных целях, бесповоротно запоров твою программу? Взломав компьютеры всех юзеров, ею пользующихся? За пару часов написав кряк? Вставив в нее вирус? Так что программа в байт-коде - мечта хакера. Не нужно часами копаться в ассемблере и ловить прерывания! Пара секунд - и программа предстает перед ним в своем исходном виде, готовая к любому вмешательству! Итог: программа на C# медленне программы на C++ хотя бы в силу своей конструкции. Оптимизация не может ничего дать, кроме незначительного выигрыша, из-за сложности самой задачи. Программа на C# практически элементарно взламывается и модифицируется (и я не говорю уже про Framework - т.е. систему с закрытыми исходниками - от которого все зависит! Если в нем будет закладка, баг, дыра - конец всем C#-программам! Вывод: ты можешь быть прав только в случае, если Майкрософт заставит всех писать только под .NET, и не найдется никого, решившегося реализовать похожие возможности для C++ (для которого они реализуются проще). Надеюсь, что этого не случится. Да ладно? В языке без возможности работы с памятью? Мы точно об одном и том же говорим?
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) Последний раз редактировалось pokibor; 26.09.2006 в 00:20. |
|||||
![]() |
|
![]() |
#10 | |||||
Guest
Сообщений: n/a
|
Цитата:
Допустим тебе надо перемножить флоаты. Если SSE будет то код будет вместе с этими SSE. Цитата:
![]() Цитата:
Цитата:
[quote]Вывод: ты можешь быть прав только в случае, если Майкрософт заставит всех писать только под .NET, и не найдется никого, решившегося реализовать похожие возможности для C++ (для которого они реализуются проще). Надеюсь, что этого не случится.[/qoute] Ты хоть слышал про Singularity - нет? почитай. Про баг в .net framework, это странно но ещё не одного бага с framework'ом небыло. Цитата:
using System; namespace Knott.Benchmark { internal unsafe class Program { private unsafe static void Main(string[] args) { DataHolder holder = new DataHolder(); for (int i = 0; i < 128 / 4; i += 4) { DataStruct str = new DataStruct(); str.Offset = i; str.Location = holder.Array; str.Data = i * 10; } } } public unsafe struct DataHolder { public fixed byte Array[128]; } public struct DataStruct { public int Offset; public unsafe void* Location; public unsafe int Data { get { int* dataLocation = (int*)((byte*)Location + Offset); return *dataLocation; } set { int* dataLocation = (int*)((byte*)Location + Offset); *dataLocation = value; } } } } Я не уверен что этот код работет правильно - но дело в том что поинтеры там есть. |
|||||
|
![]() |
#11 | |||
Заблокирован
Регистрация: 16.09.2006
Адрес: Matrix4x4
Сообщений: 56
Репутация: 10
Предупреждения: 400
|
Цитата:
Цитата:
Цитата:
Последний раз редактировалось Fulcrum; 26.09.2006 в 10:23. |
|||
![]() |
|
![]() |
#12 | ||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
Это ты к чему? Ты утверждал, что C#'е либы быстрее C'шных. Я опроверг это. Ты мне в ответ какой-то глупый вопрос задал. C++'е компиляторы пишутся, как ни странно, на том же C++. Также как, например, Паскаль: спера был написан его компилятор (на чем-то, от Паскаля отличном), потом переписан на самом Паскале и скомпилирован этим компилятором - это обычная практика - писать компилятор на самом языке. Но вот для C# она не проходит, т.к. он компилирует в промежуточный код... То есть компилятор C#, конечно, можно переписать на C#, а вот .NET - бессмысленно. И потому либы .NET в приципе не могут быть быстрее C'шных. Не-а. Проще. Так как имеем дело с ассемлерными инструкциями, а не с байт-кодом. Ассемблер - самый простой язык, на нем писать медленнее, а не труднее... Не забывай, у нас этот байт-код будет компилировать FrameWork. Соответственно, как бы там все не было запутано, оно в равной мере отразится как на хакере, так и на Framework, причем в равной мере. Возможно, Obfuscator'ы замедлят появление дизассемблера, но ненадолго. А ведь их применение еще более замедляет выполнение кода. Читал. И мне смешно. Это с какой же скоростью это чудо будет работать? Да не особо быстрый Windows по сравнению с этой ОС будет как заяц по сравнению с черепахой! Microsoft опять пытается выехать на своем монополизме на рынке ОС, но вовсе не факт, что у нее получится. Во-первых, подходит Google со своей бесплатной осью, которая базируется на Windows, а не начинает все с чистого листа, во-вторых, вряд ли пользователи, если они не дураки, захотят замедлить свой комп и сделать его уязвимым для хакерских атак (байт-код!) непонятно ради чего, в-третьих это чудо выйдет непонятно когда. Похоже, что ты начитался рекламных статеек от Майкрософта и начинаешь кричать всем, что "давайте поддержим дядю Билли!", хотя его за такие дела пора заставить на ассемблере программировать для стиральных машин! ![]() Цитата:
Слыхал. Только смысла в нем? Его использование превращает язык в C++ с чуть другим синтаксисом и более тормознутым выполнением. И все. Ты, помнится, отсутствие необходимости работы с памятью выводил в преимущесива. Вот и не противоречь себе же. Работает - не работает - не важно. Важно то, что с их использованием язык перестает быть собой и становится очевидно хуже C++. Так что их в расчет не берем.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) Последний раз редактировалось pokibor; 26.09.2006 в 10:33. |
||
![]() |
|
![]() |
#13 | |||||||||
Guest
Сообщений: n/a
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
![]() |
|||||||||
|
![]() |
#14 | |||||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
Цитата:
Цитата:
![]() Цитата:
Вот именно что читай выше - как не запутай байт-код, он байт-кодом останется. Так что - ломаем, братцы! А написаная таким образом система будет медленной потому, что C# медленнее C++, чего ты так и не опроверг. Цитата:
P.S. Хотя, если все сказанное Knott и представителями мелкомягких правда, похоже, Microsoft отказалась от изначальной идеи Windows в пользу Linux! Ведь если не брать в рассмотрение язык - действительно получается система с практически открытыми исходниками, которую компилирует сам пользователь. И по сути единственным слабым местом становится как раз медлительность языка (что, впрочем, скорее реверанс в сторону неопытных программистов), причем оно вполне может быть преодолено поставкой с сисемой, кроме компилятора C#, нормального компилятора C++ в двоичный код (а какая разница - из байт-кода или из исходного компилировать программу)? Вот только, похоже, при обновлении чего-то в компьютере (а то и просто при появлении нового драйвера) систему придется перекомпилять заново (а как еще - она же "оптимизируется" как-то. Правда, непонятно, как.)... Впрочем, в любом случае профессиональные программы как на C/C++ писались, так и будут продолжать писаться. Ибо в них обычно задействуются такие ресурсы, что малейшее замедление из-за сомнительных достоинств смерти подобно. В общем, на революцию (а тем более в игростроении - отрасли, в которой конкуренция по ресурсам наиболее жесткая) не тянет. Совмещение идей Java и Linux - еще куда ни шло, но не более.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) Последний раз редактировалось pokibor; 26.09.2006 в 16:10. |
|||||
![]() |
|
![]() |
#15 | ||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Вот письмо, присланное в нашу студенческую рассылку человеком по имени Алексей Лебедев. Отличный ответ на приведенное в начале этой темы высказывание:
Цитата:
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
![]() |
|
![]() |
#16 | ||
Guest
Сообщений: n/a
|
Знаю С++ 8лет, а С# 4,5 года, спор о производительности ваш для меня кажется странным. В больших проектах типа 1С:Бухгалтерия и т.п. написанных на ++ все равно используется автоматическая уборка мусора и быстродействие этих языков выравнивается. С# ускоряет разработку программ за счет простоты. О быстродействии могу сказать что в ближайшем будущем процессоры будут использовать НЕ команды Assembler в нынешнем виде, а микрокоманды которые не учитывают специфику расположения регистров и т.д. то есть будет использоваться высокоуровневый ассемблер типа MSIL. Microsoft ввела Framework ещё и потому, что ей проще стабилизировать 20 мегабайт кода Framework, чем 600 MB dll-библиотек которые используются сейчас в Windows сейчас. Мой вывод: Framework имеет будущее, он наверняка будет перенесён и на другие операционные системы (уже есть MONO Framework), и программисту не нужно будет задумываться под какую ОС он пишет программу, в перспективе код MSIL или подобный ему будет поддерживаться процессором НАПРЯМУЮ.
|
||
|
![]() |
#17 | ||
Зинеб Нора
Регистрация: 30.06.2003
Адрес: Köln, Germany
Сообщений: 962
Репутация: 420
|
ага, тогда или фрэймворк, или виндоус
![]()
__________________
Жив. Цел. Тигръ Графоман "Method takes the string and string to split. And split the string at string to split, also add space at the end of the string if string ends with string to split." ![]() |
||
![]() |
|
![]() |
#19 | ||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
... кроме учебника по русскому языку.
Использование подобного диалекта Вас не красит как профессионала, а именно таким Вы себя стараетесь выставить. Эм... на Вас по-прежнему Страуструп, тремя постами выше. Знаете, кто это? Впрочем, в любом случае можете попробовать ему возражать.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
![]() |
|
![]() |
|
|