Foo.constants
возвращает все константы в Foo
. Это включает в себя, но не ограничивается, имена классов. Если вы хотите только имена классов, вы можете использовать
Foo.constants.select {|c| Foo.const_get(c).is_a? Class}
Если вы хотите имена классов и модулей, вы можете использовать is_a? Module
вместо is_a? Class
.
Они по существу делают то же самое, MSIL является версией Microsoft Байт-кода Java.
основные отличия внутренне:
, Намного больше информации и подробное сравнение могут быть найдены в эта статья John Gough K (документ постскриптума)
Согласованный, различиями является минута достаточно, чтобы проигнорировать как новичок. Если бы Вы хотите изучить.Net, начинающий с основ, я рекомендовал бы смотреть на Общеязыковую инфраструктуру и Общую систему типов.
Нет так очень различий. Оба - промежуточные форматы кода, который Вы записали. Когда выполняется, Виртуальные машины выполнятся, промежуточный язык справился, который означает, что Виртуальная машина управляет переменными и вызовами. Существует даже язык, который я не делаю remeber прямо сейчас, который может выполнить в.Net и Java тот же путь.
Basicly, это - просто другой формат для того же самого
Редактирование: Найденный языком (помимо Scala): это - FAN ( http://www.fandev.org/ ), очень интересные взгляды, но никакое время все же для оценки
Прежде всего позвольте мне сказать, что я не думаю, что тонкие различия между Байт-кодом Java и MSIL - что-то, что должно побеспокоить разработчика.NET новичка. Они оба служат той же цели определить абстрактную целевую машину, которая является слоем выше реальной машины, используемой в конце.
MSIL и Байт-код Java очень похожи, на самом деле существует инструмент, названный Кузнечик , который переводит MSIL в Байт-код Java, я был частью группы разработчиков для Кузнечика, таким образом, я могу поделиться небольшим количеством своих (увядших) знаний. Обратите внимание на то, что я прекратил работать над этим вокруг, когда платформа.NET 2.0 вышла, таким образом, некоторые из этих вещей не могут больше быть верными (раз так оставьте комментарий, и я исправлю ее).
struct
). enums
не намного больше, чем обертки вокруг целых типов, в то время как Java enums
является в значительной степени полностью оперенными классами (благодаря интернет-Друг для комментария). out
и ref
параметры. существуют другие языковые различия, но большинства из них не выражают по поводу уровня кода байта, например, если не изменяет память, Java не - static
внутренние классы (которые не существуют в.NET), не функция байт-кода, компилятор генерирует дополнительный аргумент конструктору внутреннего класса и передает внешний объект. То же верно для лямбда-выражений.NET.
Serge Lidin создал достойную книгу по деталям MSIL: Опытная.NET 2.0 Ассемблера IL. Я также смог взять MSIL быстро путем рассмотрения простых методов с помощью Отражатель.NET и Ildasm (Учебное руководство) .
, понятия между MSIL и Байт-кодом Java очень похожи.
Я думаю, что MSIL не должен выдерживать сравнение с Байт-кодом Java, но "инструкцией, которые включают Байт-коды Java".
нет никакого названия демонтированного байт-кода Java. "Байт-код Java" должен быть неофициальным псевдонимом, поскольку я не могу найти его имя в официальном документе. в Дизассемблере Файла Класса Java говорится
, Распечатывает демонтированный код, т.е. инструкции, которые включают Байт-коды Java для каждого из методов в классе. Они документируются в Спецификацию виртуальной машины Java.
И "Java инструкции VM" и "MSIL" собраны в байт-код.NET и код Java, которые не человекочитаемы.
CIL иначе MSIL предназначается, чтобы быть человекочитаемым. Байт-код Java не.
Думают о Байт-коде Java, как являющемся машинным кодом для аппаратных средств, которые не существуют (но который JVMs эмулируют).
CIL больше похож на ассемблер - один шаг от машинного кода, все еще будучи человекочитаемым.