Разработать на asm.js модуль кодирования бинарных данных

Цена договорная
07 июня 2024, 20:41 • 3 отклика • 46 просмотров
Написание модуля для кодирования бинарных данных в типизированный массив с алфавитом произвольной длины (что-то типа BaseN (Base32, Base64, Base81, Base94), где N длина алфавита) на подмножестве языка JavaScript - asm.js, с возможность параллельного вычисления (через Worker`ы), так как при очень большом объёме входных данных кодирование в один поток очень дорого по времени.

Проблемы возникающие при использовании для этих целей atob и btoa:
1) При использовании возможно передавать в них только строку в кодировке ASCII, то есть для данных выходящих за этот диапазон необходимы дополнительные преобразования;
2) В процессе кодирования и декодирования результат возвращается в виде строки, что в некоторых случаях вызывает очень большую утечку памяти (порядка 2 ТБ) и критично сказывается на прочих процессах.

Поэтому есть следующее предложение:
1) Написать в качестве ядра модуля кодировщик на asm.js (для ускорения вычислений сравнимых по скорости с C++);
2) Написать конструктор на JS, который создаётся интерфейс над кодировщиком и подготавливается для него конфигурация;
3) Написать функцию кодирования в прототипе конструктора, которая на вход получает типизированный массив. Далее данные из этого массива подготавливает для кодирования процессом дробления их на блоки, и после или в процессе дробления передаёт их вместе с конфигурацией в кодировщик (или кодировщики, если их несколько). Далее при получении ответов от кодировщика (или кодировщиков) склеивает полученные закодированные блоки воедино следующим образом: [prefixLine +] dataBlock [ + blockSeparatorLine] [ + paddingChar] [ + suffixLine] и возвращает их;
4) Написать функцию декодирования в прототипе конструктора, которая на вход получает ранее закодированные данные также в виде типизированного массива, далее подготавливает блоки путём расклеивания их для извлечения закодированных блоков, и после передает их для декодирования вместе с конфигурацией в кодировщик (или кодировщики, если их несколько). Далее при получении ответов от кодировщика (или кодировщиков) склеивает полученные декодированные блоки воедино возвращая их в изначальное состояние.

Есть кривое (прошу за это прощения) ТЗ.
Время на выполнения и бюджет по договорённости.