1.  

    I reported on this interesting architecture before.

    1. 1

      We don’t want to get submissions for every CVE and, if we do get CVEs, we probably want them tagged security.

      1. 16

        while I agree with you in this case, I don’t particularly like the “I speak for everyone” stance you seem to be taking here.

        1. 9

          This one is somewhat notable for being the first (?) RCE in Rust, a very safety-focused language. However, the CVE entry itself is almost useless, and the previously-linked blog post (mentioned by @Freaky) is a much better article to link and discuss.

          1. 4

            Second. There was a security vulnerability affecting rustdoc plugins.

        2. 4

          Do you think an additional CVE tag would make sense? Given there’s upvotes some people seem to be interested.

          1. 2

            That’d be a good meta tag proposal thread.

          2. 4

            Yeah, I’d rather not have them at all. Maybe a detailed, tech write-up of discovery, implementation, and mitigation of new classes of vulnerability with wide impact. Meltdown/Spectre or Return-oriented Programming are examples. Then, we see only the deep stuff with vulnerability-listing sites having the regular stuff for people using that stuff.

            1. 5

              seems like a CVE especially arbitrary code execution is worth posting. my 2 cents

              1. 5

                There are a lot of potentially-RCE bugs (type confusion, use after free, buffer overflow write), if there was a lobsters thread for each of them, there’d be no room for anything else.

                Here’s a list a short from the past year or two, from one source: https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=Type%3DBug-Security+label%3AStability-Memory-AddressSanitizer&sort=-modified&colspec=ID+Type+Component+Status+Library+Reported+Owner+Summary+Modified&cells=ids

                1. 2

                  i’m fully aware of that. What I was commenting on was Rust having one of these RCE-type bugs, which, to me, is worthy of discussion. I think its weird to police these like their some kind of existential threat to the community, especially given how much enlightenment can be gained by discussion of their individual circumstances.

                  1. -1

                    But that’s not Rust, the perfect language that is supposed to save the world from security vulnerabilities.

                    1. 3

                      Rust is not and never claimed to be perfect. On the other hand, Rust is and claims to be better than C++ with respect to security vulnerabilities.

                      1. 0

                        It claims few things - from the rustlang website:

                        Rust is a systems programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety.

                        None of those claims are really true.

                        It’s clearly not fast enough if you need unsafe to get real performance - which is the reason this cve was possible.

                        It’s clearly not preventing segfaults - which this cve shows.

                        It also can’t prevent deadlocks so it is not guaranteeing thread safety.

                        I like rustlang but the claims it makes are mostly incorrect or overblown.

                        1. 2

                          Unsafe Rust is part of Rust. I grant you that “safe Rust is blazingly fast” may not be “really true”.

                          Rust prevents segfaults. It just does not prevent all segfaults. For example, a DOM fuzzer was run on Chrome and Firefox and found segfaults, but the same fuzzer run for the same time on Servo found none.

                          I grant you on deadlocks. But “Rust prevents data race” is true.

                      2. 2

                        I’m just going to link my previous commentary: https://lobste.rs/s/7b0gab/how_rust_s_standard_library_was#c_njpoza

                1. 5

                  I wouldn’t contribute to Commons Clause projects since they are not inbound=outbound, but it seems they don’t expect contributions anyway. So it is probably okay.

                  1. 0

                    I think that’s a completely reasonable response. Many folks won’t contribute to a given project based on the license.

                  1. 3

                    GHC’s rewrite rule is another example of programmable compile-time optimization.

                    1. 10

                      Redis is an example of this paradigm. Today, most cloud providers offer Redis as a managed service over their infrastructure and enjoy huge income from software that was not developed by them.

                      This makes no sense. Redis was not developped by Redis Labs either, they only hired Antirez a few years ago. Before that, they were doing exactly what they criticize today. I would even say they weren’t the best actor in that space, e.g. OpenRedis was founded by people truly involved in the community…

                      I won’t say any more before I see a direct take from Salvatore on this issue.

                      In any case, commercially, I think this is a huge mistake. If they persist Redis is going to be forked and the fork will eventually win, a la MariaDB.

                      EDIT: I had misread the announcement, this is only about modules which will be Apache 2 + Commons Clause, while the Redis core will remain BSD. I am fine with that even though I think AGPL would make more sense if you want those modules to become popular. Enforcing a monopoly on hosting is never a good idea.

                      From various comments I can read online it looks like I was not the only one to misunderstand. That Redis was unaffected should probably have been the first line of that post, in bold…

                      EDIT 2: Salvatore himself is tweeting about the issue on Twitter right now. https://twitter.com/antirez/status/1032192722755571714

                      1. 7

                        MariaDB isn’t the bastion of open source people make it out to be.

                        Since the original claim that a) Oracle would close-source MySQL, and/or let it stagnate to force adoption of their commercial offerings, and thus b) MariaDB would fork MySQL and maintain feature parity, in an open source model:

                        • Oracle have released several new versions, with major new features/functionality/SQL compatibility
                        • Oracle have maintained the existing Open Source licence
                        • MariaDB have broken compatibility in numerous places
                        • MariaDB have backflipped and made one of their components for running a HA cluster, closed source.

                        Honestly if your (the reader, not @catwell) app/company needs MySQL and isn’t paying for a commercial licence from Oracle, IMO you’d be stupid not to use either Persona Server or Percona Cluster. Actual feature parity (i.e. they constantly rebase from upstream) and a clear business model: pay for support/advice, the software is completely free.

                        1. 2

                          clear business model: pay for support/advice, the software is completely free.

                          That business model is what Redis Labs is trying to address. There’s a serious problem for companies with that model if a large hosting provider like AWS that more and more people are moving to can come in and offer a “as a service” version that cuts off the support revenue stream. At that point, AWS can benefit from the work that said company is doing without contributing anything back.

                          Open source software in general and open source business models often assume that you won’t have parasitic players in the market who derive value from the work of others but contribute nothing in return. The current system is going to have to change eventually to account for that.

                          It might end up being that all open source software is produced by companies that aren’t “product” companies. For example, Google spinning out K8S and not attempting to make money off the software. LinkedIn getting an advantage out of opening up Kafka etc. In that world, eventually, there will be very few companies like RedisLabs, CockroachDB, InfluxDB etc that are trying to be product companies. The large move “to the cloud” that is underway is a huge disruption to that previously OSS business model. I think a model that many will try will be to take an open source product and provide close sourced, additional functionality around those codebases (thereby sidestepping licenses like the AGPL) and doing managed hosting and as a service hosting within the big clouds like AWS, GCP, and Azure.

                          1. 2

                            There’s a serious problem for companies with that model if a large hosting provider like AWS that more and more people are moving to can come in and offer a “as a service” version that cuts off the support revenue stream.

                            Percona provide support services for customers who use AWS’ various mysql flavoured “DB as a Service” offerings.

                            This is not that different IMO than what Rackspace did - they took their Ops/Arch experience, and offered it as a service, regardless of who hosts the underlying machines.

                        2. 3

                          Oracle MySQL is alive and well and there is no sign of MariaDB winning.

                          1. 0

                            Re: AGPL

                            The 3 modules that were reliscened were previously AGPL. AGPL doesn’t provide the protections that Redis Labs is seeking. Most OSS companies have a business model that revolves around support. If a large hosting provider like Amazon comes in and provides an “as a service” version, that cuts off a primary revenue stream. If said hosting provider doesn’t produce improvements to the codebase then AGPL doesn’t matter.

                          1. 3

                            Wrap on integer overflow is a good idea, because it will get rid of one of undefined behavior in C.

                            Undefined behavior is evil. One evil it causes is that it makes codes optimization-unstable. That is, something can work in debug build but does not work in release build, which is very undesirable. The article does not address this point at all.

                            1. 1

                              The article does not address this point at all.

                              To remove all undefined behaviour in C would severely impact the performance of C programs.

                              The post does suggest that trap-on-overflow is a superior alternative to wrap-on-overflow, and of course you could apply it to both debug and release builds if this optimisation instability concerns you. Even if you apply it just to your debug build, you’ll at least avoid the possibility that something works in the debug build but not in the release.

                              1. 2

                                Note that Rust wraps on overflow and as far as I can tell this does not impact performance of Rust programs.

                                1. 0

                                  This is essentially the same as one of the arguments I addressed in the post. Although in certain types of programs, particularly lower-level languages (like C and Rust) where the code is written directly by a human programmer, there probably are not going to be many cases where the optimisations enabled by having overflow be undefined will kick in. However, if the program makes heave use of templates or generated code, or is produced by transpiling a higher-level language with a naive transpiler, then it could do (I’ll conceded this is theoretical in that I can’t really give a concrete example). The mechanism by which the optimisation works is well understood and it isn’t too difficult to produce an artificial example where the optimisation grants a significant speed-up in the generated code.

                                  Also, in the case of Rust programs, you can’t really reliably assess the impact of wrapping on overflow unless there is an option to make overflow undefined behaviour. Is there such an option in Rust?

                                  1. 2

                                    No, there is no such option, and there never will be. Rust abhors undefined behaviors. Performance impact assessment I had in mind was comparison with C++ code.

                                    On the other hand, rustc is built on LLVM so it is rather trivial to implement: rustc calls LLVMBuildAdd in exactly one place. One can replace it with LLVMBuildNSWAdd (NSW stands for No Signed Wrap).

                                2. -1

                                  To remove all undefined behaviour in C would severely impact the performance of C programs.

                                  This cannot be entirely true. As a reducto ad absurdum, it would be possible in principle to laboriously define all the things that compilers currently do with undefined behaviour and make that the new definition of the behaviour, and there would then be zero performance impact.

                                  C compiler writers might argue that removing all undefined behaviour without compromising performance would be prohibitively expensive, but I’m not entirely convinced; there are carefully-optimized microbenchmarks on which the naive way of defining currently-undefined behaviour produces a noticeable performance degradation, but I don’t think it’s been shown that that generalises to realistic programs or to a compiler that was willing to put a bit more effort in.

                                  1. 2

                                    This cannot be entirely true. As a reducto ad absurdum, it would be possible in principle to laboriously define all the things that compilers currently do with undefined behaviour and make that the new definition of the behaviour, and there would then be zero performance impact

                                    Clearly that would be absurd, and it’s certainly not what I meant by “remove all undefined behaviour”. Your “possible in principle” suggestion is practically speaking completely impossible, and what I said was true if you don’t take such a ridiculously liberal interpretation of it. Let’s not play word games here.

                                    C compiler writers might argue that removing all undefined behaviour without compromising performance would be prohibitively expensive

                                    They might, but that’s not what I argued in the post.

                                    I don’t think it’s been shown that that generalises to realistic programs or to a compiler that was willing to put a bit more effort in.

                                    There’s no strong evidence that it does, nor that it wouldn’t ever do so.

                                    1. 1

                                      Well then, what did you mean? You said “To remove all undefined behaviour in C would severely impact the performance of C programs.” I don’t think that’s been demonstrated. I’m not trying to play word games, I’m trying to understand what you meant.

                                      1. 1

                                        I meant “remove all undefined behaviour” in the sense and context of this discussion, in particular related to what @sanxiyn above says:

                                        Undefined behavior is evil. One evil it causes is that it makes codes optimization-unstable. That is, something can work in debug build but does not work in release build, which is very undesirable

                                        To avoid that problem, you need to define specific behaviours for cases that are currently specify undefined behaviour (not ranges of possible behaviour that could change depending on optimisation level). To do so would significantly affect performance, as I said.

                                        1. 1

                                          I could believe that removing all sources of differing behaviour between debug and release builds would significantly affect performance (though even then, I’d want to see the claim demonstrated). But even defining undefined behaviour to have the current range of behaviour would be a significant improvement, as it would “stop the bleeding”: one of the insidious aspects of undefined behaviour is that the range of possible impacts keeps expanding with new compiler versions.

                                          1. 2

                                            I could believe that removing all sources of differing behaviour between debug and release builds would significantly affect performance

                                            It’s not just about removing the sources of differing behaviour - but doing so with sensibly-defined semantics.

                                            though even then, I’d want to see the claim demonstrated

                                            A demonstration can only show the result of applying one set of chosen semantics to some particular finite set of programs. What I can do is point out that C has pointer arithmetic and this is one source of undefined behaviour; what happens if I take a pointer to some variable and add some arbitrary amount, then store a value through it? What if doing so happens to overwrite part of the machine code that makes up the program? Do you really suppose it is possible to practically define what the behaviour should be in this case, such that the observable behaviour will always be the same when the program is compiled with slightly different optimisation options - which might result in the problematic store being to a different part of code? To fully constrain the behaviour, you’d need pointer bounds checking or similar - and that would certainly have a performance cost.

                                            But even defining undefined behaviour to have the current range of behaviour would be a significant improvement, as it would “stop the bleeding”

                                            As I’ve tried to point out with the example above, the current range of undefined behaviour is already unconstrained. But for some particular cases of undefined behaviour, I agree that it would be better to have more restricted semantics. For integer overflow, in particular, I think it could reasonably be specified that the result becomes unstable (eg. behaves incosistently in comparisons), but the behaviour is otherwise defined - for example. Note that even this would impede some potential optimisations. (And that I still advocate trap on overflow as the preferred implementation).

                                    2. 2

                                      I suspect that one issue is that compilers may manifest different runtime behaviour for undefined behaviour, depending on what specific code the compiler decided to generate for a particular source sequence. In theory you could document this with sufficient effort, but the documentation would not necessarily be useful; it would wind up saying ‘the generated code may do any of the following depending on factors beyond your useful control’.

                                      (A canonical case of ‘your results depend on how the compiler generates code’, although I don’t know if it depends on undefined behaviour, is x86 floating point calculations, where your calculations may be performed with extra precision depending on whether the compiler kept everything in 80-bit FPU registers, spilled some to memory (clipping to 64 bits or less), or used SSE (which is always 64-bit max).)

                                      1. 1

                                        It’s not only possible: Ive seen formal semantics that define various undefined behaviors just like you said. People writing C compilers can definitely do it if they wanted to.

                                  1. 10

                                    I’m a bit puzzled why the author seems to think that integer wrap on overflow behaviour has something to do with C and undefined behaviour. The same thing happens with nearly all languages which use the processor’s integer arithmetic, because those semantics are provided by the processor itself. Java, C#, etc. all wrap on overflow. There are some exceptions though - Ada provides the “exception on overflow” semantics the author prefers, but it does come with a significant performance penalty because checking for overflow requires additional instructions after every arithmetic operation.

                                    The point here is that if you want performant arithmetic it’s all about what the processor is designed to do, not anything to do with the languages. Java defines integer wrap as the language’s standard behaviour but as a result it incurs a performance penalty for integer arithmetic on processors which don’t behave this way. C doesn’t incur this penalty because it basically accepts that overflow works however the processor implements it. And let’s face it if your program is reliant on the exact semantics of overflowing numbers you’re probably doing it wrong anyway.

                                    There are some processors which provide interrupts on integer overflow. This eliminates the performance penalty associated with overflow checks if your language is Ada and so you want to trap on overflow. There are other semantics around too - DSP processors often have “clamp on overflow” instead since that suits the use case better and old Unisys computers use ones complement rather than twos complement so their overflow behaves slightly differently.

                                    1. 4

                                      Performance penalty of “trap on overflow” can be reduced by clever modeling, for example by allowing delayed trap instead of immediate trap. As-if Infinitely Ranged is one such model. Immediate trap disallows optimizing a+b-b to a, because if a+b overflows the former traps and the latter doesn’t. Delayed trap allows such optimization.

                                      1. 3

                                        I’m a bit puzzled why the author seems to think that integer wrap on overflow behaviour has something to do with C and undefined behaviour.

                                        You are mixing up underlying behaviour of the processor with defined (or un-defined) behaviour of the language. Wrap on integer overflow is indeed the natural behaviour of most common processors, but C doesn’t specify it. The post is saying that some people have argued that wrap-on-overflow should be the defined behaviour of the C language, or at least the implementation-defined behaviour implemented by compilers, and then goes on to provide arguments against that. There is a clear example in the post of where behaviour of a C program doesn’t match that of 2’s complement arithmetic (wrapping).

                                        The same thing happens with nearly all languages which use the processor’s integer arithmetic, because those semantics are provided by the processor itself.

                                        That’s the point - in C, it doesn’t happen.

                                        1. 1

                                          I don’t get the point. The advantage of using integer wrap for C on processors that implement integer wrap is that it is high performance, simplifies compilation, has clear semantics, and is the semantics programmers expect. If you want to argue that it should be e.g. trap on overflow, you need to provide a reason more substantive than theoretical compiler optimizations that are shown by hand waving. The argument that it should be “generate code that overflows but pretend you don’t” you needs a stronger justification because the resulting semantics are muddy as hell. I’m actually in favor of a debug mode overflow trap for C but a optimized mode of use processor semantics.

                                          1. 1

                                            you need to provide a reason more substantive than theoretical compiler optimizations that are shown by hand waving

                                            Read the post, then; there are substantive reasons in it. I’m not engaging with you if you’re going to start by misrepresenting reasoned arguments as “hand waving”.

                                            1. 0

                                              “However, while in many cases there is no benefit for C, the code generation engines and optimisers in compilers are commonly general and could be used for other languages where the same might not be so generally true; “

                                              Ok! You think that’s a substantive argument.

                                              1. 1

                                                You’re making a straw man. What you quoted is part of a much larger post.

                                                1. 1

                                                  That’s not what “straw man” means.

                                                  1. 1

                                                    It means that you’re misrepresenting the argument, which you are. I said that the post contained substantive reasons, you picked a particular part and insinuated that I had claimed that that particular part on its own constituted a substantive reason, which I didn’t. And: you said “If you want to argue that it should be e.g. trap on overflow, you need to provide a reason more substantive than theoretical compiler optimizations that are shown by hand waving” but optimisations have nothing very little to do with trapping being a better behaviour than wrapping, and I never claimed they did, other than to the limited extent that trapping potentially allows some optimisations which wrapping does not. But that was not the only reason given for trapping being a preferable behaviour; again, you mis-represented the argument.

                                        2. 2

                                          I’m a bit puzzled why the author seems to think that integer wrap on overflow behaviour has something to do with C and undefined behaviour.

                                          They are related, yes. E.g. whilst signed integer overflow is well defined in most individual hardware architectures (usually as a two’s compliment wrap), it could vary between architectures, and thus C leaves signed integer overflow undefined.

                                          1. 0

                                            The whole argument is odd.

                                          1. 2

                                            sixgill is used by Stylo project to check C++ callbacks from Rust conforms to Rust rules. See parallel style system hazards.

                                            1. 9

                                              This article is a good argument against treating a lack of gender diversity in video games as a problem to be solved. Men and women are systematically interested in different types of video game experiences, and game creators who cater to one type of experience or the other will naturally have a gender imbalance in the sorts of players who want to play that type of game.

                                              1. 11

                                                It’s a sign of bizarre times that this isn’t obvious. Boys and girls have always preferred playing with different toys since the dawn of time.

                                                1. 17

                                                  There’s nothing obvious about it, and re-examining unfounded claims is not bizarre. We know that, historically, plenty of claims made were just plain wrong (consider the anabolic-catabolic “theory”).

                                                  Boys and girls had very different /roles/ since the dawn of time for obvious reasons. If you tried, as a girl, to play with the “wrong” toys you could see quite a bit of resistance.

                                                  1. 16

                                                    I’m not saying this is wrong (I haven’t done any research so I don’t know) but it seems very likely that kids are pushed to play with specific toys by society. We label toys as boys or girls, we market toys as being played with by either boys or girls and we give kids toys that we associate with their gender.

                                                    I saw a video this year where young babies were placed in a room full of a range of toys. Each time the baby was dressed in either pink or blue and given a female or male name regardless of their actual gender and a babysitter was in the room as well to help them play with the toys. Each time the babysitter would tend to help the baby play with toys stereotypical for their perceived gender. After the babysitter was asked which toys they thought the baby liked and they would say the baby seemed to prefer the toys of the perceived gender regardless of what the babys actual gender was.

                                                    Now that’s not really a scientific study but it does seem to suggest that things are not as “obvious” as they seem. It’s a little hard to test because really you would have to raise a kid in an alternative society to see what differences it makes.

                                                    1. 2

                                                      There’s also evidence that toy choice is gendered along the same lines that we in our culture are familiar with among chimpanzees, suggesting that toy choice has something to do with biological mechanisms of gendering bodies that are older than the human-chimpanzee split.

                                                      Anyway, this entire article is already presupposing that gendered differences in toys (well, video game tastes, but is a video game not just a more sophisticated toy?) exist and are important. As per the title, what men and women consider hardcore gaming are not the same.

                                                      1. 2

                                                        Could as well be the kids wanted to be nice to the babysitter who helped them play. The type of play also needs to be accounted for. There are studies as well which show that very young kids tend to gravitate to certain types of play.

                                                        Of course there’s going to be some overlap and gray areas, but what’s the harm in acknowledging the idea that maybe play and preferences have something to do with biology?

                                                        1. 10

                                                          but what’s the harm in acknowledging the idea that maybe play and preferences have something to do with biology?

                                                          There is no harm in thinking maybe it might be true and maybe it might not. There is harm in things like OPs comment stating “It’s a sign of bizarre times that this isn’t obvious.” When it’s extremely complex and not obvious at all.

                                                          1. 7

                                                            There is no harm with acknowledging that they “have something to do with biology”, the difference is how much weight is put on it, and the problems are caused when that is used as an excuse for things like exclusion, whether that’s subtle coercion of “oh I wouldn’t bother with that, because it’s been shown that people like me are bad at that sort of thing”, to the deep personal exclusion of “I will never be able to do X in a good way because of my biology, so I should not try”.

                                                            Equally, what is the harm in acknowledging the idea that maybe play and preferences have something to do with culture?

                                                            1. 1

                                                              I don’t know where coercion or exclusion came from here.

                                                              And surely society has some effect, but reading something like The Blank Slate makes me think it’a not such a huge factor.

                                                              Next someone will probably point out Pinker is a white supremacist or something and I’m done with this already.

                                                              1. 3

                                                                I don’t know where coercion or exclusion came from here.

                                                                Do societal consequences not matter, just because they’re societal?

                                                                reading something like The Blank Slate makes me think it’a not such a huge factor.

                                                                The Blank Slate, last I checked, ignores a lot of hard evidence done in the social sciences in favour of bashing Pinker’s strawman of the subjects. In addition, I’m not sure how someone can place a single reasonably cited book as a justification for ignoring 70 years of hard evidence. Especially when such a book’s argument is strongly contested.

                                                                Next someone will probably point out Pinker is a white supremacist or something and I’m done with this already.

                                                                Does someone’s political views not have any bearing on their research? Surely years of study have found bias in study construction extremely easy. I take the attitude that it must be so, for politics is how we view and frame all manner of parts of the world. Whether or not someone is a racist matters deeply as to the purpose behind the arguments that they make, and the ways that they approach certain details. Likewise if I am a monarchist you would surely wish to know that when arguing about matters of state, since my arguments might be led by conscious or unconscious motivations.

                                                                1. 1

                                                                  I don’t think Pinker has a political horse in the race, but I do understand he can be misunderstood to have one even if he didn’t. So as far as anyone should care, the discussion could be limited to the science.

                                                                  I’m just not particularly interested anymore, because something like infant behavior, sex vs gender, toy preference, biology, anthropology, primatology and who knows what “always” gets conflated with coercion and exclusion.

                                                                  It’s essentially impossible to discuss matters online, text-based, time-delayed and without real interaction. More so when it starts to feel like something someone wants to win. The easiest win is to claim the other party doesn’t care about something not immediately related yet important and he’s therefore a bad person by implication.

                                                                  That’s why I’m done.

                                                                  Sometimes a cigar is just a cigar and men and women choose different toys, ways to play, subjects to study and careers to follow.

                                                            2. 6

                                                              Yes as a hypothetical, and in a context where social coercion doesn’t exist your statement would be totally fine and good. Saying it with certainty, even though it runs contrary to the scientific consensus lacks epistemological responsibility. It’s fine to say I’m not sure I agree with the scientific consensus, however it’s irresponsible to say that the scientific consensus is certainly wrong without any evidence. Once you add in the fact that some people will try to use such claims as a way to pressure a demographic out of an activity, then you have the risk of real harm. I’m not saying you’re the kind of person who would do that but it’s important to be aware that people will try to use your message there to exclude others who are wholly capable.

                                                            3. 0

                                                              I mean there’s no reason to believe that there’s real sexual dimorphism in the toys children choose to play with. I’ve seen boys play with dolls and girls play with trucks. Gender is a construct, that’s the scientific consensus and those saying otherwise value tradition over evidence.

                                                              1. 3

                                                                There are also a lot of arbitrary gendered items that change over time or across cultures. For example skirts of some form have been either male or female clothing depending on the culture/location. Also pants have been male clothing but are now neutral.

                                                                There are no doubt very real differences between genders. The obvious one being physical strength/body shapes but I am willing to bet that a majority of the differences between genders today are formed by tradition and not biology.

                                                                1. 2

                                                                  The differences in gender as you said are formed by tradition. When you talk about physical strength and body shapes however that’s sexual dimorphism, unless you are referring to the cultural mores that pressure men to bulk up and pressure women not to. Sex informally speaking is the bits between your legs, sexual dimorphism is the physiological difference that often (but not always) come along with that like testosterone or estrogen production, gender is the cultural construct we have around sex. You can have sexes without having gender, which I’m sure has existed and you can have many genders within a single sex if you’re like creating a sci-fi culture.

                                                                  You weren’t wrong in any way I just thought it would be useful to be clear.

                                                          2. 4

                                                            The reason there’s a push to solve it is the profit motive.Given that roughly 50% of women play games if you could create an experience that tailors to both cultures you could make a lot more money than if you didn’t.

                                                            Though I personally also enjoy playing games with people with different backgrounds. Sometimes a different cultural outlook also can have refreshing outside of the box ideas. It looks like for example that according to this survey while women value competition and challenge, they also value looking good while doing it, and going all the way to completion. That would mean if you want to hook women, make sure to add robust customization options or ways to build or design things. I think the completion aspect is already in most games, cheevos. Notice that they don’t disvalue destruction, but they find it less interesting than a well written story.

                                                            1. 2

                                                              Indeed, it is like complaining chick flicks get chick viewers, which is absurd.

                                                              1. 7

                                                                I haven’t heard that particular complaint, but one I hear often is that it’s quite absurd to have a genre lineup that resembles something like “action,” “comedy,” “drama,” and “not for men,” as if “not for men” were its own genre (it’s obviously not literally called that, but you provided your own example above). Deciding to use a “not for men” genre immediately creates its counterpart, “for men,” which is every other genre.

                                                                You logically have two choices here:

                                                                1. Accept the dichotomy and make explicit the implicit labels: “action for men,” “comedy for men,” “drama for men,” and “not for men.” You’ll have to train your brain to see this everywhere, as the implicit labels are extremely implicit. Along with appeal to the targeted demographic comes license to exclude the other – after all, if your genre is “not for men” then you don’t care if your movie makes men uncomfortable (this is different than making it desirable for not-men). If your genre is “action for men,” you don’t care if your movie makes women feel uncomfortable. It’s not for them.
                                                                2. Reject the dichotomy, and distribute the “not for men” qualities into the core genres – “action for men” just becomes “action”. Along with this comes the lack of license to exclude. This has made some movie watchers/videogame players mad – even though there is still plenty of content around (and more being made every day), the consumers of the previously “for men” genres see this as dilution and loss. Some of the things they liked excluded people, and instead of trying to untangle the good from the bad (or learn to coexist with new expressions of things they liked before) they’ve decided to double down and defend everything.

                                                                Whichever decision you make will impact how you see the modern media landscape.

                                                            1. 11

                                                              Here is a reply from linux-crypto. Among other things:

                                                              Your patch description is also missing any mention of crypto accelerator hardware. Quite a bit of the complexity in the (kernel) crypto API, such as scatterlist support and asynchronous execution, exists because it supports crypto accelerators. AFAICS your new APIs cannot support crypto accelerators, as your APIs are synchronous and operate on virtual addresses. I assume your justification is that “djb algorithms” like ChaCha and Poly1305 don’t need crypto accelerators as they are fast in software. But you never explicitly stated this and discussed the tradeoffs. Since this is basically the foundation for the design you’ve chosen, it really needs to be addressed.

                                                              1. 2

                                                                I’ve had enough code reviews and read enough LKML threads to appreciate Eric Biggers critiques of the code. Let’s hope that all parties rapidly converge to code they are happy with and merge it in!

                                                              1. 30

                                                                I enjoyed the author’s previous series of articles on C++, but I found this one pretty vacuous. I think my only advice to readers of this article would be to make up your own mind about which languages to learn and use, or find some other source to help you make up your mind. You very well might wind up agreeing with the OP:

                                                                Programmers spend a lot of time fighting the borrow checker and other language rules in order to placate the compiler that their code really is safe.

                                                                But it is not true for a lot of people writing Rust, myself included. Don’t take the above as a fact that must be true. Cognitive overheads come in many shapes and sizes, and not all of them are equal for all people.

                                                                A better version of this article might have went out and collected evidence, such as examples of actual work done or experience reports or a real comparison of something. It would have been a lot more work, but it wouldn’t have been vacuous and might have actually helped someone answer the question posed by the OP.

                                                                Both Go and Rust decided to special case their map implementations.

                                                                Rust did not special case its “map implementation.” Rust, the language, doesn’t have a map.

                                                                1. 16

                                                                  Hi burntsushi - sorry you did not like it. I spent months before this article asking Rust developers about their experiences where I concentrated on people actually shipping code. I found a lot of frustration among the production programmers, less so among the people who enjoy challenging puzzles. They mostly like the constraints and in fact find it rewarding to fit their code within them. I did not write this sentence without making sure it at least reflected the experience of a lot of people.

                                                                  1. 20

                                                                    I would expect an article on the experience reports of production users to have quite a bit of nuance, but your article is mostly written in a binary style without much room for nuance at all. This does not reflect my understanding of reality at all—not just with Rust but with anything. So it’s kind of hard for me to trust that your characterizations are actually useful.

                                                                    I realize we’re probably at an impasse here and there’s nothing to be done. Personally, I think the style of article you were trying to write is incredibly hard to do so successfully. But there are some pretty glaring errors here, of which lack of nuance and actual evidence are the biggest ones. There’s a lot of certainty expressed in this article on your behalf, which makes me extremely skeptical by nature.

                                                                    (FWIW, I like Rust. I ship Rust code in production, at both my job and in open source. And I am not a huge fan of puzzles, much to the frustration of my wife, who loves them.)

                                                                    1. 4

                                                                      I just wanted to say I thought your article was excellent and well reasoned. A lot of people here seem to find your points controversial but as someone who programs C++ for food, Go for fun and Rust out of interest I thought your assessment was fair.

                                                                      Lobsters (and Hacker News) seem to be very favourable to Rust at the moment and that’s fine. Rust has a lot to offer. However my experience has been similar to yours: the Rust community can sometimes be tiresome and Rust itself can involve a lot of “wrestling with the compiler” as Jonathan Turner himself said. Rust also provides some amazing memory safety features which I think are a great contribution so there are pluses and minuses.

                                                                      Language design is all about trade-offs and I think it’s up to us all to decide what we value in a language. The “one language fits all” evangelists seem to be ignoring that every language has strong points and weak points. There’s no one true language and there never can be since each of the hundreds of language design decisions involved in designing a language sacrifices one benefit in favour of another. It’s all about the trade-offs, and that’s why each language has its place in the world.

                                                                      1. 10

                                                                        I found the article unreasonable because I disagree on two facts: that you can write safe C (and C++), and that you can’t write Rust with fun. Interpreted reasonably (so for example, excluding formally verified C in seL4, etc.), it seems to me people are demonstrably incapable of writing safe C (and C++), and people are demonstrably capable of writing Rust with fun. I am curious about your opinion of these two statements.

                                                                        1. 7

                                                                          I think you’re making a straw man argument here: he never said you can’t have fun with Rust. By changing his statement into an absolute you’ve changed the meaning. What he said was “Rust is not a particularly fun language to use (unless you like puzzles).” That’s obviously a subjective statement of his personal experience so it’s not something you can falsify. And he did say up front “I am very biased towards C++” so it’s not like he was pretending to be impartial or express anything other than his opinion here.

                                                                          Your other point “people are demonstrably incapable writing safe C” is similarly plagued by absolute phrasing. People have demonstrably used unsafe constructs in Rust and created memory safety bugs so if we’re living in a world of such absolute statements then you’d have to admit that the exact same statement applies to Rust.

                                                                          A much more moderate reality is that Rust helps somewhat with one particular class of bugs - which is great. It doesn’t entirely fix the problem because unsafe access is still needed for some things. C++ from C++11 onwards also solves quite a lot (but not all) of the same memory safety issues as long as you choose to avoid the unsafe constructs, just like in Rust.

                                                                          An alternative statement of “people can choose to write safe Rust by avoiding unsafe constructs” is probably matched these days with “people can choose to write safe C++17 by avoiding unsafe constructs”… And that’s pretty much what any decent C++ shop is doing these days.

                                                                          1. 5

                                                                            somewhat with one particular class of bugs

                                                                            It helps with several types of bugs that often lead to crashes or code injections in C. We call the collective result of addressing them “memory safety.” The extra ability to prevent classes of temporal errors… easy-to-create, hard-to-find errors in other languages… without a GC was major development. Saying “one class” makes it seem like Rust is knocking out one type of bug instead of piles of them that regularly hit C programs written by experienced coders.

                                                                            An alternative statement of “people can choose to write safe Rust by avoiding unsafe constructs” is probably matched these days with “people can choose to write safe C++17 by avoiding unsafe constructs”

                                                                            Maybe. I’m not familiar with C++17 enough to know. I know C++ was built on top of unsafe language with Rust designed ground-up to be safe-as-possible by default. I caution people to look very carefully for ways to do C++17 unsafely before thinking it’s equivalent to what safe Rust is doing.

                                                                    2. 13

                                                                      I agree wholeheartedly. Not sure who the target survey group was for Rust but I’d be interested to better understand the questions posed.

                                                                      Having written a pretty large amount of Rust that now runs in production on some pretty big systems, I don’t find I’m “fighting” the compiler. You might fight it a bit at the beginning in the sense that you’re learning a new language and a new way of thinking. This is much like learning to use Haskell. It isn’t a good or bad thing, it’s simply a different thing.

                                                                      For context for the author - I’ve got 10 years of professional C++ experience at a large software engineering company. Unless you have a considerable amount of legacy C++ to integrate with or an esoteric platform to support, I really don’t see a reason to start a new project in C++. The number of times Rust has saved my bacon in catching a subtle cross-thread variable sharing issue or enforcing some strong requirements around the borrow checker have saved me many hours of debugging.

                                                                      1. 0

                                                                        I really don’t see a reason to start a new project in C++.

                                                                        Here’s one: there’s simply not enough lines of Rust code running in production to convince me to write a big project in it right now. v1.0 was released 3 or 4 years ago; C++ in 1983 or something. I believe you when you tell me Rust solves most memory-safety issues, but there’s a lot more to a language than that. Rust has a lot to prove (and I truly hope that it will, one day).

                                                                        1. 2

                                                                          I got convinced when Rust in Firefox shipped. My use case is Windows GUI application, and if Firefox is okay with Rust, so is my use case. I agree I too would be uncertain if I am doing, say, embedded development.

                                                                          1. 2

                                                                            That’s fair. To flip that, there’s more than enough lines of C++ running in production and plenty I’ve had to debug that convinces me to never write another line again.

                                                                            People have different levels of comfort for sure. I’m just done with C++.

                                                                      1. 0

                                                                        I’d imagine that the reason for GNU cat not using splice is because of portability (POSIX). Remember GNU cat wants to support different OS’es. Splice being a Linux specific feature would break this portability.

                                                                        1. 5

                                                                          Not really. GNU cp takes advantage of Linux-only FICLONE (copy-on-write file cloning) feature when available. GNU cat could do the same.

                                                                        1. 1

                                                                          Where’d we get this trend of libraries self-described as “minimal”? Is there even a definition of what that means? If a library exposes 100 functions, but they’re all used, is that “minimal”? Wouldn’t it be better to have a library described as “Everything you need to solve X without filling in the gaps yourself”? Reminds me of “light” food… after all of human history desperately looking for calories, suddenly having *less” calories is the main selling point – “fat free half and half” being the worst example.

                                                                          1. 7

                                                                            Code is different from food. Code is liability.

                                                                            1. 3

                                                                              There is also an explanation in the email on why it is useful to have a minimal crypto library in the kernel. In short, you mostly don’t need flexible APIs when in kernel. That might be different in userland.

                                                                            1. 12

                                                                              Another surprise: Rust’s std::fs::copy does in-kernel copy when possible, using copy_file_range syscall on Linux.

                                                                              1. 9

                                                                                I’m not as involved as I used to be, but I’m still on the core team, so feel free to ask me questions if you’ve got any.

                                                                                1. 3

                                                                                  Would you recommend Factor for production use given that it seems to be reaching a sort of plateau in support and community?

                                                                                  It’s a beautiful language, by the way. Thank you for your work.

                                                                                  1. 5

                                                                                    I have Factor running in production. Although I don’t really maintain the web app much - it just ticks along - Factor runs tinyvid.tv and has for the past few years. I originally wrote it to test HTML 5 video implementations in browsers back when I worked on the Firefox implementation of video.

                                                                                    1. 5

                                                                                      As always, it depends on what you’re doing—I’d definitely be nervous if you told me you were shoving Factor into an automobile, for example—but Factor the VM and Factor the language are both quite stable and reliable. On top of doublec’s comment, the main Factor website runs Factor (and its code is distributed as part of Factor itself for your perusal), and it’s been quite stable. (We do occasionally have to log in and kick either Factor or nginx, but it’s more common that the box needs to be rebooted for kernel updates.) I likewise ran most of my own stuff on Factor for a very long time, including some…maybe not mission-critical, but mission-important internal tooling at Fog Creek. And finally, we know others in the community who are building real-world things with Factor, including a backup/mirroring tool which I believe is being written for commercial sale.

                                                                                      The two main pain-points I tend to hit when using Factor in prod are that I need a vocabulary no one has written, or that I need to take an existing vocabulary in a new direction and have to fix/extend it myself. Examples are our previous lack of libsodium bindings (since added by another contributor) and our ORM lacking foreign key support (not a huge deal, just annoying). Both of these classes of issues are increasingly rare, but if you live in a world where everything’s just a dependency away, you’ll need to be ready for a bit of a change.

                                                                                      You can take a look at our current vocab list if you’re curious whether either of the above issues would impact anything in particular you have in mind.

                                                                                    2. 1

                                                                                      What would you say is Factor’s best application domain, the kind of problem it solves best? I met Slava many years ago when he was presenting early versions of Factor to a local Lisp UG, and am curious to see where the language fits now, both in theory and practice.

                                                                                      1. 4

                                                                                        My non-breezy answer is “anything you enjoy using it for.” There are vocabularies for all kinds of things, ranging from 3D sound to web servers to building GUIs to command-line scripts to encryption libraries to dozens of other things. Most of those were written because people were trying to do something that needed a library, so they wrote one. I think the breadth of subjects covered speaks well to the flexibility of the language.

                                                                                        That all said, there are two main areas where I think Factor really excels. The first is when I’m not really sure how to approach something. Factor’s interactive development environment is right up there with Smalltalk and the better Common Lisps, so it’s absolutely wonderful for exploring systems, poking around, and iterating on various approaches until you find one that actually seems to fit the problem domain. In that capacity, I frequently use it for reverse-engineering/working with binary data streams, exploring web APIs, playing with new data structures/exploring what high-level design seems likely to yield good real-world performance, and so on.

                                                                                        The second area I think Factor excels is DSLs. Factor’s syntax is almost ridiculously flexible, to the point that we’ve chatted on and off about making the syntax extension points a bit more uniform. (I believe this branch is the current experimental dive in that direction.) But that flexibility means that you can trivially extend the language to handle whatever you need to. Two silly/extreme examples of that would be Smalltalk and our deprecated alternative Lisp syntax (both done as libraries!), but two real examples would be regular expressions, which are done as just a normal library, despite having full syntax support, or strongly typed Factor, which again is done at the library level, not the language level. I have some code lying around somewhere where I needed to draft up an elaborate state machine, and I quickly realized the best path forward was to write a little DSL so I could just describe the state machine directly. So that’s exactly what I did. Lisps can do that, but few other languages can.

                                                                                      2. 1

                                                                                        Were native threads added in this release, or are there plans to? And did anything ever come to fruition with the tree shaker that Slava was working on way back when?

                                                                                        Major props on the release. It’s really nice to see the language survive Slava disappearing into Google.

                                                                                        1. 5

                                                                                          The threads are still green threads, if that’s what you’re asking, but we’ve got a really solid IPC story (around mailboxes, pattern matching, Erlang-style message passing, etc.), so it’s not a big deal to fire up a VM per meaningful parallel task and kick objects back and forth when you genuinely need to.

                                                                                          In terms of future directions, I don’t know we’ve got anything concrete. What I’d like to do is to make sure the VM is reentrant, allow launching multiple VMs in the same address space, and then make the IPC style more efficient. That’d make it a lot easier to keep multithreaded code safe while allowing real use of multiple cores. But that’s just an idea right now; we’ve not done anything concrete that direction, as far as I know.

                                                                                          1. 1

                                                                                            Really off-topic, but isn’t Slava at Apple?

                                                                                            1. 1

                                                                                              He is now. Works on Swift.

                                                                                          2. 1

                                                                                            Where does the core factor team typically communicate these days? #concatenative on freenode seems kinda dead these days. Is there a mailing list, or on the yahoo group?

                                                                                          1. 28

                                                                                            Possibly unpopular opinions (and a large block of text) incoming:

                                                                                            C++, Go, Swift, D and Rust all fail to adequately replace C for me. When given the choice, I would likely choose to just stick with C (for the moment; I’ll talk about what I’m considering at the end).

                                                                                            C++ has so much historical baggage and issues, it’s already an immediate turn-off. More than that, it’s explicitly understood that you should carve out a subset of C++ to use as your language because trying to use the whole thing is a mess of sadness (given that it’s massive at this point). I appreciate the goal of zero-cost abstraction and having pleasant defaults in the standard library, but there are just too many problems for me to take it as a serious choice. Plus, I still have to deal with much of the unfortunate UB from C (not all of it, and honestly, I don’t mind UB in some cases; but a lot of the cases of UB in C that just make no reasonable sense come across to C++). It should be noted that I do still consider C++ occasionally in a C-with-templates style, but it’s still definitely not my preference.

                                                                                            Despite how often people place it here, I do not believe Go belongs in this group of candidates The garbage collection alone makes it unfit for systems programming. I see Go as a very reasonable choice to replace Java (but I don’t use Java whenever I have the choice, so I might not be the best person to ask). There are many other parts of this language that rub me the wrong way, but mostly, I just think it’s not a good systems language (but is instead a great intro language for higher-level stuff).

                                                                                            Swift is really easy to rule out: It’s not cross-platform. Even if it were, it has all sorts of terrible issues (have they fixed the massive compile times yet?) that make it a no-go.

                                                                                            D, as far as I can tell, manages to be C++ without the warts in a really lovely way. Having said that, it seems like we’re talking about good replacements for C, not C++, and D just doesn’t cut it for me. GC by-default (being able to turn that off is good, but I’ll still have to do it every time), keeping name mangling by-default, etc. -betterC helps with some of this, but at that point, there’s just not enough reason for me to switch (especially with all the weirdness of there being two de facto standard libraries from different organizations, one of which I think is still closed-source? sounds like I might need to take another look at D; though, again, its emulation of C++ still suggests to me that it won’t quite cut it).

                                                                                            Rust is the only language in this list that I think is actually a reasonable contender. Sadly, it still bites a lot of these issues: names are still mangled by-default, the generated binaries are huge (I’m still a little bugged that C’s hello-world with glibc dynamically links to 6KB), et al.

                                                                                            But more than all of these things I’ve listed, the problems I have with these languages is that they all have a pretty big agenda (to borrow a term from Jon Blow). They all (aside from C++ which has wandered in the desert for many years) have pretty specific goals with how they are designed to try and carve out their ideal of what programming should be instead of providing tools that allow for people to build what they need.

                                                                                            So, as for languages that I think might (someday, not soon really) actually replace C (for me):

                                                                                            Zig strikes a balance between C (plus compile-time execution to replace the preprocessor) and LLVM IR internals which allow for incredibly fine-grained control (Hello arbitrarily-sized, fixed-width integers, how are you doing?). It also manages to have the best C interop story I have ever seen in a language so far (you can import from C header files no problem, and zig libraries can have their code called from C also no problem; astounding).

                                                                                            Myr is still really new (so is Zig really), and has a lot left to figure out (e.g., its C interop story is not quite so nice yet). However, it manages to be incredibly simple and terse for a braced language. My guess is that, in the long run, myr will actually replace shell languages for me, but not C.

                                                                                            Jai looks incredibly cool and embraces a lot of what I’ve mentioned above in that it is not a big agenda language, but provides a lot of really useful tools so that you can use what you make of it. However, it’s been in development for four years and there is no publicly available implementation (and I am worried that it may end up being closed-source when it is released, if ever). I’m hoping for the best here, but am expecting dark storms ahead.

                                                                                            Okay, sorry for the massive post; let me just wrap up a few things. I do not mean to imply with this post that any of the languages above are inherently bad or wrong, only that they do not meet my expectations and needs in replacing C. For a brief sampling of languages that I love which suffer from all the problems I mentioned above and more, see here:

                                                                                            • Haskell and Idris, but really Agda
                                                                                            • Ada
                                                                                            • Lua
                                                                                            • APL (specifically, the unicode variants)
                                                                                            • Pony

                                                                                            They are all great and have brilliant ideas; they’re just not good for replacing C. :)

                                                                                            Now then, I’ll leave you all to it. :)

                                                                                            1. 15

                                                                                              (especially with all the weirdness of there being two de facto standard libraries from different organizations, one of which I think is still closed-source?)

                                                                                              That was resolved a few years ago. D just has one stdlib, it’s fairly comprehensive, and keeps getting better with each release.

                                                                                              1. 12

                                                                                                a few years ago

                                                                                                a bit of an understatement! The competing library was dropped in 2007.

                                                                                              2. 10

                                                                                                Despite how often people place it here, I do not believe Go belongs in this group of candidates The garbage collection alone makes it unfit for systems programming. I see Go as a very reasonable choice to replace Java (but I don’t use Java whenever I have the choice, so I might not be the best person to ask). There are many other parts of this language that rub me the wrong way, but mostly, I just think it’s not a good systems language (but is instead a great intro language for higher-level stuff).

                                                                                                Agreed with this. Go is my go-to when I need to introduce dependencies to a Python script (and thus fuck with pip --user or virtualenv or blah blah blah) for high level glue code between various systems (e.g. AWS APIs, etc.)

                                                                                                I think there’s a reason Go is dominating the operations/devops tooling world - benefits of static compilation, high level, easy to write.

                                                                                                Look at the amount of hacks Docker needs to do things like reexec etc. to work properly in Go, that would be trivial to do in C.

                                                                                                1. 3

                                                                                                  Note that Zig is x86-only at the moment. Check “Support Table” on Zig’s README.

                                                                                                  For that matter, Rust is x86-only too, if you want Tier-1 support.

                                                                                                  1. 3

                                                                                                    I’m a big d fan, but I agree that it’s the wrong thing to replace c. Betterc doesn’t really help in this respect, because it doesn’t address the root reason of why d is the wrong thing to replace c (which being that the language itself is big, not that the runtime or standard library are). Personally, I think zig is the future, but rust has a better shot at ‘making it’, and the most likely outcome is that c stays exactly where it currently is (which I’m okay with). I haven’t looked at myr (yet), and afaik isn’t jai targeted at game development? It might be used for systems programming, but I think it might not necessarily do well there.

                                                                                                    It also manages to have the best C interop story I have ever seen in a language so far (you can import from C header files no problem, and zig libraries can have their code called from C also no problem; astounding)

                                                                                                    I think nim does this, and d for sure does, with d++ (I think this may also help with the c++ emulation? Also, I’m not sure why you’re knocking it for its lack of quality c++ emulation when it’s afaik the only language that does even a mediocre job at c++).

                                                                                                    1. 1

                                                                                                      I agree!

                                                                                                      As for knocking D for emulating C++, I did not mean to suggest that doing so is a count against D as a language, but rather just as a count against replacing C. I already ruled out C++, if a given language is pretty close to C++, it’s probably also going to be ruled out.

                                                                                                      It’s been a long time since I looked at nim, but generating C code leaves a really poor taste in my mouth, especially because of some decisions made in the language design early on (again, I haven’t looked in a while, perhaps some of those are better now).

                                                                                                      As for Jai, yes it’s definitely targeted at game development; however, the more I look at it, the more it looks like it might be reasonable for a lot of other programming tasks. Again though, at the moment, it’s just vaporware, so I offer no guarantee on that point. :)

                                                                                                    2. 2

                                                                                                      However, it’s been in development for four years and there is no publicly available implementation

                                                                                                      I’m amazed that behind the project is Jonathan Blow, he is a legend programming original video games.

                                                                                                    1. 3

                                                                                                      Rust itself runs tests in CI on every pull request that are required to pass. For example, https://travis-ci.org/rust-lang/rust/builds/410084149

                                                                                                      I can see why in a project as young as Rust maintaining different distributions’ forked build and test scripts for the compiler could be prioritized lower than e.g. language-level improvements.

                                                                                                      1. 6

                                                                                                        Yes, Rust CI runs tests on x86_64. Hence lots of breakages on other Debian architectures.

                                                                                                        I agree with you on the priority, but I am of the opinion that you can’t have it both ways. Either Rust should address test failures on other architectures, or Rust should stop claiming C level portability. Rust portability is “almost” there, but not there yet because other architectures are not maintained well.

                                                                                                        1. 12

                                                                                                          Can you please point out where Rust “claims C level portability”?

                                                                                                          1. -3

                                                                                                            This is one of those things where it doesn’t matter what the “official” stance but what the popular interpretation of that stance is. Certainly a number of people are writing Rust replacements for old C bastions, like grep or the coreutils. This along with the RIIR meme spreads the idea that Rust is a viable replacement for C in all situations, including portability.

                                                                                                            If the RESF wants to be clearer about how Rust isn’t ready to replace C yet, they need to be clearer that it’s not ready instead of being silent on the point about portability claims and saying they never said that.

                                                                                                            1. 7

                                                                                                              This is one of those things where it doesn’t matter what the “official” stance but what the popular interpretation of that stance is. Certainly a number of people are writing Rust replacements for old C bastions, like grep or the coreutils. This along with the RIIR meme spreads the idea that Rust is a viable replacement for C in all situations, including portability.

                                                                                                              If the RESF wants to be clearer about how Rust isn’t ready to replace C yet, they need to be clearer that it’s not ready instead of being silent on the point about portability claims and saying they never said that.

                                                                                                              I realize you’re probably just going to go bitch about me on IRC again, but your comment smells like a load of bullshit to me. Rust’s supported platform list looks like a pretty good indicator to me of what the platform support looks like. In fact, it looks like the exact opposite of “silence.”

                                                                                                              saying they never said that.

                                                                                                              I actually didn’t say that. I asked where we claimed C level portability. If we were doing such a thing, I’d want to know about it so we can correct it. Which is exactly the thing you’re blabbering on about. But no. Instead, I get RESF thrown in my face.

                                                                                                              Lose, lose. Thanks for playing.

                                                                                                              1. -1

                                                                                                                Aha, I also see this:

                                                                                                                We do not demand that Rust run on “every possible platform”. It must eventually work without unnecessary compromises on widely-used hardware and software platforms.

                                                                                                                So I guess the current situation with failing tests is entirely intentional but not well-known. Well, it should be better known.

                                                                                                          2. 1

                                                                                                            I agree that Rust needs a better multi-architecture story - as someone who does embedded development, I’ll play with Rust but I’d be very wary of using it “for real” - but lack of serious support for non-x86 [EDIT: non-Windows/-Linux/-Mac] is pretty well-documented.

                                                                                                            [EDITed in response to sanxiyn’s clarification, thanks!]

                                                                                                            1. 1

                                                                                                              Rust Platform Support page is pretty clear. x86 is Tier-1, anything else is not.

                                                                                                        1. 6

                                                                                                          What are the actual benefits of compiling to wasm rather than JS? One drawback is that, at least for the near future, a wasm module has its own heap rather than participating in the garbage-collected heap of the JS engine. It’s also likely that wasm means a larger runtime footprint.

                                                                                                          1. 3

                                                                                                            Betting on future states of technology maybe?

                                                                                                            1. 1

                                                                                                              Garbage collection

                                                                                                              1. 1

                                                                                                                How is that a benefit? I would agree if compilation to WebAssembly avoids GC, but Grain seems to require GC anyway.

                                                                                                                1. 1

                                                                                                                  Yes, but you get to pick and ship the GC for your application.

                                                                                                              2. 1

                                                                                                                Fun? Experimentation?

                                                                                                                1. 0

                                                                                                                  I see no benefit. I said the same thing for Go WebAssembly backend; there is already GopherJS.

                                                                                                                1. 8

                                                                                                                  A bunch of Debian’s officially supported architectures appear on Rust’s supported platform list under the “Tier 2” heading, i.e. the upstream project doesn’t run tests on these platforms so it doesn’t make sense for Debian to run those tests either.

                                                                                                                  It would be nice if Debian ran tests for platforms in the intersection of their “officially supported” sets (basically x86 and x86_64 Linux), but I don’t know how flexible Debian packages can be in that regard.

                                                                                                                  1. 10

                                                                                                                    Debian still runs all the tests, they just don’t fail the build if tests fail any more. Another change is that Debian used to diligently report all test failures upstream, but they no longer do, because upstream doesn’t care. They now only report failures only if they have fixes as well.

                                                                                                                  1. 3

                                                                                                                    Based on reading all this stuff and using many package managers, including dep but not yet including vgo, it seems like there are two different things happening here.

                                                                                                                    First, major miscommunication between Go core and the dep committee. Like, disastrously major. Enough said.

                                                                                                                    Second, crucially different assumptions in the design. The dep folks seem to be coming from a concentrated study of existing reality, inelegant and unpleasant though it may be, and bringing in lessons learned in other communities. Russ seems to be coming from a position of deciding the way things “should” be and assuming the community will act accordingly. Which is totally the Go way of doing things!

                                                                                                                    If you’ve maintained a Rails project with 30 gems that work OK but haven’t had a maintainer for years, the assumption of a singular, very active library maintainer whose library just gets jettisoned by everyone if they misbehave doesn’t ring true. But the Go community, so far, seems different, so I’m willing to see how the experiment comes out over the next 10 years.

                                                                                                                    1. 2

                                                                                                                      It seems to me it is dep that is trying to be elegant, enforcing single major version constraint. Real world is inelegant so vgo considers multiple major versions support non-negotiable.

                                                                                                                      1. 1

                                                                                                                        That’s a good point…they’ve both tried to accommodate some real-world problems, while dismissing others. The vgo approach does seem more Go-y (Goful? Goesque?). The parallel with the Go regex library makes sense (can’t handle some languages that Perl regexes can, but never goes exponential, either).