Skocz do zawartości
joorvishoon

[różne] Łączenie podprogramów w różnych językach

Rekomendowane odpowiedzi

Witam

 

Czeka mnie przygotowanie sporej aplikacji (projekt akademicki), która ma łączyć kilka języków. Bez wdawania się w szczegóły - ma się składać z podstawowego elementu zarządzającego, napisanego w języku wysokiego poziomu (Java lub C#) oraz pluginów w przeróżnych językach - Java, C#, C++ i co tam jeszcze przyjdzie do głowy. Jajo polega na tym że pluginy nie mogą być wkompilowane ani na sztywno przyczepione do kodu - powinna być możliwość w miarę dynamicznego podczepiania ich i komunikacji.

 

I teraz siedzę i robię mały research z kilkoma osobami w kwestii jakim sposobem swobodnie łączyć te języki. Pod obstrzał trafiły takie technologie jak:

 

- CORBA i inne sieciowe

- SOAP (jako szczególnie popularny)

- pipe'y systemowe

- łączenie przez języki skryptowe (Python)

 

Mnie osobiście najbardziej pasuje ta ostatnia opcja, gdyż głupio by było żeby awaria stosu TCP/IP w systemie powodowała zwis programu (CORBA/SOAP), a sprawdzanie pipe'a co 5 ms wydaje mi się dziecinne w erze aplikacji zdarzeniowych.

 

I teraz moje pytanie - czy jest jakiś fajny sposób na łączenie tych języków pythonem? Nie musi być jednolity, w sensie do każdego z języków może być zdefiniowany osobny interfejs, z tym że żeby to wszystko śmigało na CPython'ie, w sensie żeby te wszystkie elementy śmigały na jednej płaszczyźnie, mogły być uruchamiane jednym skryptem (przez który następowała by komunikacja). Z tego co się doczytałem komunikacja w obie strony z C/C++ jest bezproblemowa (w sensie że można odpalić bibliotekę C/C++ z pod pythona i wywływać funkcje C, oraz przekazać do programu C callback). Do javy jest Jepp i Jpype, ale nie wiem do końca czy któryś z nich dostarcza możliwość komunikacji w obie strony, bo oryginalnie chyba były planowane do jednostronnej komunikacji, bez callback'ów. No i do C# jest pythonNET który to zdaje się pracuje tak jak Jpype i nie wiem do końca też jak to wygląda z komunikacją w obie strony. (będę to jeszcze weryfikował)

 

Z tego co się doczytałem to jython i IronPython nie zadowolą mnie, gdyż są natywnie pisane w środowiskach odpowiednio JVM i .NET, przez co fajnie współpracują odpowiednio z Javą i C# ale nic nie załątwiają w kwestii uniwersalnej komunikacji.

 

Jest też opcja żeby odpalać jako osobne podprogramy c/C++ z przystawką pythonową, Javę z przystawką Jythonową i .NET z przystawką IronPythonową, a te trzy elementy spiąć samym pythonem, ale się już nie doczytałem czy da radę tak zrobić czy nie.

 

Oczywiście jak ktoś zna lepszy sposób na ożenienie tych trzech języków jestem jak najbardziej otwarty na propozycje. Ofkoz nie chodzi o to żeby ktoś za mnie robił research, sam będę go kontynuował, ale jakby ktoś miał doświadczenia z łączenie heterogenicznych kodów, i mógłby mi pomóc to bardzo chętnie.

 

W każdym razie będę zobowiązany za pomoc w tej płaszczyźnie, bo okazuje się że problem jest niebagatelny.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

IMO najprostszym i w sumie starym patentem jest wymiana danych przez sockety TCP/IP (np. na localhost) - nie ma nic bardziej uniwersalnego i łatwiejszego ;) Przy takim rozwiązaniu banalna jest również komunikacja w sieci (zdalne moduły, równoległe instancje na różnych kompach itd.)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

IMO najprostszym i w sumie starym patentem jest wymiana danych przez sockety TCP/IP (np. na localhost) - nie ma nic bardziej uniwersalnego i łatwiejszego ;) Przy takim rozwiązaniu banalna jest również komunikacja w sieci (zdalne moduły, równoległe instancje na różnych kompach itd.)

 

No tak, ale załóżmy, że z tej opcji zrezygnuję (mam powody by nie lubić tej opcji) to jak wygląda opcja z komunikacją pythonową? Ma ktoś jakieś doświadczenia z tym - zwłaszcza z łączeniem cPythona z Javą albo .netem na zasadzie komunikacji dwustronnej?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...