Skip to content

sipemu/LinearRegressionWASM

Repository files navigation

Rust WASM in Google Appsscripts

This project demonstrates how to use Rust-generated WebAssembly (WASM) in Google Apps Script. It provides a simple linear regression implementation that can be used within Google Sheets or other Google Workspace applications.

What This Module Does

This module implements a basic linear regression algorithm using Rust, which is then compiled to WebAssembly for use in Google Apps Script. The main features include:

  1. Linear Regression Calculation: The Rust code provides functions to calculate the slope and intercept of a linear regression line based on input data points.

  2. WASM Integration: The Rust code is compiled to WebAssembly, allowing it to be used efficiently within the JavaScript environment of Google Apps Script.

  3. Google Sheets Integration: The module can be used to perform linear regression calculations directly within Google Sheets, enabling users to analyze data and make predictions based on trends.

  4. Performance Boost: By using Rust and WebAssembly, the module offers improved performance for computationally intensive tasks compared to pure JavaScript implementations.

Resources

How to build:

  1. Initialize project with npm install

  2. You will need to use cargo to build your Rust code.

cargo build --target wasm32-unknown-unknown --release
  1. You will need to use wasm-bindgen to generate the JavaScript bindings for your Rust code.
wasm-bindgen \
  --out-dir src/pkg \
  --target bundler \
  ./target/wasm32-unknown-unknown/release/wasm_regression.wasm
  1. You will need to use wasm-opt to optimize your WebAssembly module. This is optional but recommended.
wasm-opt \
  src/pkg/wasm_regression_bg.wasm \
  -Oz \
  -o src/pkg/wasm_regression_bg.wasm
  1. You will need to use a bundler such as ESBuild to bundle your JavaScript code and WebAssembly module.
node build.js

Deployment

Add src/main.js and dist/wasm.js to your Appsscripts project.

Additional Resources

Added following options to Cargo.toml according to Rust to WebAssembly the hard way:

[profile.release]
opt-level = 's'
strip = "debuginfo"
lto = true

About

Linear regression in Rust applied from JavaScript using WASM

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •