如何在 Smalltalk 中访问和使用 Java library/package
How to access and use Java library/package in Smalltalk
的评论中提到可以从 Smalltalk 访问 Java 包。
但是,我在网上搜索没有找到任何相关信息。
在这方面的任何见解将不胜感激。
基本上有三种方法可以(重新)使用 Smalltalk/X 中的 Java 代码:
按照 Victor 的建议使用 JNI 实现/端口绑定到 Java。虽然不是
移植到 Smalltalk/X,这是由 Johan Brichau 等人完成的。 -
搜索 "JavaConnect"、
然后有一个"Java Bridge"连接到远程JVM并在那里执行代码,
eXept 在其产品中开发和使用。 AFAIK,这是专有的
包 - 您可以为其购买(或不购买)许可证。欲知详情,
你可能想问 eXept.
最后是 stx:libjava,它是 Smalltalk/X API 以加载 Java
类 直接进入 运行 Smalltalk/X runtime.
像往常一样,这些选项中的每一个都各有利弊。我要去
关注最后一个 - 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.
].
更多参考资料
以下资源可能会让您更好地了解它的内容:
关于Smalltalk与Java的整合
https://www.sciencedirect.com/science/article/pii/S0167642313002839?via%3Dihub
走向 Java 中的运行时代码更新 - 使用 STX:LIBJAVA 的探索
https://pdfs.semanticscholar.org/d7da/968e4ab36d6deca51bd45b9bbb70e73a2afd.pdf?_ga=2.80940304.648336672.1556837288-1980277485.1556837288
显示如何开发简单 "Hello World!" 应用程序的快速浏览
使用 Smalltalk/X 和 Java
http://swing.fit.cvut.cz/projects/stx/doc/online/english/programming/java-helloworld.html
动态代码更新 STX:LIBJAVA
https://www.youtube.com/watch?v=p3J554BNEz8
和Java一起玩
https://youtu.be/p21z3bAt7b0
但是,我在网上搜索没有找到任何相关信息。
在这方面的任何见解将不胜感激。
基本上有三种方法可以(重新)使用 Smalltalk/X 中的 Java 代码:
按照 Victor 的建议使用 JNI 实现/端口绑定到 Java。虽然不是 移植到 Smalltalk/X,这是由 Johan Brichau 等人完成的。 - 搜索 "JavaConnect"、
然后有一个"Java Bridge"连接到远程JVM并在那里执行代码, eXept 在其产品中开发和使用。 AFAIK,这是专有的 包 - 您可以为其购买(或不购买)许可证。欲知详情, 你可能想问 eXept.
最后是 stx:libjava,它是 Smalltalk/X API 以加载 Java 类 直接进入 运行 Smalltalk/X runtime.
像往常一样,这些选项中的每一个都各有利弊。我要去 关注最后一个 - 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.
].
更多参考资料
以下资源可能会让您更好地了解它的内容:
关于Smalltalk与Java的整合 https://www.sciencedirect.com/science/article/pii/S0167642313002839?via%3Dihub
走向 Java 中的运行时代码更新 - 使用 STX:LIBJAVA 的探索 https://pdfs.semanticscholar.org/d7da/968e4ab36d6deca51bd45b9bbb70e73a2afd.pdf?_ga=2.80940304.648336672.1556837288-1980277485.1556837288
显示如何开发简单 "Hello World!" 应用程序的快速浏览 使用 Smalltalk/X 和 Java http://swing.fit.cvut.cz/projects/stx/doc/online/english/programming/java-helloworld.html
动态代码更新 STX:LIBJAVA https://www.youtube.com/watch?v=p3J554BNEz8
和Java一起玩 https://youtu.be/p21z3bAt7b0