Re: нужна ли виртуальная машина в .NET
От: AndreyY Украина  
Дата: 09.12.02 15:16
Оценка: -4
Здравствуйте, Dmitry A. Sustretov, Вы писали:

DAS>Можно ли было реализовать .NET не используя intemediate language ?

DAS>Какую роль играет виртуальная машина .NET в релизации остальных её фич ?

По прочтению всех сообщений данной темы пришел к выводу, что никакого понимания для чего Microsoft придумал .NET у людей нет !)) Особенно понравилось что в осонове .NET компилятор находиться ))) Это кажеться некто WolfHound произнес!
Так вот у меня возникло пару вопрос к общественности
1. О Common Language Runtime вобще кто то слышал !?
2. Кто то видел что бы после компилирования програм на С# сразу получались ехе-шники работающие на машине где никогда не стояла Студия дотНЕТ !?
Так вот Микрософт придумала дотНЕТ для того чтобы дать возможность разработчикам использовать в одном проекте несколько языков, для чего и был создан Common Language Runtime. И каждая программа написаная на любом языке Студии дотНЕТ не компилируется, а интерпритируется в некий код, который потом уже запускается интерпритатором.
Это кстати вполно обосновано можно назвать Виртуальной Машиной. И разница с Явой лишь в том, что JVM для каждой операционки из одного и того же исходника создает исполняемый "файл" понятный ей, а CLR наоборот из различных исходников генерирует унифицированый код под Виндоус!
С наилучшими пожеланиями!
Andrey
Re[3]: нужна ли виртуальная машина в .NET
От: WolfHound  
Дата: 07.12.02 12:28
Оценка: 18 (1) -1
Здравствуйте, Dmitry A. Sustretov, Вы писали:

DAS>Intermediate Language выполняется в некой виртуальной машине. Просто такого слова, "виртуальная машина", никто не поизносит, а на самом деле это она и есть. Выполняет код и смотрит, как бы он не сделал чего не положено. В виртуальной машине,в частности реализован весь механизм безопасности .NET

.NET это не жаба у него нет виртуальной машины, да есть Framework но это не VM это библиотека. IL не интерпретируется, а компилируется при запуске программы и исполняется процессором. Но при компиляцие втавляются runtime проверки которые и следят чтобы чего не случилось.
... << RSDN@Home 1.0 beta 2 Enya — Book of days — Gaelic version>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: нужна ли виртуальная машина в .NET
От: MaxMP Россия  
Дата: 07.12.02 18:20
Оценка: 15 (1)
Здравствуйте, _vovin, Вы писали:

DAS>>>Intermediate Language выполняется в некой виртуальной машине. Просто такого слова, "виртуальная машина", никто не поизносит, а на самом деле это она и есть. Выполняет код и смотрит, как бы он не сделал чего не положено. В виртуальной машине,в частности реализован весь механизм безопасности .NET

WH>>.NET это не жаба у него нет виртуальной машины, да есть Framework но это не VM это библиотека. IL не интерпретируется, а компилируется при запуске программы и исполняется процессором. Но при компиляцие втавляются runtime проверки которые и следят чтобы чего не случилось.

V>Виртуальная машина есть, просто, видимо, выгодней открещиваться от ее наличия,

V>чтобы отмежеваться от негативного мнения широких масс по отношению к VM.
V>Присутствие MSIL — это точно верный признак наличия VM, а то, что изначально
V>можно генерить нативный код, это просто некоторая полезная оптимизация.

Если виртуальной машиной обозвать некий интерпретатор некого p-кода,

DAS> Intermediate Language выполняется в некой виртуальной машине ... Выполняет код и смотрит, как бы он не сделал чего не положено.

то такого в .net (вернее, в мсном релизе) нет.
Или под виртуальной машиной что-то другое подразумевается?

virtual machine

