sokol-odin
debug-trace-var
sokol-odin | debug-trace-var | |
---|---|---|
4 | 1 | |
61 | 3 | |
- | - | |
8.9 | 0.0 | |
5 days ago | almost 6 years ago | |
C | Haskell | |
- | 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).
debug-trace-var
-
I think Zig is hard but worth it
> Can you give me an example of a Haskell expression which isn't reverentially transparent (without unsafePerformIO)?
Yes: https://github.com/ncaq/debug-trace-var The trick, however, is not unsafePerformIO (destructive mutability has nothing to do with referential transparency in general) but with TemplateHaskell, as quoting has everything to do with referential transparency.
> But the bog standard FP definition is a real and useful concept.
Actually, it's rather tautological. It defines FP circularly (see my comment here: https://news.ycombinator.com/item?id=36152488). It says nothing more than the far more useful explanation: "the meaning of every expression is a value".
What are some alternatives?
linux - Linux kernel source tree
print-debugger - Prints lines with IDE friendly stack traces in Haskell.
wayland - Core Wayland protocol and libraries (mirror)
Hoed - Hoed - A Lightweight Haskell Tracer and Debugger
mvb-opencv - Minimum Viable Bindings to OpenCV for Nim
vacuum
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
htrace - Hierarchical tracing for debugging lazy evaluation in Haskell
RFCs - A repository for your Nim proposals.
hood - Hood debugger, based on the idea of observing functions and structures as they are evaluated.
FrameworkBenchmarks - Source for the TechEmpower Framework Benchmarks project
ap-reflect - Partial evaluation reflection a la simple-reflect.