This Month with Nim: September 2022
05 October 2022 The Nim Community
Node
Author: Juan Carlos
New APIs for the browser implemented recently
- File IO API ๐พ
- GeoLocation API ๐
- EyeDropper API ๐
- Speech Synth API ๐
- USB API
- Bluetooth API
- Game controller API ๐ฎ
- Battery API ๐
- Video Subtitles API ๐ฌ
- Payments API ๐ธ
- QR-Codes and Bar-Codes API
- Share API
- Sanitizer API
- Temporal API โฐ
- IndexedDB API (by Tandy)
- WebSockets API (by Tandy)
- Multisync for JS (by Tandy)
Nodejs is your toolbox with 70+ modules for JavaScript, Node, browser and more!
QWatcher
Author: Pouriya Jamshidi
qwatcher
is designed to help monitor TCP connections and diagnose buffer and connectivity issues on Linux machines related to input and output queues.
nim-sos
Author: Christopher Taylor
nim-sos provides users the ability to program parallel applications. In the Single-Program-Many-Data (SPMD) style for supercomputers using the Nim programming language.
nim-sos:
- wraps the existing Sandia OpenSHMEM library implemented by Sandia National Laboratory.
- implements distributed symmetric array and distributed symmetric scalar support using the underlying OpenSHMEM wrapper.
- provides the Nim programming language distributed symmetric shared memory and Partitioned Global Address Space (PGAS) support.
assigns
Author: metagn
assigns is a library for unpacking assignment and basic pattern matching. Its advantage over other libraries with the same goal is that it has a simple, lightweight implementation that allows for overloading matching syntaxes based on the type of the matched value.
import assigns
# unpacking assignment:
type Person = tuple[name: string, age: int]
(age: a, name: n) := ("John Smith", 30).Person
assert (a, n) == (30, "John Smith")
# pattern matching:
proc fizzbuzz(n: int): string =
match (n mod 3, n mod 5):
of (0, 0): "FizzBuzz"
of (0, _): "Fizz"
of (_, 0): "Buzz"
else: $n
for i in 1..100:
echo fizzbuzz(i)
# custom implementation:
import assigns/impl, std/macros
type LinkedList[T] {.acyclic.} = ref object
leaf: T
next: LinkedList[T]
implementAssign LinkedList: # sugar for defining the overloading macro
# skip bracket:
let newLhs = if lhs.kind == nnkBracket and lhs.len == 1: lhs[0] else: lhs
# check for | operator:
if newLhs.kind == nnkInfix and newLhs[0].eqIdent"|":
# overloadably assign both parts
newStmtList(
open(newLhs[1], newDotExpr(rhs, ident"leaf")),
open(newLhs[2], newDotExpr(rhs, ident"next")))
else:
# use default assignment syntax if expression is not understood
default()
let list = LinkedList[int](leaf: 1, next:
LinkedList[int](leaf: 2, next:
LinkedList[int](leaf: 3, next: nil)))
x | [(< 5) | [y | _]] := list
assert (x, y) == (1, 3)
Can be installed with nimble install assigns
. More information in docs.
Want to see your project here next month?
Follow this to add your project to the next monthโs blog post.