1) Virtual machine is a term used by Sun Microsystems, developers of the Java programming language and runtime environment, to describe software that acts as an interface between compiler Java binary code and the microprocessor (or "hardware platform") that actually performs the program's instructions. Once a Java virtual machine has been provided for a platform, any Java program (which, after compilation, is called bytecode) can run on that platform. Java was designed to allow application programs to be built that could be run on any platform without having to be rewritten or recompiled by the programmer for each separate platform. Java's virtual machine makes this possible.
The Java virtual machine specification defines an abstract rather than a real "machine" (or processor) and specifies an instruction set, a set of registers, a stack, a "garbage heap," and a method area. The real implementation of this abstract or logically defined processor can be in other code that is recognized by the real processor or be built into the microchip processor itself.

The output of "compiling" a Java source program (a set of Java language statements) is called bytecode. A Java virtual machine can either interpret the bytecode one instruction at a time (mapping it to a real microprocessor instruction) or the bytecode can be compiled further for the real microprocessor using what is called a just-in-time compiler.

2) At IBM, a virtual machine is any multi-user shared-resource operating system that gives each user the appearance of having sole control of all the resources of the system.

3) At IBM, a virtual machine is also used to mean an operating system that is in turn managed by an underlying control progam. Thus, IBM's VM/ESA can control multiple virtual machines on an IBM S/390 system.

4) Elsewhere, virtual machine has been used to mean either an operating system or any program that runs a computer. We quote:

"A running program is often referred to as a virtual machine — a machine that doesn't exist as a matter of actual physical reality. The virtual machine idea is itself one of the most elegant in the history of technology and is a crucial step in the evolution of ideas about software. To come up with it, scientists and technologists had to recognize that a computer running a program isn't merely a washer doing laundry. A washer is a washer whatever clothes you put inside, but when you put a new program in a computer, it becomes a new machine.... The virtual machine: A way of understanding software that frees us to think of software design as machine design."

From David Gelernter's "Truth, Beauty, and the Virtual Machine," Discover Magazine, September 1997, p. 72.




В общем можно сказать, что виртуальная машина в .net есть, но это не та машина, что в java, но это и так понятно Вон, есть VMWare, так там в "виртуальной машине" можно что угодно исполнять, а не только MSIL/java byte code
Re[7]: нужна ли виртуальная машина в .NET
От: WolfHound  
Дата: 09.12.02 11:30
Оценка: 12 (1)
Здравствуйте, Dmitry A. Sustretov, Вы писали:

DAS>Виртуальная машина — это виртуальная машина. Не обязательно интерпретатор. Смысл в том, что с точки зрения программиста под .NET он пишет под .NET, а не под windows/x86, freebsd/x86 или mac. Виртуальная машина предоставляет некое окружение, дающее определённые возможности, интерфейсы и т. д.

DAS>В этом смысле .NET — виртуальная машина.
А также dos, linux, windows и все остальные операционки...

Виртуальная машина это эмуляция машины те железа.
В этом смысле .NET — НЕ виртуальная машина.
... << RSDN@Home 1.0 beta 2 Тихо>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
нужна ли виртуальная машина в .NET
От: Dmitry A. Sustretov Россия  
Дата: 06.12.02 16:37
Оценка:
Можно ли было реализовать .NET не используя intemediate language ?
Какую роль играет виртуальная машина .NET в релизации остальных её фич ?
Re: нужна ли виртуальная машина в .NET
От: MaxMP Россия  
Дата: 06.12.02 16:57
Оценка:
Здравствуйте, Dmitry A. Sustretov, Вы писали:

DAS>Можно ли было реализовать .NET не используя intemediate language ?

DAS>Какую роль играет виртуальная машина .NET в релизации остальных её фич ?

Где там виртуальная машина?
Re[2]: нужна ли виртуальная машина в .NET
От: Dmitry A. Sustretov Россия  
Дата: 07.12.02 11:07
Оценка:
Здравствуйте, MaxMP, Вы писали:

MMP>Здравствуйте, Dmitry A. Sustretov, Вы писали:


DAS>>Можно ли было реализовать .NET не используя intemediate language ?

DAS>>Какую роль играет виртуальная машина .NET в релизации остальных её фич ?

MMP>Где там виртуальная машина?


