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

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

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

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

Ответы [ 7 ]

9 голосов
/ 20 марта 2010

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

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

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

6 голосов
/ 20 марта 2010

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

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

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

3 голосов
/ 20 марта 2010

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

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

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

0 голосов
/ 20 марта 2010

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

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

0 голосов
/ 20 марта 2010

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

Чтобы использовать DLR, вам нужен .NET или Mono.

0 голосов
/ 20 марта 2010

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

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

0 голосов
/ 20 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...