Информация об изменениях

Сообщение Re[19]: 32/64/AnyCPU - что за @$^%$? от 09.10.2016 16:41

Изменено 09.10.2016 21:02 Serginio1

Здравствуйте, AlexRK, Вы писали:

ARK>Здравствуйте, Serginio1, Вы писали:


S>> Читаем выделенное. Net это MSIL. И он может по разному выполняться.


ARK>.NET — это VM для выполнения MSIL.


S>>>>Значит компилятор это VM?

ARK>>>Нет, не значит.
S>> Ну раз к >> .Net Native может и подходит

ARK>.NET и .NET Native — разные вещи, это так сложно понять? Хуже того, .NET Native не сможет даже корректно скомпилировать любой MSIL, который может сожрать CLR.


Еще раз .Net это и CLR и .net Native. Да сейчас CLR превалирует, но это не надолго.
Есть куча вещей где нужна скорость выполнения, объем памяти, обфускация
Кстати https://ru.wikipedia.org/wiki/Java_Virtual_Machine

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


В CLR весь код компилируется при первом обращении к классу.

Опять же

https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0

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


CLR ничего не эмулирует, она компилирует байт код в машинный код. Но при этом обеспечивает работу с памятью, сборку мусора, дефрагментация памяти Это среда выполнения.

При этом есть много общего с JVM.

Но даже если и согласиться с огромной натяжкой, что CLR это VM. То .Net VM не является. Ибо .Net Native уже не притянуть под поняти VM.
При этом в Вики нет никакого определения .Net Native. И я так понимаю, что в Java нет аналога .Net Native
При этом используются все те же библиотеки на MSIL и компилируются под определенную платформу.

Во время преобразования приложения из промежуточного языка в машинный код цепочка инструментов .NET Native выполняет следующие операции:
Для некоторых ветвей кода заменяется код, основанный на отражении и метаданных, на статический машинный код. Например, если тип значения не переопределяет метод ValueType.Equals, то стандартный тест на эквивалентность использует отражение для получения объектов FieldInfo, представляющих поля этого типа значения, а затем сравнивает значения полей двух экземпляров. При компиляции в машинный код цепочка инструментов .NET Native заменяет код отражения и метаданные на статическое сравнение значений полей.
Везде, где возможно, делается попытка исключить все метаданные.
.NET Native включает в заключительные сборки приложения только тот код реализации, который фактически вызывается приложением. Особенно это касается кода сторонних библиотек и кода в библиотеке классов .NET Framework. В результате приложение больше не зависит от сторонних библиотек или всей библиотеки классов .NET Framework; вместо этого код сторонних библиотек и библиотек классов .NET Framework теперь является локальным для приложения.
.NET Native заменяет полную среду CLR на оптимизированную среды выполнения, которая в первую очередь содержит сборщика мусора. Оптимизированная среда выполнения находится в библиотеке mrt100_app.dll, которая является локальной для приложения и имеет размер только несколько сотен килобайт. Это возможно потому, что статическое связывание устраняет необходимость во многих операциях, реализуемых средой CLR.

Здравствуйте, AlexRK, Вы писали:

ARK>Здравствуйте, Serginio1, Вы писали:


S>> Читаем выделенное. Net это MSIL. И он может по разному выполняться.


ARK>.NET — это VM для выполнения MSIL.


S>>>>Значит компилятор это VM?

ARK>>>Нет, не значит.
S>> Ну раз к >> .Net Native может и подходит

ARK>.NET и .NET Native — разные вещи, это так сложно понять? Хуже того, .NET Native не сможет даже корректно скомпилировать любой MSIL, который может сожрать CLR.


Еще раз .Net это и CLR и .net Native. Да сейчас CLR превалирует, но это не надолго.
Есть куча вещей где нужна скорость выполнения, объем памяти, обфускация
Кстати https://ru.wikipedia.org/wiki/Java_Virtual_Machine

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


В CLR весь код компилируется при первом обращении к классу.

Опять же

https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0

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


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

При этом есть много общего с JVM.

Но даже если и согласиться с огромной натяжкой, что CLR это VM. То .Net VM не является. Ибо .Net Native уже не притянуть под поняти VM.
При этом в Вики нет никакого определения .Net Native. И я так понимаю, что в Java нет аналога .Net Native
При этом используются все те же библиотеки на MSIL и компилируются под определенную платформу.

Во время преобразования приложения из промежуточного языка в машинный код цепочка инструментов .NET Native выполняет следующие операции:
Для некоторых ветвей кода заменяется код, основанный на отражении и метаданных, на статический машинный код. Например, если тип значения не переопределяет метод ValueType.Equals, то стандартный тест на эквивалентность использует отражение для получения объектов FieldInfo, представляющих поля этого типа значения, а затем сравнивает значения полей двух экземпляров. При компиляции в машинный код цепочка инструментов .NET Native заменяет код отражения и метаданные на статическое сравнение значений полей.
Везде, где возможно, делается попытка исключить все метаданные.
.NET Native включает в заключительные сборки приложения только тот код реализации, который фактически вызывается приложением. Особенно это касается кода сторонних библиотек и кода в библиотеке классов .NET Framework. В результате приложение больше не зависит от сторонних библиотек или всей библиотеки классов .NET Framework; вместо этого код сторонних библиотек и библиотек классов .NET Framework теперь является локальным для приложения.
.NET Native заменяет полную среду CLR на оптимизированную среды выполнения, которая в первую очередь содержит сборщика мусора. Оптимизированная среда выполнения находится в библиотеке mrt100_app.dll, которая является локальной для приложения и имеет размер только несколько сотен килобайт. Это возможно потому, что статическое связывание устраняет необходимость во многих операциях, реализуемых средой CLR.