Intermediate Language выполняется в некой виртуальной машине. Просто такого слова, "виртуальная машина", никто не поизносит, а на самом деле это она и есть. Выполняет код и смотрит, как бы он не сделал чего не положено. В виртуальной машине,в частности реализован весь механизм безопасности .NET
Re[4]: нужна ли виртуальная машина в .NET
От: kreek  
Дата: 07.12.02 15:21
Оценка:
Здравствуйте WolfHound, Вы писали:

WH>Здравствуйте, Dmitry A. Sustretov, Вы писали:


DAS>>Intermediate Language выполняется в некой виртуальной машине. Просто такого слова, "виртуальная машина", никто не поизносит, а на самом деле это она и есть. Выполняет код и смотрит, как бы он не сделал чего не положено. В виртуальной машине,в частности реализован весь механизм безопасности .NET

WH>.NET это не жаба у него нет виртуальной машины, да есть Framework но это не VM это библиотека. IL не интерпретируется, а компилируется при запуске программы и исполняется процессором. Но при компиляцие втавляются runtime проверки которые и следят чтобы чего не случилось.

Да, и для GC во время компиляции вставляет код для сбора мусора
... << RSDN@Home 1.0 alpha 12 >>
Re[4]: нужна ли виртуальная машина в .NET
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.12.02 16:53
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>.NET это не жаба у него нет виртуальной машины, да есть Framework но это не VM это библиотека. IL не интерпретируется, а компилируется при запуске программы и исполняется процессором. Но при компиляцие втавляются runtime проверки которые и следят чтобы чего не случилось.


А чем это отличается от джавовского HostSpot?
... << RSDN@Home 1.0 beta 2 (np: тихо) >>
AVK Blog
Re[4]: нужна ли виртуальная машина в .NET
От: Аноним  
Дата: 07.12.02 17:13
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Dmitry A. Sustretov, Вы писали:


DAS>>Intermediate Language выполняется в некой виртуальной машине. Просто такого слова, "виртуальная машина", никто не поизносит, а на самом деле это она и есть. Выполняет код и смотрит, как бы он не сделал чего не положено. В виртуальной машине,в частности реализован весь механизм безопасности .NET

WH>.NET это не жаба у него нет виртуальной машины, да есть Framework но это не VM это библиотека. IL не интерпретируется, а компилируется при запуске программы и исполняется процессором. Но при компиляцие втавляются runtime проверки которые и следят чтобы чего не случилось.


Нельзя так однозначно говорить -- нет. Судя по тому как НЕТ грузит модули это тот же JIT compiler, точно такой же как и во всех JVM.

Чтобы избвавиться от лишних споров, надо договориться о терминологии, что можно считать интерпретируемым, а что нет.
Re[4]: нужна ли виртуальная машина в .NET
От: _vovin http://www.pragmatic-architect.com
Дата: 07.12.02 17:43
Оценка:
DAS>>Intermediate Language выполняется в некой виртуальной машине. Просто такого слова, "виртуальная машина", никто не поизносит, а на самом деле это она и есть. Выполняет код и смотрит, как бы он не сделал чего не положено. В виртуальной машине,в частности реализован весь механизм безопасности .NET
WH>.NET это не жаба у него нет виртуальной машины, да есть Framework но это не VM это библиотека. IL не интерпретируется, а компилируется при запуске программы и исполняется процессором. Но при компиляцие втавляются runtime проверки которые и следят чтобы чего не случилось.

Виртуальная машина есть, просто, видимо, выгодней открещиваться от ее наличия,
чтобы отмежеваться от негативного мнения широких масс по отношению к VM.
Присутствие MSIL — это точно верный признак наличия VM, а то, что изначально
можно генерить нативный код, это просто некоторая полезная оптимизация.
Re[5]: нужна ли виртуальная машина в .NET
От: MaxMP Россия  
Дата: 07.12.02 18:21
Оценка:
Здравствуйте, kreek, Вы писали:

K>Да, и для GC во время компиляции вставляет код для сбора мусора


А это-то тут причем?
Re[6]: нужна ли виртуальная машина в .NET
От: Dmitry A. Sustretov Россия  
Дата: 08.12.02 14:08
Оценка:
V>>Виртуальная машина есть, просто, видимо, выгодней открещиваться от ее наличия,
V>>чтобы отмежеваться от негативного мнения широких масс по отношению к VM.
V>>Присутствие MSIL — это точно верный признак наличия VM, а то, что изначально
V>>можно генерить нативный код, это просто некоторая полезная оптимизация.

MMP>Если виртуальной машиной обозвать некий интерпретатор некого p-кода,

MMP>

DAS>> Intermediate Language выполняется в некой виртуальной машине ... Выполняет код и смотрит, как бы он не сделал чего не положено.

MMP>то такого в .net (вернее, в мсном релизе) нет.
MMP>Или под виртуальной машиной что-то другое подразумевается?

Виртуальная машина — это виртуальная машина. Не обязательно интерпретатор. Смысл в том, что с точки зрения программиста под .NET он пишет под .NET, а не под windows/x86, freebsd/x86 или mac. Виртуальная машина предоставляет некое окружение, дающее определённые возможности, интерфейсы и т. д.
В этом смысле .NET — виртуальная машина.


[..snip..]

MMP>"A running program is often referred to as a virtual machine — a machine that doesn't exist as a matter of actual physical reality. The virtual machine idea is itself one of the most elegant in the history of technology and is a crucial step in the evolution of ideas about software. To come up with it, scientists and technologists had to recognize that a computer running a program isn't merely a washer doing laundry. A washer is a washer whatever clothes you put inside, but when you put a new program in a computer, it becomes a new machine.... The virtual machine: A way of understanding software that frees us to think of software design as machine design."


MMP>From David Gelernter's "Truth, Beauty, and the Virtual Machine," Discover Magazine, September 1997, p. 72. [/q]


[Кстати, по поводу философской строны вопроса, отсылаю к книжке Пратта и Зелковица "Языки программирования", там на эту тему разведена ещё более обширная трепология, не будем их повторять ]

MMP>


MMP>В общем можно сказать, что виртуальная машина в .net есть, но это не та машина, что в java, но это и так понятно


Это чем же она не та ?! Суть та же. В JVM тоже был JIT, как и в .NET, так что идеологически эти системы не отличаются вовсе. Другое дело, что сама реализация .NET оказалась лучше, так как они по-иному спроектировали набор команд ВМ и её внутреннее устройство. Деталей не знаю, поэтому на этом остановлюсь.

MMP> Вон, есть VMWare, так там в "виртуальной машине" можно что угодно исполнять, а не только MSIL/java byte code


Я совсем уже отхожу от темы, но по секрету скажу, что VMWare — это не виртуальная машина. VMWare может эмулировать только ту архитектуру, на которой она запущена. То есть нельзя скомпилировать VMWare для Alpha, способную эмулировать x86. Вот скажем bochs — можно (именно поэтому теряется три порядка производительности).


Так вот, мы отклонились
Я спрашивал, стоило ли изобретать IL, чтобы реализовать все сервисы среды выполнения .NET ? Или без виртуализации — никуда ?
Re[7]: нужна ли виртуальная машина в .NET
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.12.02 15:26
Оценка:
Здравствуйте, Dmitry A. Sustretov, Вы писали:

DAS>Это чем же она не та ?! Суть та же. В JVM тоже был JIT, как и в .NET, так что идеологически эти системы не отличаются вовсе.


Ну немножко все же отличаются. К примеру в JVM нет ничего похожего на unsafe mode.

DAS>Я спрашивал, стоило ли изобретать IL, чтобы реализовать все сервисы среды выполнения .NET ?


Да, стоило. К примеру 100% надежный sandbox без VM никак.
... << RSDN@Home 1.0 beta 2 (np: тихо) >>
AVK Blog
Re[7]: нужна ли виртуальная машина в .NET
От: Aquila http://www.wasm.ru
Дата: 09.12.02 08:54
Оценка:
Здравствуйте, Dmitry A. Sustretov, Вы писали:

