Дизайн VM: Больше кодов операций или меньше кодов операций? Что лучше?

теперь его

HttpContext.Connection.IsLocal

, и если вам нужно проверить это вне контроллера, тогда вы берете зависимость от IHttpContextAccessor, чтобы получить к нему доступ.

Обновление основано на комментарии:

HttpContext изначально доступно в представлениях

@if (Context.Connection.IsLocal)
{

}
21
задан Seki 13 June 2015 в 10:20
поделиться

2 ответа

Для повышения производительности программного обеспечения проще, если все коды операций имеют одинаковую длину, поэтому вы можете иметь один гигантский оператор переключения и не проверять различные биты параметров, которые могут были установлены предыдущими кодами операций модификатора.

Два вопроса, которые, я думаю, вы не сделали. Я спрашиваю о простоте написания компиляторов, переводящих языки программирования в код вашей виртуальной машины, и простоте написания интерпретаторов, выполняющих код вашей виртуальной машины. И то, и другое проще с меньшим количеством кодов операций. (Но не слишком мало. Например, если вы опустите код операции деления, вы получите возможность узнать, как кодировать хорошие функции деления. Хорошие намного сложнее простых.)

5
ответ дан 29 November 2019 в 22:04
поделиться

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

Другими словами, желательно, чтобы вы были в состоянии определить общие сценарии использования для вашей виртуальной машины, чтобы вы могли установить функции, которые, вероятно, потребуются, а также установить те, которые вряд ли будут очень часто необходимы.

Конечно, я понимаю, что вы, вероятно, представляете себе абстрактную, очень общую виртуальную машину, которую можно использовать как внутреннюю / внутреннюю реализацию для других языков программирования?

Однако я считаю, что важно понимать и подчеркнуть, что на самом деле не существует такой вещи, как «общий идеал» реализации чего-либо, т.е. Как это в первую очередь будет использовано в вашем видении? Каких целей вы хотите достичь?

Это поможет вам сформулировать требования и упростить процесс, чтобы вы могли разработать набор инструкций на основе разумных предположений.

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

Если, с другой стороны, вы будете использовать сервер в качестве серверной части для объектно-ориентированных языков, вам нужно будет изучить оптимизацию соответствующих низкоуровневых инструкций (например, хэшей / словарей).

В общем, я бы рекомендовал оставить набор инструкций максимально простой и интуитивно понятный вначале, и добавляйте специальные инструкции только после того, как вы доказали, что их наличие действительно полезно (например, дампы профиля и кода операции) и действительно приводит к увеличению производительности. Таким образом, это в значительной степени будет определяться самыми первыми «клиентами» вашей виртуальной машины.

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

8
ответ дан 29 November 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: