so by his words, it means that if I live in a third world country but I work as hard as my peer in SF I'm going to get paid less by a unit of work? even tho we both are equally good and working as hard?
We can voice our opinions/concerns. This is very basic principle of democracy. Protests are one of the most important feature of democracy. Without protests, we won't have a lot of basic rights we take for granted now.
Online comments are probably the most weak form of protests. Spotify can ignore it or not. They may lose revenue or not. But no one is forcing anyone.
Wait, so you support freedom of expression, unless that expression pressures Spotify in this case? How do you relive that blatant contradiction in your thinking? People have a right to be intolerant of Alex Jones, unless you think his freedom to be a bloviating asshole somehow trumps other people’s freedom to be intolerant of him and any who carry him?
We don't just add things for the sake of adding them. Most new features are being driven by two things:
1. Making the language friendlier for beginners and easier to understand.
2. Addressing pain points by production users.
That being said, I'd push back a little on "number of features" as a measure of complexity. There's a few ways in which this is a problem.
For example, the "waterbed theory of complexity", that is, if you make the language simpler, you push the complexity elsewhere. This can be good or bad, depending. I generally hesitate to compare Rust to other languages, but there was a good illustration of this the other day, about Rust and Go: https://news.ycombinator.com/item?id=17618918
Basically, Go has kept the language incredibly simple. Rust has added many features that Go does not. But that means that error handling in Go is significantly more verbose than in Rust. You can't just wave away the inherent complexity of properly handling errors; it has to go somewhere. Both choices are 100% valid, just different.
The other big issue with simply enumerating features is that cohesion and orthogonality is important. C++ did something truly impressive; they changed the fundamental model in which you write code. Idiomatic C++98 and idiomatic C++17 look and feel very different. The cost of this is that many features don't quite fit together as well as you would like. Or at least, that's what people say. We try to really make sure that features fit together in a way that makes sense.
>We don't just add things for the sake of adding them.
I hope you realise that the C++ design committee also doesn't add things for the sake of adding them. They aren't morons. Often there is a very real tradeoff in every decision, but generally the motivations seem to also be those two you mention.
I honestly disagree. When Bjarne writes a paper [0] saying how C++ is going the crumble under the weight of disparate and incoherent features then the language and its wider community has a problem.
To quote:
The foundation begun in C++11 is not yet complete, and C++17 did little
to make our foundation more solid, regular, and complete. Instead, it added
significant surface complexity and increased the number of features people
need to learn. C++ could crumble under the weight of these – mostly not
quite fully-baked – proposals.
I was hoping that my comments about C++ specifically would make that clear, but yes, I also very much agree that the committee doesn't do things just because. I have a very deep respect for their work.
Yes, web view and standard library are being used in the same sentence. How on earth a web view might be considered for inclusion in a standard library is beyond me.
In-context, this makes a bit more sense, though I'm not sure I'd vote for this proposal if I were on the committee. The introduction does a decent job of explaining the motivation; this is an alternate to the long-going discussion about putting 2D graphics in the standard.
Getting outraged at proposals, especially from the outside, doesn't make for a healthy process; not every proposal becomes accepted. Off-the-wall proposals can sometimes help explore a problem space with a new outlook. That doesn't mean that every single proposal is worth taking equally seriously, but Hal is a well-known name in this space, and has done a lot of good work.
(Incidentally, this kind of situation is why we're interested in adding stages to Rust's process; we want clarity around the maturity of a proposal. Some proposals are just for brainstorming. Some are more mature. It can be hard to tell sometimes from the outside which is which.)
> 1. Making the language friendlier for beginners and easier to understand.
make documentation a priority! With Elixir or Golang you can access doc super easily from the command line. Some sublime text plugin shows you the doc for highlighted std functions as well. These are what make a language awesome imo.
It is literally my job to make documentation a priority. We're on the same team here :) I spent the last 18 months throwing out an entire book I wrote to write a new one that’s oriented around how real users learn the language in real life. We’ve invested a lot.
(Some editors do have inline doc showing support; we don't have terminal doc access but we do have local html doc access)
opens documentation for the current project, including all its dependencies. Rust generates docs in HTML. While it doesn't stay purely in command line, it enables cross-linking, collapsible sections, and has built-in search.
Why do you prioritize making things easier for beginners? I mean, it's a system language many people are going to choose to code advanced performant stuff. Wouldn't it make sense to prioritize programmers who are going to build important stuff in it?
Beginners to Rust, not people who are new to programming, sorry that was ambiguous! We are putting basically zero effort into "learn programming via Rust."
The Rust 2018 edition isn't bells and whistles, but usability improvements.
For example, many users were confused by Rust's module system, because modules behaved differently than in other languages. The 2018 edition added the "missing" features to the module system to meet expectations that new users have.
The end result is that Rust 2018 is easier to learn.
easier to learn as of now.. but look below ( or other rust threads) and see how people that want to jump into rust ( from c++ for example) always ask about X feature missing and when is going to be added...
C++ has fucked up expectations people have from language evolution. Don't project C++'s mistakes on Rust.
For Rust the evolution is users asking "Why is doing X so hard?" and the Rust team saying "OK, we'll see how we can make X easier".
Rust has been adding features for 30 releases now, and every new release has been easier to use and easier to learn.
There is nothing scary in new features if they are built on the same basic principles, carefully elaborated, sound and consistent.
People added features to languages like scheme, ocaml, lisp for decades, and it was fine. There are type systems for racket, object system for ocaml, pattern matching for lisp, all of which are simple and fit into the design of the language well.
The problem with C++ is that it was based on the C language, which already was an example of terrible design (by modern standards), and new features also were half-baked or badly designed (SFINAE, accidentally turing-complete templates, 666 *values, too much implicitness and unnecessary entities, like constructors).
So far rust is very nice, concise, elaborated and explicit language. Hope that the new features would be as elaborated and neat, not just monkey patches.
Template meta-programming is awful but that particular type of turing completeness isn't a problem at all. Mere arithmetic and some kind of ability to loop gives you that kind of turing completeness. The typical compiler limits looping depth to a couple hundred, and the problem is solved. Such a construct isn't a notably slow use of templates either. It's more trouble to avoid it than to have it. Compare some macros that can't loop and need a bunch of extremely repetitive lines for different sizes.
You don't need infinite loops, all you need are simple inductive types and reduction rules, it has not to be a turing complete language. You can have simple typelevel functions in haskell, whilst its typechecker is not turing-complete.
Having not started on learning rust yet, I am worried about the complexity increasing as well. However, I think the idea of editions is that you can stick with one if you like, for as long as you like.
If anything, then the complexity is getting less, not more, as the team as well as the ecosystem are very much focused on making things simpler and more approachable and are very aware of any existing, potentially unnecessary complexity. As an example, the borrow checker is currently undergoing a major (internal) revision and will allow you to write some things in the future (and even now, at least on nightly Rust) that its old implementation was not so sure about and thus complained about. Another example: async/await syntax is coming, along with improved futures, that will make it much easier to get started with async/io programming.
You have to have good people on site who can work with remote workers first. So you can make clear requirements. They also have to feel secure about their jobs. Otherwise they will not cooperate and blame remote workers.
Just hire remote is not an answer for a lot of companies.
If you think you can just do some programming job in fire and forget you are going to be surprised. You have to actually think about what task to give to remote team and what not. What areas are strong for who and divide work accordingly it is a lot of work in itself.
Last but not least, there is ton of legal stuff, compliance, what type of customers you are tending to. Some big corps own specific parts of code and sending something outside country could get you into trouble.