gpt4 book ai didi

java - 如何在 Smalltalk 中访问和使用 Java 库/包

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:00:01 24 4
gpt4 key购买 nike

another Stackoverflow question 的评论中提到了它可以从 Smalltalk 访问 Java 包。

但是,我在网上搜索没有找到任何相关信息。

在这方面的任何见解都将受到高度赞赏。

最佳答案

基本上有三种方法可以在 Smalltalk/X 中(重新)使用 Java 代码:

  • 按照 Victor 的建议,使用 JNI 实现与 Java 的端口绑定(bind)。虽然不是移植到 Smalltalk/X,这是由 Johan Brichau 等人完成的。 -搜索“JavaConnect”,

  • 然后有一个“Java Bridge”连接到远程 JVM 并在那里执行代码,eXept 在其产品中开发和使用。 AFAIK,这是专有的包 - 您可以为其购买(或不购买)许可证。欲知详情,你可能想问问 eXept。

  • 最后是 stx:libjava,它是一个用于加载 Java 的 Smalltalk/X API类直接进入运行 Smalltalk/X 运行时。

像往常一样,这些选项中的每一个都各有利弊。我要去关注最后一个 - stx:libjava - 这是 @tukan 想到的。

stx:libjava

免责声明:我(重新)设计和(重新)实现了大部分 stx:libjava,所以请由于我有偏见,我的观点持保留态度。

stx:libjava 是一个允许将 Java 代码加载到 Smalltalk/X 中的包环境并执行。一旦加载,Java 就没有区别了代码和 Java 对象以及 Smalltalk 代码和 Smalltalk 对象——它们都存在在同一运行时(如果您愿意,可以使用虚拟机)。事实上,大多数运行时不知道(也不关心)给定的对象或方法是否是实际上是一个 Smalltalk 或 Java 的。运行时内部只有两个组件区分 - 这是一个字节码解释器(因为 Smalltalk/X 字节码是与 Java 字节码非常不同)和 JIT 编译器前端(对于相同的原因)。因此,执行之间在性能方面没有区别Smalltalk 或 Java 代码。

简单示例

这是一个使用 Java 实现的 SAXON XSLT 处理器的例子Smalltalk/X:

[
config := JAVA net sf saxon Configuration new.
config setAllNodesUntyped: true.
factory := JAVA net sf saxon TransformerFactoryImpl new: config.
stylesheet := factory newTemplates:
(JAVA javax xml transform stream StreamSource new:
(JAVA java io File new: 'cd.xsl')).
input :=
(JAVA javax xml transform stream StreamSource new:
(JAVA java io File new: 'cd.xml')).
output :=
(JAVA javax xml transform stream StreamResult new:
(JAVA java io File new: 'cd.html')).
transformer := stylesheet newTransformer.
transformer transform: input to: output.
] on: JAVA java io IOException do:[:ex|
Transcript showCR:'I/O error: ', ex getMessage.
ex printStackTrace.
] on: JAVA javax xml transform TransformerException do:[:ex|
Transcript showCR:'Transform error: ', ex getMessage.
ex printStackTrace.
].

更多引用

以下资源可能会让您更好地了解它是关于什么的:

关于java - 如何在 Smalltalk 中访问和使用 Java 库/包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55956581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com