maandree / slibc

Yet another C standard library
https://codeberg.org/maandree/slibc
GNU General Public License v3.0
17 stars 5 forks source link
c c-library libc standard-c-library

This repo has been moved to Codeberg and may be out of date on GitHub. Canonical repo: https://codeberg.org/maandree/slibc

NAME slibc - the Stockholm C Standard Library

DESCRIPTION slibc is a POSIX C standard library. It aims to support ISO C99, and newer versions of ISO C, other versions of C are ignored except for proper feature-test macros. Ignores all languages other than C, this means that slibc cannot be used in C++ by merely including the header files.

In addition to POSIX, slibc aims to support common
extensions, especially those in the GNU C Library because of
its predominance on GNU systems. slibc also aims to fill the
lacunæ in the C standard library specification, and make
programming in C even easier by adding functions that would
be generally useful are impossible to implement efficiently
in other libraries.

FEATURE-TEST MACROS slibc defines a few slibc-specified feature-test macros:

_SLIBC_SOURCE
    Enable slibc extensions. These extensions are
    often extensions introduced in other C libraries,
    but are considered good extensions.

    slibc provides some slibc-specific extensions that
    do not require _SLIBC_SOURCE. (They are however
    disabled if _PORTABLE_SOURCE or _LIBRARY_HEADER are
    defined.) These extensions are defined in header
    files whose name starts with 'slibc-'. Headers
    starting with 'slibc/' are not extensions, those are
    internals that may change at any time.

_SLIBC_SUPPRESS_WARNINGS
    Suppress all #warning and other warnings, this is
    primarily intended to be used when compiling slibc.

_PORTABLE_SOURCE
    Unconditionally disable all non-POSIX extensions, and
    otherwise help ensure that the source is portable.

_LIBRARY_HEADER
    Alternative to _PORTABLE_SOURCE that should be used in
    header files for libraries. This allows you to be sure
    that your library is portable between libc:s, and that
    sources using your library does not been to be compiled
    with the same libc. It is important to use this instead
    of _PORTABLE_SOURCE in library header files, otherwise
    the user of the library cannot fully utilise
    _PORTABLE_SOURCE.

COMMENTS Writing a C standard library is a massive task. As I only have x86_64 hardware, I will require help write the assembly code for other hardware. I also need help writing the texinfo manual and example code for functions, help figuring out the correct feature-test macros for all functions, their etymology, and in which libc implementions they appear. Help optimising all functions would also be appreciated.

FUTURE DIRECTIONS The macro _SMALL_BINARY shall whenever available, create macros that make the program use implementions of the functions that optimised for size rather than performance. It should be compile-time selectable whether this macro has any effect, or if it is always in effect. _FAST_BINARY could also be added to make the program use fast implementions when the library is compiled to use the size optimised implementations.

RATIONALE slibc is written as a learning exercise, and for fun.

SEE ALSO https://en.wikipedia.org/wiki/C_standard_library

Full documentation available locally via: info '(slibc)'