2008-10-30 2 views
3

Иногда сложно описать некоторые вещи, которые, по мнению наших программистов, просты для не-программистов и типов управления.В чем разница между управляемым/байт-кодом и неуправляемым/родным кодом?

Итак ...

Как бы вы описали разницу между управляемым кодом (или Java байтами-кодом) и неуправляемым/Native Кодексом к непрограммист?

ответ

11

Управляемый код == "Особняк с полным персоналом или B utlers, Горничные, Повара & Садовники, чтобы сохранить место хорошо»

неуправляемый код ==„Где я раньше жил в университете“

-7

«Конкретный термин управляемый код особенно распространен в мире Microsoft».

Поскольку я работаю в мире MacOS и Linux, это не термин, который я использую или встречаю.

Brad Abrams "What is Managed Code" Сообщение в блоге имеет определение, которое говорит такие вещи, как ".NET Framework Common Language Runtime".

Мое замечание: это может быть нецелесообразно объяснять им условия вообще. Если это ошибка, взлом или обход, это не очень важно. Разумеется, это не так важно, чтобы разработать сложное описание неспециалистов. Он может исчезнуть со следующей выпуском некоторой серии продуктов MS.

+0

«Не беспокойтесь, потому что он может уйти» ... Я хочу, чтобы мой босс принял это как ответ. – EBGreen 2008-10-30 22:48:08

+0

@EBGreen: Посмотрите объявления о продукции MS. MS всегда создает и отбрасывает терминологию, чтобы объяснить какую-то проблему. Когда ваша компания переключится на Linux, вам все равно. – 2008-10-30 22:54:24

+0

«Управляемый код» - это не термин, который объясняет проблему. Это термин, который они дали коду, который генерируется компилятором, ориентированным на .NET Framework (аналогично Java-байт-коду). – 2008-10-30 23:09:40

3

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

Это пространство эквивалентно компьютерных ресурсов, таких как оперативная память, жесткий диск и т.д.

Управляемый код позволяет системе автоматически выбирать, что и когда убирать. Неуправляемый код делает процесс «ручным» - тем, что программисту необходимо сообщить системе, когда и что нужно очищать.

2

Я уверен, что основная интерпретация:

  • Управляемый = ресурс очистки управляется выполнения (т.е. Garbage Collection)
  • Неуправляемый = убирать за собой (т.е. malloc & free)
2

Возможно сравнить его с инвестированием на фондовом рынке.

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

1

Вот мой ответ:

Managed (.NET) или Байт-код (Java) сэкономит вам время и деньги.

Теперь давайте сравним два:

неуправляемых или Native Code

Вы должны сделать свой собственный ресурс (RAM/памяти) выделения и очистки. Если вы что-то забыли, вы получите то, что называется «утечкой памяти», которое может привести к сбою компьютера. Утечка памяти - это термин, когда приложение начинает использовать (есть) Ram/Memory, но не позволяет ему идти, поэтому компьютер может использовать, если для других приложений; в конечном итоге это приводит к сбою компьютера.

Для запуска приложения в разных операционных системах (Mac OSX, Windows и т. Д.) Вам необходимо скомпилировать свой код специально для каждой операционной системы и, возможно, изменить много кода, который зависит от операционной системы, поэтому он работает на каждой операционной системы.

.NET управляемого код или Java байт-код

Все ресурс (RAM/память) выделение и очистка делаются для вас, и риска создания «утечек памяти» сводится к минимуму. Это позволяет больше времени использовать функции кода вместо того, чтобы тратить его на управление ресурсами.

Для того, чтобы запускать приложение на разных операционных системах (Mac OSX, Windows и т. Д.), Вы просто компилируете один раз и каждый раз запускаете их, если они поддерживают данную Framework, которую вы используете, поверх нее (.NET Framework/Mono или Java).

В Short

Разработка с использованием .NET Framework (Managed Code) или Java (байт-код) делают его в целом дешевле построить приложение, которое может предназначаться для нескольких операционных систем, с легкостью, и позволяет больше времени тратить на создание богатых функций вместо мирских задач управления памятью/ресурсами.

Кроме того, прежде чем кто-либо отметит, что .NET Framework не поддерживает несколько операционных систем, я должен указать, что технически Windows 98, WinXP 32-разрядная, WinXP 64-разрядная, WinVista 32-разрядная, WinVista 64 -бит и Windows Server - все разные операционные системы, но одно и то же приложение .NET будет работать на каждом. И есть также Mono Project, который выводит .NET на Linux и Mac OSX.

1

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

0

Большая разница в управлении памятью. С собственным кодом вы должны сами управлять памятью. Это может быть сложно и является причиной множества ошибок и много времени разработки, затрачиваемых на отслеживание этих ошибок. С управляемым кодом у вас все еще есть проблемы, но их намного меньше, и их легче отслеживать. Как правило, это означает, что программное обеспечение с низким уровнем ошибок и меньшее время разработки.

Существуют и другие отличия, но управление памятью, вероятно, является самым большим.

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

0

Это как различие между игровым бассейном с бамперами и без них по краям. Если вы и все остальные игроки не делаете идеальных снимков, вам нужно что-то держать на столе. (Игнорировать намеренные рикошеты ...)

Или используйте футбол со стенами вместо боковых линий и контуров, или бейсбол без упора или хоккей без сетки за воротами, или NASCAR без барьеров или футбол без шлемов ...)

3

Я удивлен тем, что вытекает из этого обсуждения (ну, на самом деле, но не риторически). Позвольте мне что-то добавить, даже если я опоздаю.

виртуальные машины (ВМ) и сбор мусора (GC) несколько десятилетий назад и два отдельных понятия. Собранные с мусором сборные языки, написанные на собственном коде, существуют даже в течение десятилетий (канонический пример: ANSI Common Lisp; ну, по крайней мере, декларативный язык compile-time garbage-collected, Меркурий - но, видимо, массы кричат ​​на языках, подобных Прологу).

Неожиданно GCed байт на основе байт-байт - это панацея от всех болезней, связанных с ИКТ. Sandboxing of existing binaries (другие примеры here, here и here)? Principle of least authority (POLA)/capabilities-based security? Slim binaries (или его современный вариант SafeTSA)? Region inference? Нет, сэр: Microsoft & Солнце не разрешает нам даже думать о таких извращениях. Нет, лучше перепишите весь наш пакет программного обеспечения для этого замечательного (???) нового (???) языка§/API. Как говорит один из наших хозяев, это Fire and Motion сначала.

§ Не будьте глупыми: я знаю, что C# - не единственный язык, на который нацелены .Net/Mono, это hyperbole.

Edit: это особенно полезно посмотреть на comments to this answer по С. Лотт в свете альтернативных методов памяти мобильности управления/безопасности/кода, который я указал.

Я считаю, что нетехнические люди не должны беспокоиться о технических особенностях на этом уровне детализации.

На другом конце, если они впечатлены маркетингом Microsoft/Sun, необходимо объяснить им, что их обманывают - GCed базирующиеся на байте виртуальные машины не являются этой новинкой, поскольку они утверждают, что они не решают магически каждая проблема ИТ и альтернативы этим методам реализации существуют (некоторые из них лучше).

Редакция 2: Сбор мусора - это методика управления памятью, и, как следует понимать, каждая технология реализации должна использоваться правильно. Посмотрите, как на ITA Software, they bypass GC to obtain good perfomance:

4 - Потому что у нас есть около 2 гигабайтов статических данных нам нужен быстрый доступ к, мы используем C++ кода для памяти-карт огромных файлов, содержащих pointerless C Структуру (из полетов, тарифов и т. Д.), А затем получить доступ к ним из Common Lisp, используя доступ к данным за рубежом. В поле структуры доступ компилируется в две или три команды , поэтому нет никакого значения .штраф за доступ к C, а не к объектам Lisp. Делая это, мы держим лисповский мусор коллектора видеть данные (в Лисп, каждый указатель на объект C является только Fixnum, хотя мы часто временно обернуть эти указатели в Lisp объектов для улучшения отладка). Наши изображения Lisp - , поэтому только около 250 мегабайт «рабочие» структуры данных и код.

...

9 - Мы можем сделать 10 секунд Лиспа вычисления на коробке 800mhz и минусы менее 5k данных. Это связано с тем, что мы предварительно распределяем все структуры данных, мы нуждаемся и умираем по запросам, которые превышают . Это может привести к тому, что многие программисты Lisp съедят, но с изображением в 250 мегаватт и в режиме реального времени we не может позволить себе сгенерировать мусор. Для примера , вместо того, чтобы использовать минусы, мы используем «cons!», Который захватывает ячейки из массива из 10 000 000 ячеек, мы имеем prealocated и который получает сброс каждый запрос.

Edit 3: (во избежание недоразумений) является GC лучше, чем возиться непосредственно с указателями? В большинстве случаев, конечно, но есть альтернативы и. Нужно ли беспокоиться пользователей с этими подробностями? Я не вижу никаких доказательств того, что это так, кроме того, чтобы развеять маркетинговую рекламу, когда это необходимо.

Смежные вопросы