2009-10-24 2 views
7

Написание быстрых родных приложений, с вызовами API и т. Д., В современном кроссплатформенном языке программирования, таком как C#, было бы замечательно, не так ли? Например, если вы хотите написать простую утилиту, помогающую ИТ-специалистам с установкой вещей, которым не нужны другие компоненты, на простом и современном языке программирования? или если вы хотите написать 3D-игру, она должна быть быстрой, и JIT просто сделает ее медленнее ...C# без .NET Framework

Почему, почему это невозможно? Почему для этих вещей нет родных современных языков программирования?

+0

XNA может использоваться для создания 3D-игр и использования C#. – statenjason

+2

Почему это «медленнее?» –

+10

Было бы здорово. На самом деле, это потрясающе. Вы можете написать потрясающие 3D-игры с C#, вы можете написать awesome install utilities. Так что сделай это! Иди и будь потрясающим! –

ответ

15

C# и .Net : Собственный код. Я думаю, вы неправильно поняли JITter. Это не виртуальная машина. Программа C# скомпилирована в полностью собственный код, прежде чем он будет выполнен.

Теперь часть «необходимости других компонентов» является проблемой. Дайте ему время. Вам будет трудно найти установку Windows в эти дни, не менее .Net 2.0, и даже пару основных дистрибутивов Linux включают моно из коробки.

+1

Я думал, что .NET JIT - это виртуальная машина. Сожалею. –

+2

Ну, JIT является частью всей виртуальной машины .net. Дело в том, что код не интерпретируется, он компилируется в собственный код «на лету». –

+0

Возможно, вам стоит взглянуть на это. http://stackoverflow.com/questions/1564348/is-the-clr-a-virtual-machine –

-3

есть, C. C может использоваться для написания любого приложения, когда-либо !!!

+0

Итак, как вы пишете первый компилятор C? ;) – Nick

+1

Первый компилятор C++ был написан на C++;) – lerosQ

3

Скомпилированные .NET-программы, как было показано, работают так же быстро, как C. Если вы хотите, чтобы это было очень сложно, напишите в сборке для вашего собственного процессора.

2

Инструмент Microsoft NGEN.EXE можно использовать для создания собственного образа сборки .NET. См. MSDN NGEN documentation. Microsoft уже сейчас о том, что вы здесь делаете.

Microsoft также делает ILMERGE.EXE tool для объединения нескольких файлов сборки в один. Это может также ограничиться оптимизацией и скоростью.

7

Не предполагайте, что JIT замедляет работу. JIT может оптимизировать точный компьютер, на котором запущено приложение, а не на общий компьютер, такой как 386 или Pentium. Он может даже принимать более эффективные решения по обмену скоростью и памятью при генерации кода, поскольку он точно знает, что доступно. И если JIT все еще замедляет работу, вы можете NGEN их, так что JITting все сделано заранее.

В качестве доказательства этого, считает, что Quake has been ported to the CLR пару раз, и в моих личных тестах, кадры в секунду были быстрее когда Quake работает на CLR около половины времени я DEMO его.

0

В качестве примечания к примечанию, Mono имеет полный опережающий компиляцию, устраняя время выполнения. (Я думаю, что это то, как они уходят с iPhone на iPhone, что запрещает любые JIT.)

0

Итак, это означает, что мы могли бы полностью скомпилировать и связать программу C# с использованием (ограниченных) вызовов .NET в автономный EXE, который запустить без установки .NET вообще?

FYI: Проверка состояния сервера на 5000 серверов показала около 200 без .NET 2.0.

Это вызывает проблемы для кода, который должен запускаться во всех «экземплярах Windows». С .NET 4.0+, не включая 2.0, это ухудшается, поскольку и новые, и старые машины Windows могут не иметь «правильных». NET