Пользователь
0,0
рейтинг
7 апреля 2014 в 19:38

Разработка → 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.

Заранее спасибо за ваше время!
Andrew Romanenco @AndrewRomanenco
карма
47,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (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/.
    • 0
      Спасибо за хинт!

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