sokol-odin
mummy
sokol-odin | mummy | |
---|---|---|
4 | 7 | |
61 | 255 | |
- | - | |
8.9 | 8.4 | |
6 days ago | 11 days ago | |
C | Nim | |
- | MIT License |
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.
sokol-odin
-
Odin Programming Language
* etc
There is also the second issue that C is technically TWO languages: the C programming language and the C preprocessor. People mix the two together and things cannot be easily translated. A good basic example of this is people using `#define` for constants, and thus that name has no semantic meaning in the language itself. A translator has to try and make some semantic meaning from the intersection of these two languages, even if people don't make a distinction when making APIs.
And Odin's `foreign` system allows [1] for a lot of really nice things that most other languages cannot do so tersely. Here are two examples of demonstrating bindings of C libraries that feel as if they were native Odin libraries WITHOUT any wrappers:
* https://github.com/floooh/sokol-odin/blob/main/sokol/gfx/gfx... (and the rest)
-
Nim v2.0 Released
I maintain auto-generated bindings for my C libraries for Zig and Nim (and Odin and Rust - although the Rust bindings definitely need some love to make them a lot more idiomatic).
I think looking at the examples (which is essentially the same code in different languages) gives you a high level idea, but they only scratch the surface when it comes to language features (things like the Zig code not using comptime features):
Zig: https://github.com/floooh/sokol-zig/tree/master/src/examples
Nim: https://github.com/floooh/sokol-nim/tree/master/examples
Odin: https://github.com/floooh/sokol-odin/tree/main/examples
Rust: https://github.com/floooh/sokol-rust/tree/main/examples
-
I think Zig is hard but worth it
I'm actually dabbling with Odin a bit in the scope of language bindings for the sokol headers:
https://github.com/floooh/sokol-odin
It's a very enjoyable language!
-
I like the Odin programming language
I recently wrote a bindings generator to Odin for my C libraries, and the FFI is very well thought out, down to defining things like linker dependencies in the code. For instance see here:
https://github.com/floooh/sokol-odin/blob/main/sokol/gfx/gfx...
The only minor downside (compared to Zig) is that Odin still requires a separate C/C++ toolchain to actually build the C dependencies. But I guess that's a typical 1st-world-problem ;)
(but AFAIK Odins FFI system isn't in any way related or depending on LLVM).
mummy
- Nim v2.0 Released
- Mummy – web server written in Nim that returns to the ancient ways of threads
-
Nim version 2.0.0 release candidate
Personally this preciseness is just a distraction, but it sounds like you have learned from the constraints and can now take the training wheels off again.
Very curious about those cases, yet to find one myself that was not because of a bad design decision. Though I am also very big on the idea of `ambiguous grammar, rigorous implementation`, for natural language too. (Toki Pona is a somewhat extreme example but the contextual grammar, and holistic minimalism is fascinating)
Not to make it longer than needs to be; But take the example code in this readme: https://github.com/guzba/mummy
Being able to quickly script this without thinking about cases or style on the first pass is a really lovely way of reducing friction imho.
-
Mummy, a new multithreaded HTTP + WebSocket server that returns to the ancient ways of threads
Added a WebSocket chat example here: https://github.com/guzba/mummy/blob/master/examples/chat.nim
What are some alternatives?
linux - Linux kernel source tree
nim-chronos - Chronos - An efficient library for asynchronous programming
wayland - Core Wayland protocol and libraries (mirror)
nim-results - Friendly value-or-error type
mvb-opencv - Minimum Viable Bindings to OpenCV for Nim
fungus - Object variants done like other langugaes
v - Simple, fast, safe, compiled language for developing maintainable software. Compiles itself in <1s with zero library dependencies. Supports automatic C => V translation. https://vlang.io
jester - A sinatra-like web framework for Nim.
RFCs - A repository for your Nim proposals.
owlkettle - A declarative user interface framework based on GTK 4
FrameworkBenchmarks - Source for the TechEmpower Framework Benchmarks project