2 основных, но интересных вопроса о.NET

когда я увидел C# в первый раз, я думал, что это должно быть некоторой шуткой. Я запускал с программирования в C. Но в C# Вы могли просто перетащить объекты и просто записать код события им. Это было настолько просто.

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

Но вчера я записал очень простую управляющую программу для своего основанного на микроконтроллере светодиодного куба в asm, и мне был нужен некоторый способ просто создать последовательности анимации к Кубу. Так, я помнил C#. У меня нет практически навыков C#, но тем не менее я создал простую программу для создания последовательностей анимации приблизительно в час с GUI, только со справкой Google и справкой встроенных функциональных описаний в C#.

Так, чтобы перейти к сути дела, там некоторая другая причина затем максимальная скорость, для использования какого-либо другого языка, чем C#? Я имею в виду, это настолько эффективно. Я знаю, что Java - немного подобное, но я ожидаю, что C# будет большим количеством Windows, действительного согласно непосредственно от Microsoft.

Второй вопрос, каково преимущество компиляции в CIL, и, чем выполнение CLR, чем непосредственно компиляция он в машинный код? Я знаю, что мобильность один, но так как C# главным образом для Windows, разве не было бы более способно просто скомпилировать его непосредственно?Спасибо.

16
задан Jaffer Wilson 4 July 2015 в 11:14
поделиться

8 ответов

1 - у разных языков есть свои плюсы и минусы. Существуют семейства языков (функциональные, динамические, статические и т.д.), которые лучше подходят для конкретных проблемных областей. Вам нужно выучить по одному языку из каждого семейства, чтобы знать, когда какой выбрать. Например, чтобы написать простой скрипт, я бы выбрал Ruby вместо C#

2 - Компиляция в CIL: Возможно, переносимость не является большой проблемой... но, если быть точным, Mono имеет реализацию CLR в Linux. Так что вот. Также CIL помогает вам смешивать и сочетать языки, которые работают на CLR. Например, IronRuby может обращаться к стандартным библиотекам фреймворка, написанным на C#. Это также позволяет CLR использовать фактическое оборудование (например, включать оптимизацию, использовать определенные инструкции), на котором выполняется программа. CLR на двух машинах будет производить лучший нативный код из одного и того же IL для соответствующей машины.

10
ответ дан 30 November 2019 в 21:36
поделиться

Выбор языка и платформы зависит от цели проекта. Похоже, вам нравится программирование на системном уровне, что является одной из сильных сторон использования C / C ++. Итак, продолжайте писать код системного уровня, если вам это нравится.

Написание на C # - это сильная сторона быстрой разработки бизнес-приложений, в которой цели совершенно разные. Более быстрое написание хорошего рабочего кода стоит денег как в человеко-часах, так и в плане времени выхода на рынок. Microsoft оказывает нам огромную услугу, предоставляя выразительный язык и прочную функциональную основу, которая избавляет нас от необходимости писать низкоуровневый код или инструменты для 95% бизнес-потребностей.

5
ответ дан 30 November 2019 в 21:36
поделиться

Одним из важных преимуществ IL является языковая независимость. Вы можете определять модули в проекте, которые должны быть выполнены на C ++, некоторые - на C #, а некоторые - на VB.net. Все эти проекты при компиляции дают соответствующие сборки (.dll / .exe). Для этого вы можете использовать сборку для проекта C ++ в C # one и наоборот. Это возможно, потому что .. независимо от того, какой язык (поддерживается .net) вы выберете .. все компилируются в один и тот же код IL.

5
ответ дан 30 November 2019 в 21:36
поделиться

Далее по второму вопросу: вы можете запустить 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) для компиляции исходной сборки.

1
ответ дан 30 November 2019 в 21:36
поделиться

Я не уверен, что C # более эффективен только потому, что это продукт Microsoft. Если вы используете Visual Studio или другой RAD, часть кода создается автоматически и иногда менее эффективна. Несколько лет назад я был догматиком, полагая, что только C может ответить на все наши молитвы :-P, но теперь я думаю, что виртуальные машины могут сильно помочь в оптимизации кода перед его выполнением (например, РСУБД), хранением в кешированных частях. кода для последующего выполнения и т. д. Включая возможность создания «кластеров» виртуальных машин, как это делает Terracotta. По крайней мере, преимущества наличия дополнительного уровня абстракции больше, чем его отсутствие.

2
ответ дан 30 November 2019 в 21:36
поделиться

Я согласен с Споулсоном. C # действительно хорош для решения бизнес-задач. Вы можете очень эффективно создать структуру, которая моделирует ваши бизнес-процессы и решить многие из этих проблем с помощью объектной ориентации и шаблонов проектирования. В этом отношении он обеспечивает большую часть хороших объектно-ориентированных возможностей, которыми обладает C ++.

Если вас беспокоит скорость, C - это путь, по которому следует идти по причинам, которые вы указали.

1
ответ дан 30 November 2019 в 21:36
поделиться

"Есть ли еще какая-то причина, кроме максимальной скорости, чтобы использовать любой другой язык, кроме C#?"

Я могу назвать как минимум четыре, все они в некоторой степени связаны:

  • У меня большие текущие инвестиции в "язык X", и у меня нет времени или денег, чтобы перейти на что-то другое. (Перенос существующей базы кода, покупка/приобретение/перенос библиотек, развитие навыков команды в C#, изучение других инструментов.)
  • Ожидаемая необходимость переноса кода на платформу, где C# не поддерживается.
  • Мне нужно использовать инструменты, которые недоступны на C# или не так хорошо поддерживаются. (IDE, альтернативные компиляторы, генераторы кода, библиотеки, список можно продолжать и продолжать...)
  • Я нашел язык, который еще более продуктивен. ;-)

"В чем преимущество компиляции в C#, а затем запуска в CIL? в CIL, а затем запускать в CLR, чем чем непосредственно компилировать его в машинный код?"

Все дело в том, чтобы дать среде выполнения больше контроля над тем, как выполняется код. Если вы компилируете в машинный код, то многое в этот момент становится "заданным". Откладывание компиляции в машинный код до тех пор, пока вы не узнаете больше о среде выполнения, позволяет вам оптимизировать код так, как вы, возможно, не смогли бы в противном случае. Вот лишь некоторые из них:

  • Отсрочка компиляции позволяет вам выбрать инструкции, которые более точно соответствуют вашему центральному процессору. (Использовать 64-битные родные инструкции, если они есть, или последние расширения SSE)
  • Отсрочка кода позволяет оптимизировать код так, как вы не смогли бы иначе. (Если во время выполнения у вас есть только один класс, производный от определенного интерфейса, вы можете начать инлайнить даже виртуальные методы и т.д.)
  • Сборщикам мусора иногда нужно вставлять контрольные точки в пользовательский код. Отсрочка компиляции позволяет GC иметь больше контроля и гибкости в том, как это делается.
1
ответ дан 30 November 2019 в 21:36
поделиться

Первый ответ: C # следует использовать по умолчанию для новых проектов. Есть несколько случаев, когда он еще не догнал C ++ (с точки зрения поддержки нескольких парадигм), но он движется в этом направлении.

Второй ответ: «переносимость» также включает переносимость x86 / x64, которая может быть достигнута путем установки платформы на AnyCPU. Другое (более теоретическое на данный момент) преимущество заключается в том, что JIT-компилятор может использовать набор инструкций, зависящий от процессора, и, таким образом, более эффективно выполнять оптимизацию.

0
ответ дан 30 November 2019 в 21:36
поделиться