• 0 Posts
  • 69 Comments
Joined 1 year ago
cake
Cake day: June 12th, 2023

help-circle


  • I’m a bit skeptical that a borrow checker in C++ can be as powerful as in rust, since C++ doesn’t have lifetime annotations. Without lifetime annotations, you have to do a whole program analysis to get the equivalent checks which isn’t even possible if you’re e.g. loading dynamic libraries, and prohibitively slow otherwise. Without that you can only really do local analysis which is of course good but not that powerful.

    Lifetime annotations in the type system is the right call, since it allows library authors to impose invariants related to ownership on their consumers. I doubt C++ will add it to their typesystem though.



  • To add on this, this doesn’t necessarily mean that there are fewer programing jobs in total. If people work 10% more efficently, that means that the cost of labor is only 91% of what it was before meaning that people might be able to afford to finance more programing projects. One thing that does matter is for example things like entry level jobs disappearing or the nature of the work changing. Doing less boring gruntwork can make the job more fun, but otoh digitization sometimes results in the worker having less agency in what they do since they have to fit everything into a possibly inflexible digital system.



  • Curious to hear what in Rust could be more easily solved with OOP! I think one reason for rust not using OOP is because they want to minimize dynamic dispatch and keep it explicit where it happens, because it’s a language that gives you very fine grained control of resource usage, kinda similar to how you have to be explicit about copying for most types. Most trait calls are static dispatch unless you have a Box::<dyn SomeTrait>


  • What do you mean by its predecessor? C++? I think rust has a bunch of advantages. For one, designing a new language today gives you the benefit of hindsight meaning that they have a more cohesive set of features and a nicer standard library compared to C++ that has some bloat and cruft as a natural result of it evolving over several decades. It’s also much easier to reason about undefined behavior in rust thanks to unsafe. Algebraic data types are really nice and traits are better than classes.

    The borrow checker isn’t just useful for low level programming. One of the other main selling points is “fearless concurrency” or essentially the fact that the borrow checker can help you reason about thread safe vs non thread safe data.



  • If you’re hobby programming then do whatever you want obviously but if you’re part of some sort of larger project that’s trying to decide between Rust and C++ then subjective aesthetic arguments probably aren’t going to be considered as heavily as technical ones (and rightfully so), which in Rusts case could be that certain classes of bugs are impossible. That’s not to say that it’s not possible to make a technical case for C++ over rust but syntax preferences probably aren’t going to play a large role in how widely used either languages are, which is good.






  • When I’m just locally iterating on stuff I’ll usually do a git commit -m "WIP: Description of what I'm trying to do" and then git commit --amend to it. A bit more ergonomic than stashing if I want to switch branches imo. I can also go back to old versions if I want to through the reflog.

    git commit --fixup some-commit is also great for if I discover things in the review for example. You can then do git rebase master --autosquash to flatten them into the commit they belong to and that way you don’t have to bother with commit messages like “fixed typo”. Doing fixups for small fixes is good because it allows you to keep your mr broken up into several commits without also leaving in a bunch of uninteresting history.

    Can recommend checking out the –fixup section in the git documentation if you haven’t heard about --fixup before.