2 основных, но интересных вопроса о .NET - PullRequest
16 голосов
/ 09 июня 2010

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

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

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

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

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

Ответы [ 8 ]

10 голосов
/ 09 июня 2010

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

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

5 голосов
/ 09 июня 2010

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

5 голосов
/ 09 июня 2010

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

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

2 голосов
/ 09 июня 2010

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

1 голос
/ 09 июня 2010

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

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

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

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

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

  • Отсрочка компиляции позволяет вам выбирать инструкции, которые более точно соответствуют вашему центральному процессору.(Чтобы использовать 64-битные собственные инструкции, если они у вас есть, или последние расширения SSE.)
  • Отложенный код позволяет оптимизировать его так, как иначе вы не сможете.(Если во время выполнения у вас есть только один класс, производный от определенного интерфейса, вы можете начать использовать даже виртуальные методы и т. Д.)
  • Сборщикам мусора иногда нужно вставлять контрольные точки в код пользователя.Отсрочка компиляции позволяет GC иметь больше контроля и гибкости в отношении того, как это делается.
1 голос
/ 09 июня 2010

Далее по второму вопросу: вы можете запустить NGEN для генерации собственного образа сборки, что может повысить производительность. Не совсем машинный код, но, поскольку он обходит фазу JIT (компиляция точно в срок), приложение будет работать намного быстрее

http://msdn.microsoft.com/en-us/library/6t9t5wcf(VS.80).aspx

Собственный генератор изображений (Ngen.exe) это инструмент, который улучшает производительность управляемых приложений. Ngen.exe создает собственные изображения, которые файлы, содержащие скомпилированные машинный код для конкретного процессора и устанавливает их в родной образ кеш на локальном компьютере. время выполнения может использовать нативные образы из кеш вместо использования JIT-компилятор для компиляции оригинальная сборка.

1 голос
/ 09 июня 2010

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

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

0 голосов
/ 09 июня 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...