Skip to content

Commit

Permalink
add logo and reduce my nonsense words
Browse files Browse the repository at this point in the history
  • Loading branch information
w568w committed Feb 23, 2024
1 parent 26f4048 commit fab8893
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 14 deletions.
20 changes: 10 additions & 10 deletions docs/_posts/2024-02-22-list.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ Tools you may need throughout the development process: development, building, te
|Use Case|Recommended Tools|
|---|---|
|Standard Library|[**glibc**](https://www.gnu.org/software/libc/) <br> The most widely used C standard library. <br> [**musl**](https://musl.libc.org) <br> Light-weight and efficient C standard library, designed for static linking. <br> [**uClibc-ng**](https://uclibc-ng.org/) <br> Another light-weight C standard library, designed for embedded systems. |
|Package Manager|[**Conan**](https://conan.io) <br> A C/C++ package manager, similar to npm or pip. <br> [**vcpkg**](https://vcpkg.io/) <br> Open-source cross-platform package manager from Microsoft. <br> [**pkg-config**](https://www.freedesktop.org/wiki/Software/pkg-config/) <br> A helper tool for using libraries. Not really a package manager, but widely used to help find libraries installed on a system. |
|Package Manager|[**Conan**](https://conan.io) <br> A C/C++ package manager, with a large repository. <br> [**vcpkg**](https://vcpkg.io/) <br> Package manager from Microsoft. Mainly for Visual Studio, but works on Un*x too. <br> [**pkg-config**](https://www.freedesktop.org/wiki/Software/pkg-config/) <br> A helper tool for using libraries. Not really a package manager, but widely used to help find libraries installed on a system. |
|Language Server|[**clangd**](https://clangd.llvm.org) <br> Adds smart features to your editor: code completion, compile errors, go-to-definition and more.|
|Linting|[**Cppcheck**](http://cppcheck.sourceforge.net) <br> A static analysis tool for common C/C++ code problems. <br> [**clang-tidy**](https://clang.llvm.org/extra/clang-tidy/) <br> A clang-based C/C++ linter. Default linter for clangd and CLion IDE.|
|Linting|[**Cppcheck**](http://cppcheck.sourceforge.net) <br> A static analysis tool for common C/C++ code problems. <br> [**clang-tidy**](https://clang.llvm.org/extra/clang-tidy/) <br> A clang-based C/C++ linter. The default linter for clangd plugin and CLion IDE.|

</div>

Expand All @@ -27,8 +27,8 @@ Tools you may need throughout the development process: development, building, te
|Use Case|Recommended Tools|
|---|---|
|Toolchain|[**GCC C Compiler**](https://gcc.gnu.org/) <br> Widely used compiler for Un*x system. <br> [**Clang**](https://clang.llvm.org/) <br> A C frontend that compiles C into LLVM IR. Also very popular. <br> [**MSVC**](https://visualstudio.microsoft.com/) <br> Microsoft's C compiler toolchain, mainly for Windows. |
|Build System|[**Autotools**](https://www.gnu.org/software/automake/manual/html_node/GNU-Build-System.html) <br> One of the most widely used build systems (configure && make). <br> [**CMake**](https://cmake.org) <br> The de-facto standard for building modern C/C++ code.|
|Documentation Generator|[**Doxygen**](https://www.doxygen.nl) <br> The most widely used documentation generator for C. Default theme looks not very attractive but you can customize it.|
|Build System|[**Autotools**](https://www.gnu.org/software/automake/manual/html_node/GNU-Build-System.html) <br> One of the most widely used build systems (configure && make). <br> [**CMake**](https://cmake.org) <br> The de-facto standard for building modern C/C++ project.|
|Documentation Generator|[**Doxygen**](https://www.doxygen.nl) <br> The most widely used documentation generator for C. Default theme looks not very attractive but can be customized.|


</div>
Expand All @@ -49,7 +49,7 @@ Tools you may need throughout the development process: development, building, te

|Use Case|Recommended Tools|
|---|---|
|Automatic Checker|[**Sanitizers**](https://github.com/google/sanitizers) <br> AddressSanitizer, UndefinedBehaviorSanitizer, MemorySanitizer to detect runtime problems. <br> [**Valgrind**](http://valgrind.org) <br> A suite of tools for debugging and profiling, having similar features to sanitizers. Both are very popular and time-tested.|
|Automatic Checker|[**Sanitizers**](https://github.com/google/sanitizers) <br> AddressSanitizer, UndefinedBehaviorSanitizer, MemorySanitizer to detect runtime problems. <br> [**Valgrind**](http://valgrind.org) <br> A tools suite for debugging and profiling, having similar features to sanitizers. Both are very popular and time-tested.|
|Manual Debugger|[**GDB**](https://www.gnu.org/software/gdb/) <br> The most widely used debugger by GNU for C, as well as Asm, D, Fortran, Go, Rust, OpenCL, and many other languages. |

</div>
Expand Down Expand Up @@ -81,7 +81,7 @@ Also please take a look at all-in-one utility libraries in the previous section,

|Use Case|Recommended Tools|
|---|---|
|Generic Collections|[**Collections-C**](https://github.com/srdja/Collections-C) <br> Generic arrays, lists, hashmaps, and more. Use `void *` to store any type of data. <br> [**STC**](https://github.com/stclib/STC) <br> Similar to Collections-C, but uses macros to simulate generics.|
|Generic Collections|[**Collections-C**](https://github.com/srdja/Collections-C) <br> Generic arrays, lists, hashmaps, and more. Use `void *` to store any type of data. <br> [**STC**](https://github.com/stclib/STC) <br> Similar to Collections-C, but uses macros to simulate generics.|

</div>

Expand All @@ -93,7 +93,7 @@ Also please take a look at all-in-one utility libraries in the previous section,
|Dynamic Strings|[**sds**](https://github.com/antirez/sds) <br> Simple Dynamic Strings library. Inactive for a while. |
|Unicode Support|[**utf8.h**](https://github.com/sheredom/utf8.h) <br> Single-header UTF-8 library mimicking string.h functions. <br> [**ICU**](https://github.com/unicode-org/icu) <br> International Components for Unicode, official Unicode toolkit. Includes String iteration, collation, datetime formatting, parsing, locale-sensitive text segmentation, and more. Much more heavier.|
|SIMD Acceleration|[**StringZilla**](https://github.com/ashvardanian/StringZilla) <br> SIMD-accelerated string fuzzy matching, edit distance, and more. |
|Regular Expressions|[**hyperscan**](https://github.com/intel/hyperscan) <br> Intel's high-performance multi-thread text matching library. Use a well-designed callback-style API and may be too complex for simple use cases. <br> [**cre2**](https://github.com/marcomaggi/cre2) <br> C wrapper of Google's re2 library. Easier to use, but inactively maintained. <br> [**Onigmo**](https://github.com/k-takata/Onigmo) <br> Standalone regular expression library, a fork of Oniguruma. Easy to use but inactively maintained.|
|Regular Expressions|[**hyperscan**](https://github.com/intel/hyperscan) <br> Intel's high-performance multi-thread text matching library. Use a well-designed callback-style API and may be too complex for simple use cases. <br> [**cre2**](https://github.com/marcomaggi/cre2) <br> C wrapper of Google's re2 library. Easy to use but inactively maintained. <br> [**Onigmo**](https://github.com/k-takata/Onigmo) <br> Standalone regular expression library, a fork of Oniguruma. Easy to use but inactively maintained.|

</div>

Expand Down Expand Up @@ -168,7 +168,7 @@ Networking is the dullest part of C programming.
|Use Case|Recommended Tools|
|---|---|
|HTTP|[**libmicrohttpd**](https://www.gnu.org/software/libmicrohttpd/) <br> A small library that makes it easy to run an HTTP server. Widely used. <br> [**libhv**](https://github.com/ithewei/libhv) <br> Full-featured async library for TCP/UDP/HTTP(S)/WebSocket client/server/proxy, and MQTT client.|
|gRPC|**Note**: Unfortunately, there is no good gRPC library for C. The best way to use gRPC in C is to use the C++ bindings.|
|gRPC|**Note**: Unfortunately, there is [no good gRPC library for C](https://github.com/grpc/grpc/issues/23160#issuecomment-646123380). The best way to use gRPC in C is to use the C++ bindings.|

</div>

Expand All @@ -181,7 +181,7 @@ C has incredibly complete support for databases, but it's not as easy as using o

|Use Case|Recommended Tools|
|---|---|
|ORMs|**Note**: Unfortunately, there is no good ORM library for C, since C is lack of generics, reflection, compile-time code generation, OOP, etc. It is recommended to use a low-level SQL library, if you really need to use C.|
|ORMs|**Note**: Unfortunately, there is [no good ORM library for C, since C is lack of generics, reflection, compile-time code generation, OOP, etc.](https://stackoverflow.com/questions/10577006/is-there-some-convenient-orm-library-framework-for-c) It is recommended to use a low-level SQL library, if you really need to use C.|
|MySQL|[**libmysqlclient**](https://dev.mysql.com/downloads/c-api/) <br> Official MySQL C API.|
|Postgres|[**libpq**](https://www.postgresql.org/docs/current/libpq.html) <br> Official Postgres C API.|
|SQLite|[**sqlite**](https://sqlite.org/) <br> Official SQLite library.|
Expand Down Expand Up @@ -296,7 +296,7 @@ Embeds other languages into C. To embed C into other languages, just check the F

|Use Case|Recommended Tools|
|---|---|
|Declarative UI|[**GTK**](https://www.gtk.org/) <br> A traditional multi-platform toolkit for creating graphical user interfaces. <br> [**LCUI**](https://github.com/lc-soft/LCUI) <br> Building desktop apps with XML/CSS. Modern but immature. <br> [**LVGL**](https://lvgl.io/) <br> Light and powerful GUI library, with a small memory footprint. Mainly designed for embedded systems. <br> [**libui-ng**](https://github.com/libui-ng/libui-ng) <br> Fork of unmaintained libui, a simple and portable GUI library using native widgets on Unix, Windows, and macOS. Still immature. |
|Declarative UI|[**GTK**](https://www.gtk.org/) <br> A traditional multi-platform toolkit for creating graphical user interfaces. <br> [**LCUI**](https://github.com/lc-soft/LCUI) <br> Building desktop apps with XML/CSS. Modern but immature. <br> [**LVGL**](https://lvgl.io/) <br> Light and powerful GUI library. Mainly designed for embedded systems. <br> [**libui-ng**](https://github.com/libui-ng/libui-ng) <br> Fork of unmaintained libui, a simple and portable GUI library using native widgets on Unix, Windows, and macOS. Still immature. |
|Immediate Mode UI|[**Nuklear**](https://github.com/Immediate-Mode-UI/Nuklear) <br> Single-header immediate mode portable GUI library, C89-compatible. |
|Web-based UI|[**azul**](https://github.com/fschutt/azul) <br> GUI framework for desktop applications in Rust based on Mozilla's WebRender, having C bindings. |
|File Dialogs|[**tinyfiledialogs**](https://sourceforge.net/projects/tinyfiledialogs/) <br> Single-file dialog library for showing cross-platform file dialogs. |
Expand Down
17 changes: 13 additions & 4 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,20 @@ title: "Home"
layout: home
---

<a href="https://github.com/w568w/blessed-c" target="_blank">
<img style="display: block;
margin-left: auto;
margin-right: auto;
width: 30%;"
src="logo.png"
alt="Blessed C logo" />
</a>

## What is this?
The standard library in C is much smaller than in Python or Go, for example. Those languages come with "batteries included" support for things like HTTP(S), JSON, timezones and async IO.
The standard library in C is much smaller than in, for example, Python or Go. Those languages come with "batteries included" support for things like HTTP(S), JSON, timezones and async IO.

C programmers, on the other hand, are often used to being "self-sufficient" - using a small number of libraries and implementing a lot of logic by own hands. This is due to the fact that C does not have an "all-in-one" package manager and package repository so far, and **the information on the Internet is so fragmented that almost forces one to lose all hope of finding a good library for his/her use case.** They don't know which packages are stable, fully functional, and trustworthy.
C programmers, on the other hand, are often used to being "self-sufficient" - using a limited set of libraries and and handcraft logic. This is due to the fact that C does not have an "all-in-one" package manager and repository so far, and **the online information is so fragmented that almost forces one to give up finding a good library for his/her use case.** They sometimes don't know which packages are stable, fully functional, and trustworthy.

To avoid reinventing the wheel, this list is intended to help answer those questions.
To avoid reinventing the wheel, this list is intended to answer those questions.

**Disclaimer**: This list is not exhaustive and is not intended to be. It is not a list of every C library that exists. It is also not a list of the "best" C libraries, because "best" is subjective. We want to include those well-maintained, well-documented, and well-tested libraries that are widely used and have a good reputation. **But even in these areas, it is possible to miss something with only a few searches and comparisons. If you find something wrong, don't hesitate to [come and help us refine it](https://github.com/w568w/blessed-c/)! :)**
**Disclaimer**: This list is not exhaustive and is not intended to be. It is also not a list of the "best" C libraries, because "best" is subjective. We want to include those well-maintained, well-documented, and well-tested libraries that are widely used and have a good reputation. **But even so, it is possible to miss something with only a few searches and comparisons. If you find something weird, don't hesitate to [come and help us refine it](https://github.com/w568w/blessed-c/)! :)**
Binary file added docs/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit fab8893

Please sign in to comment.