Mindblowing features are basically, by definition, a result of bad language design. They blow your mind, since they are totally unexpected behaviours. They may still be cool, but they are unexpected and hence unintuitive.
A language that are full of these is Perl. And one simple one is that you can take the string “AAAAA” and use addition on that, like “AAAAA”++ and you will get the result “AAAAB”. Cool you may think, but is it really? Addition is normally used to increase the value of a number, that is a completely different operation than modifying a String. The string “AAAAA” cannot be said to be greater or less than “AAAAB”, besides the very special case when we order it. But in general the name “John” is not considered to be higher/lower than “Mark”, they are just different. So, even if it is cool to manipulate strings by using addition/subtraction, it is still bad language design and very unintuitive. Also, since perl is so loosely typed, it may also cause very unexpected bugs.
Which is kind of surprising, since it basically just is a bunch of “I’m cannot understand why … is needed”, “I cannot learn…” and “I think that is ugly”. And since the OP is coming from TypeScript, and how the OPs understanding of programming, it is clear it is a junior web developer trying rust and failing. Nothing to see here… well, the OP clearly have some kind of grandios ego, thinking that the OPs inability to learn something, must be because it is bad (I mean, there is clearly no other possiblities)… but not even that is worth responding to. And don’t read this wrong, there is plenty to complain about with Rust, however, nothing of that is in OP which is basically just as insightful as a baby crying.
Ok, so we use different search engine so you didn’t find this particular hit. But, do you really claim that learning material is an issue here. And about my attitude, yes, I was a bit cranky. In general, you can ask any stupid question, heck I ask stupid questions all the time and they will be answered kindly. The rust community knows that lifetimes and stuff like that is complicated.
However, I’m quite fed up with the attitude that it is someone elses obligation to spoon feed you with knowledge that exists right under the nose… and that is a very common attitude amongst the “For rust to succeed…” evangelists.
There are lots of guides, tutorials and documentation. The responsibility is no longer on someone else, it is up to the individuals to actually read any of them. And to be honest, if you are unable to use them to learn rust, maybe your c++ skills isn’t that impressive either.
https://bpbonline.com/products/rust-for-c-programmers?variant=42560853639368 is one if found using a tool called search engine…
I wanted to use the debug fmt functions, to allow for pretty debug also.
Are you saying that it is common that people use utf8 characters that you cannot easily type on a standard keyboard? I’m very skeptical of this claim.
Good to know that every time I feel the need to use ALGOL 68, I must remember to disable ligatures. Still not sure this is going to be a huge problem 😂
Well, that was something… I have used ligatures in my code editor for quite a few years now, and I have NEVER been confused about the ambiguity this person is so upset about. Why? I have never ever seen the Unicode character for not equals in a code block, simply since it is not a valid character in any known language. In fact, I have never even seen it in a String where it actually would be legal, probably since nobody knows how to type that using a standard keyboard. This whole article felt like someone with a severe diagnose have locked in on some hypothetical correctness issue, that simply isn’t a problem in the real world.
But, if you for some reason find ligatures confusing, then you shouldn’t use them. But, just to be clear, there is not a right of wrong like this blog post tries to argue, it is a matter of personal taste.
Splits, ligatures tabs and more
Cosmic term is nice. Still just alpha, so there are rough edges though.
For Boomers, cars was the latest tech that everyone was fiddling with. This caused even the boomer that wasn’t very interested , to know quite a lot. For later generations, car became more of a means of transportation, and the knowledge of cars was only for specialists. For gen X, computers were the high tech thing, everyone was fiddling with. Most gen x can setup a printer if they have to. For later generations, computers are just tools, and the knowledge is only for specialists.
fs::exists() was a nice little improvement that I didn’t know about until I read this announcement.
Producing products that the users wants, and that solves tje users real problems. And not trying to make products as addictive as possible, to harvest as much user data as possible to sell.
The problem is that C is a prehistoric language and don’t have any of the complex types for example. So, in a modern language you create a String. That string will have a length, and some well defined properties (like encoding and such). With C you have a char * , which is just a pointer to the memory that contains bytes, and hopefully is null terminated. The null termination is defined, but not enforced. Any encoding is whatever the developer had in mind. So the compiler just don’t have the information to make any decisions. In rust you know exactly how long something lives, if something try to use it after that, the compiler can tell you. With C, all lifetimes lives in the developers head, and the compiler have no way of knowing. So, all these typing and properties of modern languages, are basically the implementation of your suggestion.
It is making the tracking protection part of containers obsolete, this is basically that functionality but built in and default. The containers still let you have multiple cookie jars for the same site, so they are still useful if you have multiple accounts on a site.
Container tabs are still useful, as they let you use multiple Cookie jars for the same site. So, it is very easy to have multiple accounts on s site.
Well… it is true that it doen’t have all these crates like Url included in the rust standard library, and hence it is not official. On the other hand Url was created by Mozilla to be used in Firefox, hence it is a quite competent crate that is very well maintained. And my guess is that the http crate may have the same kind of origins… but I’m not entirely sure about that.
And even Java that includes quite a lot, still didn’t get a good Http library until very recent, until then you had to rely on some obscure library created by the unknown organization Apache… so…
As a developer you always have to think about what libraries you use, and if you trust them… that goes for pretty much any language.
I used to use IntelliJ Rust as my primary rust IDE, but when they switched to Rust Rover I stopped using it. Not sure why actually, possibly since I used Java with IntelliJ it was already my go to IDE, so using it for Rust was natural. I also guess, that I had nvim with rust-analyzer working, so that was available at my finger tips already. So, I might have switched over anyway… who knows.
Anyway, it is good to see more options available, and I hope it is getting so good that it is worth the money.
One breaking change, that they doesn’t list as breaking (I guess since I assume the old was always broken) is: Dynamic registration of LSP capabilities. An implication of this change is that checking a client’s server_capabilities is no longer a sufficient indicator to see if a server supports a feature. Instead use client.supports_method(<method>). It considers both the dynamic capabilities and static server_capabilities.
So if you had code like
if client.server_capabilities.inlayHintProvider then
...
end
you now should use
if client.supports_method("inlayHintProvider") then
...
end
So, not really a breaking change I guess, but something you should change any way.
Ok, I then have some business proposals…