龙空技术网

借助Graalvm设计自己的开发语言

zoe2020 432

前言:

而今大家对“netbeans导入文件夹”可能比较关怀,朋友们都想要了解一些“netbeans导入文件夹”的相关资讯。那么小编同时在网上汇集了一些对于“netbeans导入文件夹””的相关知识,希望大家能喜欢,小伙伴们一起来学习一下吧!

SimpleLanguage 简介

我们发现,开始实现您自己的语言的最简单方法是扩展现有语言,例如 SimpleLanguage。 SimpleLanguage是一种使用Language API构建的演示语言。SimpleLanguage 项目展示了如何使用语言 API 编写您自己的语言。它旨在使用大多数可用的Truffle 语言实现框架(以下简称“Truffle”)功能,并通过内联源文档广泛记录它们的使用。

首先,确保Maven3和 GraalVM 在您的系统中可用。

使用以下命令克隆 SimpleLanguage 存储库:

git clone 

JAVA_HOME使用 Linux 的命令行 shell 将环境变量和环境变量设置PATH为 GraalVM 主目录和 bin 文件夹:

export JAVA_HOME=/path/to/graalvmexport PATH=/path/to/graalvm/bin:$PATH

对于 macOS,请使用:

export JAVA_HOME=/path/to/graalvm/Contents/Homeexport PATH=/path/to/graalvm/Contents/Home/bin:$PATH

原文博客 wuxiongwei.com

mvn package从 SimpleLanguage 文件夹执行以构建语言。该命令还在目录中构建一个slnative可执行文件simplelanguage/native和一个sl-component.jar语言组件,稍后可以使用GraalVM Updater工具将其安装到 GraalVM 中。请验证该native-image插件在您的 GraalVM 发行版中是否可用,以避免构建失败:

gu list gu install native-image

您可以通过运行以下命令在打包阶段禁用 SimpleLanguage 本机可执行文件构建:

export SL_BUILD_NATIVE=falsemvn package

在 SimpleLanguage 根文件夹中运行:

./sl ./language/tests/HelloWorld.sl

SimpleLanguage 演示语言根据通用许可许可证(UPL) 获得许可。

IDE 设置

Truffle 框架提供了与语言无关的基础设施,通过提供额外的 API 来实现标准 IDE 功能。如果您想试验您的语言并获得 IDE 的好处,请考虑导入 SimpleLanguage 作为示例。

原文博客 wuxiongwei.com

Eclipse

SimpleLanguage 教学项目已经使用 Eclipse Neon.2 Release 4.6.2 和 Eclipse Oxygen.3A 进行了测试。要将项目文件夹导入所需的 Eclipse 环境:

使用新工作区打开 Eclipse。从 Eclipse 市场(Help -> Eclipse Marketplace)安装m2e和插件。m2e-apt最后,SimpleLanguage从 File -> Import -> Maven -> Existing Maven Projects -> 浏览到 SimpleLanguage 文件夹 -> Finish 导入项目。NetBeans

NetBeans 为调试任意语言提供 GUI 支持。要将 SimpleLanguage 上传到 NetBeans 界面,请执行文件 -> 打开项目 -> 选择simplelanguage文件夹 -> 选中打开所需项目 -> 打开项目。

IntelliJ IDEA

SimpleLanguage 项目已使用 IntelliJ IDEA 进行了测试。打开 IntelliJ IDEA,然后从主菜单栏中选择 File -> Open -> Navigate to 并选择simplelanguage文件夹 -> 按 OK。所有依赖项都将自动包含在内。

运行 SimpleLanguage

要运行 SimpleLanguage 源文件,请执行:

原文博客 wuxiongwei.com

./sl language/tests/HelloWorld.sl

要查看已编译函数的汇编代码,请运行:

./sl -disassemble language/tests/SumPrint.sl
转储图

要调查性能问题,我们推荐使用Ideal Graph Visualizer (IGV) ,它是构建在Oracle GraalVM 企业版之上的任何语言实施者的必备工具。它可以在Oracle 技术网下载页面上单独下载。

解压下载的包,进入bin目录,启动IGV:

cd idealgraphvisualizer/binidealgraphvisualizer

从 SimpleLanguage 根文件夹执行以下命令将图形转储到 IGV:

./sl -dump language/tests/SumPrint.sl
调试

要使用 Java 调试器开始调试 SimpleLanguage 实现,请将-debug选项传递给程序的命令行启动器:

./sl -debug language/tests/HelloWorld.sl

然后在端口 8000 上附加一个 Java 远程调试器(如 Eclipse)。

GraalVM 的 SimpleLanguage 组件

使用Truffle 框架实现的语言可以打包为组件,以后可以使用GraalVM Updater工具将其安装到 GraalVM 中。mvn package在 SimpleLanguage 文件夹中运行也会构建一个sl-component.jar. 该文件是 GraalVM 的 SimpleLanguage 组件,可以通过运行以下命令进行安装:

gu -L install /path/to/sl-component.jar
SimpleLanguage 原生图像

使用 Truffle 构建的语言可以使用Native Image进行 AOT 编译。mvn package在 SimpleLanguage 文件夹中运行还会slnative在该目录中构建一个可执行文件native。该可执行文件是作为单个原生应用程序的完整 SimpleLanguage 实现,不需要 GraalVM 即可执行 SimpleLanguage 代码。除此之外,与在 GraalVM 上运行相比,使用本机可执行文件的一大优势是启动时间大大加快,如下所示:

原文博客 wuxiongwei.com

time ./sl language/tests/HelloWorld.sl== running on org.graalvm.polyglot.Engine@2db0f6b2Hello World! real    0m0.405suser    0m0.660ssys     0m0.108s time ./native/slnativelanguage/tests/HelloWorld.sl== running on org.graalvm.polyglot.Engine@7fd046f06898Hello World! real    0m0.004suser    0m0.000ssys     0m0.000s

该片段显示了使用启动器脚本定时执行“Hello World”程序,该sl启动器脚本使用 Native Image 在 GraalVM 上运行 SimpleLanguage。我们可以看到,在 GraalVM 上运行时,执行需要 405 毫秒。由于我们的 SimpleLanguage 程序只执行一条打印语句,我们可以得出结论,几乎所有这些时间都花在了启动 GraalVM 和初始化语言本身上。当使用本机可执行文件时,我们看到执行只需要 4 毫秒,这表明启动速度比在 GraalVM 上运行快两个数量级。

有关该native-image工具的更多信息,请考虑阅读参考手册。

禁用 SimpleLanguage Native Image Build

通过 Maven 构建本机可执行文件附加到 Mavenpackage阶段。SL_BUILD_NATIVE由于本机可执行文件构建可能需要一些时间,我们通过将环境变量设置为如下方式提供跳过此构建的选项false:

export SL_BUILD_NATIVE=falsemvn package...[INFO][INFO] ------------------------------------------------------------------------[INFO] Building simplelanguage-graalvm-native[INFO] ------------------------------------------------------------------------[INFO][INFO] --- exec-maven-plugin:1.6.0:exec (make_native) @ simplelanguage-graalvm-native ---Skipping the native image build because SL_BUILD_NATIVE is set to false.[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------...
使用最新(开发)版本的编译器运行 SimpleLanguage

要使用 Graal 编译器的开发版本运行 SimpleLanguage,我们必须使用该编译器构建 GraalVM。克隆graal存储库 () 并按照vm/README.md文件中的说明构建 GraalVM。

完成后,指向JAVA_HOME新建的 GraalVM 并继续正常构建和运行 SimpleLanguage。

使用命令行运行 SimpleLanguage

执行 SimpleLanguage 代码通常使用脚本来完成,该sl脚本设置必要的命令行,具体取决于JAVA_HOME指向 GraalVM 还是其他 JVM 安装。以下小节描述了这两种情况的命令行。

使用 GraalVM 作为 JAVA_HOME 运行 SimpleLanguage

假设JAVA_HOME指向 GraalVM 安装并且当前工作目录是该simplelanguage目录,要运行 SimpleLanguage 应该执行以下命令:

$JAVA_HOME/bin/java \    -cp launcher/target/launcher-22.1.0-SNAPSHOT.jar \    -Dtruffle.class.path.append=language/target/simplelanguage.jar \    com.oracle.truffle.sl.launcher.SLMain language/tests/Add.sl

简而言之,我们将启动器 JAR 放在类路径上并执行其主类,但我们通过使用-Dtruffle.class.path.append选项通知 GraalVM SimpleLanguage 的存在并向其提供胖语言 JAR 的路径。将语言放在单独的类路径上可确保语言实现与其嵌入上下文(在本例中为启动器)之间的强分离。

禁用类路径分离

笔记!这应该只在开发过程中使用。

出于开发目的,禁用类路径分离并在应用程序类路径上启用语言实现(例如,用于测试语言的内部)很有用。

Maven Central 上的 Language API JAR 导出其模块信息中的所有 API 包。–upgrade-module-path将此选项与此 JAR 一起应用-Dgraalvm.locatorDisabled=true以导出语言 API 包:

-Dgraalvm.locatorDisabled=true --module-path=<yourModulePath>:${truffle.dir} --upgrade-module-path=${truffle.dir}/truffle-api.jar

用于导出语言 API 包的示例 POM–upgrade-module-path可以在Simple Language POM.xml文件中找到。

注意:禁用定位器会有效地从模块路径中删除所有已安装的语言,因为定位器还会为这些语言创建类加载器。要继续使用内置语言,请将模块路径指向所有需要的语言主目录(例如,$GRAALVM/languages/js),将它们添加到模块路径中。

其他 JVM 实现

与包含运行使用Truffle实现的语言所需的所有依赖项的 GraalVM 不同,其他 JVM 实现需要额外的 JAR 才能出现在类路径上。这些是 Maven Central 提供的 Language API 和 GraalVM SDK JAR。

假设JAVA_HOME指向一个股票 JDK 安装,并且当前工作目录是该simplelanguage目录,并且该目录中存在 Language API 和 GraalVM SDK JAR,可以使用以下命令执行 SimpleLanguage:

$JAVA_HOME/bin/java \    -cp graal-sdk-22.1.0.jar:truffle-api-22.1.0.jar:launcher/target/launcher-22.1.0-SNAPSHOT.jar:language/target/simplelanguage.jar \    com.oracle.truffle.sl.launcher.SLMain language/tests/Add.sl

原文博客 wuxiongwei.com

标签: #netbeans导入文件夹