Какой динамический язык может легко использовать библиотеки из других языков?

1

Скажите, почему вы думаете, что Python, Perl, Ruby и т.д. проще всего подключать модули с других языков с минимальными мыслями.

Чтобы пояснить, пример: я хочу написать бизнес-логику в Python, но использовать функциональность, которая удобно существует как модуль Perl.

Другими словами, какой язык "просто работает" с большинством модулей?

  • 5
    Я думаю, вам придется уточнить, что именно вы пытаетесь сделать, иначе трудно дать значимый ответ.
  • 0
    Пожалуйста, измените название вопроса и первый абзац, чтобы они имели смысл.
Теги:
module
dynamic-languages

7 ответов

9
Лучший ответ

Perl имеет очень хорошую поддержку для других языков с помощью Inline набора модулей.

Inline::Python позволяет импортировать модули, классы и функции Python в ваш код Perl и вызывать их из Perl, как если бы они были родными - см. Импорт функций.

Inline:: Ruby работает практически так же.

  • 0
    +1, мне это нравится. Интересно, есть ли у Python похожая функциональность ... пора идти и смотреть!
6

Parrot VM выглядит как способ для этой цели, поскольку

В настоящее время в попугате находится множество языковых реализаций в различных этапы завершения, включая Tcl, Javascript, Ruby, Lua, Scheme, PHP, Python, Perl 6, APL и .NET. переводчик байт-кода

Насколько мне кажется, какой из этих языков вы используете как "главный драйвер", а какой именно "гости" для этого модуля или что-то просто проверьте, что вы выбрали тот, чья реализация Parrot завершена и зрелая (поскольку Parrot - это довольно новый проект, а также некоторые из этих реализаций на нем).

  • 1
    +1. Я видел это некоторое время назад, и это, кажется, немного повзрослело. Вместо того, чтобы передавать команды в оболочку / интерпретатор с помощью скажем popen , знаете ли вы, если вы можете получить доступ к функциям из других сценариев, кросс-сценарий, если это имеет смысл? Это другой способ мышления, чтобы просто запустить другой скрипт, поэтому я упоминаю об этом.
  • 0
    @Ninefingers, да, в теории - функции должны вызывать друг друга в Parrot независимо от того, на каком языке они написаны (так же, как это работает в других кроссплатформенных виртуальных машинах, таких как JVM или .NET) - - но у меня пока нет практического опыта работы с Parrot.
Показать ещё 2 комментария
3

Если вы хотите подключить модуль Perl, языком, который лучше всего подходит для этого, является Perl. Perl способен правильно представлять семантику и возможности кода, написанного на Perl. Это действительно не должно быть шоком.

Если у вас есть автономная программа, которую вы хотите вызвать из другой программы в своем собственном процессе, а не постоянно взаимодействовать, любой из этих языков может сделать это с помощью программ, написанных на любом языке. В этот момент вы не используете другие языки внутри программы, а просто вызываете другие проблемы.

Существует несколько проектов для объединения различных пар и проектов (таких как Parrot), которые стремятся предоставить платформу для большого количества языков для совместимости и проектов (например,.NET), которые почти случайно обеспечивают совместимость между ранее несовместимыми языками. Тем не менее, я не думаю, что большинство из них такие же надежные, зрелые и подходят для комбинирования нормального кода, как вы надеетесь.

  • 0
    Для .NET IronPython готов к работе и поставляется в аренду с одним продуктом Microsoft Dynamics. IronRuby актуален в статусе релиза.
0

Большинство языков сценариев могут обрабатывать такие вещи (путем запуска внешних программ, написанных на других языках), но кажется, что ваш лучший выбор может быть каким-то сценарием оболочки (пользователи Windows называют этот "пакетный скриптинг", но Синтаксис DOS ужасен и не рекомендуется.) Программисты UNIX свободно перемешивали языки таким образом в течение длительного времени. В Windows вы можете установить Cygwin для получения полнофункциональной оболочки BASH.

Первоначально оболочка была предназначена как пользовательский интерфейс, используемый для запуска других программ или объединения их интересными способами. Однако многие оболочки (в частности, оболочка Борна или ее современный потомок, BASH) также являются полноценными языками программирования. Каждый из ваших "модулей" может быть создан как отдельные автономные программы, которые будут выполняться оболочкой script.

0

Продолжительность выполнения динамического языка была специально разработана, чтобы позволить одному динамическому языку использовать объекты и функции, определенные на другом динамическом языке. В настоящее время Python и Ruby имеют DLR-реализации, но я ничего не слышал о Perl.

Для использования DLR требуется либо .NET, либо Mono.

  • 0
    Есть Perl.NET
  • 1
    Это поддерживается? Я ничего не вижу с 2002 года.
0

Я собираюсь ответить на более архитектурный уровень здесь. Вопрос в том, что вы пытаетесь сделать... вы хотите написать свою бизнес-логику в Python и вызвать функцию Perl из Python? Или вы хотите выполнить script? Если да, то как они будут общаться?

Я подозреваю, но не знаю, что Parrot VM может позволить вам сделать это, но, как указывает Майк, возникают трудности. Кросс-языковая работа сложна, так же как и IPC по программам трудно, если вы не используете какую-то форму свободной связи (не привязанной к языку). С этой целью вы можете подумать о настройке контроллера на одном языке и о том, чтобы все остальные разговаривали с помощью dbus очереди или любого другого механизма предпочитайте ту платформу, на которой вы находитесь. На самом деле не имеет значения, как вы это делаете (расскажите о дебатах о лучшем механизме), но правильно спроектировав его, очень легко разговаривать на разных языках и строить плагины. Например, у вас может быть очередь для process_new_user, например. Любой script, который регистрируется в этой очереди, получает доступ к данным, поэтому новый разработчик может легко добавить функциональность для своей части программы. Интерпретируйте это как: вы можете легко использовать другой язык сценариев для реализации этого бита.

0

все 3 языка имеют очень хорошие, четкие возможности для простого вызова любого исполняемого файла в подпроцессе (включая исполняемые файлы, такие как python somethingelse.py или ruby somethingelse.rb).

используйте то, что вы знаете лучше всего.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню