Различия между MSIL и байт-кодом Java?

Foo.constants

возвращает все константы в Foo. Это включает в себя, но не ограничивается, имена классов. Если вы хотите только имена классов, вы можете использовать

Foo.constants.select {|c| Foo.const_get(c).is_a? Class}

Если вы хотите имена классов и модулей, вы можете использовать is_a? Module вместо is_a? Class.

78
задан Motti 19 October 2008 в 20:47
поделиться

7 ответов

Они по существу делают то же самое, MSIL является версией Microsoft Байт-кода Java.

основные отличия внутренне:

  1. Байт-код был разработан и для компиляции и для интерпретации, в то время как MSIL был разработан явно для JIT-компиляции
  2. , MSIL был разработан для поддержки нескольких языков (C# и VB.NET, и т.д.) по сравнению с Байт-кодом, записанным для просто Java, приводящего к Байт-коду, являющемуся более подобным Java синтаксически, чем IL на какой-либо определенный язык.NET
  3. , MSIL имеет более явное формирование рисунка между значением и ссылочными типами

, Намного больше информации и подробное сравнение могут быть найдены в эта статья John Gough K (документ постскриптума)

22
ответ дан Theraot 6 November 2019 в 03:19
поделиться

Согласованный, различиями является минута достаточно, чтобы проигнорировать как новичок. Если бы Вы хотите изучить.Net, начинающий с основ, я рекомендовал бы смотреть на Общеязыковую инфраструктуру и Общую систему типов.

1
ответ дан Internet Friend 6 November 2019 в 03:19
поделиться

Нет так очень различий. Оба - промежуточные форматы кода, который Вы записали. Когда выполняется, Виртуальные машины выполнятся, промежуточный язык справился, который означает, что Виртуальная машина управляет переменными и вызовами. Существует даже язык, который я не делаю remeber прямо сейчас, который может выполнить в.Net и Java тот же путь.

Basicly, это - просто другой формат для того же самого

Редактирование: Найденный языком (помимо Scala): это - FAN ( http://www.fandev.org/ ), очень интересные взгляды, но никакое время все же для оценки

2
ответ дан GHad 6 November 2019 в 03:19
поделиться

Прежде всего позвольте мне сказать, что я не думаю, что тонкие различия между Байт-кодом Java и MSIL - что-то, что должно побеспокоить разработчика.NET новичка. Они оба служат той же цели определить абстрактную целевую машину, которая является слоем выше реальной машины, используемой в конце.

MSIL и Байт-код Java очень похожи, на самом деле существует инструмент, названный Кузнечик , который переводит MSIL в Байт-код Java, я был частью группы разработчиков для Кузнечика, таким образом, я могу поделиться небольшим количеством своих (увядших) знаний. Обратите внимание на то, что я прекратил работать над этим вокруг, когда платформа.NET 2.0 вышла, таким образом, некоторые из этих вещей не могут больше быть верными (раз так оставьте комментарий, и я исправлю ее).

  • .NET позволяет определяемые пользователем типы, которые имеют семантику значения, как соединено к регулярный ссылочная семантика (struct).
  • .NET поддерживает неподписанные типы, это делает систему команд немного более богатой.
  • Java включает спецификацию исключения методов в байт-коде. Хотя спецификация исключения обычно только осуществляется компилятором, она может быть осуществлена JVM, если загрузчик класса кроме значения по умолчанию каждый используется.
  • дженерики.NET выражаются в IL, в то время как дженерики Java только используют стирание типа .
  • атрибуты.NET не имеют никакого эквивалента в Java (это все еще верно?).
  • .NET enums не намного больше, чем обертки вокруг целых типов, в то время как Java enums является в значительной степени полностью оперенными классами (благодаря интернет-Друг для комментария).
  • .NET имеет out и ref параметры.

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

73
ответ дан Csaba 6 November 2019 в 03:19
поделиться

Serge Lidin создал достойную книгу по деталям MSIL: Опытная.NET 2.0 Ассемблера IL. Я также смог взять MSIL быстро путем рассмотрения простых методов с помощью Отражатель.NET и Ildasm (Учебное руководство) .

, понятия между MSIL и Байт-кодом Java очень похожи.

1
ответ дан Jeffrey LeCours 6 November 2019 в 03:19
поделиться

Я думаю, что MSIL не должен выдерживать сравнение с Байт-кодом Java, но "инструкцией, которые включают Байт-коды Java".

нет никакого названия демонтированного байт-кода Java. "Байт-код Java" должен быть неофициальным псевдонимом, поскольку я не могу найти его имя в официальном документе. в Дизассемблере Файла Класса Java говорится

, Распечатывает демонтированный код, т.е. инструкции, которые включают Байт-коды Java для каждого из методов в классе. Они документируются в Спецификацию виртуальной машины Java.

И "Java инструкции VM" и "MSIL" собраны в байт-код.NET и код Java, которые не человекочитаемы.

1
ответ дан Dennis C 6 November 2019 в 03:19
поделиться

CIL иначе MSIL предназначается, чтобы быть человекочитаемым. Байт-код Java не.

Думают о Байт-коде Java, как являющемся машинным кодом для аппаратных средств, которые не существуют (но который JVMs эмулируют).

CIL больше похож на ассемблер - один шаг от машинного кода, все еще будучи человекочитаемым.

2
ответ дан slim 6 November 2019 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: