Если бы я был виртуальной машиной, как бы я относился к числам при выполнении JavaScript? - PullRequest
0 голосов
/ 26 мая 2011

Я думал о том, как наилучшим образом преодолеть разрыв между миром CLR (среда выполнения .NET) и JavaScript, и одна вещь, которая пришла мне на ум, это понятие типа в JavaScript, которое в некоторой степени выводится из использования, в то время как т.е.C # не нужно этого делать.

Я хотел бы узнать немного больше о специфике реализации движков JavaScript, особенно касающихся того, как вы относитесь к числу.Стандарт описывает серию операций, которые действительны в определенных контекстах, и дает определенные конкретные результаты, строго говоря, концепция целого числа не существует в JavaScript, но существуют типичные целочисленные арифметические операции, такие как сдвиг битов (>>), которыевсегда оперирует 32-разрядным целым числом со знаком и всегда выдает 32-разрядное целое число со знаком.

Я думаю, что сложная часть состоит в том, чтобы выяснить, когда число является целым числом, а когда число не является целым числом.Но как виртуальные машины делают это?

var x = 1; // is this an integer or a double?
var x = 1.0; // is this an integer or a double?
var x = 2147483648; // is this an integer or a double?
var x = 9007199254740993; // is this an integer, double or runtime error?

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

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

Есть ли какие-нибудь гуру JavaScript VM, которые хотели бы попробовать это?(на данный момент я больше интересуюсь внутренними компонентами виртуальной машины, чем собственными спецификациями спецификации)

1 Ответ

1 голос
/ 26 мая 2011

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

  • Исходный код V8 (V8 - это механизм JavaScript от Google, используемый в Chrome, NodeJS и некоторых других местах. Один из самых быстрых там).
  • Исходный код SpiderMonkey (SpiderMonkey - это движок Mozilla, используемый в Firefox)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...