В WebAssembly, каково обоснование наличия 32- и 64-разрядных чисел? - PullRequest
2 голосов
/ 27 октября 2019

WebAssembly имеет только четыре типа значений:

  • i32 - 32-разрядные целые числа
  • f32 - 32-разрядные числа с плавающей запятой
  • i64 - 64-разрядные целые числа
  • f64 - 64-разрядные числа с плавающей запятой

Каждый имеет свой собственный набор кодов операций, представляющих арифметические операции, например, i32.add, i64.add, f32.add и f64.add. Существуют также коды операций для упаковки более узких целых чисел в более широкие типы, например int32.store_8, int64.load32_u. WebAssembly v1 определяет ~ 170 кодов операций, из которых ~ 70 специально для 32-битных чисел и ~ 75 для 64-битных.

Мне кажется, что отказ от поддержки 32-битных чисел почти вдвое уменьшит количество кодов операций без потери функциональности. Что заставляет меня задуматься: какая польза от обоих?

Есть некоторые обсуждения вокруг этого на GitHub, но онислишком технически для меня.

Ответы [ 2 ]

2 голосов
/ 27 октября 2019

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

Кроме того, сокращение числаколичество опкодов в WebAssembly, как предлагается, не принесет ощутимой выгоды. Они всегда используют один байт для хранения.

0 голосов
/ 27 октября 2019

Одной из целей WebAssembly является эффективная работа на широко используемых современных процессорах (включая встроенные системы), которые поддерживают 32-разрядные операции.

...