Skip to content

Glossary

Karsten Schmidt edited this page Apr 12, 2023 · 2 revisions

A dictionary of common terms and abbreviations used throughout the thi.ng/umbrella environment. Where relevant links to related references & packages are provided too.

Alphabetical index

A B C D E F G H I K L M N O P R S T W Z

A

Adjacency

The information that two or more elements are somehow connected to each other, either conceptually, structurally/topologically or in any other abstract manner. Here the term is usually mentioned in relation to graphs and matrices describing graphs.

Allocator

Memory allocator. Used by/for object or vector pools and for WebAssembly interop.

Array of Structures

Conventional memory layout in which complex data structures are laid out in interleaved/strided manner. E.g. A 3D vector consists of X, Y, Z components. In AoS layout an array of such vectors would be stored as X Y Z X Y Z X Y Z ....

For an alternative layout see Structure of Arrays (SoA).

AssemblyScript

A TypeScript-like language which compiles directly to WebAssembly.

Associative data structure

A data structure which associates keys with values and allows values to be referred to via these keys. Examples include JavaScript objects (where keys are usually called "properties") and Maps.

AxiDraw

A popular pen plotter designed & sold by Evil Mad Scientist Labs

Related packages:

B

Bit field

A 1D, array-like data structure which uses individual bits to store boolean states in a highly (memory) efficient manner. E.g. Useful when dealing with a large number elements and tracking if an item has already been visited or not.

Bit matrix

2D version of a Bit field, e.g. used to store adjacency information between nodes in a graph.

Bit Stream

A stream abstraction for binary data, providing bitwise read/write access

C

Cellular Automata

Code generation

The concept of generating (instead of manually writing) source code via an algorithm. Usually based on some form of input data structure, but both granularity and mechanism used is highly context specific. E.g. in thi.ng/vectors, hundreds of small, one-line functions are generated, whereas other packages generate kilobytes of complex program code.

Comparator

A function which decides about the ordering of 2 given elements. Usually provided to a sorting algorithm to implement arbitrary sort criteria.

Composition (functional)

TODO

