sokol-odin
nlvm
sokol-odin | nlvm | |
---|---|---|
4 | 11 | |
61 | 682 | |
- | - | |
8.9 | 6.9 | |
5 days ago | 2 months ago | |
C | Nim | |
- | GNU General Public License v3.0 or later |
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).
nlvm
- Nlvm: LLVM-based compiler for the Nim language
-
Nim v2.0 Released
That looks interesting. Unfortunately it looks like it hasn't been updated in a while? Is that because it's complete or a lack of interest?
For example, the approach mentioned at the bottom of the README of integrating via nlvm (https://github.com/arnetheduck/nlvm) sounded great but appears to be unpursued.
- Nim and Go programs identified as malware on Windows
- The counter-intuitive rise of Python in scientific computing (2020)
- Is Nim a Transpiler?
-
Nim Version 1.6 Released
Being able to compile to C, C++, ObjC, and JavaScript natively (and LLVM using https://github.com/arnetheduck/nlvm ), along with an excellent FFI (including to and from Python) means you don't need to rewrite dependencies as you can use them directly. Nim is great at glue code - arguably better than Python.
Along with general language characteristics such as being high level and productive like Python, but with intricate "bare metal" control when you want it, really does make it suitable for writing almost everything.
-
Time to raid Area 51
Check out nlvm https://github.com/arnetheduck/nlvm
What are some alternatives?
linux - Linux kernel source tree
godot-nim - Nim bindings for Godot Engine
wayland - Core Wayland protocol and libraries (mirror)
Nim - Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
mvb-opencv - Minimum Viable Bindings to OpenCV for Nim
INim - Interactive Nim Shell / REPL / Playground
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
cmdchallenge
RFCs - A repository for your Nim proposals.
pixie - Full-featured 2d graphics library for Nim.
FrameworkBenchmarks - Source for the TechEmpower Framework Benchmarks project
nimbus-eth2 - Nim implementation of the Ethereum Beacon Chain