Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move to the Truffle Object Model #723

Open
KushalP opened this issue Oct 22, 2024 · 4 comments
Open

Move to the Truffle Object Model #723

KushalP opened this issue Oct 22, 2024 · 4 comments

Comments

@KushalP
Copy link
Contributor

KushalP commented Oct 22, 2024

The Dynamic Object Model APIs were introduced with GraalVM 20.2.0, and the Static Object Model APIs were introduced with GraalVM 21.3.0.

Using these Object Model APIs would be useful for caching, reducing safety checks, and improving profiling.

Note

Both of the above APIs are not compatible with each other.

@odenix
Copy link
Contributor

odenix commented Oct 23, 2024

A redesign of the interpreter's object model could explore the following topics:

  • Multiple representations for the same type of object
    For example, different representations could be used for small, large, and surrogate listings.
    Truffle supports this via Truffle Libraries.
  • Replacement of java.lang.String with TruffleString
  • Thread safety
    A thread-safe object model could open the door to multi-threaded evaluation of Pkl code in the same Evaluator.
    As far as I know, code generated by Truffle is thread-safe.
  • Support of elements and entries for typed objects (already supported for dynamic objects)

@KushalP
Copy link
Contributor Author

KushalP commented Oct 24, 2024

Multiple representations for the same type of object

Agreed. As an extension to this it would be interesting to explore if Listing and List could be consolidated alongside Mapping and Map. This PR already tries to consolidate the APIs of these two structures, but it could go further with Truffle Libraries to have the "representation" choices around lazy vs. eager be modelled transparently: #683

@odenix
Copy link
Contributor

odenix commented Oct 24, 2024

As an extension to this it would be interesting to explore if Listing and List could be consolidated alongside Mapping and Map.

As of 0.26, Listing and List have very different semantics (late binding, etc.) and performance characteristics (lazy amendable object vs. eager persistent collection). Unless that changes (and maybe that's what you'd like to explore?), I don't think their internal representations can/should be unified.

@KushalP
Copy link
Contributor Author

KushalP commented Oct 24, 2024

and maybe that's what you'd like to explore?

I'm purely trying to find ways to help. I'll leave that up to the Pkl team.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants
@KushalP @odenix and others