когда я увидел C# в первый раз, я думал, что это должно быть некоторой шуткой. Я запускал с программирования в C. Но в C# Вы могли просто перетащить объекты и просто записать код события им. Это было настолько просто.
Теперь, я все еще как C больше всего, потому что я очень притягиваюсь к основным низкоуровневым операциям и C, просто затем нахожусь на одном уровне ассемблера с немногими основными стандартными программами, таким образом, мне нравится он очень. Еще больше, потому что я пишу небольшие приложения для микроконтроллеров.
Но вчера я записал очень простую управляющую программу для своего основанного на микроконтроллере светодиодного куба в asm, и мне был нужен некоторый способ просто создать последовательности анимации к Кубу. Так, я помнил C#. У меня нет практически навыков C#, но тем не менее я создал простую программу для создания последовательностей анимации приблизительно в час с GUI, только со справкой Google и справкой встроенных функциональных описаний в C#.
Так, чтобы перейти к сути дела, там некоторая другая причина затем максимальная скорость, для использования какого-либо другого языка, чем C#? Я имею в виду, это настолько эффективно. Я знаю, что Java - немного подобное, но я ожидаю, что C# будет большим количеством Windows, действительного согласно непосредственно от Microsoft.
Второй вопрос, каково преимущество компиляции в CIL, и, чем выполнение CLR, чем непосредственно компиляция он в машинный код? Я знаю, что мобильность один, но так как C# главным образом для Windows, разве не было бы более способно просто скомпилировать его непосредственно?Спасибо.
1 - у разных языков есть свои плюсы и минусы. Существуют семейства языков (функциональные, динамические, статические и т.д.), которые лучше подходят для конкретных проблемных областей. Вам нужно выучить по одному языку из каждого семейства, чтобы знать, когда какой выбрать. Например, чтобы написать простой скрипт, я бы выбрал Ruby вместо C#
2 - Компиляция в CIL: Возможно, переносимость не является большой проблемой... но, если быть точным, Mono имеет реализацию CLR в Linux. Так что вот. Также CIL помогает вам смешивать и сочетать языки, которые работают на CLR. Например, IronRuby может обращаться к стандартным библиотекам фреймворка, написанным на C#. Это также позволяет CLR использовать фактическое оборудование (например, включать оптимизацию, использовать определенные инструкции), на котором выполняется программа. CLR на двух машинах будет производить лучший нативный код из одного и того же IL для соответствующей машины.
Выбор языка и платформы зависит от цели проекта. Похоже, вам нравится программирование на системном уровне, что является одной из сильных сторон использования C / C ++. Итак, продолжайте писать код системного уровня, если вам это нравится.
Написание на C # - это сильная сторона быстрой разработки бизнес-приложений, в которой цели совершенно разные. Более быстрое написание хорошего рабочего кода стоит денег как в человеко-часах, так и в плане времени выхода на рынок. Microsoft оказывает нам огромную услугу, предоставляя выразительный язык и прочную функциональную основу, которая избавляет нас от необходимости писать низкоуровневый код или инструменты для 95% бизнес-потребностей.
Одним из важных преимуществ IL является языковая независимость. Вы можете определять модули в проекте, которые должны быть выполнены на C ++, некоторые - на C #, а некоторые - на VB.net. Все эти проекты при компиляции дают соответствующие сборки (.dll / .exe). Для этого вы можете использовать сборку для проекта C ++ в C # one и наоборот. Это возможно, потому что .. независимо от того, какой язык (поддерживается .net) вы выберете .. все компилируются в один и тот же код IL.
Далее по второму вопросу: вы можете запустить NGEN для генерации нативного образа ассемблера, что может повысить производительность. Это не совсем машинный код, но поскольку он обходит фазу JIT (just-in-time compile), приложение будет работать гораздо быстрее.
http://msdn.microsoft.com/en-us/library/6t9t5wcf(VS.80).aspx
Native Image Generator (Ngen.exe) это инструмент, который улучшает производительность управляемых приложений. Ngen.exe создает нативные образы, которые файлы, содержащие скомпилированный машинный код, специфичный для процессора, и устанавливает их в нативный образ кэш на локальном компьютере. Программа среда выполнения может использовать собственные образы из кэша вместо того, чтобы использовать компилятора "точно в срок" (JIT) для компиляции исходной сборки.
Я не уверен, что C # более эффективен только потому, что это продукт Microsoft. Если вы используете Visual Studio или другой RAD, часть кода создается автоматически и иногда менее эффективна. Несколько лет назад я был догматиком, полагая, что только C может ответить на все наши молитвы :-P, но теперь я думаю, что виртуальные машины могут сильно помочь в оптимизации кода перед его выполнением (например, РСУБД), хранением в кешированных частях. кода для последующего выполнения и т. д. Включая возможность создания «кластеров» виртуальных машин, как это делает Terracotta. По крайней мере, преимущества наличия дополнительного уровня абстракции больше, чем его отсутствие.
Я согласен с Споулсоном. C # действительно хорош для решения бизнес-задач. Вы можете очень эффективно создать структуру, которая моделирует ваши бизнес-процессы и решить многие из этих проблем с помощью объектной ориентации и шаблонов проектирования. В этом отношении он обеспечивает большую часть хороших объектно-ориентированных возможностей, которыми обладает C ++.
Если вас беспокоит скорость, C - это путь, по которому следует идти по причинам, которые вы указали.
"Есть ли еще какая-то причина, кроме максимальной скорости, чтобы использовать любой другой язык, кроме C#?"
Я могу назвать как минимум четыре, все они в некоторой степени связаны:
"В чем преимущество компиляции в C#, а затем запуска в CIL? в CIL, а затем запускать в CLR, чем чем непосредственно компилировать его в машинный код?"
Все дело в том, чтобы дать среде выполнения больше контроля над тем, как выполняется код. Если вы компилируете в машинный код, то многое в этот момент становится "заданным". Откладывание компиляции в машинный код до тех пор, пока вы не узнаете больше о среде выполнения, позволяет вам оптимизировать код так, как вы, возможно, не смогли бы в противном случае. Вот лишь некоторые из них:
Первый ответ: C # следует использовать по умолчанию для новых проектов. Есть несколько случаев, когда он еще не догнал C ++ (с точки зрения поддержки нескольких парадигм), но он движется в этом направлении.
Второй ответ: «переносимость» также включает переносимость x86 / x64, которая может быть достигнута путем установки платформы на AnyCPU. Другое (более теоретическое на данный момент) преимущество заключается в том, что JIT-компилятор может использовать набор инструкций, зависящий от процессора, и, таким образом, более эффективно выполнять оптимизацию.