[HN Gopher] Progress toward a GCC-based Rust compiler
       ___________________________________________________________________
        
       Progress toward a GCC-based Rust compiler
        
       Author : askl
       Score  : 231 points
       Date   : 2023-12-18 15:51 UTC (7 hours ago)
        
 (HTM) web link (lwn.net)
 (TXT) w3m dump (lwn.net)
        
       | vlovich123 wrote:
       | The claims in the article feel kinda weak as to the motivation.
       | 
       | > Cohen's EuroRust talk highlighted that one of the major reasons
       | gccrs is being developed is to be able to take advantage of GCC's
       | security plugins. There is a wide range of existing GCC plugins
       | that can aid in debugging, static analysis, or hardening; these
       | work on the GCC intermediate representation
       | 
       | > One more reason for gccrs to exist is Rust for Linux, the
       | initiative to add Rust support to the Linux kernel. Cohen said
       | the Linux kernel is a key motivator for the project because there
       | are a lot of kernel people who would prefer the kernel to be
       | compiled only by the GNU toolchain.
       | 
       | That explains why you'd want GCC as the backend but not why you
       | need a duplicate front end. I think it's a bad idea to have
       | multiple front ends and Rust should learn from the mistakes of
       | C++ which even with a standards body has to deal with a mess of
       | switches, differing levels of language support for each compiler
       | making cross-platform development harder, platform-specific
       | language bugs etc etc.
       | 
       | > A lot of care is being put into gccrs not becoming a "superset"
       | of Rust, as Cohen put it. The project wants to make sure that it
       | does not create a special "GNU Rust" language, but is trying
       | instead to replicate the output of rustc -- bugs, quirks, and
       | all. Both the Rust and GCC test suites are being used to
       | accomplish this.
       | 
       | In other words, I'd love gccrs folks to explain why their
       | approach is a better one than rustc_codegen_gcc considering the
       | latter is able to achieve this with far less effort and risk.
        
         | gkbrk wrote:
         | > Rust should learn from the mistakes of C++
         | 
         | Rust should learn from the mistakes of C++ and C, which are one
         | of the longest lasting, biggest impact, widely deployed
         | languages of all time?
         | 
         | It's confusing when people think language standards are bad,
         | and instead of saying this code is C99 or C++11, they like
         | saying "this code works with the Rustc binary / source code
         | with the SHA256 hash e49d560cd008344edf745b8052ef714b0759580889
         | 8c835f17f962a10012f964".
        
           | flooow wrote:
           | Or, y'know, "rustc 1.74.0" like a normal person.
        
             | gpm wrote:
             | And in the rare instances where you're using in-development
             | features "rust nightly-2023-12-18"
             | 
             | Literally the only reason to specify via a hash* would be
             | if you were using such a bleeding edge feature that it was
             | only merged in the last 48 hours or so and no nightly
             | versions had been cut.
             | 
             | *Or I suppose you don't trust the supply chain, and you
             | either aren't satisfied with or can't create tooling that
             | checks the hash against a lockfile, but then you have the
             | same problem with literally any other compiler for any
             | language.
        
               | rcxdude wrote:
               | Indeed. If I'm specifying a hash for anything I'm
               | definitely not leaving things up to the very, very wide
               | range of behaviours covered by the C and C++ standards.
        
             | legends2k wrote:
             | That's besides the point. Adhering to a language standard
             | is much clearer than specifying it by a language compiler's
             | version. Behaviour is documented in the former while one
             | has to observe the output of a binary (and hope that side
             | effects are understood with their full gravity).
        
               | estebank wrote:
               | But no-one writes code against the standard. We all write
               | code against the reality of the compiler(s) we use. If
               | there's a compiler bug, you either use a different
               | version, a different vendor, or we side step the code
               | triggering the issue. The spec only tells you that the
               | vendor might fix this in the future.
        
               | wongarsu wrote:
               | But barely anyone gets to write C++11. You write C++11
               | for MSVC2022, or C++11 that compiles with LLVM 15+ and
               | GCC 8+, and maybe MSVC if you invest a couple hours of
               | effort into it. That's really not that different from
               | saying you require a minimum compiler version of Rust
               | 1.74.0.
        
           | pornel wrote:
           | C and C++ are widely used _despite_ their language, compiler,
           | and build system fragmentation. Each platform /compiler combo
           | needs ifdefs and workarounds that have been done for so long
           | they're considered a normal thing (or people say MSVC and
           | others don't count, and C is just GCC+POSIX).
           | 
           | There's value in multiple implementations ensuring code isn't
           | bug-compatible, but at the same time in C and C++ there's
           | plenty of unnecessary differences and unspecified details due
           | to historical reasons, and the narrow scope of their specs.
        
             | gkbrk wrote:
             | Yes, that's how the story goes. Languages with specs are
             | widely deployed despite being fragmented and bad, not
             | because people find value in multiple implementations. Must
             | be a coincidence that C, C++, Javascript and C# and Java
             | all fall under this umbrella.
        
               | legobmw99 wrote:
               | Java and C# seem to have actually gotten the idea of
               | multiple implementations correct, in the sense that I
               | have never needed to worry about the specific runtime
               | being used as long as I get my language version correct.
               | I have basically never seen a C/C++ program of more than
               | a few hundred lines that doesn't include something like
               | #ifdef WIN32 ...
        
               | bluGill wrote:
               | Is there more than one Java implementation that is
               | usable? All I can find are obsolete products that never
               | got very far.
        
               | gkbrk wrote:
               | Here are a few Java implementations that I've used
               | recently.
               | 
               | - My Android phone
               | 
               | - OpenJDK on my laptop
               | 
               | - leJOS for a university robotics course to run on Lego
               | robots
               | 
               | - Smart cards, I have a couple in my wallet
               | 
               | Perhaps I'd call the Lego robot stuff obsolete, certainly
               | not the Android userspace or smart cards though.
        
               | vlovich123 wrote:
               | Your Android phone and the latest Java share very little
               | commonality. It only recently supports Java 11 which is 5
               | years old at this point. The other non-OpenJDK
               | implementations you mentioned are much more niche (I
               | imagine the smart cards run JavaCard which is still
               | probably going to be running an OpenJDK offshoot).
        
               | gkbrk wrote:
               | Who said anything about the latest Java. Since Java has
               | versioned specs, platform X can support one version, and
               | you can target it based on that information even if other
               | versions come out and get supported by other platforms.
               | 
               | For example C89 and C99 are pretty old, and modern C has
               | a lot that is different from them. But they still get
               | targeted and deployed, and enjoy a decent following.
               | Because even in 2024, you can write a new C89 compiler
               | and people's existing and new C89 code will compile on it
               | if you implement it right.
        
               | sunshowers wrote:
               | But as a developer I do want to use (some of) the latest
               | features as soon as they become available. That's why
               | most of my crates have an N-2 stable version policy.
        
               | vlovich123 wrote:
               | And since Rust does a release every 6 weeks, we're
               | talking a ~4 month lag. That's unheard of for C/C++.
        
               | pjmlp wrote:
               | Java 17 LTS is supported from Android 12 onwards.
               | 
               | PTC, Aicas, microEJ, OpenJ9, Azul, GraalVM are a couple
               | of alternative JVM implementations.
        
               | vlovich123 wrote:
               | Again. I'm not claiming that alternative implementations
               | don't exist, just that they're not particularly
               | common/popular compared with OpenJDK/Oracle (which is
               | largely the same codebase). Android is the only
               | alternative implementation with serious adoption and it
               | lags quite heavily.
               | 
               | BTW GraalVM is based on OpenJDK so I don't really
               | understand your point there. It's not a ground-up
               | reimplementation of the spec.
        
               | pjmlp wrote:
               | GraalVM uses another complete infrastructure, JIT and GC
               | compilers, which affect runtime execution, and existing
               | tooling.
               | 
               | Doesn't matter how popular they are, they exist because
               | there is a business need, and several people are willing
               | to pay for them, in some cases lots of money bags,
               | because they fulfill needs not available in OpenJDK.
        
               | hansjorg wrote:
               | Eclipse OpenJ9 (previously IBM J9) is in active
               | development and supports Java 21.
        
               | vintermann wrote:
               | Well, there's Android... and Unity, which as I recall is
               | stuck on an old version of C# and its own way of doing
               | things. I also had the interesting experience of working
               | with OSGI at work a couple of years.
        
               | bluGill wrote:
               | Or do languages get specs because they are widespread and
               | becoming fragmented? That clearly apples to C and C++ -
               | both were implemented first and then a formal spec was
               | written in response to fragmentation.
        
               | vlovich123 wrote:
               | C# has multiple compilers and runtimes? Mono used to be a
               | separate thing but if I recall correctly mono has been
               | adopted by MS & a lot merged between the two.
               | 
               | JavaScript itself is a very simple language with most of
               | the complexity living in disparate runtimes and that
               | there are multiple runtime implementations is a very real
               | problem requiring complex polyfills that age poorly that
               | are maintained by the community. For what it's worth
               | TypeScript has a single implementation and it's extremely
               | popular in this community.
               | 
               | Java is probably the "best" here but really there's still
               | only the Sun & OpenJDK implementations and the OpenJDK
               | and Oracle are basically the same if I recall correctly
               | with the main difference being the inclusion of
               | proprietary "enterprise" components that Oracle can
               | charge money for. There are other implementations of the
               | standard but they're much more niche (e.g. Azul systems).
               | A point against disparate implementations is how Java on
               | Android is now basically a fork & a different language
               | from modern-day Java (although I believe that's mostly
               | because of the Oracle lawsuit).
               | 
               | Python is widely deployed & CPython remains the version
               | that most people deploy. Forks find it difficult to keep
               | up with the changes (e.g. PyPy for the longest time
               | lagged quite badly although it seems like they're doing a
               | better job keeping up these days). The forks have
               | significantly less adoption than CPython though.
               | 
               | It seems unlikely that independent Rust front end
               | implementations will benefit it's popularity. Having GCC
               | code gen is valuable but integrating that behind the Rust
               | front-end sounds like a better idea and is way further
               | along. gccrs is targeting a 3 year old version of Rust
               | that still isn't complete while the GCC backend is being
               | used to successfully compile the Linux kernel. My bet is
               | that gccrs will end up closer to gcj because it is
               | difficult to keep up.
        
               | lioeters wrote:
               | > TypeScript has a single implementation
               | 
               | It's probably a matter of time until there's a TypeScript
               | compiler implemented in Rust. But the surface area of the
               | language is pretty big, and I imagine it will always lag
               | behind the official compiler.
               | 
               | > Forks find it difficult to keep up with the changes
               | 
               | That's interesting to think of multiple implementation of
               | a language as "forks" rather than spec-compliant
               | compilers and runtimes. But the problem remains the same,
               | the time and effort necessary to constantly keep up with
               | the reference implementation, the upstream.
        
               | vlovich123 wrote:
               | There's been plenty of attempts to implement TS in
               | another language or whatnot. They all struggle with
               | keeping up with the pace of change cause the team behind
               | TS is quite large. There was an effort to do a fairly
               | straight port into Rust which actually turned out quite
               | well, but then the "why" question comes up - the reason
               | would be to do better performance but improving
               | performance requires changing the design which a
               | transliteration approach can't give you & the more of the
               | design you change, the harder it is to keep up with
               | incoming changes putting you back at square 1. I think
               | Rust rewrites of TS compilers (as long as TS is seeing
               | substantial changes which it has been) will be worse than
               | PyPy which is basically a neat party trick without
               | serious adoption.
        
               | gkbrk wrote:
               | > C# has multiple compilers and runtimes?
               | 
               | Yes. Roslyn, Mono and some Mono-like thing from Unity to
               | compile it into C++.
               | 
               | > Mono used to be a separate thing
               | 
               | Mono is still a thing. The last commit was around 3
               | months ago.
               | 
               | > multiple runtime implementations is a very real problem
               | requiring complex polyfills
               | 
               | You can target a version of the spec and any
               | implementation that supports that version will run your
               | code. If you go off-spec, that's really on you, and if
               | the implementation has bugs, that's on the
               | implementation.
               | 
               | > TypeScript has a single implementation
               | 
               | esbuild can build typescript code. I use it instead of
               | tsc in my build pipeline, and only use tsc for type-
               | checking.
               | 
               | > [Typescript is] extremely popular in this community
               | 
               | esbuild is extremely popular in the JS/TS community too.
               | The second most-popular TS compiler probably.
               | 
               | > [Java has] only the Sun & OpenJDK implementations
               | 
               | That's not true. There are multiple JDKs and even more
               | JVMs.
               | 
               | > Java on Android is now basically a fork & a different
               | language from modern-day Java
               | 
               | Good thing Java has specs with multiple versions, so you
               | can target a version that is implemented by your target
               | platform and it will run on any implementation that
               | supports that version.
               | 
               | > Python is widely deployed & CPython remains the version
               | that most people deploy. > The forks have significantly
               | less adoption than CPython though.
               | 
               | That is because Python doesn't have a real spec or
               | standard, at least nothing solid compared to the other
               | languages with specs or standards.
               | 
               | > It seems unlikely that independent Rust front end
               | implementations will benefit it's popularity.
               | 
               | It seems unlikely that people working on an open-source
               | project will only have the popularity of another open-
               | source project in mind when they spend their time.
        
               | vlovich123 wrote:
               | > Yes. Roslyn, Mono and some Mono-like thing from Unity
               | to compile it into C++.
               | 
               | Roslyn is more like the next gen compiler and will be
               | included in Mono once it's ready to replace msc. I view
               | it as closer to polonius because it's an evolutionary
               | step to upgrade the previous compiler into a new
               | implementation. It's still a single reference
               | implementation.
               | 
               | > Mono is still a thing
               | 
               | I think you misunderstood my point. It had started as a
               | fork but then Microsoft adopted it by buying Xamarin.
               | It's not totally clear to me if it's actually a fork at
               | this point or if it's merged and shares a lot of code
               | with .NET core. I could be mistaken but Mono and .Net
               | core these days also share quite a bit of code.
               | 
               | > rebuild can build typescript code
               | 
               | Yes, there are plenty of transpilers because the language
               | is easy to desugar into JavaScript (intentionally so - TS
               | stopped accepting any language syntax extensions and
               | follows ES 1:1 now and all the development is in the
               | typing layer). That's very different from a forked
               | implementation of the type checker which is the real meat
               | of the TS language compiler.
               | 
               | > The second most popular TS compiler probably
               | 
               | It's a transpiler and not a compiler. If TS had
               | substantial language extensions on top of JS that it was
               | regularly adding, all these forks would be dead in the
               | water.
               | 
               | > That's not true. There are multiple JDKs and even more
               | JVMs
               | 
               | I meant to say they're the only ones with any meaningful
               | adoption. All the other JDKs and JVMs are much more niche
               | and often benefit from living in a niche that is often
               | behind on the adoption curve (i.e. still running Java 8
               | or something or are willing to stay on older Java
               | versions because there's some key benefit in the other
               | version that is operationally critical).
               | 
               | > Good thing Java has specs with multiple versions, so
               | that you can target a version...
               | 
               | Good for people implementing forks, less good for people
               | living within the ecosystem in terms of having to worry
               | about which version of the compiler to support with their
               | library. For what it's worth Rust also has language
               | versions but it's more like an LTS version of the
               | language whereas Java versions come out more frequently &
               | each implementation is on whatever year they wanted to
               | snapshot against.
        
               | Rohansi wrote:
               | FYI Mono has been shipping Roslyn as its C# compiler for
               | a few years now. Mono's C# compiler only fully supports
               | up to C# 6 while Roslyn supports C# 12, the latest
               | version.
               | 
               | Mono shares a lot of code with .NET (Core) but is mostly
               | limited to the standard libraries and compiler. Mono is
               | still its own separate implementation of the CLR
               | (runtime/"JVM") and supports much more platforms than
               | .NET (Core) today.
        
               | tester756 wrote:
               | >Yes. Roslyn, Mono and some Mono-like thing from Unity to
               | compile it into C++.
               | 
               | Mono has approx. 0.x% market share outside Unity. Also
               | Mono is used by .NET Core for Blazor WASM iirc.
               | 
               | Let's don't compare this scenario of sane world with the
               | mess that exists in C++ world.
        
           | ragnese wrote:
           | > It's confusing when people think language standards are
           | bad, and instead of saying this code is C99 or C++11, they
           | like saying "this code works with the Rustc binary / source
           | code with the SHA256 hash e49d560cd008344edf745b8052ef714b075
           | 95808898c835f17f962a10012f964".
           | 
           | I don't know if that's totally fair. I remember that it took
           | quite a while for C++ compilers to actually implement all of
           | C++11. So, it was totally normal at the time to change what
           | subset of C++11 we were using to appease whatever version of
           | GCC was in RHEL at the time.
        
             | staunton wrote:
             | Technically, no compiler ever implemented "all" of c++11...
             | You'd have to implement garbage collection, for example :D
        
               | the_why_of_y wrote:
               | Not to mention "export", which was in C++98 but only ever
               | supported by Comeau C++.
        
           | rcxdude wrote:
           | The long-lasting and widespread nature of C and C++ is _why_
           | their mistakes are the ones most worth learning from.
        
           | sophacles wrote:
           | > the longest lasting, biggest impact, widely deployed
           | languages of all time
           | 
           | Can be true at the same time as:
           | 
           | c and c++ have made mistakes, and have had issues as a result
           | of bad choices
           | 
           | The later should be learned from by any language in a place
           | to not make those same mistakes. We call this technological
           | progress, and its OK.
        
             | bluGill wrote:
             | C and C++ both learn from the mistakes of others too. Of
             | course as mature languages they have a lot they cannot
             | change. However when they do propose new features it is
             | common to look at what other languages have done. C++'s
             | thread model is better than Java's because they were able
             | to look at the things Java got wrong (in hindsight, those
             | choices looked good at the time to smart people - lets not
             | pick on Java for not predicting how modern hardware would
             | evolve in the future. Indeed it is possible in a few years
             | hardware will evolve differently again and C++'s thread
             | model will then be just as wrong despite me today calling
             | it good)
        
           | sunshowers wrote:
           | I think people generally specify their MSRVs as version
           | numbers for libraries, and often a pinned toolchain file for
           | applications. I haven't seen anyone use a hash for this,
           | though I'm sure I might have missed something.
           | 
           | I don't think language standards are "bad".
        
           | Guvante wrote:
           | That phrase doesn't mean what you think it is.
           | 
           | "Learn from the mistakes of X" doesn't mean X is bad, it
           | means X made mistakes.
        
         | bryanlarsen wrote:
         | > Rust should learn from the mistakes of C++
         | 
         | They are. You quoted them doing it, the care taken not to
         | become a superset. The problem with C/C++ stemmed from compiler
         | vendors competing with each other to be "better" than their
         | peers.
         | 
         | Multiple front ends of an implementation of a language usually
         | shakes out a bunch of bugs and misimplementations. That's the
         | primary benefit of having multiple front ends IMO.
        
           | delfinom wrote:
           | >The problem with C/C++ stemmed from compiler vendors
           | competing with each other to be "better" than their peers.
           | 
           | Yea but this is Linux and OSS. NIHisms are fucking rampant
           | everywhere.
           | 
           | I give it a year before gccrs announces a new "gnurs" mode
           | with language extensions.
        
             | saghm wrote:
             | I'd be surprised about this mostly because I can't imagine
             | anyone using gcc-specific Rust extensions. Not only does
             | rustc have an extraordinary amount of traction by being
             | basically the only choice up until this point, Rust doesn't
             | really have the reputation of moving slowly to adopt new
             | features; if anything, there's been as much skepticism
             | about new features added over the years as excitement. I
             | can honestly imagine more people adopting a Rust
             | implementation with a commitment _not_ to add new features
             | that are added to rustc than one that adds its own separate
             | features.
             | 
             | Even as someone who probably will never use gccrs, I think
             | having more than one implementation of Rust is a good thing
             | for the language (for all the usual reasons that get
             | cited). In the long term, I'd love for Rust to eventually
             | to be able to specify its semantics in a way that isn't
             | tied to rustc, which is a moving target and gets murky when
             | you consider implementation-specific bugs.
        
               | nequo wrote:
               | > Rust doesn't really have the reputation of moving
               | slowly to adopt new features
               | 
               | There are some exceptions to this. Although there are
               | possibly good reasons for such features moving slowly, a
               | competing compiler could popularize them before they are
               | stabilized in rustc. One example is generators[1] but
               | there's a longer list in The Unstable Book.[2]
               | 
               | [1] https://github.com/rust-lang/rust/issues/43122
               | 
               | [2] https://doc.rust-lang.org/stable/unstable-
               | book/language-feat...
        
               | estebank wrote:
               | Prevalent use of nightly Rust purely for specific
               | unstable features would do the same. It's been a while
               | since there has been a "must have" feature has kept
               | people confined to nightly, though.
        
               | Guvante wrote:
               | I feel like having a distinct implementation that is
               | unstable is more likely.
               | 
               | Stabilizing things from rustc is a recipe for disaster as
               | if rustc builds something new you are in a bad place.
        
             | Guvante wrote:
             | NIHI is usually "using product X is almost as hard (or
             | expensive )as building it"
             | 
             | Linux tends to shun unfree software which is a very
             | different take. Buy or build is roughly money vs time (aka
             | money). Software freedom is not the same thing.
             | 
             | Also why does software freedom lead to divergences?
             | Certainly GCC partook in the arms race around C++ but
             | recently they have been pretty good about aiming for full
             | standard support as the goal. (The exception being proposed
             | features but that is unavoidable when C++ prefers battle
             | tested proposals)
        
               | pjmlp wrote:
               | Actually one of the problems we are having with compilers
               | catching up with ISO is that since C++11, features aren't
               | battle tested, rather designed in paper or some special
               | compiler branch, and eventually adopted by everyone.
        
               | Guvante wrote:
               | Honestly depending on the feature that might be for the
               | best. If all three compilers have distinct on by default
               | divergent settings that would be terrible.
               | 
               | My point is outside of instances where everyone agrees
               | something has to change you need a compiler branch at the
               | minimum. This means the compiler you changed will get
               | that feature first.
               | 
               | Given it takes years to implement the full standard this
               | leads to divergence between the compilers in standards
               | compliance.
               | 
               | Honestly all totally workable but makes talking about
               | "standard C++" hard.
        
               | pjmlp wrote:
               | There are more than three compilers, and many of the
               | changes if done at all in an existing compiler, are a mix
               | between private branches and ongoing unstable features,
               | hardly battle tested as the first standards were, when
               | existing practice is what came into the standard.
        
         | neuromanser wrote:
         | > I think it's a bad idea to have multiple front ends and Rust
         | should learn from the mistakes of C++ which even with a
         | standards body has to deal with a mess of switches
         | 
         | I do not disagree, yet at the same time, having the same set of
         | switches across different languages is nice, too.
        
         | ndiddy wrote:
         | Having another Rust implementation allows for an "audit" to
         | help validate the Rust spec and get rid of any unspecified
         | behavior. It would also give users options. If I hit a compiler
         | bug in MSVC, I can file a report, switch to GCC and keep
         | working on my project until the bug is fixed. With Rust, that's
         | not currently possible.
        
           | VBprogrammer wrote:
           | I don't have a lot of experience in C or C++ but I wonder if
           | this ever works in practice for a non-trivial codebase? I'd
           | be really surprised if, without diligently committing to
           | maintaining compatibility with the two compilers, it was easy
           | to up sticks and move between them.
        
             | cozzyd wrote:
             | It's pretty easy to move between gcc/clang/icc for most
             | codebases. Though there are some useful features still that
             | are gcc only. (And probably some that are clang only,
             | though I pretty much only use gcc...)
        
             | logicchains wrote:
             | >I'd be really surprised if, without diligently committing
             | to maintaining compatibility with the two compilers, it was
             | easy to up sticks and move between them
             | 
             | Many places deliberately compile with multiple compilers as
             | part of the build/test pipeline, to benefit from more
             | compiler warnings, diagnostics etc.
        
             | jupp0r wrote:
             | There are lots of libraries that need to compile on a
             | variety of platforms (ie different versions of LLVM for
             | Android and MacOS, MSVC for Windows and GCC for some
             | embedded targets not well supported by LLVM).
        
             | ska wrote:
             | It works but you have to keep it at least "semi-active".
             | Some shops have CI services setup to cross compile etc.
             | already. Mainly I've seen this not as a tool to maintain a
             | "backup" but as a way to shake out bugs and keep non-
             | portable stuff from creeping into the codebase.
             | 
             | You could probably do most of it with conservative linting
             | and some in-house knowledge of portability issues, non-
             | standard compiler extensions, etc.
             | 
             | It's typically a _lot_ easier to do this for different
             | compiler, same target, than different targets.
        
             | Guvante wrote:
             | Our codebase works on all three, we compile on MSVC for
             | Windows, GCC for Linux, and Clang for Mac.
             | 
             | It isn't easy and honestly the idea of "just don't use MSVC
             | for a while" is strange to me. Sure you can compile with
             | any of them but almost certainly you are going to stick to
             | one for a given use case.
             | 
             | "This release is on a different compiler" isn't something
             | you do because of a bug. Instead your roll back a version
             | or avoid using the unsupported feature until a fix is
             | released.
             | 
             | The reason is as much as they are supposed to do the same
             | thing the reality is bugs are bugs, e.g. if you invoke
             | undefined behavior you will generally get consistent
             | results with a given compiler but all bets are off if you
             | swap. Similarly it is hard not to rely on implementation
             | defined behavior without building your own standard library
             | which specifically defines that behavior across compilers.
        
             | gpderetta wrote:
             | It is quite common. In most places I have worked we did GCC
             | and clang builds. Some did GCC/clang/msvc/ICC.
             | 
             | And of course plenty of OSS libraries support many
             | compilers even beyond the main three.
        
             | jandrewrogers wrote:
             | Many complex C++ codebases have full parallel CI pipelines
             | for GCC and LLVM. It encourages good code hygiene and
             | occasionally identifies bugs in the compiler toolchain.
             | 
             | If you are using intrinsics or other architecture-specific
             | features, there is a similar practice of requiring full CI
             | pipelines for at least two CPU architectures. Again, it
             | occasionally finds interesting bugs.
             | 
             | For systems I work on we usually have 4 CI pipelines for
             | the combo of GCC/LLVM and ARM/x86 for these purposes. It
             | costs a bit more but is generally worth it from a code
             | quality perspective.
        
               | izacus wrote:
               | Adding CI pipeline running compiles on MSVC was one of
               | the big shakeouts of undefined behaviour and bugs in our
               | C++ codebase - while making that compiler happy is
               | annoying if you come from Unixy land, it did force us to
               | shed quite a few bad habits and even find several bugs in
               | that endeavor.
               | 
               | (And then we could ship the product on Windows, so that
               | was nice.)
        
           | vlovich123 wrote:
           | The C++ spec regularly has all sorts of errata and
           | misdesigns. Not sure I buy this argument.
        
           | KolmogorovComp wrote:
           | Rust has currently no formal specification, so what would you
           | use as an arbiter?
           | 
           | Also the article says otherwise > The project wants to make
           | sure that it does not create a special "GNU Rust" language,
           | but is trying instead to replicate the output of rustc --
           | bugs, quirks, and all
        
             | lambda wrote:
             | You use the same process as for deciding if changes to
             | rustc are compliant or not; the judgement of the language
             | and compiler teams.
             | 
             | And running into these kinds of questions, both in a single
             | project that evolves over time (rustc) and a separate
             | project, help to feed information back into what you need
             | for a formal specification; which is something that is
             | being planned out. Having a second implementation can help
             | find these areas where you might need to be narrower or
             | broader in your specification, in order to clarify enough
             | for it to be implementable or broaden it enough to
             | accommodate reasonable implementation differences.
             | 
             | They are not trying to diverge in language implementation,
             | but there will always be simple compiler bugs, which may
             | crop up in one implementation but not another. For
             | instance, some LLVM optimization pass may miscompile some
             | code; gccrs wouldn't necessarily be trying to recreate that
             | exact bug. I think that "bugs, quirks, and all" really
             | means that they aren't trying to fix major limitations of
             | rustc, such as introducing a whole different borrow checker
             | model which might allow some programs that current rustc
             | does not. They're trying to fairly faithfully recreate the
             | language that rustc implements, even if some aspects might
             | be considered sub-optimal, but they aren't going to re-
             | implement every ICE and miscompilation, those are places
             | where there could be differences.
        
               | KolmogorovComp wrote:
               | I agree with you it has benefits, what I'm wondering
               | about is if not more bugs (though not the same ones)
               | would be fixed by contributing directly to rustc compared
               | to the massive effort of building a new compiler.
        
               | Narishma wrote:
               | It's about finding those bugs in the first place. Working
               | on a different implementation is one way of doing that.
        
           | slashdev wrote:
           | I hit a compiler bug in rust and downgraded it to an earlier
           | stable version. That's usually enough.
        
           | tester756 wrote:
           | >Having another Rust implementation allows for an "audit" to
           | help validate the Rust spec and get rid of any unspecified
           | behavior. It would also give users options. If I hit a
           | compiler bug in MSVC, I can file a report, switch to GCC and
           | keep working on my project until the bug is fixed. With Rust,
           | that's not currently possible.
           | 
           | Theory is cool, but in practice other compiler has its own
           | quirks too
           | 
           | How about having one compiler which is used by all
           | developers, which increases chances of bugs getting caught
           | faster and fixed faster meanwhile you just use workaround?
        
           | nindalf wrote:
           | Your sentiment is a commonly expressed one, but not usually
           | by people who have adopted Rust. It's usually Clang/MSVC/GCC
           | users who have decided this is the optimal flow and want to
           | replicate it in all future codebases they work in, regardless
           | of language.
           | 
           | In reality if you hit a compiler bug in Rust or Go (or any
           | other language with one main impl like Python, Ruby...) you
           | would file a report and do one of two things - downgrade the
           | compiler (if it's an option) or write the code a different
           | way. Compiler bugs in these languages are rare enough that
           | this approach works well.
           | 
           | That said, for people who are really keen on a spec, there is
           | one being worked on (https://blog.rust-lang.org/inside-
           | rust/2023/11/15/spec-visio...).
           | 
           | But this GCCRS effort doesn't get you any closer to your
           | ideal C/C++ style workflow because they are committing to
           | matching the semantics of the main compiler exactly. Bugs and
           | all. And that's the way it should be. Today Rust is
           | substantially simpler because every project is built exactly
           | the same way - cargo build. The ecosystem becomes worse if I
           | have to install a different toolchain and learn a different
           | build system with a different compiler for every new project
           | I interact with.
        
         | rhdunn wrote:
         | So by that definition you would only want one web browser as
         | there are currently multiple HTML+CSS+JavaScript "front ends".
         | In which case, you end up with a Chrome monopoly where Google
         | gets to decide what the web looks like!
        
           | mtrower wrote:
           | A goodly number of people appear to want just that.
           | 
           | I don't agree, mind you, but someone reading your comment
           | with this mindset will probably be reinforced rather than
           | swayed.
        
         | bayindirh wrote:
         | The main motivation is having a GPL licensed, independently
         | developed complete Rust compiler which is not dependent on
         | LLVM.
        
           | cozzyd wrote:
           | Yes this is important. Otherwise in the future you'll see
           | proprietary rust distributions for various devices or with
           | specific features
        
             | GrumpySloth wrote:
             | C++ and Java, which have many implementations, also have
             | proprietary distributions, see Apple's fork of Clang,
             | Microsoft's MSVC, Azul VM, Jamaica VM, ...
             | 
             | And some of them are pretty nice. Life is good.
        
               | bayindirh wrote:
               | When you don't have a GPL implementation, the only good
               | implementation might be closed source fork of the LLVM
               | version, effectively forking Rust into Rust and Rustium.
               | Will life be good then?
        
               | sunshowers wrote:
               | This seems like an astoundingly remote possibility.
        
               | bayindirh wrote:
               | Given the companies backing LLVM and the surrounding
               | ecosystem, I think it's an astounding possibility.
               | 
               | Companies love permissive licenses for a reason.
        
             | swsieber wrote:
             | You'll still see those though? A fully GPL implementation
             | doesn't prevent the current implementation from being used
             | in a proprietary rust distribution... unless of course the
             | GPL implementation were to fork from the current
             | implementation... which is the main thing people against
             | the GPL implementation are worried about
        
               | bayindirh wrote:
               | I think, the GCCRS project takes the rustc implementation
               | as reference, and targets 100% compatibility with them as
               | a fundamental goal and requirement. There is no schism
               | involved.
        
         | mhh__ wrote:
         | There are arguments for and against but for colour: D in GCC
         | uses a shared frontend, which means it's not hard to maintain
         | the frontend aspects -- but that also means the frontend is a
         | monoculture which is not very healthy at the moment.
         | 
         | If someone will pay you to do it I would do a new frontend --
         | it's surprisingly little work to get something you can
         | bootstrap with.
        
           | p0nce wrote:
           | Having maintained both C++ and D for different compilers,
           | it's way easier to do it in D since the front-end features
           | are the same (modulo builtins) and the stdlib is 99% the
           | same.
        
         | edelsohn wrote:
         | Based on that logic, why did the LLVM community develop Clang,
         | Clang++, libc++, etc. instead of continuing with DragonEgg?
         | There already were GCC, G++, libstdc++ , as well as EDG C++
         | front-end.
         | 
         | GCC, Clang, MSVC, and other compilers complement each other,
         | serve different purposes, and serve different markets. They
         | also ensure that the language is robust and conforms to a
         | specification, not whatever quirks a single implementation
         | happens to provide. And multiple implementations avoids the
         | dangers of relying on a single implementation, which could have
         | future problems with security, governance, etc.
         | 
         | The GNU Toolchain Project, the LLVM Project, the Rust project
         | all have experienced issues and it's good to not rely on a
         | single point of failure. Redundancy and anti-fragility is your
         | friend.
        
           | vlovich123 wrote:
           | LLVM saw growth for a number of reasons, but nothing to do
           | because it was actually beneficial for the C++ ecosystem:
           | 
           | * A C++ codebase. At the time GCC was written in C which
           | slowed development (it's now a C++ codebase adopting the
           | lessons LLVM provided)
           | 
           | * It had a friendlier license than GCC which switched to
           | GPLv3 and thus Google & Apple moved their compiler teams to
           | work on LLVM over time.
           | 
           | * Libc++ is a combination of friendlier license + avoiding
           | the hot garbage that was (maybe still is?) libstdc++ (e.g.
           | there were incompatible design decisions in libstdc++ that
           | inhibited implementing the C++ spec like SSO). There were
           | also build time improvements if I recall correctly.
           | 
           | * LLVM provided a fresher architecture which made it more
           | convenient as a research platform (indeed most compiler
           | academics target LLVM rather than GCC for new research
           | ideas).
           | 
           | Basically, the reason LLVM was invested in instead of
           | DragonEgg was a mixture of license & the GCC community being
           | quite difficult to work with causing huge amounts of
           | investments by industry and academia into LLVM. Once those
           | projects took off, even after GCC fixed their community
           | issues they still had the license problem and the LLVM
           | community was strongly independent.
           | 
           | Compilers don't typically generate security issues so that's
           | not a problem. There are questions of governance but due to
           | the permissive license that Rust uses governance problems can
           | be rectified by forking without building a new compiler from
           | the ground up (e.g. what happened with NodeJS until the
           | governance issues were resolved and the fork reabsorbed).
           | 
           | It's funny you mention the different C++ compilers consider
           | that Clang is well on its way of becoming the dominant
           | compiler. It's already targeting to be a full drop-in
           | replacement for MSVC and it's fully capable of replacing GCC
           | on Linux unless you're on a rarer platform where GCC has a
           | bit richer history in the embedded space). I think over the
           | long term GCC is likely to die and it's entirely possible
           | that MSVC will abandon their in-house and instead use clang
           | (same as they did abandoning IE & adopting Blink). It will be
           | interesting to see if ICC starts porting their optimizations
           | to LLVM and making them freely available - I can't imagine
           | ICC licenses really bring in enough money to justify things.
        
       | rayiner wrote:
       | I'm surprised at the negative reaction to GCC-RS. If a language
       | doesn't have multiple implementations, it's a pretty sad excuse
       | for a language.
        
         | sylware wrote:
         | The problem is on the long run: syntax stability, avoiding
         | feature creeps with extensions/attributes, like we actually
         | have with C (c++ is beyond saving due to its absurd and
         | grotesque complexity).
         | 
         | Without that, you won't have real-life alternatives.
        
           | ajross wrote:
           | > avoiding feature creeps with extensions/attributes,
           | 
           | That seems like a purely semantic argument? Rust is adding
           | features _extremely_ rapidly! You 're just saying it's
           | "development" if it's done by one entity but "creep" if it's
           | done by someone else?
        
         | PoignardAzur wrote:
         | > _I'm surprised at the negative reaction to GCC-RS. If a
         | language doesn't have multiple implementations, it's a pretty
         | sad excuse for a language._
         | 
         | That used to be the common wisdom (especially because of
         | C/C++), but it's a lot more debated these days.
         | 
         | The consensus in the Rust community is that the current
         | situation (one canonical-by-definition compiler, lots of
         | documentation, a minimal spec for safety-critical industries,
         | and specs for some modular sub-parts) get most of the
         | advantages of multiple implementations without the drawbacks.
        
           | not2b wrote:
           | I think that the people who are debating it are missing some
           | things. It often happens that only when a second
           | implementation is attempted, unspecified holes in the
           | documentation are exposed and standards are tightened up. Any
           | differences in the two compilers will either mean that
           | there's a bug in the new implementation (most likely), a bug
           | or unclear issue in the documentation, or a bug in the mature
           | implementation (it happens).
           | 
           | And no, the official compiler isn't canonical by definition.
           | If it were, it would mean it has no bugs, and if there's a
           | crash or a wrong result that's what the language is supposed
           | to do.
        
             | vlovich123 wrote:
             | Everything in engineering is trade offs. A single front end
             | ends up in a stronger position for the _community_ (i.e.
             | the users of the language) because bug reports are easier
             | (only one project to report them to), collaboration is
             | easier /simpler for OSS maintainers (no issues where "crate
             | foo works fine on rustc but doesn't on gccrs" to
             | triage/maintain), and language features come quicker (no
             | need to synchronize/debate with other implementations). The
             | downsides of underspecification are much smaller by
             | comparison. As far as documentation goes that's a red
             | herring because gccrs is reusing the single standard
             | library implementation which means that any documentation
             | issues would still exist (I don't think I've even once
             | needed to lookup documentation for the compiler & language
             | docs issues would be shared as well since rustc in this
             | model still remains the canonical ground truth).
        
               | not2b wrote:
               | At this point, gccrs is quite immature, so you can simply
               | ignore it. If we get to the point where its quality is
               | good enough, this will change, but the likelihood is that
               | any problems found will result in improvements to
               | documentation (if something is underspecified). There
               | could also be optimization bugs in LLVM that aren't
               | present in GCC, so we could find bugs in rustc that
               | aren't in gccrs at some point, but I think that will only
               | be significant if gccrs greatly improves.
               | 
               | For now, anyone who finds that "crate foo works fine on
               | rustc but doesn't on gccrs" can just report a bug to
               | gccrs.
        
               | vlovich123 wrote:
               | I'm not saying that gccrs contributors should stop. If
               | they want to invest their time & energy into it kudos. I
               | happen to think the costs outweighs the benefits but
               | you're right that I can just ignore it to no ill effect
               | right now. Where I would caution that though is when the
               | Rust project starts needing to making accommodations to
               | help gccrs (which is something described in the article).
               | It's possible that some accommodations help Rust anyway /
               | there's no harm, but it's also useful to be mindful that
               | more & more of these accommodations can start to have a
               | negative cost over time & thus impact Rust as a whole &
               | these costs are obnoxiously hard to quantify and because
               | people like to get along there's a general preference to
               | be more accommodating. That's the real danger that gccrs
               | poses and the intangible benefits that you lay out are
               | likely not that significant in the long term compared
               | with the cost to build gccrs / modify Rust to accommodate
               | gccrs. Of course, we're just arguing over opinions since
               | it's so hard to quantify any of this.
        
           | binary132 wrote:
           | sounds like cope for the fact that there is not a good spec
           | (a "Standard", perhaps?) tbh
        
           | Longlius wrote:
           | >it's a lot more debated these days
           | 
           | By who specifically? I only ever see arguments against
           | standardization and multiple implementations from the Rust
           | community.
        
         | duped wrote:
         | Just personally I can see the virtue of multiple/different
         | implementations. But the issue is building on top of gcc. The
         | GNU toolchain is a dumpster fire, and I legitimately don't know
         | how anyone can develop on it.
         | 
         | Not just ideologically, I mean literally - I don't understand
         | how one sets up a development environment for GCC itself. I've
         | had the misfortune of bootstrapping it a handful of times and
         | it's the single worst behaved piece of software I've ever seen.
        
       | charcircuit wrote:
       | >the Linux kernel is a key motivator for the project because
       | there are a lot of kernel people who would prefer the kernel to
       | be compiled only by the GNU toolchain.
       | 
       | Linux can already be compiled with clang if you want an all LLVM
       | based toolchain. The duplicate effort of developing and
       | maintaining this does not sound worth it to have GNU "purity."
        
         | mtrower wrote:
         | I think you may be misunderstanding here. They aren't trying to
         | keep the kennel GNU exclusive ---- they merely want the option
         | for a pre GNU toolchain.
        
       | thesuperbigfrog wrote:
       | Rust needs a language standard:
       | 
       | https://blog.m-ou.se/rust-standard/
       | 
       | https://rust-lang.github.io/rfcs/3355-rust-spec.html
       | 
       | https://github.com/rust-lang/rfcs/pull/3355
       | 
       | There are many organizations and industries that will not adopt
       | Rust until it has a standard.
       | 
       | C, C++, C#, and even JavaScript (ECMAScript) have language
       | standards. Why shouldn't Rust have one too?
       | 
       | C: https://www.iso.org/standard/74528.html
       | 
       | C++: https://isocpp.org/std/the-standard
       | 
       | C#: https://learn.microsoft.com/en-us/dotnet/csharp/language-
       | ref...
       | 
       | JavaScript / ECMAScript: https://ecma-
       | international.org/publications-and-standards/st...
        
         | ajross wrote:
         | Yeah. The culture crash here is shocking dissonant. The people
         | you'd normally expect to be the biggest voices for
         | documentation robustness are...
         | 
         | ... suddenly finding themselves in the "Actually, language
         | standards are bad" camp, all because of a tribal opposition to
         | the FSF?
         | 
         | Write the standard. Then argue that gccrust doesn't do it
         | right. Don't refuse to document the language just to hamstring
         | a competitor.
         | 
         | Also, please start with the borrow checker semantics. I don't
         | think I've ever met anyone who could explain exactly what the
         | rules are regarding what it can/can't prove.
        
           | estebank wrote:
           | There's been active work on a Rust specification for a while
           | now. It'll happen.
           | 
           | https://blog.rust-lang.org/inside-rust/2023/11/15/spec-
           | visio...
        
           | Rusky wrote:
           | What culture crash? The Rust project has a language
           | reference, is working on expanding it into a more formal
           | spec, and there are efforts like Ferrocene's to qualify the
           | existing compiler for use in safety critical environments.
           | 
           | The argument is not that language standards are bad, it's
           | that a C++-like ISO standard is unnecessary (when the quality
           | documentation can exist in another form) and C++-like
           | implementation fragmentation is bad.
           | 
           | (Have you read the NLL RFC? The Polonius work?)
        
         | jen20 wrote:
         | > There are many organizations and industries that will not
         | adopt Rust until it has a standard.
         | 
         | Counterpoint: rust is doing fine without those organizations
         | and industries. Why change what is working well?
        
           | yjftsjthsd-h wrote:
           | If rust wants to replace memory-unsafe languages, it needs to
           | cover their use cases.
        
           | thesuperbigfrog wrote:
           | >> Counterpoint: rust is doing fine without those
           | organizations and industries. Why change what is working
           | well?
           | 
           | Because Rust is a game changer.
           | 
           | Wouldn't it be better to have Rust used for the code that
           | runs on automobiles and aircraft? Or you would prefer that
           | they keep using (subsets of) C and C++?
           | 
           | Is the security of your Internet-of-Things (IoT) devices good
           | enough or could they be better?
           | 
           | What do you have against Rust being used in more places and
           | for more purposes?
        
             | faitswulff wrote:
             | Ferrous Systems has a basically bog standard Rust 1.68
             | compiler that's been certified for use in the most safety
             | critical environments: https://ferrous-
             | systems.com/blog/officially-qualified-ferroc...
             | 
             | This happened without a standard.
        
               | thesuperbigfrog wrote:
               | >> This happened without a standard.
               | 
               | They created a specification for Ferrocene:
               | 
               | https://spec.ferrocene.dev/
               | 
               | While it is technically not a Rust language standard, it
               | serves a similar purpose for Ferrocene.
        
           | gkbrk wrote:
           | Is it doing fine without those? It seems like every time
           | someone makes a personal or professional project in C/C++,
           | the Rust community floods the comments section and talks
           | about how it's irresponsible to use C/C++ and how the author
           | should just throw away the whole project and re-write it in
           | Rust.
           | 
           | It happens so often it became a meme at this point.
        
             | sgift wrote:
             | > It happens so often it became a meme at this point.
             | 
             | No, the meme is kept alive by C++ people who say that this
             | happens without it actually happen. It happened a long time
             | ago a few times, since then it's either an active
             | discussion about languages, where for some reason talking
             | about Rust is a problem, but every other language is okay
             | or it's someone feeling attacked by the mere idea that
             | projects which only could be done in C++ could now also be
             | done by another language and starts crying about how the
             | Rust community would flood every topic.
             | 
             | There's no longer an area where C++ is the only available
             | option. Get over it. The rest of the world did a long time
             | ago.
        
         | mjw1007 wrote:
         | That RFC is accepted, and this is starting to happen.
         | 
         | Progress has been disappointingly slow, but the project is
         | alive, and has potential to speed up next year.
         | 
         | https://blog.rust-lang.org/inside-rust/2023/11/15/spec-visio...
        
           | starlevel003 wrote:
           | > That RFC is accepted, and this is starting to happen.
           | 
           | > Progress has been disappointingly slow,
           | 
           | I don't think there's ever been a more concise summary of
           | Rust.
        
         | gkbrk wrote:
         | Go has a really nice spec and multiple implementations too.
         | 
         | https://go.dev/ref/spec
        
           | loeg wrote:
           | Does any other go implementation support the full language? I
           | thought gccgo lagged significantly.
        
             | eikenberry wrote:
             | The official GCC releases tend to lag a bit as they are
             | released on a longer cadence than the standard Go compiler
             | but upstream. The current release is a bit further behind
             | than normal due to the complexities around implementing the
             | generics back end, but it is being worked on
             | (https://groups.google.com/g/golang-dev/c/5ZKcPsDo1fg).
        
         | faitswulff wrote:
         | Mara's blog post (your first link) says essentially that Rust
         | does not need a standard since it already has means for adding
         | features and maintaining compatibility.
        
           | thesuperbigfrog wrote:
           | Mara's blog post also describes the benefits of standardizing
           | Rust.
           | 
           | Since she created the RFC for standardizing Rust
           | (https://github.com/rust-lang/rfcs/pull/3355) and is also on
           | the team that is working on Rust standardization
           | (https://blog.rust-lang.org/inside-rust/2023/11/15/spec-
           | visio...), I think she was making the point that Rust has
           | good controls in place for adding features while
           | compatibility, not that "Rust does not need a standard".
           | 
           | If she really believed that Rust does not need a standard,
           | why would she create the RFC and join the team working on the
           | effort?
           | 
           | Rust is a great language. There is no reason why it should
           | not have a standard to better formalize its requirements and
           | behaviors.
        
             | faitswulff wrote:
             | Yes, it's a nuanced blog post. But that also means it
             | doesn't coming out swinging hard for needing a standard,
             | either. It seems like there is as strong an argument to be
             | made that "Rust is a great language. There is no reason why
             | it needs a standard."
             | 
             | See the Ferrocene compiler which has been qualified for ISO
             | standards. It's essentially a standard Rust 1.68 compiler
             | with a lot of added documentation. If you need a Rust
             | compiler for safety critical environments, it's reasonably
             | priced and requires essentially zero changes to the Rust
             | compiler that they didn't just upstream. Without a
             | standard.
             | 
             | Yes, it would be nice to have a standard for reducing
             | ambiguity. But does the language _need_ a standard? And if
             | so, then for what purpose?
        
               | thesuperbigfrog wrote:
               | They created a specification for Ferrocene because Rust
               | does not _yet_ have a language standard:
               | 
               | https://spec.ferrocene.dev/
               | 
               | >> But does the language need a standard?
               | 
               | Yes, Rust needs a standard.
               | 
               | >> And if so, then for what purpose?
               | 
               | For the same purpose that all standards have--to formally
               | define it in writing.
               | 
               | Ferrocene's web site (https://ferrous-
               | systems.com/ferrocene/) shows that it meets the ISO 26262
               | standard (https://en.wikipedia.org/wiki/ISO_26262).
               | 
               | Why does ISO 26262 matter? What purpose does it serve?
               | Couldn't a vehicle manufacturer just say "our vehicles
               | are safe"?
               | 
               | Which would you trust more: a vehicle that is verified to
               | meet ISO 26262 standards, or a vehicle whose manufacturer
               | tells you "it's safe" without formally defining what
               | "safe" means?
               | 
               | I stated it above, but I will re-state it here: Without a
               | language standard, there are many organizations and
               | industries that _will not_ use Rust. Not because Rust is
               | not a fantastic tool for the job, but because laws,
               | regulations, etc. _require_ standardization and
               | qualification of components.
               | 
               | This means that I _can_ use a qualified C compiler and
               | toolchain to write safety-critical code, but I _can 't_
               | use Rust despite the fact that Rust is a better choice
               | and will help to prevent problems. Standards _do_ matter.
               | Rust needs a language standard.
        
               | faitswulff wrote:
               | > For the same purpose that all standards have--to
               | formally define it in writing.
               | 
               | This is tautological. It's equivalent to saying "it needs
               | a standard to be written because it needs a written
               | standard."
               | 
               | I mean what use case is there for Rust language users
               | that isn't already met by the Ferrocene project? And the
               | Ferrocene project is not a standard as in "other
               | implementations will be found lacking," but a description
               | of the 1.68 compiler as-is. That is a specification, not
               | a standard. Ferrous Systems did not need Rust to have a
               | standard in order to qualify the compiler for ISO 26262
               | and IEC 61508.
        
               | thesuperbigfrog wrote:
               | >> "it needs a standard to be written because it needs a
               | written standard."
               | 
               | Yes. And if the law in your country requires it to be
               | standardized for specific use cases, then a language
               | standard is needed.
               | 
               | >> what use case is there for Rust language users that
               | isn't already met by the Ferrocene project?
               | 
               | Can you legally use Rust for the control software in
               | aircraft? (https://en.wikipedia.org/wiki/DO-178C)
               | 
               | What about the safety systems for railroads?
               | (https://ldra.com/ldra-blog/software-safety-and-security-
               | stan...)
               | 
               | What about the control systems for nuclear reactors?
               | (https://www.nrc.gov/docs/ML1300/ML13007A173.pdf)
        
               | faitswulff wrote:
               | And if you need a ISO 26262 qualified Rust compiler, one
               | exists. Hurrah.
               | 
               | Since you edited your post...simply having a standard
               | won't immediately qualify the language for those
               | industries. There is only a tenuous link between having a
               | standard and qualifying the language for industrial use.
        
         | ivanjermakov wrote:
         | This is really odd to me. Language design should start with
         | specification. Your compiler is just a reference
         | implementation.
        
           | sunshowers wrote:
           | Rust language design does start from specifications, namely
           | RFCs. What is being discussed here is producing a more formal
           | specification than the ones that currently exist.
        
         | pie_flavor wrote:
         | The Ferrocene spec permits Rust to be used in those industries.
        
       | johnklos wrote:
       | So we'll finally see Rust support for all the architectures that
       | gcc supports that LLVM doesn't, like Alpha, SuperH and VAX, for
       | starters. That'll be nice!
        
         | Asraelite wrote:
         | I would assume it also means additional configuration options
         | for already-supported architectures.
         | 
         | For example, I recently discovered that with RISC-V, GCC
         | supports the RV32E target but LLVM doesn't.
        
           | monocasa wrote:
           | Are you sure about that?
           | 
           | I was pretty sure that llvm has supported RV32E for years
           | now. https://reviews.llvm.org/D70401?id=395048
        
             | Asraelite wrote:
             | Oh, last time I checked clang didn't support it.
             | 
             | In any case, there are a lot of other compiler flags that
             | are exclusive to gcc.
        
         | segfaultbuserr wrote:
         | Can't wait to see some PDP-11 machine code from Rust (the last
         | time I checked, freestanding C compiling still worked on GCC).
        
       | gumby wrote:
       | > A lot of care is being put into gccrs not becoming a "superset"
       | of Rust, as Cohen put it. The project wants to make sure that it
       | does not create a special "GNU Rust" language, _but is trying
       | instead to replicate the output of rustc -- bugs, quirks, and
       | all_.
       | 
       | In my experience, the part in italics is a significant mistake.
       | 
       | Rust does not have a specification; there is a reference but it
       | is explicitly not normative. A language udocumented except for a
       | single reference implementation (as is tpday's fashion) have a
       | long term weakness. What is the motivation for slavishly trying
       | to maintain compatibility with the bugs and accidental quirks of
       | another implementation? To guarantee that existing code will work
       | in both implementations, which sounds sensible. And it is a
       | sensible goal, but it does so at enormous cost by enforcing it in
       | the wrong place.
       | 
       | The problem is that sometimes decisions are wrong, and sometimes
       | bugs are written. But when you promise that all implementations
       | will be bug compatible as part of compatibility you are also
       | signing up to fossilize these bugs whether you want to or not.
       | 
       | A good example of someone who embraced this (to their credit!) is
       | Microsoft: they spend a lot of person-power making sure that old
       | programs continue to run while trying to fix security and
       | reliability bugs. Rust need not and should not sign up for this
       | burden so early in its lifespan. They should learn from history.
       | 
       | If they want the language to evolve they should embrace QA and
       | QC. Famously "you cannot test quality into a product". You need
       | QA: architecture, design, design and code reviews, etc to ensure
       | that things will work properly and when not, that "failure heads
       | in the appropriate direction". Then later in the development
       | cycle QC (test cases) tries to see if you missed. This doesn't
       | just apply to product development -- it applies to language
       | development especially.
       | 
       | The strong standards (e.g. ComonLisp, C++, FORTRAN) embraced this
       | belief. The weak, de facto ones (Most notably Python, but plenty
       | of others) can still become popular, but change is difficult.
       | Look at how long the Python 2->3 transition took, and how few
       | python implementations there are.
        
       | mkesper wrote:
       | Thanks for posting the lwn.net link, reminded me of renewing my
       | subscription!
        
         | sophacles wrote:
         | It's a good subscription to have. I've gotten far more value
         | from my LWN subscription than I spent, and recommend everyone
         | that does lowish level work get one.
        
       ___________________________________________________________________
       (page generated 2023-12-18 23:00 UTC)