lazar-mitrovic / GraalVMREPL

REPL (read–eval–print loop) shell built on top of JavaFX and GraalVM stack, incorporating GraalJS, GraalPython, TruffleRuby and FastR

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

GraalVM REPL

REPL (read–eval–print loop) shell built ontop of JavaFX stack, GraalJS, GraalPython, TruffleRuby and FastR

GraalVM REPL GraalVM REPL

Building prerequisites

  • Up-to-date GraalVM with GRAALVM_HOME environment variable set. It can be obtained either in binary form from here for nightly versions or here for stable versions, or built from source (ideally using this script)

  • native-image

    • If you are using stable or nightly version of GraalVM you can obtain it using:

      gu install native-image
  • Truffle languages: GraalJS, GraalPython, TruffleRuby, FastR. Any combination of those will work, provided that pom.xml is edited accordingly.

    • If you are using stable or nightly version of GraalVM you can obtain them using:

      gu install python
      gu install ruby
      gu install R
    • If you are building from source you can include them as mx dynamic imports:

      cd $GRAAL_SOURCE/vm # Assuming that GRAAL_SOURCE points to right location
      
      export FASTR_CAPTURE_DEPENDENCIES
      export FASTR_RELEASE=true
      export FASTR_NO_RECOMMENDED=true
      export PKG_LDFLAGS_OVERRIDE="-L/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu"
      
      mx --dynamicimports /graal-js,graalpython,truffleruby,fastr,/substratevm build
  • Various other dependencies (which might or might not be needed): look here

  • native-image-agent in order to generate required reflection configuration in JVM mode.

Notice:

If you are building from source both languages and native-image can be built using aforementioned script by simply running:

./buildGraal.py --dynamicimports /graal-js,graalpython,truffleruby,fastr,/substratevm

Choosing languages

Go to pom.xml in project root and edit nativeImageArgs so that languages you have installed are uncommented (with ! removed), and that others are commented out.

So if you only have graalpython installed, your configuration would look like this:

                    <nativeImageArgs>
                        <!--<list>-!-language:js</list>-->
                        <list>--language:python</list>
                        <!--<list>-!-language:ruby</list>-->
                        <!--<list>-!-language:R</list>-->
                        ...

JVM run workflow

mvn clean javafx:run

(this will generate required reflection configuration - note that native-image-agent is required)

or if VSCode is used: CTRL+SHIFT+B / ⇧⌘B -> Run JVM

Debug

mvn clean javafx:run@debug

or if VSCode is used: install Debugger for Java extension and then press F5

Native-image build workflow

Platform Commands
Desktop: mvn clean client:build client:package client:run
Android: mvn -Pandroid clean client:build client:package client:install client:run
iOS: mvn -Pios clean client:build client:package client:install client:run

or if VSCode is used:

CTRL+SHIFT+B / ⇧⌘B -> Build (<platform>)

CTRL+SHIFT+B / ⇧⌘B -> Run (<platform>)

About

REPL (read–eval–print loop) shell built on top of JavaFX and GraalVM stack, incorporating GraalJS, GraalPython, TruffleRuby and FastR

License:Other


Languages

Language:Java 94.3%Language:Shell 3.1%Language:CSS 2.6%