Code sharing is in

Jaroslav Tulach jaroslav.tulach at oracle.com
Mon Mar 27 08:19:01 UTC 2017


On pátek 24. března 2017 14:41:44 CEST Benoit Daloze wrote:
> So how does one achieve code sharing?
> What "code" can be shared and how?

Hello Benoit,
we still don't have a tutorial for language implementor's except the extra-
ordinary videos:
http://graalvm.github.io/truffle/javadoc/com/oracle/truffle/tutorial/newlanguage/
package-summary.html

We only document various bits and pieces in a class/method Javadoc. For 
example the http://graalvm.github.io/truffle/javadoc/com/oracle/truffle/api/vm/
PolyglotRuntime.html has a reference to 
http://graalvm.github.io/truffle/javadoc/com/oracle/truffle/api/TruffleLanguage.html
which now contains sentences like:

- A new language implementation instance is instantiated for each runtime that 
is created using the runtime builder.

- Global state can be shared between multiple context instances by saving them 
as a field of the TruffleLanguage subclass

I know, it isn't much, but hopefully enough to get you started.
-jt

PS: Feel free to report a bug if some of existing info is wrong or misleading.

> 
> On Fri, Mar 24, 2017 at 12:53 PM, Jaroslav Tulach <
> 
> jaroslav.tulach at oracle.com> wrote:
> > On čtvrtek 23. března 2017 6:46:55 CET Jaroslav Tulach wrote:
> > > Hi there.
> > > For last nine months I was struggling with code sharing. I tried many
> > 
> > ways,
> > 
> > > but I couldn't get it to work properly. But yesterday was a great day:
> > > Christian Humer managed to merge his code sharing work. Congrats!
> > > 
> > > I am so excited. The introduction of PolyglotRuntime gives us a chance
> > > to
> > > experiment with sharing of ASTs between different PolyglotEngines -
> > > something many language implementations wanted to play with. I am
> > 
> > thrilled
> > 
> > > to gain some experience with the sharing and then think of proper ways
> > > to
> > > make it work in multi-language interop system as well.
> > > 
> > > I hope you find Truffle code sharing support interesting too.
> > 
> > FYI: Javadoc for the new APIs for language integrators can be found at:
> > http://graalvm.github.io/truffle/javadoc/com/oracle/
> > truffle/api/vm/package-summary.html
> > 
> > -jt
> > 
> > > SignatureTest report
> > > Base version:
> > > Tested version:
> > > Check mode: bin [throws removed]
> > > Constant checking: on
> > > 
> > > 
> > > Added Classes
> > > -------------
> > > 
> > > com.oracle.truffle.api.TruffleLanguage$ContextReference
> > > com.oracle.truffle.api.nodes.LanguageInfo
> > > 
> > > Added Nested Classes
> > > --------------------
> > > 
> > > com.oracle.truffle.api.TruffleLanguage: nested public final static
> > > com.oracle.truffle.api.TruffleLanguage$ContextReference
> > > 
> > > Added Constructors
> > > ------------------
> > > 
> > > com.oracle.truffle.api.nodes.RootNode:  constructor protected
> > > com.oracle.truffle.api.nodes.RootNode.init(com.oracle.
> > 
> > truffle.api.TruffleLan
> > 
> > > guage) com.oracle.truffle.api.nodes.RootNode:  constructor protected
> > > com.oracle.truffle.api.nodes.RootNode.init(com.oracle.
> > 
> > truffle.api.TruffleLan
> > 
> > > guage,com.oracle.truffle.api.frame.FrameDescriptor)
> > > 
> > > Added Methods
> > > -------------
> > > 
> > > com.oracle.truffle.api.TruffleLanguage: method public final
> > > com.oracle.truffle.api.TruffleLanguage$ContextReference
> > > com.oracle.truffle.api.TruffleLanguage.getContextReference()
> > > com.oracle.truffle.api.nodes.RootNode:  method public final
> > > com.oracle.truffle.api.TruffleLanguage
> > > com.oracle.truffle.api.nodes.RootNode.getLanguage(java.lang.Class)
> > > com.oracle.truffle.api.nodes.RootNode:  method public final
> > > com.oracle.truffle.api.nodes.LanguageInfo
> > > com.oracle.truffle.api.nodes.RootNode.getLanguageInfo()
> > > 
> > > Added Annotations
> > > -----------------
> > > 
> > > com.oracle.truffle.api.ExecutionContext:anno 0 java.lang.Deprecated()
> > > com.oracle.truffle.api.TruffleLanguage.createFindContextNode:
> > > anno 0 java.lang.Deprecated()
> > > com.oracle.truffle.api.TruffleLanguage.findContext:         anno 0
> > > java.lang.Deprecated()
> > > com.oracle.truffle.api.nodes.Node.getLanguage:              anno 0
> > > java.lang.Deprecated()
> > > com.oracle.truffle.api.nodes.Node.getLanguage:              anno 0
> > > java.lang.Deprecated()
> > > com.oracle.truffle.api.nodes.Node.getLanguage:              anno 0
> > > java.lang.Deprecated()
> > > com.oracle.truffle.api.nodes.Node.getLanguage:              anno 0
> > > java.lang.Deprecated()
> > > com.oracle.truffle.api.nodes.Node.getLanguage:              anno 0
> > > java.lang.Deprecated()
> > > com.oracle.truffle.api.nodes.RootNode.getExecutionContext:  anno 0
> > > java.lang.Deprecated()
> > > com.oracle.truffle.api.nodes.RootNode.init:                 anno 0
> > > java.lang.Deprecated()
> > > 
> > > 
> > > 
> > > Added Annotations
> > > -----------------
> > > 
> > > com.oracle.truffle.api.nodes.Node.getLanguage:              anno 0
> > > java.lang.Deprecated()
> > > com.oracle.truffle.api.nodes.Node.getLanguage:              anno 0
> > > java.lang.Deprecated()
> > > 
> > > 
> > > Missing Methods
> > > ---------------
> > > 
> > > com.oracle.truffle.api.interop.MessageResolution:           method
> > 
> > public
> > 
> > > abstract java.lang.Class
> > > com.oracle.truffle.api.interop.MessageResolution.language()
> > > 
> > > Added Methods
> > > -------------
> > > 
> > > com.oracle.truffle.api.interop.MessageResolution:           method
> > 
> > public
> > 
> > > abstract !hasdefault java.lang.Class
> > > com.oracle.truffle.api.interop.MessageResolution.language()
> > > 
> > >  anno 0 java.lang.Deprecated()
> > > 
> > > Added Annotations
> > > -----------------
> > > 
> > > com.oracle.truffle.api.interop.MessageResolution.language:  anno 0
> > > java.lang.Deprecated()
> > > 
> > > Missing Superclasses or Superinterfaces
> > > ---------------------------------------
> > > 
> > > com.oracle.truffle.api.vm.PolyglotEngine$Instrument:        superclass
> > > java.lang.Object
> > > 
> > > Added Classes
> > > -------------
> > > 
> > > com.oracle.truffle.api.vm.PolyglotRuntime
> > > com.oracle.truffle.api.vm.PolyglotRuntime$Builder
> > > com.oracle.truffle.api.vm.PolyglotRuntime$Instrument
> > > 
> > > Added Superclasses or Superinterfaces
> > > -------------------------------------
> > > 
> > > com.oracle.truffle.api.vm.PolyglotEngine$Instrument:        superclass
> > > com.oracle.truffle.api.vm.PolyglotRuntime$Instrument
> > > 
> > > Added Methods
> > > -------------
> > > 
> > > com.oracle.truffle.api.vm.PolyglotEngine:                   method
> > 
> > public
> > 
> > > com.oracle.truffle.api.vm.PolyglotRuntime
> > > com.oracle.truffle.api.vm.PolyglotEngine.getRuntime()
> > > com.oracle.truffle.api.vm.PolyglotEngine$Builder:           method
> > 
> > public
> > 
> > > com.oracle.truffle.api.vm.PolyglotEngine$Builder
> > > com.oracle.truffle.api.vm.PolyglotEngine
> > > $Builder.runtime(com.oracle.truffle.api.vm.PolyglotRuntime)
> > > com.oracle.truffle.api.vm.PolyglotEngine$Value:             method
> > 
> > public
> > 
> > > com.oracle.truffle.api.source.SourceSection
> > > com.oracle.truffle.api.vm.PolyglotEngine$Value.getSourceLocation()
> > > com.oracle.truffle.api.vm.PolyglotEngine$Value:             method
> > 
> > public
> > 
> > > com.oracle.truffle.api.vm.PolyglotEngine$Value
> > > com.oracle.truffle.api.vm.PolyglotEngine$Value.getMetaObject()
> > > 
> > > Added Annotations
> > > -----------------
> > > 
> > > com.oracle.truffle.api.vm.PolyglotEngine$Instrument:        anno 0
> > > java.lang.Deprecated()
> > > com.oracle.truffle.api.vm.PolyglotEngine.getInstruments:    anno 0
> > > java.lang.Deprecated()




More information about the graal-dev mailing list