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.

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.

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.

µ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.

Hedley

Hedley is a personal favorite. It is a 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.

portable-snippets

An assortment portable code snippets (in C) for various tasks which are typically compiler-specific or platform-specific.

Modules currently include:

  • atomic — common atomic synchronization operations (load, store, add, subtract, CAS).
  • builtin — use compiler built-ins/intrinsics if available, otherwise fall back on standard C implementations. Provides both accelerated ond portable implementations of both GCC and MSVC built-ins/intrinsics, as well fixed-length versions.
  • clock — cross-platform wall clock, CPU time, and monotonic time.
  • cpu — runtime CPU feature detection.
  • 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).
  • once — one-time initialization.
  • random — random number generation (3 flavors: cryptographic, reproducible, and fast)
  • safe-math — fast, portable overflow-safe integer math functions.
  • unaligned — fast unaligned loads & stores.

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.

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.

icc-travis

Script to install Intel C/C++ Compiler on Travis CI.

pgi-travis

Script to install PGI C/C++ Compiler on Travis CI.

Salieri

Compatibility header so you can compile code using SAL annotations with compilers other than MSVC.