Как получить доступ и использовать библиотеку / пакет Java в Smalltalk - PullRequest
3 голосов
/ 02 мая 2019

В комментариях к было упомянуто еще один вопрос Stackoverflow , что возможно получить доступ к пакетам Java из Smalltalk.

Однако я не смог найти какую-либо информацию по этому поводу при поиске в сети.

Любое понимание в этом отношении будет высоко оценено.

1 Ответ

5 голосов
/ 03 мая 2019

По сути, есть три способа (пере) использования Java-кода в Smalltalk / X:

  • Реализация / привязка портов к Java с использованием JNI, как предложил Виктор.Хотя это не было перенесено на Smalltalk / X, это было сделано Johan Brichau et al.- искать «JavaConnect»,

  • , затем есть «Java Bridge» для подключения к удаленной JVM и выполнения там кода, разработанного и используемого eXept в своих продуктах.AFAIK, это проприетарный пакет - вы можете приобрести лицензию на него (или нет).За подробностями вы можете обратиться к eXept.

  • и, наконец, есть stx: libjava, который является API-интерфейсом Smalltalk / X для загрузки классов Java непосредственно в среду выполнения Smalltalk / X.

Каждый из этих вариантов, как обычно, имеет свои плюсы и минусы.Я собираюсь сосредоточиться на последнем - stx: libjava - это тот, который имел в виду @tukan.

stx: libjava

Отказ от ответственности : I (пере) спроектировал и (пере) реализовал большую часть stx: libjava, так что воспринимайте мои взгляды с недоверием, пока я предвзят.

stx: libjava - это пакет, который позволяет загружать код Java в среду Smalltalk / X ивыполнить его.После загрузки нет разницы между кодом Java и объектами Java, а также кодом Smalltalk и объектами Smalltalk - они оба живут в одной и той же среде выполнения (виртуальная машина, если вы предпочитаете).Фактически, большая часть времени выполнения не знает (и не заботится), является ли данный объект или метод фактически Smalltalk или Java.В среде выполнения есть только два компонента, которые различают - это интерпретатор байт-кода (поскольку байт-код Smalltalk / X сильно отличается от байт-кода Java) и внешний интерфейс JIT-компилятора (по той же причине).Из-за этого нет различий в производительности между выполнением кода Smalltalk или Java.

Простой пример

Вот пример использования процессора SAXON XSLT, реализованного в Java из 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.
].

Дополнительные ссылки

Следующие ресурсы могут дать вам лучшее представление о том, что это такое:

...