Use WebAssembly to Share Strings With Hosts and Modules

In this Shortcut, we are going to learn how to deal with something you may not have realized was a complexity in WebAssembly: strings! Strings are such a fundamental part of programming languages that it may strike you as strange that WebAssembly has no native type for them. If we are being honest, WebAssembly really only supports integers and floating point numbers. Strings are represented in different ways in different languages. In C and C++, they are basically just characters in memory with a null terminator.

In order to pass strings from a WebAssembly module to the host or the other way around, we will have to write them into a Memory instance. We saw how to create and import Memory instances in the “Use WebAssembly to Share Memory Between Hosts and Modules” Shortcut.

Unfortunately, at least in JavaScript, we will have to decode the raw string bytes into JavaScript strings. This will be a little tricky, but we will look at exactly how to do this. In the GitHub repository for this Shortcut, you should enter the directory 10-Strings.

The module will be very simple this time. It is in the file strings.wat:

(module
   (memory (export "memory") 1)
   (data (i32.const 0x0) "\04\13\18\23")
   (data (i32.const 0x4) "WebAssembly is fun. WebAssemblyは楽しいですね。")
)

The first thing you may notice is that this module does not import a Memory instance; it exports one. Secondly, note the ...

Get Use WebAssembly to Share Strings With Hosts and Modules now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.