rns*_*nso 3 java smalltalk smalltalkx
在另一个Stackoverflow问题的评论中提到,可以从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运行时中。
与往常一样,这些选项中的每一个都有其优点和缺点。我将重点介绍最后一个-stx:libjava-这是@tukan想到的一个。
免责声明:我(重新)设计和(重新)实现了stx:libjava的大部分内容,因此,在我有偏见的情况下,我会持保留态度。
stx:libjava是一个软件包,允许将Java代码加载到Smalltalk / X环境中并执行它。加载后,Java代码与Java对象以及Smalltalk代码和Smalltalk对象之间没有区别-它们都位于同一运行时中(如果您愿意,可以使用虚拟机)。实际上,大多数运行时都不知道(也不在乎)给定的对象或方法实际上是Smalltalk还是Java。运行时内部只有两个组件可以区分-一个字节码解释器(因为Smalltalk / X字节码与Java字节码非常不同)和JIT编译器前端(出于同样的原因)。因此,在执行Smalltalk或Java代码之间在性能方面没有区别。
这是使用从Smalltalk / X用Java实现的SAXON XSLT处理器的示例:
[
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.
].
Run Code Online (Sandbox Code Playgroud)
以下资源可以使您更好地了解它的含义:
关于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