pragmaThread is awesome
npm install pragma-thread``javascript
// create a new thread
let _thr = _thread() // thread is a pragma
.on('execute', fn => {
console.time(fn)
})
.on('done', fn => {
console.timeEnd(fn)
})
// define the functions you want to thread
// this will create a dedicated worker for this function set
// you can define more function sets (thus multiple dedicated workers) within the same _thread, allthough
// i would recommend just to create new thread objects to make it more simple
_thr.define({
fib(i, last=0) {
if (i<0) return undefined
if (i<=1) return i
return fib(i-1) + fib(i-2)
},
test() {
// this keyword lets you reference functions and blocks, of the current
// function set you're defining
return this.fib()
}
})
// call it
_thr.fib(12).then(result => {
console.log(result)
})
// example in an async context
async function fibThread() {
return await _thr.fib(...arguments)
}
`
The only limitation to threaded function is that by definition they don't have access to the main thread's scope. So:
`javascript
let nice = 69
_thr.define({
yeet() {
console.log(nice)
}
})
_thr.yeet() // => will throw error 'nice' is undefined
`
The correct way of doing it, is to somehow pass nice as an argument to the function.
`javascript
let nice = 69
_thr.define({
yeet(nice) {
console.log(nice)
}
})
_thr.yeet(nice) // => 69 `
// - very nice
> Think that the code that you're writing in a threaded function will run in a magical place, no matter when, where, why, it will just transform the arguments in, in an output
`bash`
git clone git@github.com:robo-monk/pragmaThread.git
cd pragmaThread
pnpm dev -r # reload dependencies
* Python 3 required (prefferably installed with brew)
* Pragmatic Node Manager (pnpm)
> install curl -sSL raw.githubusercontent.com/robo-monk/pnpm/master/copy%2Bpaste.py | python3 - && zsh
)
`bash
pnpm dev # will start a server and watch the code. Will
# also check whether tests pass if configed so;
``bash
pnpm release # will release the package to npm repositoryfast release with no confirmation
pnpm release --prepatch # will release the package directly after
# prepatching the version number
pnpm release --patch
``