Сегодня я нашел Disassembler IL между инструментами, предоставляемыми VS2008. Я попытался разобрать программу и посмотреть на результат. Коды не были так трудно понять, но меня удивило одно:.NET на основе стека?! Чтение "Напишите отличный код, том II". У меня не было хорошей картины стековых машин, потому что они довольно медленные. Их легко реализовать, но я не думаю, что разработчики MS выбрали этот подход из-за его простоты, ведь весь код должен быть переведен в настоящий машинный код, чтобы они просто переместили проблему. Может ли кто-нибудь из вас объяснить этот странный выбор?
PS:
Я размещаю здесь то, что я читал об этой теме:
13.1.1 Статические машиныМашины на основе стека используют память для большинство вычислений, используя стек в памяти для хранения всех операндов и Результаты. Компьютерные системы, использующие архитектуры стека предлагают некоторые важные преимущества перед другими архитектуры:
К сожалению, стек машины также страдают от некоторых серьезных Недостатки:
- инструкции часто меньше (каждый потребляя меньше байтов), чем те найденных в других архитектурах, потому что инструкции обычно не имеют для указания каких-либо операндов.
- как правило, проще писать компиляторы для архитектур стека, чем для других машин, поскольку преобразование арифметики выражения для последовательности стека операции очень просты.
- Временные переменные редко необходимо в архитектуре стека, потому что сам стек служит тому Цель.
A stack - это структура данных, которая позволяет операции только на нескольких ограниченных элементы стека (часто называемые вершина стека и следующая на стеке). С помощью стека вы обычно делаете один из три вещи: нажмите новые данные на стек, данные pop из стека или работать с данными, которые в настоящее время сидя на вершине стека (и возможно, данные сразу ниже Это).
- Почти каждый память команд на современных машинах работает медленно). Хоть кэши могут помочь смягчить эту проблему, производительность памяти по-прежнему проблема на машинах стека.
- Даже если преобразование из HLL к стековой машине очень легко, там меньше возможностей для оптимизации чем есть с другими архитектуры.
- Потому что стек машины постоянно обращаются к те же элементы данных (то есть данные по верхняя часть стека), конвейерная обработка и инструкция parallelism сложна для достижения (см. "Создать отличный код", Том 1 для получения подробной информации о конвейерной и инструкция parallelism).
и
13.1.1.5 Статические машины реального мира
Большое преимущество стека архитектура заключается в том, что напишите компилятор для такой машины. Его также очень легко написать эмулятор для машины на основе стека. По этим причинам архитектуры стека популярны в виртуальных машинах (виртуальных машинах) таких как виртуальная машина Java и Microsoft Visual Basic p-code переводчик. Несколько реальных основанные на стеках процессоры, такие как аппаратная реализация Java VM; однако они не очень популярны из-за ограничений производительности доступа к памяти. Тем не менее, понимание основ стека архитектура важна, потому что многие компиляторы переводят исходный код HLL в форму на основе стека до перевод на фактический машинный код. Действительно, в худшем случае (хотя редко), компиляторы вынуждены испускать код, который эмулирует стековый машина при компиляции комплекса арифметические выражения.
EDIT: Я только что нашел статью в блоге @EricLippert, отвечая на вопрос и подтверждая ответ @Aaron