Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Cyborg)
  • No Skin
Collapse
Brand Logo

CIRCLE WITH A DOT

  1. Home
  2. Uncategorized
  3. I am NOT making a Rust replacement, but — if you could fix one* thing about Rust syntax/semantics/etc.

I am NOT making a Rust replacement, but — if you could fix one* thing about Rust syntax/semantics/etc.

Scheduled Pinned Locked Moved Uncategorized
120 Posts 48 Posters 160 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

    I am NOT making a Rust replacement, but — if you could fix one* thing about Rust syntax/semantics/etc. what would you fix?

    (*one per reply, multiple replies per household are allowed)

    boxdot@chaos.socialB This user is from outside of this forum
    boxdot@chaos.socialB This user is from outside of this forum
    boxdot@chaos.social
    wrote last edited by
    #89

    @fasterthanlime Replace Pin<T> by &pin T.

    1 Reply Last reply
    0
    • tribaal@hachyderm.ioT tribaal@hachyderm.io

      @fasterthanlime I think I’d just make tokio part of the standard and avoid the async function colouring problem. Then spend time on the compiler to be smart about the actually necessary async inclusion vs compiling to sync

      soc@chaos.socialS This user is from outside of this forum
      soc@chaos.socialS This user is from outside of this forum
      soc@chaos.social
      wrote last edited by
      #90

      @tribaal @fasterthanlime I think other languages promised that, and they could not deliver on these promises.

      tribaal@hachyderm.ioT 1 Reply Last reply
      0
      • simonomi@mstdn.socialS simonomi@mstdn.social

        @fasterthanlime Swift-style argument labels! IMO the most underrated feature that literally every programming language would be better off with (clearer APIs with no downside!!)

        soc@chaos.socialS This user is from outside of this forum
        soc@chaos.socialS This user is from outside of this forum
        soc@chaos.social
        wrote last edited by
        #91

        @simonomi @fasterthanlime I don't feel they add much benefit on top of named arguments ... is there a good argument to not spend that language complexity elsewhere?

        simonomi@mstdn.socialS 1 Reply Last reply
        0
        • vbfox@hachyderm.ioV vbfox@hachyderm.io

          @fasterthanlime the orphan rule.

          fasterthanlime@hachyderm.ioF This user is from outside of this forum
          fasterthanlime@hachyderm.ioF This user is from outside of this forum
          fasterthanlime@hachyderm.io
          wrote last edited by
          #92

          @vbfox what's the alternative?

          josh@social.joshtriplett.orgJ vbfox@hachyderm.ioV 2 Replies Last reply
          0
          • soc@chaos.socialS soc@chaos.social

            @simonomi @fasterthanlime I don't feel they add much benefit on top of named arguments ... is there a good argument to not spend that language complexity elsewhere?

            simonomi@mstdn.socialS This user is from outside of this forum
            simonomi@mstdn.socialS This user is from outside of this forum
            simonomi@mstdn.social
            wrote last edited by
            #93

            @soc @fasterthanlime by "named arguments" do you mean something akin to python-style kwargs? or maybe LSP inlay of argument names at callsites?

            a lot of the value of argument labels comes from them being manditory and chosen by the callee. i really value Swift's API design tenet of "clarity at the point of use", and even the simple aesthetic change of going from `sayHi(person)` to `sayHi(to: person)` can make a big difference IMO

            simonomi@mstdn.socialS soc@chaos.socialS 2 Replies Last reply
            0
            • simonomi@mstdn.socialS simonomi@mstdn.social

              @soc @fasterthanlime by "named arguments" do you mean something akin to python-style kwargs? or maybe LSP inlay of argument names at callsites?

              a lot of the value of argument labels comes from them being manditory and chosen by the callee. i really value Swift's API design tenet of "clarity at the point of use", and even the simple aesthetic change of going from `sayHi(person)` to `sayHi(to: person)` can make a big difference IMO

              simonomi@mstdn.socialS This user is from outside of this forum
              simonomi@mstdn.socialS This user is from outside of this forum
              simonomi@mstdn.social
              wrote last edited by
              #94

              @soc @fasterthanlime aside from clarity, being able to 'overload' on argument labels is really really nice, and Rust deals with a lot of same-method-but-with-try/mut-instead already

              1 Reply Last reply
              0
              • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

                I am NOT making a Rust replacement, but — if you could fix one* thing about Rust syntax/semantics/etc. what would you fix?

                (*one per reply, multiple replies per household are allowed)

                simonomi@mstdn.socialS This user is from outside of this forum
                simonomi@mstdn.socialS This user is from outside of this forum
                simonomi@mstdn.social
                wrote last edited by
                #95

                @fasterthanlime this one is a bit tongue-in-cheek, but i think nearly every programmer/language designer has something to learn from the Swift API design guidelines. if Rust could just steal that in its entirety (and probably improve upon it!) that'd be perfect 😛

                Link Preview Image
                Swift.org

                Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.

                favicon

                Swift.org (swift.org)

                1 Reply Last reply
                0
                • soc@chaos.socialS soc@chaos.social

                  @tribaal @fasterthanlime I think other languages promised that, and they could not deliver on these promises.

                  tribaal@hachyderm.ioT This user is from outside of this forum
                  tribaal@hachyderm.ioT This user is from outside of this forum
                  tribaal@hachyderm.io
                  wrote last edited by
                  #96

                  @soc @fasterthanlime which language tried to abscond the “runtime machinery” if possible at compile time? Genuine question. I know at least one language without function colouring problem for async, but to my knowledge it always includes a runtime (golang)

                  soc@chaos.socialS 1 Reply Last reply
                  0
                  • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

                    Unfortunately the ecosystem is split between colored functions and coloured functions

                    niq@fosstodon.orgN This user is from outside of this forum
                    niq@fosstodon.orgN This user is from outside of this forum
                    niq@fosstodon.org
                    wrote last edited by
                    #97

                    @fasterthanlime maybe we can try to get the ecosystem united by compromising and spelling it coulored from now on?

                    1 Reply Last reply
                    0
                    • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

                      @vbfox what's the alternative?

                      josh@social.joshtriplett.orgJ This user is from outside of this forum
                      josh@social.joshtriplett.orgJ This user is from outside of this forum
                      josh@social.joshtriplett.org
                      wrote last edited by
                      #98
                      There are various ways we could relax it a little. Allow top-level crates to implement arbitrary traits for arbitrary types. Allow libraries to opt-in to having new impls for their traits/types. In general, I'd love to see it become possible to integrate crate A with crate B using crate AB, rather than A or B; that would remove a major scaling issue and source of lock-in in the ecosystem.
                      1 Reply Last reply
                      0
                      • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

                        @vbfox what's the alternative?

                        vbfox@hachyderm.ioV This user is from outside of this forum
                        vbfox@hachyderm.ioV This user is from outside of this forum
                        vbfox@hachyderm.io
                        wrote last edited by
                        #99

                        @fasterthanlime naming of trait implementations then an explicit way to bring one of them into scope (“use” ?) and a way to specify them per-callsite.

                        The current syntax would be the equivalent of allowing anonymous implementations that are automatically applicable to any scope where no other named implementation has been specified.

                        impl Clone as MyClone for u32 {

                        use lib::MyClone;
                        // or
                        let x: u32 + MyClone = 42;

                        1 Reply Last reply
                        0
                        • ianthetechie@fosstodon.orgI ianthetechie@fosstodon.org

                          @chosunone @fasterthanlime I think this just comes down to making the borrow checker (static analysis) more intelligent so that you can have more granular *borrows*, right?

                          Actually marking the fields as mutable or immutable doesn’t make much sense to me either, so I guess you’re suggesting either new syntax when borrowing or else a smarter borrow checker?

                          (It’s a tension point to be sure but I don’t hit it very often)

                          chosunone@pleroma.chosunone.ioC This user is from outside of this forum
                          chosunone@pleroma.chosunone.ioC This user is from outside of this forum
                          chosunone@pleroma.chosunone.io
                          wrote last edited by
                          #100
                          @ianthetechie

                          @fasterthanlime
                          It's not just that. It's a guarantee that a field can never change on a structure despite other fields being mutable even with a mutable borrow existing on the entire structure. It's also useful for providing an api with public fields that shouldn't be mutated. To do that now you have to make a public getter on a private field, and then that prevents mutable borrows of the structure.
                          1 Reply Last reply
                          0
                          • tribaal@hachyderm.ioT tribaal@hachyderm.io

                            @soc @fasterthanlime which language tried to abscond the “runtime machinery” if possible at compile time? Genuine question. I know at least one language without function colouring problem for async, but to my knowledge it always includes a runtime (golang)

                            soc@chaos.socialS This user is from outside of this forum
                            soc@chaos.socialS This user is from outside of this forum
                            soc@chaos.social
                            wrote last edited by
                            #101

                            @tribaal @fasterthanlime Zig tried to build a sufficiently smart compiler, and it turned out they couldn't cheat Rice's theorem.

                            The attempt was unceremoniously abandoned after people kept poking holes into the compiler's heuristics.

                            1 Reply Last reply
                            0
                            • simonomi@mstdn.socialS simonomi@mstdn.social

                              @soc @fasterthanlime by "named arguments" do you mean something akin to python-style kwargs? or maybe LSP inlay of argument names at callsites?

                              a lot of the value of argument labels comes from them being manditory and chosen by the callee. i really value Swift's API design tenet of "clarity at the point of use", and even the simple aesthetic change of going from `sayHi(person)` to `sayHi(to: person)` can make a big difference IMO

                              soc@chaos.socialS This user is from outside of this forum
                              soc@chaos.socialS This user is from outside of this forum
                              soc@chaos.social
                              wrote last edited by
                              #102

                              @simonomi @fasterthanlime See https://en.wikipedia.org/wiki/Named_arguments.

                              I don't feel like Swift's approach is a good investment of language complexity.

                              Not that restraint was something the language exercises in any case, but I think the feature only exists in Swift because Objective-C had it already.

                              1 Reply Last reply
                              0
                              • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

                                I am NOT making a Rust replacement, but — if you could fix one* thing about Rust syntax/semantics/etc. what would you fix?

                                (*one per reply, multiple replies per household are allowed)

                                megmac@social.treehouse.systemsM This user is from outside of this forum
                                megmac@social.treehouse.systemsM This user is from outside of this forum
                                megmac@social.treehouse.systems
                                wrote last edited by
                                #103

                                @fasterthanlime syntax: angle brackets doing double duty as a kind of bracket and binary operator is a thing no language should have ever borrowed from c++, and the resultant turbofish pride is silly.

                                1 Reply Last reply
                                0
                                • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

                                  I am NOT making a Rust replacement, but — if you could fix one* thing about Rust syntax/semantics/etc. what would you fix?

                                  (*one per reply, multiple replies per household are allowed)

                                  megmac@social.treehouse.systemsM This user is from outside of this forum
                                  megmac@social.treehouse.systemsM This user is from outside of this forum
                                  megmac@social.treehouse.systems
                                  wrote last edited by
                                  #104

                                  @fasterthanlime semantics: I would add a pipeline operator. I think it would simplify a lot of common expressions.

                                  1 Reply Last reply
                                  0
                                  • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

                                    I am NOT making a Rust replacement, but — if you could fix one* thing about Rust syntax/semantics/etc. what would you fix?

                                    (*one per reply, multiple replies per household are allowed)

                                    megmac@social.treehouse.systemsM This user is from outside of this forum
                                    megmac@social.treehouse.systemsM This user is from outside of this forum
                                    megmac@social.treehouse.systems
                                    wrote last edited by
                                    #105

                                    @fasterthanlime types: first class non-moveable and non-droppable traits.

                                    1 Reply Last reply
                                    0
                                    • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

                                      I am NOT making a Rust replacement, but — if you could fix one* thing about Rust syntax/semantics/etc. what would you fix?

                                      (*one per reply, multiple replies per household are allowed)

                                      megmac@social.treehouse.systemsM This user is from outside of this forum
                                      megmac@social.treehouse.systemsM This user is from outside of this forum
                                      megmac@social.treehouse.systems
                                      wrote last edited by
                                      #106

                                      @fasterthanlime and not what you asked but I think function coloring is not only fine, but desirable. Where I think rust has gone wrong in async is in the main libraries trying way too hard to pretend that an async executor is some ambient global thing that you can pretend you don't know about, and it creates an expectation of magic that can't be met.

                                      Async functions are ultimately just a shorthand for state machines. They have uses even in otherwise not "async" code. But you need to know when you're interacting with a state machine and when you're not.

                                      1 Reply Last reply
                                      0
                                      • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

                                        I am NOT making a Rust replacement, but — if you could fix one* thing about Rust syntax/semantics/etc. what would you fix?

                                        (*one per reply, multiple replies per household are allowed)

                                        megmac@social.treehouse.systemsM This user is from outside of this forum
                                        megmac@social.treehouse.systemsM This user is from outside of this forum
                                        megmac@social.treehouse.systems
                                        wrote last edited by
                                        #107

                                        @fasterthanlime oh and governance: almost(*) any implemented rfc should be either accepted and stabilized or removed altogether after a reasonable discussion period in order to eliminate the bifurcated world where compiler and stdlib developers get to use features that languish for years (now some of them coming on a decade) in bikeshedding hell.

                                        I call this the "shit or get off the pot rule." If I feature is important enough to use, it is important enough to stabilize.

                                        (*) a separate category of feature flag should be established for the few things that are deep compromises that should never be stabilized but are necessary for the compiler to use.

                                        1 Reply Last reply
                                        0
                                        • fasterthanlime@hachyderm.ioF fasterthanlime@hachyderm.io

                                          I think I may have accidentally come up with a drinking game

                                          If someone mentions function coloring, you have to finish your glass

                                          graydon@types.plG This user is from outside of this forum
                                          graydon@types.plG This user is from outside of this forum
                                          graydon@types.pl
                                          wrote last edited by
                                          #108

                                          @fasterthanlime I'll need to make a parallel drinking game for "things that rust literally already had at one point in its evolution but then people decided they didn't want it after all"

                                          fasterthanlime@hachyderm.ioF 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups