编程语言
首页 > 编程语言> > 如何在Smalltalk中访问和使用Java库/包

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

作者:互联网

another Stackoverflow question的评论中提到,可以从Smalltalk访问Java包.

但是,我无法在网上搜索任何有关此信息.

任何有关这方面的见解都将受到高度赞赏.

解决方法:

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

>正如Victor建议的那样,使用JNI实现/端口绑定到Java.虽然没有
移植到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.
].

进一步参考

以下资源可以让您更好地了解它的含义:

>关于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

标签:java,smalltalk,smalltalkx
来源: https://codeday.me/bug/20190827/1744656.html