Giter VIP home page Giter VIP logo

Comments (5)

MaxDesiatov avatar MaxDesiatov commented on July 30, 2024 1

Yeah, that could work, but we'd need to make id public to allow you adding this conformance in your code. I think you can just use ObjectIdentifier from stdlib in the meantime. Off the top of my head I can't come up with a scenario where one could have different JSObject instances that share the same id, but I may be wrong.

@swiftwasm/jskit-team WDYT about this approach? Does ObjectIdentifier seem safe enough to be used on JSObject for a custom Hashable conformance? Or should we just implement Hashable using id as the OP suggests?

from javascriptkit.

mhavu avatar mhavu commented on July 30, 2024 1

I just need a dictionary with JSObject keys at the moment.

from javascriptkit.

j-f1 avatar j-f1 commented on July 30, 2024 1

I think using id makes sense for hashing. SwiftRuntimeHeap.retain (on the JS side) checks whether the given object is already on the heap and reuses that heap entry (including the id) if possible. Therefore, JSObject.global.Array will return two different JSObject instances when called twice, but they will both have the same id.

from javascriptkit.

mhavu avatar mhavu commented on July 30, 2024

Thanks for the tip! This seems to work just fine for now:

extension JSObject : Hashable {
    public func hash(into hasher: inout Hasher) {
        hasher.combine(ObjectIdentifier(self))
    }
}

from javascriptkit.

MaxDesiatov avatar MaxDesiatov commented on July 30, 2024

Yeah, it may work in trivial scenarios, but until I'm 100% sure there's no way one can have multiple different JSObject instances with the same id, I hesitate to recommend that as a reliable solution. And maybe same can be said of id, but identity in JavaScript is defined much more loosely if at all.

When we do have that certainty, I guess it makes sense to add some Hashable conformance to our codebase, so that you don't have to keep this implementation in your code.

What exactly are you trying to achieve with it? Do you just want a dictionary or a set of JSObject keys/elements, or something more advanced than that?

from javascriptkit.

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.