I finally printed something again yesterday, and, as far as I can tell, the z-positioning was perfectly stable thanks to your suggestion.
Thanks a lot!
I finally printed something again yesterday, and, as far as I can tell, the z-positioning was perfectly stable thanks to your suggestion.
Thanks a lot!
I think you have done way more work than would be needed to learn Rust. I mean, it certainly is useful knowledge if you want to do any of those things in Rust, but it's definitely not needed to learn Rust.
The Book (the Rust language guide) assumes that you know some other language first, but you don't need to be an expert in anything in order to start learning Rust. If you understand the basic concepts of branching, loops, recursion and function calls, you are good to go.
There are of course other concepts you will encounter in Rust (like Algebraic Data Types, Polymorphism, Ownership,...), but those are all explained in the Rust Book, so there really is no need to learn them in advance.
Thanks, gonna do that first before I start my next print. This sounds like a really plausible cause!
Elegoo Neptune Max 4: What should I attempt to fix it?
For 2) I'd also suggest to check out SDL. There are excellent SDL bindings for Rust, and it's way less involved than dragging in a fully-featured game engine.
Oh, sorry. I stand corrected then.
I'm willing to bet that it's AI. It soft-contradicts itself quite often, emphasising that C++ is "Performance First", but then also claiming stuff like "Rust achieves memory safety with zero runtime overhead".
Edit: What I am trying to say is that I have seen text like this in LLM output quite often, if the LLM is mixing text from different sources in its training data.
Also, there is just wrong stuff in the text itself, not only in the conclusion. For instance the claim that Rust's type system makes data races impossible. They are easier to avoid, but there is nothing stopping you from writing data races... Here, for instance, have a data race in safe Rust...
I'm new to both, FreeCAD and Blender, but what I've been doing up to now:
Yep. One reason why those situations become less frequent over time is that one learns to avoid such designs. Thought process: "Sharing data across threads is annoying. So I'd rather avoid it. Maybe message passing can solve the same problem as well?"
This is so fucking stupid, I can't even.
For your mental health, have some reasonable arguments about Rust: https://www.heise.de/hintergrund/Entwicklung-Warum-Rust-die-Antwort-auf-miese-Software-und-Programmierfehler-ist-4879795.html
Since it's in German, here are the key points of the article (written from memory - the article is quite old, so I might misremember - best read the article yourself):
No solution, but I have a similar issue with the higher crate.
There the /prelude/src/lib.rs file lets rust-analyzer lose its mind and allocate gigabytes upon gigabytes of memory, even though the file compiles just fine and nearly instantaneous...
I think this has something to do with recursive macros. Doesn't iced also have such? I have faint memories of a column! macro?
cargo install is for installing rust programs for your user, not for adding dependencies to your Rust project. Many cargo subcommands can be installed this way, for instance cargo bloat.Cargo.toml, because it is the file you need to write in order to configure cargo for your Rust project. TOML is the name of the file format. For details, please see the introductory chapter to Cargo in the Rust book.cargo add, which allows to add dependencies directly on the command line. However, all it does is to add/edit/remove the respective lines in Cargo.toml. (Personal opinion: I have found it way easier to just edit the file directly than to learn yet another command...)That said: You still need to edit the Cargo.toml file, even if you solely use cargo add to manage your dependencies. That's because that file contains a lot more information about your project than just the dependencies. For instance the current version, the feature-flags, your name, a link to the public repo,...
I haven't done much Rust coding this year yet, mainly because I am trying to learn Lean4 and spent the last couple of months writing a (partially) formally validated (but not very fast) Binary Heap in Lean4.
However, a few days ago I had an inspiration at night, that brought me back to my Rust spare time project: The visual novel engine I had started last year.
For now I only did a relatively small change, but it's one that will save me a lot of time (and nerves) later on. I am using a Free Monad based embedded Domain Specific Language for writing the game logic. The change now was to wrap that Free Monad in a State Monad Transformer, which I use to store the game state in.
This idea seems to be working surprisingly well, and that has given me enough motivation to return to this project and to keep developing it further for now.
Long and boring explanation with way too much detail:
Sorry for going on a tangent, but there is a Rust-specific detail that makes this cool beyond the usual advantages of using a State Monad Transformer, and I cannot stop myself from sharing.
For composing a large Free Monad, do-notation is more or less a must-have. However, do-notation in Rust only works well with types that implement Copy. If you want to use any other type in do-notation, you can only access variables of it in the following two lines. An attempt to access the data later will lead to an ownership problem (explained here). I have tried to overcome this by adding additional syntax to do-notation, but that is a crutch at best.
So, this is where the State Monad Transformer comes in. It side-steps this problem by moving the state out of the do-notation block into the Free Monad's Pure-nodes. That way it is readily available via the State Monad Transformer's get()/put() functions, and the "use within two lines" limitation is not a big issue any more, as one can always get the value on one line, do something with it in the next line, and write the result back on the second line.
I would be very surprised if they wouldn't fix all 50 filesystems.
In all projects I have worked on (which does not include the Linux kernel) submitting a merge request with changes that don't compile is an absolute no-go. What happens there is, that the CI pipeline runs, fails, and instead of a code review the person submitting the MR gets a note that their CI run failed, and they should fix it before re-opening the MR.
That's a very good point. I hadn't considered potential lack of domain knowledge at all. In that case Rust might even help, because it's easier to write interfaces that can't be used wrong - so that even someone without the needed domain knowledge might be able to fix compile issues without breakage.
Behind all the negative tone there is a valid concern though.
If you don't know Rust, and you want to change internal interfaces on the C side, then you have a problem. If you only change the C code, the Rust code will no longer build.
This now brings an interesting challenge to maintainers: How should they handle such merge requests? Should they accept breakage of the Rust code? If yes, who is then responsible for fixing it?
I personally would just decline such merge requests, but I can see how this might be perceived as a barrier - quite a big barrier if you add the learning cliff of Rust.
The "it's hard" claim is also a bit of a misconception imho. Rust for sure has a high entry barrier, but it isn't particularly difficult, at least in comparison with C++, which I'd consider its biggest competitor. While it's easy to start working with C++, it's a horribly complex language with hard to use features, lots of weird edge cases, and tons of missing pieces, that one has little chance of ever learning properly, because it's just so much to keep in mind at all times... Oh, and don't get me started on how error prone memory management is without a Borrow Checker...
Sorry for the rant, back on topic: I agree that it's not the right tool for many domains. That's what I was thinking about when I wrote that people might misunderstand what niche it tries to fill. If one needs a low level language that is very explicit about performance costs, and offers memory safety and (some) abstraction at zero runtime cost, then Rust is definitely worth a look. If performance is not a key concern, then higher level languages might be a better choice, because one can build things faster, and focus more on the problem at hand instead of low-level details.
We are at work in a similar situation, as we would like to add another programming language besides C++ to our projects, and Rust is currently the top candidate. However, one of our goals is to use abstractions that are common in functional programming, and that's where I think Rust is a suboptimal choice. I've been playing around with such abstractions in Rust recently (I've written blog posts about Free Monads and Reader/State Monads in Rust), and my conclusion is that Rust isn't the right tool if one wants to use those. (Or, rather, those abstractions are not suited for the domain of systems programming.)
We are using Unreal Engine, so C++ is the obvious choice for performance critical code. Rust would then fill the same niche, and while it obviously would be much more convenient to use than C++, we would still need to train people, and set up FFI bindings. If we, however, are already willing to do that, we could also go all the way and introduce a higher level pure functional language. That way we would actually get a tool that covers a different domain and is suitable for abstractions coming from functional programming. We could then choose, based on a system's requirements, if we need to focus on performance (-> C++), or if we can trade a bit of performance for much easier to write/maintain code (-> whatever high level functional language we pick).
That's why, as it stands now, I also won't push towards the adoption of Rust at work.
Controversial opinion: There are only 2 kinds of people that think Rust will not become a widely used language:
For me it was funny, btw. I started out as basically a Rust fanboy, back when the "First Edition of The Rust Book" was still just called "The Book"...
Then I learned a bit of Haskell, and was immediately disappointed that Rust doesn't offer the same convenience when it comes to working with Traits (cough Higher Kinded Types cough). So, while I never considered myself part of the first group, I definitely was part of the second for some time.
However, the more I've been trying to abuse Rust for stuff that would be better done in a higher level language (like Haskell), the better I understood why Rust doesn't offer those abstractions: They often can't be zero-cost, and using them in a language that tries to be very explicit about performance costs becomes very verbose... In other words, I learned the hard way what "systems programming" means in the case of Rust, and which languages it competes with, and which it doesn't.
I can only speak out of my own experience, which is mostly C++, C#, C and Rust, but I also know a bit of Haskell, Java, Fortran, PHP, Visual Basic, and, to my deepest regret, also JavaScript.
For additional context: I have been working in game development for the last 7 years, my main language is C++ for Unreal, but I've also worked on some Unity projects with C# as main language. Before I switched to game dev I worked in material science, and used C, mostly. I use Rust for my spare time projects, and the game company I work at is planning to introduce it into our Unreal projects some point later this year.
Of all the languages I mentioned above, (Safe) Rust and Haskell are the only ones that have not yet made me scream at my PC, or hit my head against the desk.
So, some of the reasons why I personally love Rust:
The points mentioned above mostly apply to Safe Rust though. Unsafe Rust is a different story.
This brings us to the downsides. Rust isn't perfect. Far from it, actually. Here are some of the things that aren't great about Rust.
async keyword in the language itself.However, the upsides clearly outweigh the downsides imho.
tl;dr If a (Safe) Rust program compiles, chances are pretty high that it also works. This makes programming with it quite enjoyable.
It
<swearword>
is LLM slop: https://www.reddit.com/r/rust/comments/1rz15t3/comment/obiwu24/