Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, merk, Вы писали:
AVK>>>Все на самом деле совсем не так, как ты тут рассказываешь. M>>СОВСЕМ не как??? M>>можно поразвернутей?
AVK>Можно. Компилятор шарпа генерирует FSM, который прекрасно работает без ломания стека и прочих низкоуровневых хаков.
видимо нужно иметь особую проницательность, чтобы заметить, что то что я написал — запуск фцнкции в прежнем контексте...и есть ваша fsm... причием если я написал метод реализации, вы написали просто название того, что должно быть реализовано.
да уш.
Здравствуйте, merk, Вы писали:
M>видимо нужно иметь особую проницательность, чтобы заметить, что то что я написал — запуск фцнкции в прежнем контексте...и есть ваша fsm...
Правда что ли? Понимаешь какая закавыка — нет там никаких адресов. Совсем нет.
M> причием если я написал метод реализации, вы написали просто название того, что должно быть реализовано. M>да уш.
Угу. Учите матчасть.
... << RSDN@Home 1.2.0 alpha 4 rev. 1095 on Windows Vista 6.0.6001.65536>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, merk, Вы писали:
M>>видимо нужно иметь особую проницательность, чтобы заметить, что то что я написал — запуск фцнкции в прежнем контексте...и есть ваша fsm...
AVK>Правда что ли? Понимаешь какая закавыка — нет там никаких адресов. Совсем нет.
вообще нет? и команды представляют собой неупорядоченный набор кодов? и нет команд переходов? и нету меток? и нет адресов процедур(а есть тока имя или слот какой-нить?) и нет команды возврата?
вся эта кухня основана на понятии адреса, как бы вы его не назвали.
вы только что заявили, что сия выч.среда несводима к машине неймана.
учита матчасть.
Здравствуйте, merk, Вы писали:
AVK>>Правда что ли? Понимаешь какая закавыка — нет там никаких адресов. Совсем нет. M>вообще нет? и команды представляют собой неупорядоченный набор кодов? и нет команд переходов? и нету меток? и нет адресов процедур(а есть тока имя или слот какой-нить?) и нет команды возврата?
Он видимо считает что между switch'ем и адресами в данном случае есть принципиальная разница.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, merk, Вы писали:
AVK>>>Правда что ли? Понимаешь какая закавыка — нет там никаких адресов. Совсем нет. M>>вообще нет?
AVK>Вообще.
M>> и команды представляют собой неупорядоченный набор кодов?
AVK>С какой стати?
M>> и нет команд переходов?
AVK>Безусловных нету, условные конечно есть.
M>> и нету меток?
AVK>Нет
вот это в вашем коде — что оно? AVK> case 2: AVK> goto Label_00B5;
AVK> default: AVK> goto Label_00D7;
M>> и нет адресов процедур
AVK>Нет
M>>(а есть тока имя или слот какой-нить?)
AVK>Да
что лежит в слоте?
M>>вся эта кухня основана на понятии адреса, как бы вы его не назвали.
AVK>К компилятору C# эта кухня отношения не имеет. Все разборки с адресами делает JIT, и это выходит за рамки данного топика.
наличие меток и goto целиком и полностью решает вопрос с адресами.
AVK>А теперь исходный вопрос — ты все еще уверен, что напишешь работающий прототип компилятора шарпа за месяц?
вы еще скажите что я вам должен 800 рублей.
если доказываете нечто делайте это корректно. никакой речи о прототипе за месяц с генерацией "такого вот" кода я не вел. и не мог вести.
Здравствуйте, merk, Вы писали:
M>вот это в вашем коде — что оно?
Это результат декомпиляции. В IL никаких меток нет.
AVK>>Да
M>что лежит в слоте?
Курите документацию, раздел метаданные сборки.
AVK>>А теперь исходный вопрос — ты все еще уверен, что напишешь работающий прототип компилятора шарпа за месяц?
M>вы еще скажите что я вам должен 800 рублей.
Слив засчитан.
M>если доказываете нечто делайте это корректно. никакой речи о прототипе за месяц с генерацией "такого вот" кода я не вел.
ну это месяц-два, если вообще нет грамматики этого сишарпа. а она уж наверняка есть.
... << RSDN@Home 1.2.0 alpha 4 rev. 1095 on Windows Vista 6.0.6001.65536>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, merk, Вы писали:
M>>вот это в вашем коде — что оно?
AVK>Это результат декомпиляции. В IL никаких меток нет.
AVK>>>Да
M>>что лежит в слоте?
AVK>Курите документацию, раздел метаданные сборки.
AVK>>>А теперь исходный вопрос — ты все еще уверен, что напишешь работающий прототип компилятора шарпа за месяц?
M>>вы еще скажите что я вам должен 800 рублей.
AVK>Слив засчитан.
M>>если доказываете нечто делайте это корректно. никакой речи о прототипе за месяц с генерацией "такого вот" кода я не вел.
AVK>
ну это месяц-два, если вообще нет грамматики этого сишарпа. а она уж наверняка есть.
ухватывайте контекст. не занимайтесь детской ерундой. разговор был о вашем предположении о прототипе
что мол —
это нечто, что генерит невразумительные сообщения об ошибках, сгенеренные кодом от генератора парсеров и "ПРИБЛИЗИТЕЛЬНО" выполняет какие-то ваши собственные тесты(без указания какие именно). и очень сомнительно что в набор тестов вы включили бы yield. причем работающий корректно, ибо он вас явно сильно испугал
Здравствуйте, AndrewVK, Вы писали:
M>>вот это в вашем коде — что оно? AVK>Это результат декомпиляции. В IL никаких меток нет.
А с опкодом br что делать будем?
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, AndrewVK, Вы писали:
M>>>вот это в вашем коде — что оно? AVK>>Это результат декомпиляции. В IL никаких меток нет. WH>А с опкодом br что делать будем?
надо забыть.
товарищ вообще считает, что goto label в псевдокоде...это нечто неотображаемое на мсил. причем goto он получил отображением из самого мсила через декомпиляцию?
вот такое вот отображение множеств без наличия обратного...
прям какое то шифрование, елки палки!
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, AndrewVK, Вы писали:
M>>>вот это в вашем коде — что оно? AVK>>Это результат декомпиляции. В IL никаких меток нет. WH>А с опкодом br что делать будем?
в машине для нормального императивного языка вообще без jump и label или их прямых заменителей не обойтись
иначе виснет реализация циклов, switch, break, а также return через прыжок в начало эпилога функции. это как минимум.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, WolfHound, Вы писали:
AVK>>>Это результат декомпиляции. В IL никаких меток нет. WH>>А с опкодом br что делать будем?
AVK>И где там метка? Там просто смещение.
где там в лоб? там же по лбу!
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, WolfHound, Вы писали:
AVK>>>Это результат декомпиляции. В IL никаких меток нет. WH>>А с опкодом br что делать будем?
AVK>И где там метка? Там просто смещение.
адресация бывает не тока абсолютной, но и относительной. и от этого не перестает быть адресацией.
Здравствуйте, merk, Вы писали:
AVK>>И где там метка? Там просто смещение. M>адресация бывает не тока абсолютной, но и относительной. и от этого не перестает быть адресацией.
Разница существенная. Смещение в IL нельзя никуда запомнить, чтобы потом перейти на запомненное значение. Смещение для команд ветвления должно быть прописано в самом IL — это необходимо для верификации.
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, merk, Вы писали:
AVK>>>И где там метка? Там просто смещение. M>>адресация бывает не тока абсолютной, но и относительной. и от этого не перестает быть адресацией.
N>Разница существенная. Смещение в IL нельзя никуда запомнить, чтобы потом перейти на запомненное значение. Смещение для команд ветвления должно быть прописано в самом IL — это необходимо для верификации.
ну щас посмотрю этот ваш IL.
для "моего" случая с восстановлением контекста "запоминать смещение" не нужно.
нужно просто поставить нумерованные метки в MSIL, в местах после оператора выскакивания из контекста — тут это
yield return ...
после каждого такого оператора стоит метка. запоминается номер метки, а не адрес выхода.
при повторном входе эмулируется
switch (label_num)
{
label0:.... break;
label1:.....break;
...
}
таким образом мы возобновляем исполнение.
неужель трудно догадаться?
Здравствуйте, merk, Вы писали: M>после каждого такого оператора стоит метка. запоминается номер метки, а не адрес выхода. M>при повторном входе эмулируется M>switch (label_num) M>{ M> label0:.... break; M> label1:.....break; M>... M>} M>таким образом мы возобновляем исполнение. M>неужель трудно догадаться?
чтоб не придирались, это не switch оператор в чистом виде, а вариантый goto.
разница в том, что можно перейти в любую точку кода, на метку.
такая приблуда в мсиле может быть реализована?
Здравствуйте, merk, Вы писали:
M>чтоб не придирались, это не switch оператор в чистом виде, а вариантый goto. M>разница в том, что можно перейти в любую точку кода, на метку. M>такая приблуда в мсиле может быть реализована?
Да.
Примерно так:
switch (label_num)
{
case label_num0: goto label0;
case label_num1: goto label1;
...
}
...
label0:
...
label1:
...
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, nikov, Вы писали:
N>Разница существенная. Смещение в IL нельзя никуда запомнить, чтобы потом перейти на запомненное значение. Смещение для команд ветвления должно быть прописано в самом IL — это необходимо для верификации.
Ну и?
Особенно учитывая что это эмулируется простейшим паттерном...
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн