У меня нет большого (не очень) опыта в этой области, поэтому вы можете проверить некоторые из следующих действий для себя (или, может быть, кто-то еще может исправить меня в случае необходимости?).
Два языка, с которыми я работаю в настоящее время, - это C # и Java, поэтому я, естественно, склонен к их методологиям.Как известно большинству людей, обе они скомпилированы в байт-код, и обе платформы (CLR и JVM) используют JIT (по крайней мере, в основных реализациях).Кроме того, я бы предположил, что дрожания для каждой платформы написаны на C / C ++, но я действительно точно не знаю.
В целом, эти языки и их соответствующие платформы очень похожи наВаша ситуация (кроме динамической части, но я не уверен, имеет ли это значение).Кроме того, поскольку они являются такими распространенными языками, я уверен, что их реализации могут послужить хорошим руководством для вашего дизайна.
Учитывая это, я точно знаю, что оба CLRи JVM являются основанными на стеке архитектурами.Некоторые из преимуществ, которые я помню для стеков по сравнению с регистрами:
- Меньший сгенерированный код
- Упрощенные интерпретаторы
- Упрощенные компиляторы
- и т.д.
Кроме того, я считаю, что основанный на стеке интерфейс немного более интуитивно понятен и удобен для чтения, но это субъективная вещь, и, как я уже говорил, я пока не видел слишком много байт-кода.
Некоторые преимущества архитектуры на основе регистров:
- Меньше инструкций должно быть выполнено
- Более быстрые интерпретаторы (следует из # 1)
- Можетлегче переводить в машинный код, так как большинство обычных аппаратных средств основано на регистрах
- и т. д.
Конечно, всегда есть способы компенсировать недостатки для каждого, но я думаю, что ониопишите очевидные вещи для рассмотрения.