utfcpp
dstep
Our great sponsors
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
utfcpp
-
Current utf8 support options.
std::string is simply a string of bytes, so can already contain utf-8 encoded text. The only problem is when you want to interact with OS (Windows) API and other library APIs that don't expect utf-8 and when you need to count number of characters etc. For that you can look into existing libraries, e.g. the official Unicode ICU or whatever you can find that others have made, e.g.: https://github.com/nemtrif/utfcpp
-
How to cout a non-ASCII character within a non-ASCII string
Suffice it to say, this is a mess. However, there are libraries that make this easier.
-
Maintain It with Zig
> I've always tried as much as possible to treat strings as just opaque data and never look into them, which tends to work well, but in some domains you really need to look at and massage the characters/codepoints/grapheme clusters, and the lack of a first-citizen UTF-8-aware string type is, I think, a bit unfortunate in this day and age.
You don't need a UTF-8 type for that, you just need routines that handle UTF-8 strings, like utfcpp (https://github.com/nemtrif/utfcpp).
dstep
-
I want to install a package globally
You might also be interested in dstep, a tool that can generate D bindings from C header files.
-
Maintain It with Zig
- C, Objective-C = https://github.com/jacob-carlborg/dstep
> its test blocks make unit testing trivial to integrate.
Again, D also has this:
https://tour.dlang.org/tour/en/gems/unittesting
void main() {
-
Raylib, a simple and easy-to-use library to enjoy videogames programming
It's a C lib, generating bindings is super easy https://github.com/jacob-carlborg/dstep
There is no need to maintain bindings that can be automatically generated, wich can easily get outdated if the C project is actively developped
Anyways, someone went a ahead and updated it: https://github.com/Soaku/raylib-d
-
I rewrote my Rust keyboard firmware in Zig: consistency, mastery, and fun
Not quite as seamless as Zig, but dstep is an external program that leverages libclang to do the same thing (and generates a D module for you), as well as e.g., smartly convert #define macros to inlineable templates functions :)
https://github.com/jacob-carlborg/dstep
What are some alternatives?
icu - The home of the ICU project source code.
arocc - A C compiler written in Zig.
raylib - A simple and easy-to-use library to enjoy videogames programming
cc-rs - Rust library for build scripts to compile C/C++ code into a Rust library
RIIR - why not Rewrite It In Rust
zigstr - Zigstr is a UTF-8 string type for Zig programs.
mach - zig game engine & graphics toolkit
jotai-benchmarks - Collection of executable benchmarks