High-performance WebAssembly port of Boost.Random with SIMD optimizations for modern browsers.
- π² High-Quality Generators: Mersenne Twister MT19937, Sobol quasi-random sequences
- π Multiple Distributions: Uniform, Normal, Poisson with statistical accuracy
- β‘ SIMD Optimized: 3-5x performance improvement using WebAssembly SIMD
- π― Type-Safe API: Complete TypeScript definitions with comprehensive error handling
- π Reproducible: Identical sequences from same seeds across all platforms
- π¦ Dual Architecture: SIDE_MODULE (70KB) + MAIN_MODULE builds
- π Browser-Native: Chrome/Edge 113+ with WebAssembly SIMD support
| Operation | Throughput | Notes |
|---|---|---|
| Single Generation | 83M ops/sec | Uniform real values |
| Bulk Generation | 227 MB/s | 10K uniform values with SIMD |
| Normal Distribution | 164 MB/s | Box-Muller transform optimized |
| Statistical Analysis | 29K ops/sec | Mean, variance, min/max calculation |
- Mersenne Twister:
mt19937,mt19937_64- Industry standard with long period - Linear Congruential:
minstd_rand0,minstd_rand- Fast generators for simple use cases - Lagged Fibonacci:
lagged_fibonacci607,lagged_fibonacci1279- High-quality generators - Combined Generators:
ecuyer1988,kreutzer1986- Multiple generator combinations - Tausworthe:
taus88- Fast generator with good statistical properties
- Sobol Sequences: For high-dimensional integration and Monte Carlo methods
- Niederreiter Sequences: Alternative low-discrepancy sequences
- Faure Sequences: Additional quasi-random sequence implementation
- Uniform: Uniform real distribution
- Normal: Standard and general normal distributions
- Exponential: Exponential distribution with configurable rate
- Gamma: Gamma distribution with shape and scale parameters
- Beta: Beta distribution for probability modeling
- Chi-Squared: Chi-squared distribution for statistical testing
- Student's t: t-distribution for statistical analysis
- F-distribution: F-distribution for variance testing
- Weibull: Weibull distribution for reliability analysis
- Extreme Value: Gumbel distribution
- Cauchy: Cauchy distribution
- Fisher F: F-distribution
- Lognormal: Log-normal distribution
- Triangle: Triangular distribution
- Uniform on Sphere: Uniform distribution on n-dimensional sphere
- Uniform Integer: Uniform integer distribution
- Binomial: Binomial distribution
- Negative Binomial: Negative binomial distribution
- Geometric: Geometric distribution
- Poisson: Poisson distribution for rare events
- Hypergeometric: Hypergeometric distribution
- Discrete: General discrete distribution
import BoostRandom from "https://wasm.discere.cloud/boost-random/latest/main/boost-random-main.js"
const random = new BoostRandom()
await random.initialize()
// Create generator and distribution
const mt = random.createMersenneTwister(12345)
const normal = random.createNormalDistribution(0.0, 1.0)
// Generate 10,000 values efficiently
const result = random.generateBulk(mt, normal, 10000)
console.log(`Generated ${result.count} values in ${result.elapsedMs}ms`)
console.log(`SIMD acceleration: ${result.simdUsed ? 'Yes' : 'No'}`)
// Statistical analysis
const stats = random.analyzeStatistics(Array.from(result.values))
console.log(`Mean: ${stats.mean.toFixed(6)}, Std dev: ${stats.stddev.toFixed(6)}`)
random.cleanup()npm install @discere-os/boost-random.wasmconst { BoostRandom } = require('@discere-os/boost-random.wasm')
async function example() {
const random = new BoostRandom()
await random.initialize()
const mt = random.createMersenneTwister(42)
const uniform = random.createUniformRealDistribution(0.0, 1.0)
const result = random.generateBulk(mt, uniform, 1000)
console.log('Random values:', result.values.slice(0, 5))
random.cleanup()
}
example()// Seeding with seed sequences
const seedSeq = random.createSeedSequence([1, 2, 3, 4, 5])
random.seedFromSequence(mt, seedSeq)
// State serialization
const state = random.saveState(mt)
// ... later ...
random.loadState(mt, state)
// Variate generators (legacy interface)
const variate = random.createVariateGenerator(mt, normalDist)
const sample = random.generateVariate(variate)
// Generate canonical random numbers
const canonical = random.generateCanonical(mt, 32) // 32-bit precision- SIMD Acceleration: Vectorized operations for bulk generation
- Efficient Algorithms: Optimized implementations of all generators and distributions
- Memory Management: Careful memory allocation for WebAssembly performance
- Batch Generation: Generate multiple values efficiently
- State Caching: Optimized state management for repeated use
All generators and distributions maintain the mathematical properties and statistical quality of the original Boost.Random library:
- Statistical Testing: Generators pass comprehensive statistical tests (DIEHARD, TestU01)
- Period Length: Long periods for all pseudo-random generators
- Uniform Distribution: All generators produce properly distributed output
- Independence: Proper independence between generated values
- Reproducibility: Identical output for identical seeds across platforms
- Chrome/Edge 113+: Full WebGPU + WASM SIMD support β
- Chrome for Android 139+: Full support β
- Firefox: Requires WebGPU enabled
- Safari: Requires WebGPU support
This WebAssembly port is part of a larger effort to bring professional desktop applications to browsers with native performance.
π¨βπ» About the Maintainer: Isaac Johnston (@superstructor) - Building foundational browser-native computing infrastructure through systematic C/C++ to WebAssembly porting.
π Impact: 70+ open source WASM libraries enabling professional applications like Blender, GIMP, and scientific computing tools to run natively in browsers.
π Your Support Enables:
- Continued maintenance and updates
- Performance optimizations
- New library ports and integrations
- Documentation and tutorials
- Cross-browser compatibility testing
π Sponsor this work to help build the future of browser-native computing.