С# без .NET Framework

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

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


person Alon Gubkin    schedule 24.10.2009    source источник
comment
XNA можно использовать для создания 3D-игр и использует C#.   -  person statenjason    schedule 24.10.2009
comment
Это было бы круто. На самом деле, это потрясающе. Вы можете писать потрясающие 3D-игры на C#, вы можете писать потрясающие утилиты для установки. Так иди и сделай это! Иди вперед и будь классным!   -  person Eric Lippert    schedule 24.10.2009
comment
Да - он называется Дельфи!!! Андерс Хейлсберг был архитектором как Borland Pascal, так и Delphi (до выкуплен M$) и C#   -  person Reversed Engineer    schedule 07.10.2015


Ответы (7)


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

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

person Joel Coehoorn    schedule 24.10.2009
comment
Я думал, что .NET JIT - это виртуальная машина. Прости. - person Alon Gubkin; 24.10.2009
comment
Что ж, JIT — это часть всей виртуальной машины .net. Дело в том, что код не интерпретируется, он компилируется в нативный код на лету. - person Jb Evain; 26.10.2009
comment
Возможно, вы захотите взглянуть на это. stackoverflow.com/questions/1564348/ - person this. __curious_geek; 26.10.2009

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

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

person Andrew Arnott    schedule 24.10.2009

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

person Chris Ballance    schedule 24.10.2009

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

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

person John K    schedule 24.10.2009

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

person MichaelGG    schedule 26.10.2009

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

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

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

person HerbM    schedule 25.04.2013

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

person Andrew Keith    schedule 24.10.2009
comment
Так как же написать первый компилятор C? ;) - person Nick; 12.05.2010
comment
Первый компилятор C++ был написан на C++;) - person lerosQ; 18.10.2012