Code Monkey home page Code Monkey logo

Comments (3)

hdoan741 avatar hdoan741 commented on June 17, 2024 1

Sorbet only supports overloading for stdlib but intentionally limiting to not be used in other definitions.

Since we want to type find, first, last with proper return type, we override the original sigs in Enumerable.

Here is a full context from @DarkDimius

Our overloading is very limited and build "just enough" to support stdlib. It doesn't work in runtime typechecking at all. We don't intend to continue building it out.

What we use internally for legacy methods like that is either:

  • make them return T.untyped and take a T.any of potential argument types. You'll get static and > runtime typechecking of arguments, but not result type
  • make them return T.any or potential result types and take a T.any. This requires modifying callers.

Neither of those options are great, but we currently are skeptical of us being able to support overloading well in userland.

If you're interested in underlying skepticism of us being able to support it: many people are coming at this from static language perspective, where a static typechecker decides which of those methods will be called ahead of time, and "compiles" this knowledge into runtime, commonly called overloading. That's not how ruby works, in ruby, many methods decide this in runtime, not statically. Ruby has multimethods. Even in languages that started with a typesystem this frequently creates more problems that solves. Of languages that do use it, the most common is Julia.

https://sorbet-ruby.slack.com/archives/CHN2L03NH/p1558029143153100

from sorbet-rails.

hdoan741 avatar hdoan741 commented on June 17, 2024

I added a note to the readme in #20. Thanks for the great question!

I'm going to close the issue but please feel free to reply if you have more question.

from sorbet-rails.

eregon avatar eregon commented on June 17, 2024

Thanks for the quote, that explains some of it.
I find it surprising that the exact syntax used for typing Enumerable doesn't work outside, and therefore that external type definitions are less flexible/powerful than those of stdlib, but I guess that's something to ask on Slack or to @DarkDimius.

from sorbet-rails.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.