DAS>Так вот, мы отклонились

DAS>Я спрашивал, стоило ли изобретать IL, чтобы реализовать все сервисы среды выполнения .NET ?

Если бы целью стояло именно это, то, наверное, не стоило. Но поскольку Микрософт преследует некие другие цели, то (по-видимому) для их реализации это был необходимый шаг.
Re[2]: нужна ли виртуальная машина в .NET
От: WolfHound  
Дата: 09.12.02 16:51
Оценка:
Здравствуйте, AndreyY, Вы писали:

AY>По прочтению всех сообщений данной темы пришел к выводу, что никакого понимания для чего Microsoft придумал .NET у людей нет !)) Особенно понравилось что в осонове .NET компилятор находиться ))) Это кажеться некто WolfHound произнес!

И еще раз повторю IL компилируется при запуске программы в машинный код. Где сдесь VM?
AY>Так вот у меня возникло пару вопрос к общественности
AY>1. О Common Language Runtime вобще кто то слышал !?
Слышал. И что?
AY>2. Кто то видел что бы после компилирования програм на С# сразу получались ехе-шники работающие на машине где никогда не стояла Студия дотНЕТ !?
Я не видел.
AY>Так вот Микрософт придумала дотНЕТ для того чтобы дать возможность разработчикам использовать в одном проекте несколько языков, для чего и был создан Common Language Runtime. И каждая программа написаная на любом языке Студии дотНЕТ не компилируется, а интерпритируется в некий код, который потом уже запускается интерпритатором.
Если ты почитаеш как пишутся комаляторы то узнаеш что как правило язык сначала переводят в промежуточный язык ,а потом в машинный код. Дык вот .NET оставляет этот промежуточный код (IL) и в зависимости от железа, операционки...на конкретной машине переводит в машинный код.
AY>Это кстати вполно обосновано можно назвать Виртуальной Машиной. И разница с Явой лишь в том, что JVM для каждой операционки из одного и того же исходника создает исполняемый "файл" понятный ей, а CLR наоборот из различных исходников генерирует унифицированый код под Виндоус!
Чатай: http://www.rsdn.ru/forum/Message.aspx?mid=149337&amp;only=1
Автор: WolfHound
Дата: 09.12.02
... << RSDN@Home 1.0 beta 2 Тихо>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: нужна ли виртуальная машина в .NET
От: Dmitry A. Sustretov Россия  
Дата: 09.12.02 16:52
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Dmitry A. Sustretov, Вы писали:


DAS>>Виртуальная машина — это виртуальная машина. Не обязательно интерпретатор. Смысл в том, что с точки зрения программиста под .NET он пишет под .NET, а не под windows/x86, freebsd/x86 или mac. Виртуальная машина предоставляет некое окружение, дающее определённые возможности, интерфейсы и т. д.

DAS>>В этом смысле .NET — виртуальная машина.
WH>А также dos, linux, windows и все остальные операционки...

WH>Виртуальная машина это эмуляция машины те железа.

WH>В этом смысле .NET — НЕ виртуальная машина.

ой, не надо болтологией только заниматься. Все же понимают, что я имел в виду. А что обзывать виртуальной машиной — другой вопрос. У тех же Зелковица и Пратта вообще ВМ называются языки программирования, они такую терминологию ввели, захотелось им.

В .NET виртуализация имеет место быть. Есть IL, который специальным образом спроектирован, код, сгенерированный на IL удовлетворяет определённым ограничениям. Ты уже просто так не возьмёшь произвольный адрес и не напишешь по нему абы что, потому что CLR проверит типы (я unsafe код не рассматриваю).

Так вот, я спрашиваю, как кто думает, можно ли было сделать такое же окружение, что и в CLR, только чтобы прогаммы были не на IL, а в нативном коде.

Ведь по сути от IL мы получаем и переносимость программ, и безопасный код. А если я не хочу платить потерей производительности за переносимость ? Если я хочу только безопасный код ?

В самом деле — взять, запретить програмам писать куда бы то ни было, кроме стека, все обращения к памяти вызывают эксепшн, перехватывать его и смотреть, что эта команда замыслила делать, и если что, не давать Это конечно грубо, но идею вы поняли

Я подозреваю, что такое решение было бы не намного быстрее существующего. И скорее всего менее надёжно. Но всё-таки.
Re[3]: нужна ли виртуальная машина в .NET
От: Dmitry A. Sustretov Россия  
Дата: 09.12.02 16:57
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


AY>>По прочтению всех сообщений данной темы пришел к выводу, что никакого понимания для чего Microsoft придумал .NET у людей нет !)) Особенно понравилось что в осонове .NET компилятор находиться ))) Это кажеться некто WolfHound произнес!

WH>И еще раз повторю IL компилируется при запуске программы в машинный код. Где сдесь VM?

Ну и что ?! Это метод оптимизации. CLR может скомпилировать, как захочет. Например вставлять всякие run-time проверки. То есть CLR держит выполнение под контролем. В JVM тоже есть JIT, от этого она не перестала быть виртуальной машиной.
Re[3]: нужна ли виртуальная машина в .NET
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.12.02 20:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>И еще раз повторю IL компилируется при запуске программы в машинный код. Где сдесь VM?


А ты чего думаешь — в джаве не так что ли? Или JVM тоже не виртуальная машина?
... << RSDN@Home 1.0 beta 2 (np: тихо) >>
AVK Blog
Re[2]: нужна ли виртуальная машина в .NET
От: TK Лес кывт.рф
Дата: 15.12.02 14:55
Оценка:
Здравствуйте, MaxMP, Вы писали:

MMP>Здравствуйте, Dmitry A. Sustretov, Вы писали:


DAS>>Можно ли было реализовать .NET не используя intemediate language ?

DAS>>Какую роль играет виртуальная машина .NET в релизации остальных её фич ?

MMP>Где там виртуальная машина? :)


/sscli/clr/src/vm
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: нужна ли виртуальная машина в .NET
От: MaxMP Россия  
Дата: 19.12.02 05:15
Оценка:
Здравствуйте, TK, Вы писали:

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


MMP>>Здравствуйте, Dmitry A. Sustretov, Вы писали:


DAS>>>Можно ли было реализовать .NET не используя intemediate language ?

DAS>>>Какую роль играет виртуальная машина .NET в релизации остальных её фич ?

MMP>>Где там виртуальная машина?


TK>/sscli/clr/src/vm


Неа, там нет.
Re: ".NET это сборщик мусора" (с) мой
От: c-smile Канада http://terrainformatica.com
Дата: 22.12.02 21:25
Оценка:
Здравствуйте, Dmitry A. Sustretov, Вы писали:

DA>Можно ли было реализовать .NET не используя intemediate language ?

DA>Какую роль играет виртуальная машина .NET в релизации остальных её фич ?

Зрим в корень:

Есть две компонентные технологии. Назовем их COM и.NET

Первая основана на reference count.
Вторая на garbage collector.

Практика показала что архисложно построить большую и надежную систему основанную на reference count.
Масса проблем — от cyclic refereneces до неаккуратности программированя.
В условиях промышленного производства серверного софта большими командами эта технология превращается в кошмар.

А тут Java демонстрирующая на порядок большую устойчивость в связке компонент.

Построить GC система без VM (managed code) как бы очень проблематично. Поэтому VM и IL (читай bytecode).

Вот поэтому .NET это в первую очередь сборщик мусора со всеми вытекающими последсвиями .

Dixi.
Re[2]: ".NET это сборщик мусора" (с) мой
От: IT Россия linq2db.com
Дата: 22.12.02 23:23
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Построить GC система без VM (managed code) как бы очень проблематично. Поэтому VM и IL (читай bytecode).


CS>Вот поэтому .NET это в первую очередь сборщик мусора со всеми вытекающими последсвиями .


Интересная логика
Я даже не сомневаюсь, что ты знаешь ответ на вопрос что было первое курица или яйцо.
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.