どのようにアクセスするとSmalltalkの中でJavaライブラリ/パッケージを使用

rnso:

これは、上のコメントで言及された他のStackOverflowの質問 SmalltalkのからJavaパッケージにアクセスすることが可能であること。

しかし、私はネット検索でこのに関するすべての情報を見つけることができませんでした。

この点で任意の洞察力は高く評価されます。

JV:

基本的にそこにSmalltalkで(再)利用Javaコードには、3つの方法/ X:

  • ビクターが示唆したようにJNIを使​​用してJavaへ/ポートバインディングを実装します。スモールトーク/ Xに移植されていないが、これはヨハンBrichauらによって行われてきました。 - "JavaConnect" を検索し、

  • その後、「Javaブリッジ」を開発し、自社製品にeXeptによって使用される、リモートJVMに接続し、そこにコードを実行することがあります。私の知る限りでは、これは独自のパッケージです - あなたはそれ(またはしない)のためのライセンスを購入することができるかもしれません。詳細については、あなたはeXeptをお聞きしたいことがあります。

  • 直接のSmalltalk / Xのランタイムを実行しているにJavaクラスをロードするためにSmalltalk / X APIであるlibjava:そして最後に、STXがあります。

これらの各オプションには、いつものように、自分の長所と短所を持っています。私は最後の1に集中するつもりです - STX:libjava - これは@tukanを念頭に置いていたものです。

STX:libjava

免責事項:I(再)設計されており、(再)STXのほとんどを実装:私は偏ってるようlibjavaので、塩の粒で自分の意見を取ります。

STX:libjavaはSmalltalkの/ X環境にJavaコードをロードすることができますし、それを実行するパッケージです。ロードされた後は、JavaコードとJavaオブジェクトとSmalltalkのコードとSmalltalkのは、オブジェクトの違いはありません - 彼らは同じランタイム(ご希望の場合は、仮想マシン)の両方でのライブ。実際には、ランタイムのほとんどは、特定のオブジェクトやメソッドが実際のSmalltalkやJava 1であるかどうか知らない(と気にしません)。バイトコードインタプリタ(Smalltalkの/ Xのバイトコードは、Javaバイトコードとは非常に異なっているため)、(非常に同じ理由)JITコンパイラのフロントエンドだ - 区別ランタイム内部の2つの成分のみがあります。そのために違いは性能面の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.
].

また、参考文献

リソースに続いて、それが何であるか、あなたに良いアイデアを与えることがあります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=202515&siteId=1