4 ms·
Ever since Graal was opensourced I've been nothing short of mesmerized by all of the amazing work being done on/with it. I'd love to just hear more about your
by kjeetgill 6y ago
Ever since Graal was opensourced I've been nothing short of mesmerized by all of the amazing work being done on/with it.
I'd love to just hear more about your experience building this on top of Graal/Truffle. Any interesting or surprising anecdotes?
- fniephaus 6y agoThanks! > I'd love to just hear more about your experience building this on top of Graal/Truffle. There are lots of good resources for learning how to implement a language in Truffle. In addition to the official documentation and the GraalVM Slack, I often find myself looking at other GraalVM languages that are open source (e.g. Graal.js, SimpleLanguage, GraalPython). Also, the tooling available to language implementers is quite good (e.g. all debugging and profiling tools for Java, Truffle's language-agnostic tools, Ideal Graph Visualizer for analyzing Graal/Truffle graphs, Graal/Truffle command-line flags, ...). > Any interesting or surprising anecdotes? Supporting a Smalltalk system on the GraalVM definitely comes with interesting challenges, here are a couple of examples: - Truffle is designed for building AST interpreters. Squeak is based on the Smalltalk-80 specification, which includes a well-defined bytecode set. For compatibility, you want a bytecode interpreter for Smalltalk. We even wrote a paper about how to do this with Truffle: https://fniephaus.com/2018/icooolps18-graalsqueak.pdf https://fniephaus.com/2018/icooolps18-graalsqueak.pdf. - Implementing some core Smalltalk mechanisms (e.g. allInstances, thisContext, becomeForward:, ...) and make them work well with the Graal compiler. - Smalltalk is not just a language, but also a programming system. TruffleSqueak uses AWT/Swing for rendering the UI on GraalVM, and SDL2 when AOT-compiled with native image. Running UI applications with the Graal compiler, however, can yield interesting results. See for yourself: https://www.youtube.com/watch?v=wuGVyzUsEqE https://www.youtube.com/watch?v=wuGVyzUsEqE. - Saving the image without breaking compatibility with the OpenSmalltalkVM and other Smalltalk VMs. - Most languages are file-based, so Truffle's APIs are designed for files. In Smalltalk, everything -- even code -- is an object. Let me know if you have any follow-up questions. You may also find our paper on TruffleSqueak (formerly GraalSqueak) an interesting read: https://fniephaus.com/2019/mplr19-graalsqueak.pdf https://fniephaus.com/2019/mplr19-graalsqueak.pdf. (edit: fix formatting and typos)
- kjeetgill 6y agoThat bouncing atoms video just blew my mind. It took whole minutes, but it got so incredibly fast... Only to grind to a halt as soon as the workload changed just a little, haha. I'd imagine you have a ton of bigger priorities, but being so hackable I wonder if there are easy tools within Graal/Truffle to hit that peak performance sooner and be stabler. I'd never expected it to stall so aggressively, probably worse than full GC. Still, blown away.
- logicchains 6y ago> Only to grind to a halt as soon as the workload changed just a little, haha. What really amazed me is the second time the mouse moved over the toolbar, towards the end of the video, it lagged less and was able to recover to the 200+fps much faster than the first time.
- fniephaus 6y agoCorrect, this indicates that recompilation occurred. The first time Graal compiled some of the UI machinery, which is all written in Smalltalk, no input events were triggered in the IDE. Consequently, the partial evaluator removed those code paths from compiled code. When we move the mouse over the window or start to click on UI elements, we cause recompilation, now with event handling compiled in. That's why these performance cliffs go away over time.
- tinco 6y agoWould it help to for example run a full test suite on your project, and use the compilation results of that as a sort of base? I remember a long time ago C# had a feature like this.
- fniephaus 6y agoIt would only if the test suite represents a realistic workload of your program. BTW: GraalVM EE has support for profile-guided optimizations: https://medium.com/graalvm/improving-performance-of-graalvm-native-images-with-profile-guided-optimizations-9c431a834edb https://medium.com/graalvm/improving-performance-of-graalvm-...