Portable, eigenständige C-Bibliotheken und Datenstrukturen. (C99)
Jeder Ordner ist eigenständig und enthält ein einzelnes Header-/Quellenpaar. Es gibt keine
Erstellen Sie für Bibliotheken, kopieren Sie einfach die gewünschten Dateien.
Wenn Sie beispielsweise den Logger benötigen, kopieren Sie sc_log.h und sc_log.c in Ihr Projekt.
Es gibt eine 100-prozentige Zweigstellenabdeckung unter Linux und CI läuft darauf
Betriebssystem: Linux, MacOS, FreeBSD und Windows Compiler: GCC, Clang, MSVC Arch: x64, aarch64, armv6 (32 Bit), armv7 (32 Bit), ppc64le, s390x (Big Endian), riscv64 Desinfektionsmittel: Valgrind- und Clang/GCC-Desinfektionsmittel (Adresse, undefiniert, Thread)
Bibliothek | Beschreibung |
---|---|
Array | Generisches Array/Vektor |
Puffer | Puffer zum Kodieren/Dekodieren von Variablen, bestens geeignet für Protokoll-/Serialisierungsimplementierungen |
Zustand | Bedingungs-Wrapper für Posix und Windows |
crc32 | Crc32c verwendet die crc32c-CPU-Anweisung, sofern verfügbar |
Haufen | Min. Heap, der auch als maximale Heap-/Prioritätswarteschlange verwendet werden kann |
ini | Ini-Parser |
verlinkte Liste | Aufdringliche verknüpfte Liste |
Logger | Logger |
Karte | Eine Hochleistungs-Hashmap mit offener Adressierung |
Speicherkarte | Mmap-Wrapper für Posix und Windows |
Mutex | Mutex-Wrapper für Posix und Windows |
Option | Cmdline-Argumentparser. Sehr einfach |
perf | Benchmark-Dienstprogramm zum Abrufen von Leistungsindikatorinformationen über perf_event_open() |
Warteschlange | Generische Warteschlange, die auch als Dequeue/Stack/List verwendet werden kann |
sc | Utility-Funktionen |
Signal | Signalsicherer snprintf & Signal-Handler (Handhabung von STRG+C, Drucken von Backtrace bei Absturz usw.) |
Buchse | Pipe / TCP-Sockets (auch Unix-Domain-Sockets) /Epoll/Kqueue/WSAPoll für Posix und Windows |
Zeichenfolge | Längenpräfixierte, nullterminierte C-Strings. |
Faden | Thread-Wrapper für Posix und Windows. |
Zeit | Zeit- und Schlaffunktionen für Posix und Windows |
Timer | Hashed-Timing-Wheel-Implementierung mit schnellen Abfrage-/Abbruchvorgängen |
uri | Ein einfacher URI-Parser |
Ist es besser als Bibliothek X?
Ich verwende diese Bibliotheken häufig für serverseitige Hochleistungsanwendungen. Auch,
Ich lege Wert auf lesbaren und leicht zu debuggenden Code. Zusammenfassend zeigen diese Bibliotheken
Mein Geschmack (Kompromisse) in Bezug auf Leistung/API-Design/Lesbarkeit. Sie können oder können
gefällt mir nicht.
Warum ändern Sie hier bei X nicht die API, damit sie einfacher zu verwenden ist?
Senden Sie bitte eine Pull-Anfrage, aber stellen Sie sicher, dass Sie kein Undefiniertes einführen
Verhalten. Es ist möglich, bessere APIs bereitzustellen, insbesondere für generische Bibliotheken.
wenn Ihnen undefinierte Verhaltensweisen egal sind. Ich versuche es zu vermeiden.
Wie lassen sich diese Bibliotheken am effizientesten nutzen?
Genau wie jeder andere Code. Fügen Sie es als Quelldateien zu Ihrem Projekt hinzu und verwenden Sie es idealerweise
-O3 -flto + PGO. Für Ihren Anwendungsfall macht es jedoch möglicherweise keinen Unterschied.
Wird Bibliothek X in irgendeinem Produkt verwendet?
Einige Bibliotheken werden in der Produktion verwendet, aber testen Sie sie bitte immer selbst.
Gibt es eine Veröffentlichung?
Bitte verwenden Sie den Master-Zweig. Es gilt als stabil.
Halten Sie die API stabil?
Bitte erwarten Sie keine stabile API. Diese Bibliotheken sind ruhig
klein (die meisten davon bestehen aus weniger als ein paar hundert Zeilen Code) und im Idealfall Sie
sollen den Code lesen und verstehen, was er tut, und ihn an Ihre Bedürfnisse anpassen
Bedürfnisse. Daher sollten Sie Bibliotheken nicht blind aktualisieren. Ich erwarte, dass Sie damit umgehen
mögliche API-Unterschiede leicht erkennen. Davon abgesehen werde ich mein Bestes tun, um es zu behalten
API-stabil.