Почему разработчики Microsoft решили сделать .NET машиной на основе стека?

Сегодня я обнаружил дизассемблер IL между инструментами, поставляемыми с VS2008. Пытался разобрать программу и посмотреть на результат. Коды операций было не так сложно понять, но меня удивило одно: .NET основан на стеке ?! Читая "Пишите отличный код, том II", я не получил хорошего представления о машинах на основе стека, потому что они довольно медленные. Их тоже легко реализовать, но я не думаю, что разработчики MS выбрали этот подход из-за его простоты, в конце концов, этот код нужно преобразовать в реальный машинный код, чтобы они просто решили проблему.
Пытался разобрать программу и посмотреть на результат. Коды операций было не так сложно понять, но одно ...

Сегодня я обнаружил дизассемблер IL между инструментами, поставляемыми с VS2008. Пытался разобрать программу и посмотреть на результат. Коды операций было не так сложно понять, но меня удивило одно: .NET основан на стеке ?! Читая "Пишите отличный код, том II", я не получил хорошего представления о машинах на основе стека, потому что они довольно медленные. Их тоже легко реализовать, но я не думаю, что разработчики MS выбрали этот подход из-за его простоты, в конце концов, этот код нужно преобразовать в реальный машинный код, чтобы они просто решили проблему.
Пытался разобрать программу и посмотреть на результат. Коды операций было не так сложно понять, но одно ...

Сегодня я обнаружил дизассемблер IL между инструментами, поставляемыми с VS2008. Пытался разобрать программу и посмотреть на результат. Коды операций было не так сложно понять, но меня удивило одно: .NET основан на стеке ?! Читая "Пишите отличный код, том II", я не получил хорошего представления о машинах на основе стека, потому что они довольно медленные. Их тоже легко реализовать, но я не думаю, что разработчики MS выбрали этот подход из-за его простоты, в конце концов, этот код нужно преобразовать в реальный машинный код, чтобы они просто решили проблему.
Мы нашли Дизассемблер IL между инструментами, поставляемыми с VS2008. Пытался разобрать программу и посмотреть на результат. Коды операций было не так сложно понять, но меня удивило одно: .NET основан на стеке ?! Читая "Пишите отличный код, том II", я не получил хорошего представления о машинах на основе стека, потому что они довольно медленные. Их тоже легко реализовать, но я не думаю, что разработчики MS выбрали этот подход из-за его простоты, в конце концов, этот код должен быть переведен в реальный машинный код, чтобы они просто решили проблему.
Мы нашли Дизассемблер IL между инструментами, поставляемыми с VS2008. Пытался разобрать программу и посмотреть на результат. Коды операций было не так сложно понять, но меня удивило одно: .NET основан на стеке ?! Читая "Пишите отличный код, том II", я не получил хорошего представления о машинах на основе стека, потому что они довольно медленные. Их тоже легко реализовать, но я не думаю, что разработчики MS выбрали этот подход из-за его простоты, в конце концов, этот код должен быть переведен в реальный машинный код, чтобы они просто решили проблему.
Я не получил хорошего представления о машинах на основе стека, потому что они довольно медленные. Их тоже легко реализовать, но я не думаю, что разработчики MS выбрали этот подход из-за его простоты, в конце концов, этот код нужно преобразовать в реальный машинный код, чтобы они просто решили проблему.
Я не получил хорошего представления о машинах на основе стека, потому что они довольно медленные. Их тоже легко реализовать, но я не думаю, что разработчики MS выбрали этот подход из-за его простоты, в конце концов, этот код должен быть переведен в реальный машинный код, чтобы они просто решили проблему.
Кто-нибудь из вас может объяснить этот странный выбор?

PS :
Я публикую здесь то, что читал по этой теме:

13.1.1 Стековые машины Машины на основе стека используют память для большинство вычислений с использованием стека в памяти для хранения всех операндов и полученные результаты. Компьютерные системы, использующие стековая архитектура предлагает некоторые важные преимущества перед другими архитектуры:

  • инструкции часто меньше (каждая потребляя меньше байтов), чем те найдено в других архитектурах, потому что в инструкциях обычно нет для указания любых операндов.
  • Это компиляторы вообще проще писать для стековых архитектур, чем для других машины, потому что преобразование арифметики выражения в последовательность стека операции очень просты.
  • Временные переменные редко необходимо в стековой архитектуре, потому что сам стек обслуживает цель.
К сожалению, стек машины также страдают от серьезных недостатки:
  • Практически каждый инструкция ссылается на память (которая работает медленно на современных машинах). Хотя кеши могут помочь решить эту проблему, производительность памяти по-прежнему важна проблема на стековых машинах.
  • Несмотря на то, что преобразование из HLL в штабелеукладчик очень просто, там меньше возможностей для оптимизации чем есть с другими архитектуры.
  • Потому что стек машины постоянно обращаются к одинаковые элементы данных (то есть данные о верх стека), конвейерная обработка и параллелизм инструкций затруднен для достижения (см. Написание отличного кода, Том 1 для получения подробной информации о конвейерной обработке и параллелизм команд).
A стек - это структура данных, которая позволяет операции только на нескольких ограниченных элементы стека (часто называемые верх стека и следующий в стеке). Со стеком вы обычно делаете одно из три вещи: помещайте новые данные в стек, извлекать данные из стека или работать с данными, которые в настоящее время сидя на вершине стека (и возможно данные непосредственно ниже Это).

и

13.1.1.5 Реальные стековые машины
Большое преимущество стека архитектура заключается в том, что легко напишите компилятор для такой машины. Также очень легко написать эмулятор для машины на основе стека. По этим причинам стековые архитектуры популярны в виртуальных машинах (ВМ) таких как виртуальная машина Java и p-код Microsoft Visual Basic переводчик. Несколько реальных стековые процессоры существуют, такие как аппаратная реализация Java ВМ; однако они не очень популярны из-за ограничений производительности доступа к памяти. Тем не менее, понимание основ стека архитектура важна, потому что многие компиляторы переводят исходный код HLL в стековую форму до перевод в реальный машинный код. Действительно, в худшем случае (хотя редко), компиляторы вынуждены выдавать код, который имитирует основанный на стеке машина при составлении комплекса арифметические выражения.

РЕДАКТИРОВАТЬ: Я только что нашел статью в блоге @ EricLippert, отвечающую на вопрос и подтверждающую ответ @Aaron

21
задан River 18 October 2017 в 03:07
поделиться