this post was submitted on 25 Sep 2024
378 points (92.8% liked)

Programmer Humor

19821 readers
2 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[โ€“] DacoTaco@lemmy.world 1 points 3 months ago* (last edited 3 months ago) (1 children)

I think you have things wrong. Any other languages can have libraries be distributed as some format that would allow applications to use it, be it linux/gcc and .a files ( which are actually archives with elf/object files of the code ), or a full on library like .so/.dll.
Rust can only do .o/.dll and only have it expose like a c library afaik. Even .net has improved on the .dll and includes all its language features in it. Rust has none of that. Its not true that libraries not rebuilding are only for closed source. Its also ease of use/access and less problem prone. What if i build my library using a different version of the compiler than you and your application? I could have no problems building my library, while you cant build your application because the library i made gets rebuild and errors.
These errors happen and are all because there is no stable interface/abi and all other languages have overcome this.

Also, by default, nothing in c is rebuild unless it needs to. Thats why the intermediate .o ( elf object ) files exist, so it only has to do the relinking and not recompile and thats why .a archive/libraries in c work, because it doesnt recompile. Unless you meant the fact rust can rebuild part of a file, without recompiling it completely?

I think you dont fully understand how c compilers ( gcc specifically ) work when using multi file projects ( and not just doing gcc input.c -o output.exe ) just how i dont fully know how the rust compiler works. Also, anything using IL will always have an abi, because how else will it jump from code to IL code, so its obvious that rust to wasm will have to abide by that haha. Be it c wasm, c# wasm or rust wasm calling one another. Wasm is wasm, and you only need an exposed interface to call or include the other wasm ( c#/blazor having NativeFileReference in the csproj )

Again, i like the idea of rust, but it has a long way to go to be viable atm. And it has many pitfalls to avoid so it doesnt become the hot mess that is any framework based on node.js

[โ€“] barsoap@lemm.ee 1 points 3 months ago

I think you dont fully understand how c compilers ( gcc specifically ) work when using multi file projects

They don't. C compilers compile single files produced by the c preprocessor (resolving all #includes), they have no concept of multi-file projects. That's a thing for the build system, such as make, and it needs dependency information from the preprocessor to do its job (cpp -M), and once it has that it has to act correctly on them which is often completely broken because people don't understand make. Like using it recursively, bad idea. In the wild, a random C project at work you'll come across needs a full rebuild to build cleanly. Things have gotten better with things like cmake getting more popular but the whole thing is still brittle. GNU autohell certainly makes nothing better, ever.

Also, anything using IL will always have an abi,

Everything will always have an ABI because ABI is just API in the target language, whatever that may be. If your program is compiled and can run it uses an ABI.

Wasm is wasm, and you only need an exposed interface

The core wasm abi is less capable than the C abi: You get scalar values and pointers, that's it. No structs, no nothing, memory layout is completely unspecified. The component model allows compilers to say "so I'm laying out strings like this and structs like that" giving linkers a chance to say "yeah I can generate glue code between you two".

Again, i like the idea of rust, but it has a long way to go to be viable atm.

C isn't even close to being viable according to your standards people just have gotten used to the jank.

And it has many pitfalls to avoid so it doesnt become the hot mess that is any framework based on node.js

Rust doesn't have portable dylibs precisely because it isn't a hot mess. Because it's actual work to do it properly. Unlike everyone else. Meanwhile It speaks the local C ABI fluently (they differ by architecture and operating system, btw), which isn't a thing that can be said about many languages that aren't C.


Differently put: What, precisely, do you want to do? Have you any actual use-case for your doubts, or are they spooks?