Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

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

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

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

Ответ 8

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

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