`h(x) =

Also see Higher order functions.

Convolution

D

DAG

Abbreviation for Directed Acyclic Graph

Data Oriented Design

TODO

Also see Entity Component System, SIMD, Structure of Arrays, WebAssembly, Zig.

Declarative

Instead of writing programs instructing the machine to perform a certain sequence of precise instructions directly (aka the imperative model), in a more declarative approach one merely provides ("declares") a set of inputs (data) and completely delegates all other decision making w.r.t. order & control flow to the underlying process/algorithm, hence much reducing the cognitive load required (for the human) to perform the task at hand.

Digital Signal Processing

TODO

Directed Acyclic Graph

A special type of graph in which no directed cycles (loops) are allowed.

Domain Specific Language

TODO

DOD

Abbreviation for Data Oriented Design

Dot

The native file format of Graphviz, a popular visualization software for directed and undirected graphs. You can find a comprehensive syntax guide here:

DSL

Abbreviation for Domain Specific Language

DSP

Abbreviation for Digital Signal Processing

E

Eager evaluation

The default mode of program evaluation, i.e. an algorithm will consume and process available inputs as much as possible without interruption. Opposite of lazy evaluation.

ECS

See Entity Component System

Endianness

The byte order of numeric values requiring a multi-byte representation. This order can be both predetermined by hardware and software platforms. In Little Endian, the least significant byte (LSB) is stored first. Conversely, on a Big Endian platform, the most significant byte (MSB) is stored first.

Entity Component System

A powerful software architecture (and alternative to Object Oriented Programming) which uses composition instead of inheritance to define complex (and changing) data structures/entities from simple data components. Users can then define queries & systems to operate on all entities which have certain components.

ECS architectures

F

Fast Fourier Transform

TODO

FFT

Abbreviation for Fast Fourier Transform

Finite State Machine

TODO

FSM

Abbreviation for Finite State Machine

Functional programming

A programming style focused on solving tasks primarily via the application and composition of functions rather than imperative program flow and control structures.

Also see Composition and Higher Order Functions.

Fuzzy Logic

TODO

G

Generator function

A type of function which can be suspended and be used as fundamental building block to implement cooperative multitasking and pull-based

GLSL

C-like programming language used for Shader programming, specifically OpenGL/WebGL.

GPU

Graphics Processing Unit, aka graphics cards (incl. onboard & mobile versions).

GPGPU

General Purpose GPU processing. The ability or technique to utilize GPU hardware not only for graphics or visualization, but to perform other computations, exploiting the massively parallel architecture of GPUs to achieve much better performance than using the CPU.

Graph

TODO

H

Hiccup

An S-expression inspired data structure convention to encode (not only) hierarchical data using a language's built-in array literals. The basic convention is: ["tag", { attribs }, children], where tag is can be e.g. an HTML tag or SVG shape name, or any other context specific identifier. The attributes (in 2nd position) are usually reserved for arbitrary metadata and children can be any other data and are optional (again, all context specific!).

This overall format lends itself very well to many processing and (code) generation contexts, as well as interchange and serialization formats... It's widely used throughout thi.ng/umbrella:

Higher Order Function

Higher order function, a function which returns another function as result. This is a common and important functional programming technique, e.g. used to pre-configure the behavior of a function prior to its use. Extremely widely used in various thi.ng/umbrella packages.

HOF

Abbreviation for Higher Order Function.

I

IGES

Initial Graphics Exchange Specification, an ancient, but still fairly widespread graphics file format for exchanging vector graphics & geometry data between a variety of CAD systems.

Imperative programming

TODO

Also see in contrast: Declarative

Interface

In software architecture, an interface is an abstract contract describing an API (a set of operations) and/or data structure (e.g for configuration objects). Being abstract, interfaces do not provide an implementation, which must by provided by actual concrete types/classes or the user. This separation provides a flexible and powerful mechanism to design highly re-usable & extensible APIs, whilst reducing cognitive load for the user (who only needs to learn the interface).

Almost all thi.ng/umbrella packages define some interfaces, but the most widely used/shared ones (incl. dozens of other type definitions) are all in this package:

Interval

An interval represents a numeric value range with different options for describing the general shape and/or "ends" (if any) on either side (i.e. open/closed). The documentation of various packages in this monorepo uses the standardized notation and the following package can be used to define, combine & work with intervals (the readme also includes various examples):

Iterator / iterable

In the JavaScript context, any data type which implements the standard iterator protocol. This includes built-in data types: arrays, maps, sets, strings, classes with [Symbol.iterator] implementations.

Also see Generator function

K

Key

The name or identifier in a [name, value] pair/tuple, generally used to write or look up the pair's value in an associative data structure. In some cases keys can be of any data type, in others (e.g. JavaScript objects), only strings, numbers or symbols are allowed.

Also see Value equivalence.

L

Lane

In the context of thi.ng/umbrella, either a single scalar value within a SIMD word/register, e.g. the X component of a 4D floating point vector. In other cases, a lane is a group of bits (e.g. a byte) within a packed integer, e.g. the red color channel of a 32bit ARGB value.

Also see Endianness, SIMD, Swizzling.

Lazy evaluation

TODO

Linked data

TODO

M

Memoization

TODO

Multiple Dispatch

TODO

N

Noise

TODO

O

Openness (geometry)

Classification if a geometrical entity defines a boundary of a fully closed or open shape. E.g. a simple 2D polygon describes a closed shape, whereas an 180° arc describes an open geometry.

Openness (interval)

A classification for numeric intervals, describing if either endpoint of an interval is included, excluded or even unbounded (i.e. ±∞)

P

Path (data structure)

TODO

A sequence of keys and/or numeric indices, describing the access route to an arbitrary value within a (deeply) nested data structure.

Polyline

Geometry shape type consisting of at least two points/vertices, defining consecutive line segments. Polylines can be open or closed.

Polymorphic function

TODO

PRNG

Pseudo Random Number Generator.

R

Reactive

TODO

Reducer

TODO

Also see Functional programming, Transducers.

S

S-expression

TODO

Shader

Generally refers to a program aimed to be run in a GPU-like context, traditionally (as the name implies) for shading purposes, but these days for any type of GPGPU use cases, incl. many types of simulation & ML. For WebGL, shaders always consist as pair of vertex and fragment shader. More modern & less restrictive envs (incl. WebGPU) also support compute shaders...

SIMD

Single Instruction, Multiple Data. A feature of modern CPUs to process multiple values (as vectors) in parallel, hence offering substantial speed ups (in some situations). Also see Structure Of Arrays, WebAssembly.

Strided layout

A memory layout of values which are not stored in a dense or even successive manner (a more generalized version of AoS). The stride length/size refers to the number (and sign) of elements between the actual values of interest. E.g. there're dozens of functions in the thi.ng/vectors package supporting strides for both individual vector components and vectors themselves.

Structure of Arrays

Mmemory layout in which complex data structures are laid out in non-interleaved manner, using an individual array for each component/field. E.g. A 3D vector consists of X, Y, Z components. In SoA layout a collection of such vectors would be stored using 3 arrays:

  • X1 X2 X3 X4 ...
  • Y1 Y2 Y3 Y4 ...
  • Z1 Z2 Z3 Z4 ...

This layout is more favorable to modern CPU architectures, SIMD and the Data Oriented Design approach. For an alternative layout see Array of Structures (AoS).

Sparse

A data representation suitable for "low density" data, i.e. data which contains a high ratio of "zero" elements. Usually, this term is used in combination with vectors or matrices.

Swizzle

The ability to (re)compose arrays or vectors by arbitrarily rearranging and combining their components. A common technique used in Shader programming, conversions between cordinate systems, endianness, or pixel buffer formats (e.g. ARGB -> ABGR).

T

Topological ordering

Related to Directed Acyclic Graphs, describes a linear ordering of elements (i.e. nodes in the graph) such that each item only appears after all of its transitive dependencies.

Transducer

TODO

Triple

TODO

Also see Linked Data.

V

Value equivalence (compare by value)

Checking/comparing values (esp. complex/nested data types) not by their pointer (object identity), but by their actual encoded values.

W

WASM

Abbreviation for WebAssembly

WebAssembly

TODO

WebGPU

WebGL

Web API for hardware (GPU) accelerated graphics & basic GPGPU processing workflows.

Window function

TODO

Also see Convolution.

Z

Zig

A modern systems programming language supporting direct compilation to WebAssembly.

Clone this wiki locally