Java Virtual Machine in pure python

    Коллеги,

    Некоторое время назад я начал работать над обучающим проектом, совмещающим java + python + некоторые базовые алгоритмы. Промежуточный этап разработки — имплементация спецификации jdk7 на python. (Java исполняемая в python)

    Код доступен www.pyjvm.org или github: github.com/andrewromanenco/pyjvm



    Фактически проект можно описать так:
    java -cp . some.code.ToExecute
    превращается в…
    python java.py -cp . some.code.ToExecute

    Несколько заметок (не вдаваясь в подробности будущих планов):

    • python 2.7
    • поддерживаются все byte code операции
    • большинство конструкция языка (напр. исключения)
    • многопоточность
    • stdin/stdout
    • примеры java кода в testcases/src


    (!!) Стоит заметить, что далеко не все java api native методы поддерживаются — скорее всего ваше java приложение завершится сообщением: Exception: Op (SOME_NAME_HERE) is not yet supported in natives

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

    1.
    git clone github.com/andrewromanenco/pyjvm.git

    2.
    Если у вас НЕ установлен jdk7: запустите get_rt.py из ./rt — чтобы скачать rt.jar (java classes)
    Если jdk7 установлен — проверьте наличие JAVA_HOME

    3.
    cd testcases
    python test_runner.py > output.txt
    python test_report.py output.txt

    4.
    Если тесты проходят — напишите комментарий к топику с информацией о вашей операционной системе.
    Если же все плохо — напишите какой тест не проходит — лучше всего в github — c указанием вашей os.

    Заранее спасибо за ваше время!
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 29
    • +15
      И запустить это в Jython)
      • +6
        А поверх этого JPHP
        • +12
          Поверх этого тоже Jython можно запустить

          We need to go deeper
          • +4
            Раньше развлекались, запуская виртуалки внутри виртуалок, а теперь VM одного языка внутри VM другого… Но это уже оффтопик какой-то.
            • +1
              Это не оффтопик, это рекурсия какая-то.
              • 0
                Я про отклонении тематики комментариев от темы поста. Обсуждается не предложенное решение в целом, а узкая и весьма специфическая сфера применения. «Хабр такой Хабр», но все же :)
                • 0
                  Настоящие фидошники сабж на полдороги не меняют! ©
      • 0
        Месье знает толк! Вообще говоря — круто, только непонятно можно ли это когда-нибудь будет применить на практике.
        • 0
          Основная идея (не факт что будет реализована) получить окружение для обучения в контексте — как пример — не просто узнать что есть стек, а использовать его в конкретном проекте. То же самое относится к IEEE арифметике и тд.
          И в целом интересно если можно обучать разработке не с точки зрения изучения синтаксиса — а со стороны runtime.
          • 0
            Хорошая идея. Но, ИМВХО, лучше было бы взять что-нибудь не такое навороченное. Тот же P-code, например. Но это ИМВХО.
            • +1
              ладно — сдаюсь — Месье действительно знает толк :)
              на самом деле начинался проект как копия javap — just for fun — а потом меня понесло…
              • 0
                Кстати, Linux Mint Liza:

                bytecode.ArraysTest OK
                bytecode.CalcsTest OK
                langfeatures.Hashes OK
                langfeatures.InnerClazz OK
                langfeatures.ThreadsDaemons OK
                langfeatures.ThreadsSync OK
                langfeatures.ThreadsSync OK
                sorts.HeapSort OK

                *** ALL TESTS ARE OK ***

                $uname -a
                Linux link-K73BY 3.0.0-32-generic #51-Ubuntu SMP Thu Mar 21 15:50:59 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

                Сравнительно быстрый, я думал, он гораздо медленнее.
      • 0
        Все тесты прошли, Xubuntu 13.10
      • +1
        Все тесты ОК, Win 8.1 x64. Сначала не работало без питона 2.7, очень советую вам всё-таки переписать всё на питон 3. Как написано на python.org, новые проекты стоит начинать на Python 3, особенно если вы собираетесь обучать:
        In particular, instructors introducing Python to new programmers may want to consider teaching Python 3 first and then introducing the differences in Python 2 afterwards (if necessary), since Python 3 eliminates many quirks that can unnecessarily trip up beginning programmers trying to learn Python 2.
        Should I use Python 2 or Python 3 for my development activity?
        • +2
          спасибо — в какой то момент проект переедет на p3
        • 0
          *** ALL TESTS ARE OK ***

          MacBook Pro Late 2011
        • 0
          Macosx 10.9.2 (jdk 1.7.0_45) все ок.
        • 0
          $ python test_report.py output.txt
          bytecode.ArraysTest OK
          bytecode.CalcsTest OK
          langfeatures.Hashes OK
          langfeatures.InnerClazz OK
          langfeatures.ThreadsDaemons OK
          langfeatures.ThreadsSync OK
          langfeatures.ThreadsSync OK
          sorts.HeapSort OK

          *** ALL TESTS ARE OK ***

          $ uname -a
          Darwin 13.1.0 Darwin Kernel Version x86_64
        • 0
          $ python2 test_report.py output.txt
          bytecode.ArraysTest OK
          bytecode.CalcsTest OK
          langfeatures.Hashes OK
          langfeatures.InnerClazz OK
          langfeatures.ThreadsDaemons OK
          langfeatures.ThreadsSync OK
          langfeatures.ThreadsSync OK
          sorts.HeapSort OK

          *** ALL TESTS ARE OK ***

          Gentoo AMD64, питон 2.7.6.

          А что насчет производительности? =) Постройте сравнительные графики что ли.
          • 0
            спасибо за тест. про производительность даже думать не хочу; вот напишу JustInTime Compiler (ха-ха) — тогда посмотрим :)
          • 0
            python2.7

            *** ALL TESTS ARE OK ***

            Linux 3.10.25-gentoo #4 SMP Thu Jan 23 23:59:07 FET 2014 x86_64 Intel® Core(TM) i7-2640M CPU @ 2.80GHz GenuineIntel GNU/Linux
          • +2
            Советую вам использовать Travis для автоматического прогона тестов при каждом коммите: travis-ci.org/.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.