joorvishoon Opublikowano 28 Października 2010 Zgłoś Opublikowano 28 Października 2010 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość <account_deleted> Opublikowano 28 Października 2010 Zgłoś Opublikowano 28 Października 2010 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.) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
joorvishoon Opublikowano 28 Października 2010 Zgłoś Opublikowano 28 Października 2010 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? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...