modularml / mojo

The Mojo Programming Language
https://docs.modular.com/mojo/manual/
Other
23.25k stars 2.6k forks source link

[Feature Request] Parametrize ```__is__``` dunder #2607

Open rd4com opened 6 months ago

rd4com commented 6 months ago

Review Mojo's priorities

What is your request?

Hello,

that feature improved __getitem__ by letting take indexes as parameters (Variant[Int,Bool](1)[Int]),

__is__ might get an improvement by it too, here are some examples:

 

Example for variant:

struct Variant[*Ts:CollectionElement]():
    fn __is__[
        other: CollectionElement
    ](self)->Bool: 
        return self.isa[other]()

fn main():
    var x = Variant[Int,Bool](1)
    if x is Int: print(x[Int])
    if x is Bool: print(x[Bool])

And for PythonObject:

x = PythonObject(1)
if x is Int: print(int(x))
#if x is List
#if x is Tuple

What is your motivation for this change?

Variant is a nice type that can seem weird for python users, this could make it more user-friendly.

it could also ameliorate any user-created structs in a super user-friendly manner.

Any other details?

No response

gabrieldemarmiesse commented 6 months ago

In Python, the operator is allows the programmer to check the identity of an object, in other words, it allows someone to check that two objects have the same address in memory. While this proposal will make the Variant struct have a nicer api, it may conflict in the future when is will be used to check the memory addresses of references.

Maybe let's hold on to this syntax sugar until we know how is will be used exactly with references?

JoeLoser commented 3 months ago

As Gabriel mentioned, moving to "Postponed" for now until things are further along with references, memory identity, etc.