why vecxt
It is often prefereable to be able to perform sub-parts of a numeric algorithm to be executed as close to the user as possible. That usually comes with a painful pair of tradeoffs;
- sub native performance
- the "two / three platform" two / three sets of code problem
Vecxt challenges these constraints, by providing a single, cross platform, high performance, linear algebra library.
For example if your data acquisition is serverside, but do parts of a calculation in browser or in response to user input, saving the latency of network traffc and improving user experience in scalaJS.
vecxt provides easy access to platform native common vector operations via intuitive and common syntax. Guaranteeing platform native performance - wherever you want to do your numerics.
JVM
vecxt is cross platform, this example runs on the JVM, see Cross Platform for the same example running in scalaJS.
import vecxt.all.*
import narr.*
import vecxt.BoundsCheck.DoBoundsCheck.yes
def algo(a: NArray[Double], b :NArray[Double], c: Double ) = (a + b) / c
val a = Array[Double](1, 2, 3)
val b = Array[Double](4, 5, 6)
val c = 2.0
println(algo(a, b, c).mkString(", "))
It would be possible to write the algo
method in the shared part of your project, and use it on any of the platforms - freeing you from the tyranny of having to choose a platform in advance.
It's also fun to write. And hopefully, fun to use !