Jython

Przeczytałem przed chwilą 18. numer WMag-a z października 2009r. Wpadł mi w oko szczególnie artykuł na temat języków skryptowych do wykorzystania w grach w celu tworzenia logiki gry. Właściwie było to jedynie zaprezentowanie języków LUA oraz Python w takim kontekście.

Kiedyś byłem ogromnym fanem Pythona i popełniłem o nim kilka wpisów. Tak było dopóki nie zapragnąłem stworzyć w nim czegoś większego. Wówczas dynamiczne typowanie dało mi się ostro we znaki 😉 Później używałem go tylko sporadycznie gdy przychodziło do napisania czegoś prostego lub sprawdzenia działania jakiegoś kawałka kodu.

Po przeczytaniu wspomnianego na początku artykułu pomyślałem, że skoro ostatnio tak bardzo rzeźbię w języku Java to dlaczego nie spróbować jak się sprawy mają w łączeniu go z Pythonem. Wszedłem więc na stronę Jythona. Ku mojemu zdziwieniu, okazało się, że nie jest to jedynie biblioteka, a cały interpreter, który można uruchomić zwyczajnie z konsoli: java -jar jython.jar.

Tak czy inaczej załączyłem tegoż samego JARa do projektu w Netbeansie i wypróbowałem krótki kod:

PythonInterpreter in = new PythonInterpreter();
in.exec(
"print ‚Hello World");

Moim oczom ukazał się prawdopodobnie znany już wszystkim napis.

Wszystko to pięknie, ale w sumie nie jest zbytnio szokujące. Tym co mnie prawdziwie zaskoczyło był fakt świetnej współpracy Jythona z Javą:


package jythontest;

import org.python.util.PythonInterpreter;

public class Main {

    public static void hello() {
        System.out.println("Hello World");
    }

    public static void main(String[] args) {
        String codeString =
            "from jythontest import Main; " +
            "Main.hello()";

        PythonInterpreter in = new PythonInterpreter();
        in.exec(codeString);
    }
}

Po tym prostym przykładzie widzimy, że kod z Jythona ma takie same możliwości jak kod pisany w Javie.

Niewątpliwym plusem takiego stanu rzeczy jest fakt, że dodanie możliwości modyfikacji zachowania gry sprowadziłaby się jedynie do stworzenia systemu ładowania i wykonywania odpowiednich skryptów w odpowiednim czasie.

Podsumowując: Całkiem ciekawa zabawka 🙂

Reklamy

14 myśli nt. „Jython

  1. Witam.
    Mam do Ciebie pytanie jako do bardziej doświadczonego developera Pythona.
    Od jakiegoś czasu rozważam przejście z C/C++/Java na Pythona zarówno pod względem aplikacji pc i www.
    Z moich doświadczeń wynika że Python jest zgrabny do pisania i dość łatwo do ogarnięcia.
    Jednak nie wiem jak to się sprawdza przy projektach trwających dłużej nic rok.

    Czy możesz mi napisać co spowodowało że porzuciłeś Pythona?

    PS. Chce przejść na Pythona bo rynek C/C++/Java się kurczy a ostatnio w coraz szybszym tempie.

    • U mnie o odstawieniu Pythona na dalszy plan zadecydowało przywiązanie do statycznego typowania zmiennych. Chodzi mi o jakość debugowania kodu. Kiedy masz statyczne typowanie to bardzo wiele błędów jesteś w stanie wyłapać na etapie kompilacji. W Pythonie natomiast błędy takie okażą się zwyczajnie nie działaniem, złym działaniem lub w najgorszym wypadku wywalaniem programu.

      Dla małych projektów jest ok, ale pisanie dużych rzeczy w Pythonie jest po prostu zbyt męczące na dłuższą metę.
      Druga – mniej ważna – kwestia to prędkość Pythona. Jest ona raczej średnio zadowalająca.
      Trzecia rzecz to fakt, że w czasie gdy się uczyłem nie było/nie znalazłem fajnych środowisk programistycznych dla Pythona. Jedno się ładnie zapowiadało, ale było jeszcze raczkującym projektem.

      Podsumowując: Jeśli, ktoś chce i jest uważny podczas pisania to nawet Python nada się do stworzenia wielkich rzeczy (w końcu programiści PHP, żyją i radzą sobie dobrze), ale nie jest to najwygodniejsze 🙂

      Ad.PS.: Dlaczego uważasz, że rynek C/C++/Java się kurczy. C i C++ pozostaną niezastąpione pod wieloma względami i trudno jest wyprzeć ten język mimo iż programowanie w nim to jak kopanie łyżką tunelu metra. Jeśli chodzi o Javę to jest ona stosowana bardzo często, głównie przy rozwiązaniach aplikacji webowych (jakieś webservices itp.). Oprócz tego Java jest również dość często stosowana do pisania zwykłych aplikacji, w których zależy nam na wieloplatformowości. Jeśli nie to pewnie częściej wybierany jest C# (choć też można go uruchomić pod Linuxem; pewnie na Mac-u też, ale tego nie wiem)

  2. Hej,

    Dzięki za odpowiedź.

    Z szybkością Pythona jestem pogodzony. Chodzi mi głównie o aplikacje biznesowa np. do zarządzania księgowością czy produkcją a tam szybkość nie jest kluczowa. Myślę że Python dałby rade.

    A rynek się kurczy bo takich aplikacji jest coraz mniej w C++/Java. Wg mnie wygląda na to że C# wykrada swój kawałek tortu kosztem reszty.
    Aplikacje C++ są szybkie i wydane, ale ich pisanie to czasem ciężka sprawa. Natomiast Java przy większych projektach potrafi sporo zwalniać.

    W webdev Java wypada dość dobrze, lecz proces tworzenia aplikacji jest żmudny i długotrwały. Nie wspomnie już o kosztach hostingu zewnętrznego.

    Sam Python został przeze mnie wybrana bo jest szybki w implementacji, szybko i sprawnie można wdrażać nowe moduły etc.

    Mam 3x lat i silne przyzwyczajenia do języków klasycznych, ale może przyszedł czas na zmianę technologii.

    Czy coś poza typowaniem zraziło Ciebie w Pythonie?

  3. Trochę mi się nie podoba koncepcja z plikami i metodami o nazwie __init__. Dodatkowo potrzeba podawania w metodach klasy jako pierwszy argument ‚self’. Ale to rzeczy kosmetyczne i nie powinny wpływać mocno na wybór.

    Co do zwalniania Javy przy dużych projektach – wydaje mi się, że to jest głównie spowodowane wykorzystaniem Swinga (ale to tylko takie moje podejrzenia). Ale założę się, że Python nie będzie szybszy 🙂

    Polecam przyjrzeć się Jythonowi. Potrafi kompilować kod Pythona do bytecodu Javy i dodatkowo pozwala na korzystanie z bibliotek Javowskich. Ostatnio z interpretera shellowego Jythona udało mi się stworzyć okienko JFrame z przyciskiem zaledwie w kilka linijek 😉

    Odnośnie prędkości aplikacji biznesowych to też nie byłbym zbytnio rozrzutny. Chyba, że mierzysz w duże firmy z dobrym sprzętem. Wiele małych firm ma nietęgie maszyny z Windowsem, 9. antywirusami, 5. firewallami i Gadu-Gadu 😉

  4. Rozważam standardowego Pythona. Jeśli miałbym używać Jythona to chyba bym został przy Javie.

    Firma w której pracuję (ok. 100 osób) ma raczej średnie komputery i zauważyłem że programy w Javie/Swing są odczuwalnie wolniejsze od napisanych w Python/PyQT. Sam start Javy generuje spore opóźnienia.

    Czyli do was Pythona w dużych projektach zaliczasz:
    – kiepska składnia
    – dziwne pliki (__init__)
    – wolne działania
    – dynamiczne typowanie

    A jako IDE polecam Tobie Eclipse + PyDev + PyLint i żadne błędy składniowe nie będą Ci strasznie.

    Jak coś masz do dodanie pisz smiało 🙂

    • Tylko do sprostowania, bo nie mówiłem nic na temat składni Pythona. Ja wręcz uważam, że jest świetna (z wyjątkiem plików i metod __init__ 🙂 )

      Ja wczoraj wypróbowałem plugin do Netbeansa do Pythona i wygląda na to, że też jest całkiem niezły.

  5. A udało CI się skłonić NB do podpowiadania składni dla bibliotek np. PyQT?
    Ja zauwazyłem ze NB nie podpowiada za to w Eclipsie+PyDev działa to świetnie.

    • Netbeans podpowiada, ale trzeba określić w odpowiednim komentarzu typ danej zmiennej. Średnio to wygodne… Może i spróbuję tego Eclipsa…

  6. .NET Framework zawiera w sobie kompilatory języków z tej platformy (C# itp.). Czy JVM nie ma podobnie? Jeśli tak, to wtedy Jython nie jest wielkim odkryciem, skoro może po prostu tłumaczyć Pythona na Javę i ją kompilować, mając oczywiście w kodzie dostęp do pakietów z macierzystej aplikacji. Równie dobrze można by wtedy użyć samej Javy do skryptowania aplikacji w Javie 🙂

    • No to nie do końca tak. Bo .NET był tak wymyślony, by można go było używać w wielu językach. Java natomiast miała być jednym językiem do wszystkiego.

      Ale z tego co widzę ostatnio rozglądając się po internecie to modne jest generowanie byecodu Javy z różnych kodów źródłowych. Przykładem może być Jython albo Scala.

      • Ciekawe czy ten generowany bytecode dla JVM np. Jythona jest wydajniejszy od tego samego napisanego w samej Javie. Ktoś z Was robił takie doświadczenia?

  7. Ja chciałem kilka testów porobić ale po krótkim googlowaniu znalazłem całkiem sporo porównań i wychodzi że implementacja Jythoan to ta najwolniejsza wersja Pythona. Praktycznie wszyscy maja takie wyniki.
    Po tych odkryciach odpuściłem swoje testy.
    Jak znajdziesz jakieś informację że Jython jest w miarę tak samo szybki jak CPython daj znać. Podejdę do tego.

    • Przypuszczam, że developerzy Jythona muszą jeszcze troszkę popracować nad jego wydajnością.

      Odkryłem jednak, że można bardzo znacząco podnieść jego wydajność jeśli chcemy go używać jako języka skryptowego. Mimo to jednak i tak będzie znacznie wolniejszy niż byśmy sobie tego życzyli 🙂

      Aby poprawić wydajność należy przetworzyć kod Jythona na czystą Javę. W tej chwili potrafię przerobić klasę Jythona implementującą jakąś klasę z Javy na klasę w Javie. Jest ona około 4-5 razy szybsza niż wykonywanie kodu skompilowanego w obiekcie PyCode. Ale wciaż dość wolna 😉

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s