2. JPHP ‑ что это?
Компилятор для языка PHP•
Компилирует в байт код Java VM•
Java VM использует JIT•
Похож на проекты JRuby, Jython•
OpenSource, Apache License 2.0, github•
Поддержка PHP 5.3+ (и немного 5.4 и 5.5)•
Написан с нуля на Java•
Не использует библиотеки Zend PHP•
3. Цели проекта
Использовать Java библиотеки в PHP•
JIT, увеличить производительность•
Заменить уродливую runtime библиотеку PHP•
Расширить сферы применения PHP•
Юникод, многопоточность (threads)•
4. Взгляд на конкурентов?
JPHP это не замена для Zend PHP или для Facebook
HHVM.
•
В планах нет реализации Zend расширений (например
Curl, PRCE и т.п.)
•
Это не конкурент•
Не для того, чтобы заменить Zend PHP на web
хостингах.
•
5. JPHP это другой путь
JPHP ‑ это лишь реализация языка•
Без библиотек zend ‑ curl, pdo, prce и т.п.•
Со своей runtime библиотекой•
Которая построенна на ООП, с использованием
namespaces
•
Однако, часть core функций php реализована•
Но в будущем будет удалена как устаревшая•
6. Похожие проекты
Querqus (GPL) ‑ написан на Java, транслятор из php в
Java код, требует javac (и JDK), в составе Resin сервера
•
JPHP на выходе дает байткод, а не java код–
Phalanger ‑ написан на C#, компилятор в байткод
.NET, завязан на стек технологий Microsoft
•
А также проекты, не нуждающиеся в представлении:•
Facebook HHVM–
kPHP от vkontakte–
7. Уровень поддержки PHP?
Все, что есть в PHP 5.2•
Замыкания (Closures) ‑ php 5.3•
Namespaces ‑ php 5.3•
Spl Autoloading ‑ php 5.3•
Type hinting для array, classes, callable ‑ 5.3+•
Короткий синтаксис для массивов ‑ 5.4•
Try ... finally ‑ из 5.5•
и многое другое из 5.3+•
8. JIT и производительность
JPHP быстрее Zend PHP•
В худшем случае не медленее•
JIT позволяет быть быстрее в 1‑10 раз•
На реальном коде в среднем в 1.5‑2 раза•
Но это не все ‑ оптимизатор помогает стать еще
быстрее
•
О нем далее...•
9. Что умеет оптимизатор?
Считать константные значения•
Раскрывать статические
константы
•
Считать immutable функции во
время компиляции
•
Отбрасывать невыполнимые
условия во время компиляции
•
Оптимизировать вызов
immutable функций
•
10. Java + PHP? Стек технологий Java
Написание расширений на Java•
Возможность вызывать Java код из php без написания
расширения
•
Возможность сборки php проекта в jar файл•
Компиляция в JVM байткод с возможностью
многократной его загрузки
•
Опционально: HOT reload режим работы движка•
Встроенная система кеширования классов и функций•
11. Юникод для строк?
В JPHP юникодные строки (UTF‑16)•
Однако, на уровне движка существуют бинарные
строки для бинарных данных
•
Все стороковые операции поддерживают юникод•
JPHP использует класс java.lang.String для хранения
строк
•
Строки immutable внутри движка, но снаружи нет•
StringBuilder не нужен, .= заменяет его•
$string[1] = "A" ‑ медленная операция•
12. Мелкие различия с PHP
Для integer используются 64 битные числа на всех
платформах
•
eval() ‑ слишком медленный, чтобы его активно
использовать
•
Код в глобальном пространтсве медленее чем в
функциях и методах (в среднем в 2 раза)
•
Вызывать магические extract(), get_defined_vars(),
compact() через call_user_func() невозможно
•
В __toString() можно использовать exceptions•
13. GUI? Программы?
Возможно!•
Есть расширение JPHP‑Swing•
Оно позволяет писать GUI программы для
Linux/Windows/MacOS
•
Умеет грузить формы из xml файлов•
Имеет простой апи•
Поддерживается автором jphp•
15. Немного о проекте
Разработка начата в октябре 2013 года•
Это был эксперемент•
1 разработчик и 4 месяца активной разработки•
Автор проекта: Дмитрий Зайцев
(http://habrahabr.ru/users/dim_s/)
•
JPHP проходит около 300+ тестов от Zend
успешно
•
Адрес проекта: http://github.com/dim‑s/jphp•
Поддержка Java 6, 7, 8 (OpenJDK, Oracle)•
Для работы JPHP достаточно JRE•
17. Как попробовать?
Нужен Gradle (http://www.gradle.org/)•
Исходники из репозитария jphp•
Посмотреть исходники проекта jphp‑example‑project•
Запустить его•
Детали тут: https://github.com/dim‑s/jphp•
18. Чем помочь проекту?
Хорошим словом, предложениями и
пожеланиями
•
Своим кодом, написанием расширений•
Тестированием•
Расскажите о проекте своим друзьям•
Логотипом, его еще нет•
Написанием мануалов, документации•
19. Спасибо за внимание
Дмитрий Зайцев aka Dim‑S•
Java/PHP разработчик (опыт работы с Zend API)–
dz@dim‑s.net, d.zayceff@gmail.com–
Весна, 2014 год–