-
-
Notifications
You must be signed in to change notification settings - Fork 151
Glossary
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
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.
Memory allocator. Used by/for object or vector pools and for WebAssembly interop.
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).
A TypeScript-like language which compiles directly to WebAssembly.
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 Map
s.
A popular pen plotter designed & sold by Evil Mad Scientist Labs
Related packages:
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.
2D version of a Bit field, e.g. used to store adjacency information between nodes in a graph.
A stream abstraction for binary data, providing bitwise read/write access
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.
- @thi.ng/gp
- @thi.ng/parse
- @thi.ng/pixel
- @thi.ng/shader-ast
- @thi.ng/shader-ast-stdlib
- @thi.ng/vectors
- @thi.ng/webgl
- @thi.ng/wasm-api-bindgen
A function which decides about the ordering of 2 given elements. Usually provided to a sorting algorithm to implement arbitrary sort criteria.
TODO
`h(x) =
Also see Higher order functions.
Abbreviation for Directed Acyclic Graph
TODO
Also see Entity Component System, SIMD, Structure of Arrays, WebAssembly, Zig.
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.
TODO
A special type of graph in which no directed cycles (loops) are allowed.
TODO
Abbreviation for Data Oriented Design
The native file format of Graphviz, a popular visualization software for directed and undirected graphs. You can find a comprehensive syntax guide here:
Abbreviation for Domain Specific Language
Abbreviation for Digital Signal Processing
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.
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.
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
TODO
Abbreviation for Fast Fourier Transform
TODO
Abbreviation for Finite State Machine
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.
TODO
A type of function which can be suspended and be used as fundamental building block to implement cooperative multitasking and pull-based
C-like programming language used for Shader programming, specifically OpenGL/WebGL.
- @thi.ng/shader-ast
- @thi.ng/shader-ast-glsl
- @thi.ng/shader-ast-stdlib
- @thi.ng/webgl
- @thi.ng/webgl-shadertoy
Graphics Processing Unit, aka graphics cards (incl. onboard & mobile versions).
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.
TODO
- Wikipedia
- @thi.ng/adjacency
- @thi.ng/dot
- @thi.ng/dgraph
- @thi.ng/dgraph-dot
- @thi.ng/rstream
- @thi.ng/rstream-graph
- @thi.ng/rstream-query
- @thi.ng/system
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:
- @thi.ng/axidraw
- @thi.ng/geom
- @thi.ng/hiccup
- @thi.ng/hiccup-canvas
- @thi.ng/hiccup-css
- @thi.ng/hiccup-html
- @thi.ng/hiccup-svg
- @thi.ng/rdom
- @thi.ng/rdom-canvas
- @thi.ng/rdom-components
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.
- Blog post
- @thi.ng/arrays
- @thi.ng/compare
- @thi.ng/compose
- @thi.ng/defmulti
- @thi.ng/shader-ast-stdlib
- @thi.ng/strings
- @thi.ng/transducers
Abbreviation for Higher Order Function.
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.
TODO
Also see in contrast: Declarative
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:
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):
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
- @thi.ng/associative
- @thi.ng/csv
- @thi.ng/dsp
- @thi.ng/grid-iterators
- @thi.ng/transducers
- @thi.ng/transducers-fsm
- @thi.ng/transducers-binary
- @thi.ng/transducers-stats
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.
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.
TODO
TODO
TODO
TODO
TODO
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.
- @thi.ng/geom
- @thi.ng/geom-hull
- @thi.ng/geom-poly-utils
- @thi.ng/geom-resample
- @thi.ng/geom-subdiv-curve
A classification for numeric intervals, describing if either endpoint of an interval is included, excluded or even unbounded (i.e. ±∞)
-
open
-
semi open/closed
-
semi unbounded
-
closed
TODO
A sequence of keys and/or numeric indices, describing the access route to an arbitrary value within a (deeply) nested data structure.
Geometry shape type consisting of at least two points/vertices, defining consecutive line segments. Polylines can be open or closed.
TODO
Pseudo Random Number Generator.
TODO
- @thi.ng/rstream
- @thi.ng/rstream-dot
- @thi.ng/rstream-gestures
- @thi.ng/rstream-graph
- @thi.ng/rstream-log
- @thi.ng/rstream-query
TODO
Also see Functional programming, Transducers.
TODO
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...
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.
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.
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).
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.
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).
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.
TODO
TODO
Also see Linked Data.
Checking/comparing values (esp. complex/nested data types) not by their pointer (object identity), but by their actual encoded values.
Abbreviation for WebAssembly
TODO
- webassembly.org
- @thi.ng/leb128
- @thi.ng/simd
- @thi.ng/wasm-api
- @thi.ng/wasm-api-bindgen
- @thi.ng/wasm-api-dom
- @thi.ng/wasm-api-schedule
Web API for hardware (GPU) accelerated graphics & basic GPGPU processing workflows.
- @thi.ng/shader-ast
- @thi.ng/shader-ast-stdlib
- @thi.ng/webgl
- @thi.ng/webgl-msdf
- @thi.ng/webgl-shadertoy
- @thi.ng/vectors
TODO
Also see Convolution.
A modern systems programming language supporting direct compilation to WebAssembly.