В спецификации ничего не говорится о том, какой порядок байтов использует i32.load
. Реальные программы содержат раздел данных для предоставления виртуальных таблиц, статических данных и т. Д. Для этих вещей обычно требуются разные типы значений. Однако WebAssembly ограничивается последовательностями байтов в своем разделе data
. С байтами нельзя эмулировать int32, так как они ничего не знают о порядке байтов.
Было бы неплохо, если бы в WebAssebmly было что-то похожее на структуры и инициализаторы структур, подобные LLVM. Это не только решает проблему с порядком байтов статических данных, но также дает возможность уменьшить двоичные данные, поскольку целые числа в разделе данных, вероятно, будут потреблять меньше байтов в представлении LEB128, тогда как они всегда потребляют 4 байта при кодировании в разделе данных.
Текущие обходные пути:
start
WebAssembly работает с прямым порядком байтов. Похоже, AstSemantics.md не упоминает об этом; Теперь я подал https://github.com/WebAssembly/design/pull/787, чтобы исправить это.
Он упоминается здесь и здесь и протестирован здесь .
Интересна идея иметь данные в кодировке LEB128 в разделе данных. Это можно сделать разными способами: либо с помощью нового инициализатора данных, либо со сжатием уровня 1 . Сжатие уровня 2 также может помочь с большими сегментами данных в целом.
Понятно, спасибо. Разве это не слишком сильное требование? Я не знаю ни одного процессора, который использует обратный порядок байтов, но если по какой-то причине он появится и станет широко использоваться, WebAssembly будет выполняться на этом процессоре с некоторыми накладными расходами.
Отсутствие необходимости иметь дело с множественным порядком байтов в экосистеме дает значительные преимущества, и вероятность того, что архитектура ЦП, которая хотя бы не имеет эффективной поддержки прямого порядка байтов, станет популярной в обозримом будущем, считается очень низкой.
В сб, 3 сентября 2016 г., в 16:07, Алексей Андреев [email protected]
написал:
Понятно, спасибо. Разве это не слишком сильное требование? Нет никакого процессора я
знаю, что использует обратный порядок байтов, но если по какой-то причине он появляется и становится
широко используется, WebAssembly будет выполняться на этом процессоре с некоторыми накладными расходами.Процессоры MIPS и SPARC имеют обратный порядок байтов, хотя SPARC имеет обратный порядок байтов.
загружает / сохраняет в течение некоторого времени, а у MIPS есть варианты с малым концом.
Мы реализовали поддержку обратного порядка байтов в V8 через явную замену порядка байтов.
код, но еще не тщательно измерил накладные расходы.
-
Вы получаете это, потому что подписаны на эту беседу.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/WebAssembly/design/issues/786#issuecomment -244548450,
или отключить поток
https://github.com/notifications/unsubscribe-auth/ALnq1EEkfh88rAXYByuL9uNcjbsjVnFbks5qmX8agaJpZM4J0Snh
.
Было бы неплохо, если бы в WebAssebmly было что-то похожее на структуры и инициализаторы структур, подобные LLVM.
Это уже выполняется в WebAssembly точно так же, как в C и C ++: перед вызовом main () функция _start может вызывать функции .init_array. Не думаю, что здесь есть чем заняться.
Согласен с @sunfishcode / @titzer по
Я считаю, что это решено.
Самый полезный комментарий
Отсутствие необходимости иметь дело с множественным порядком байтов в экосистеме дает значительные преимущества, и вероятность того, что архитектура ЦП, которая хотя бы не имеет эффективной поддержки прямого порядка байтов, станет популярной в обозримом будущем, считается очень низкой.