Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

В качестве доказательства этого рассмотрим, что Quake был портирован в CLR пару раз, и в моих личных тестах частота кадров в секунду была выше , когда Quake работает в CLR примерно в два раза Я продемонстрировал это.

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

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

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

Как примечание, Mono полностью компилируется, что исключает время выполнения. (Я думаю, что так они бегают на iPhone, который запрещает любой JIT.)

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

К вашему сведению: проверка состояния серверов, насчитывающего около 5000 серверов, показала, что около 200 серверов даже без .NET 2.0.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top