GeezerVison is showing nemequ.github.io — Evan Nemerson
Evan Nemerson
Open Source Projects
An incomplete list of open-source projects I am, or have been
involved with, in no particular order. Unless otherwise noted,
I'm the original author and current maintainer.
-
SIMDe
-
SIMDe provides portable implementations of intrinsics
for SIMD ISA extensions, allowing you to to
run code written for an ISA extension (such
as SSE) on
a machine which does not support it, such as an ARM CPU,
or just an x86 CPU without that specific ISA extension.
There is no performance penalty for using SIMDe instead of
using the native intrinsics directly if the CPU supports
it.
SIMDe currently implements several thousand functions from
various x86 APIs, NEON, SVE, and WASM SIMD128. Please see
the project for an up-to-date list.
-
Hedley
-
Hedley is a personal favorite. It is a C/C++ header you
can include in your project to enable compiler specific
features while maintaining compatibility, with a focus on
making your API harder to misuse by providing
hints to compilers and static analyzers.
When I start a C project these days, adding Hedley is usually
the first thing I do.
-
WAV
-
WAV is an alternative to the WASM SIMD128 C API
(wasm_simd128.h), with a focus on safety and usability.
It aims to be easy to use correctly and hard to use
incorrectly without sacrificing performance. It's a small
project, but lots of fun.
-
portable-snippets
-
An assortment portable code snippets (in C, though they
also work in C++) for various tasks which are typically
compiler-specific or platform-specific.
Modules currently include:
-
builtin —
use compiler built-ins/intrinsics if available, otherwise fall back on
standard C implementations. Provides both accelerated and portable
implementations of both GCC and MSVC built-ins/intrinsics, as well
fixed-length versions. Sort of like SIMDe for scalar code.
-
safe-math —
fast, portable, overflow-safe integer math functions.
-
clock —
cross-platform wall clock, CPU time, and monotonic time.
-
cpu —
runtime CPU feature detection for x86 and Arm.
-
debug-trap —
debugging traps and assertions.
-
endian —
the most complete endianness detection and swapping code I'm aware of.
-
exact-int —
exact-width integer types (think <stdint.h>, but
more portable). Hopefully no longer necessary.
-
once —
one-time initialization.
-
atomic —
common atomic synchronization operations (load, store, add, subtract,
CAS).
-
random —
random number generation (3 flavors: cryptographic, reproducible, and fast)
All modules work on Linux, Windows, OS X, BSD, Solaris, etc., on all architectures
I've been able to test. Most should work on any C89+ compliant compiler, though
they can also take advantage of specific compilers/platforms.
-
Squash
-
Squash is primarily an abstraction layer which provides a
single API to access many compression libraries. This
allows applications a great deal of flexibility in which
choosing a compression algorithm, or allowing a choice
between several of them.
The actual integration with individual compression
libraries is done through plugins which can be installed
separately from Squash itself and are not loaded until
they are required. This allows Squash consumers to utilize
many compression algorithms without rewriting code or
unnecessary bloat.
In addition to a permissively licensed (MIT) library, Squash
provides some generic tools which use the library for
common tasks. Currently, this includes a command-line
interface similar
to gzip, bzip2, xz, etc.
called squash and a benchmarking tool. There
is also a
web-based benchmark,
and a project to fuzz
various compression libraries.
-
µnit
-
µnit is a small and portable testing framework for C which
includes pretty much everything you might expect from a C
testing framework, plus a few pleasant surprises, wrapped
in a nice API.
I still really like the API and the feature set, but it
could use a rewrite; the implementation is a bit of a
mess.
-
TinyCThread
-
TinyCThread is a cross-platform implementation of the C11
threading API which uses POSIX threads (pthreads) or the
Windows API, allowing you to use the standard C11 API on
systems which don’t natively support it.
This was initially created by Marcus Geelnard, I finished
implementing the API and took over maintenance.
-
Vala
-
Vala is a new programming language that aims to bring
modern programming language features to GNOME developers
without imposing any additional runtime requirements and
without using a different ABI compared to applications and
libraries written in C.
Vala was created by Jürg Billeter. I maintained the bindings
to third-party libraries (which effectively formed the standard
library) for several years.
-
Bump
-
Bump is a library designed to make asynchronous
programming easy by providing high-level data structures
for concurrency management, including multi-threading and
main loop callbacks, in GObject/GIO based projects,
especially those written in Vala.
-
SQLHeavy
-
SQLHeavy is a wrapper on top of SQLite with a
GObject-based interface, providing very nice APIs for C
and Vala, GObject Introspection support, and additional
functionality not present in SQLite.
-
configure-cmake
-
An autotools-style configure script for CMake-based projects.
-
Salieri
-
Compatibility header so you can compile code using SAL annotations
with compilers other than MSVC.
|