diff --git a/docs/_posts/2024-02-22-list.markdown b/docs/_posts/2024-02-22-list.markdown index b3df18d..b2cab1d 100644 --- a/docs/_posts/2024-02-22-list.markdown +++ b/docs/_posts/2024-02-22-list.markdown @@ -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/)
The most widely used C standard library.
[**musl**](https://musl.libc.org)
Light-weight and efficient C standard library, designed for static linking.
[**uClibc-ng**](https://uclibc-ng.org/)
Another light-weight C standard library, designed for embedded systems. | -|Package Manager|[**Conan**](https://conan.io)
A C/C++ package manager, similar to npm or pip.
[**vcpkg**](https://vcpkg.io/)
Open-source cross-platform package manager from Microsoft.
[**pkg-config**](https://www.freedesktop.org/wiki/Software/pkg-config/)
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)
A C/C++ package manager, with a large repository.
[**vcpkg**](https://vcpkg.io/)
Package manager from Microsoft. Mainly for Visual Studio, but works on Un*x too.
[**pkg-config**](https://www.freedesktop.org/wiki/Software/pkg-config/)
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)
Adds smart features to your editor: code completion, compile errors, go-to-definition and more.| -|Linting|[**Cppcheck**](http://cppcheck.sourceforge.net)
A static analysis tool for common C/C++ code problems.
[**clang-tidy**](https://clang.llvm.org/extra/clang-tidy/)
A clang-based C/C++ linter. Default linter for clangd and CLion IDE.| +|Linting|[**Cppcheck**](http://cppcheck.sourceforge.net)
A static analysis tool for common C/C++ code problems.
[**clang-tidy**](https://clang.llvm.org/extra/clang-tidy/)
A clang-based C/C++ linter. The default linter for clangd plugin and CLion IDE.| @@ -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/)
Widely used compiler for Un*x system.
[**Clang**](https://clang.llvm.org/)
A C frontend that compiles C into LLVM IR. Also very popular.
[**MSVC**](https://visualstudio.microsoft.com/)
Microsoft's C compiler toolchain, mainly for Windows. | -|Build System|[**Autotools**](https://www.gnu.org/software/automake/manual/html_node/GNU-Build-System.html)
One of the most widely used build systems (configure && make).
[**CMake**](https://cmake.org)
The de-facto standard for building modern C/C++ code.| -|Documentation Generator|[**Doxygen**](https://www.doxygen.nl)
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)
One of the most widely used build systems (configure && make).
[**CMake**](https://cmake.org)
The de-facto standard for building modern C/C++ project.| +|Documentation Generator|[**Doxygen**](https://www.doxygen.nl)
The most widely used documentation generator for C. Default theme looks not very attractive but can be customized.| @@ -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)
AddressSanitizer, UndefinedBehaviorSanitizer, MemorySanitizer to detect runtime problems.
[**Valgrind**](http://valgrind.org)
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)
AddressSanitizer, UndefinedBehaviorSanitizer, MemorySanitizer to detect runtime problems.
[**Valgrind**](http://valgrind.org)
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/)
The most widely used debugger by GNU for C, as well as Asm, D, Fortran, Go, Rust, OpenCL, and many other languages. | @@ -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)
Generic arrays, lists, hashmaps, and more. Use `void *` to store any type of data.
[**STC**](https://github.com/stclib/STC)
Similar to Collections-C, but uses macros to simulate generics.| +|Generic Collections|[**Collections-C**](https://github.com/srdja/Collections-C)
Generic arrays, lists, hashmaps, and more. Use `void *` to store any type of data.
[**STC**](https://github.com/stclib/STC)
Similar to Collections-C, but uses macros to simulate generics.| @@ -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)
Simple Dynamic Strings library. Inactive for a while. | |Unicode Support|[**utf8.h**](https://github.com/sheredom/utf8.h)
Single-header UTF-8 library mimicking string.h functions.
[**ICU**](https://github.com/unicode-org/icu)
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)
SIMD-accelerated string fuzzy matching, edit distance, and more. | -|Regular Expressions|[**hyperscan**](https://github.com/intel/hyperscan)
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.
[**cre2**](https://github.com/marcomaggi/cre2)
C wrapper of Google's re2 library. Easier to use, but inactively maintained.
[**Onigmo**](https://github.com/k-takata/Onigmo)
Standalone regular expression library, a fork of Oniguruma. Easy to use but inactively maintained.| +|Regular Expressions|[**hyperscan**](https://github.com/intel/hyperscan)
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.
[**cre2**](https://github.com/marcomaggi/cre2)
C wrapper of Google's re2 library. Easy to use but inactively maintained.
[**Onigmo**](https://github.com/k-takata/Onigmo)
Standalone regular expression library, a fork of Oniguruma. Easy to use but inactively maintained.| @@ -168,7 +168,7 @@ Networking is the dullest part of C programming. |Use Case|Recommended Tools| |---|---| |HTTP|[**libmicrohttpd**](https://www.gnu.org/software/libmicrohttpd/)
A small library that makes it easy to run an HTTP server. Widely used.
[**libhv**](https://github.com/ithewei/libhv)
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.| @@ -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/)
Official MySQL C API.| |Postgres|[**libpq**](https://www.postgresql.org/docs/current/libpq.html)
Official Postgres C API.| |SQLite|[**sqlite**](https://sqlite.org/)
Official SQLite library.| @@ -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/)
A traditional multi-platform toolkit for creating graphical user interfaces.
[**LCUI**](https://github.com/lc-soft/LCUI)
Building desktop apps with XML/CSS. Modern but immature.
[**LVGL**](https://lvgl.io/)
Light and powerful GUI library, with a small memory footprint. Mainly designed for embedded systems.
[**libui-ng**](https://github.com/libui-ng/libui-ng)
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/)
A traditional multi-platform toolkit for creating graphical user interfaces.
[**LCUI**](https://github.com/lc-soft/LCUI)
Building desktop apps with XML/CSS. Modern but immature.
[**LVGL**](https://lvgl.io/)
Light and powerful GUI library. Mainly designed for embedded systems.
[**libui-ng**](https://github.com/libui-ng/libui-ng)
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)
Single-header immediate mode portable GUI library, C89-compatible. | |Web-based UI|[**azul**](https://github.com/fschutt/azul)
GUI framework for desktop applications in Rust based on Mozilla's WebRender, having C bindings. | |File Dialogs|[**tinyfiledialogs**](https://sourceforge.net/projects/tinyfiledialogs/)
Single-file dialog library for showing cross-platform file dialogs. | diff --git a/docs/index.md b/docs/index.md index 5d55bec..e4ad29f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -5,11 +5,20 @@ title: "Home" layout: home --- + +Blessed C logo + + ## 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/)! :)** \ No newline at end of file +**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/)! :)** \ No newline at end of file diff --git a/docs/logo.png b/docs/logo.png new file mode 100644 index 0000000..78124d8 Binary files /dev/null and b/docs/logo.png differ