Upload
dmitry-zaytsev
View
523.057
Download
12
Embed Size (px)
Citation preview
JPHP Новый движок php для Java VM + JIT
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 •
Цели проекта
Использовать Java библиотеки в PHP •
JIT, увеличить производительность •
Заменить уродливую runtime библиотеку PHP •
Расширить сферы применения PHP •
Юникод, многопоточность (threads) •
Взгляд на конкурентов?
JPHP это не замена для Zend PHP или для Facebook
HHVM.
•
В планах нет реализации Zend расширений (например
Curl, PRCE и т.п.)
•
Это не конкурент •
Не для того, чтобы заменить Zend PHP на web
хостингах.
•
JPHP это другой путь
JPHP ‑ это лишь реализация языка •
Без библиотек zend ‑ curl, pdo, prce и т.п. •
Со своей runtime библиотекой •
Которая построенна на ООП, с использованием
namespaces
•
Однако, часть core функций php реализована •
Но в будущем будет удалена как устаревшая •
Похожие проекты
Querqus (GPL) ‑ написан на Java, транслятор из php в
Java код, требует javac (и JDK), в составе Resin сервера
•
JPHP на выходе дает байткод, а не java код –
Phalanger ‑ написан на C#, компилятор в байткод
.NET, завязан на стек технологий Microsoft
•
А также проекты, не нуждающиеся в представлении: •
Facebook HHVM –
kPHP от vkontakte –
Уровень поддержки 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+ •
JIT и производительность
JPHP быстрее Zend PHP •
В худшем случае не медленее •
JIT позволяет быть быстрее в 1‑10 раз •
На реальном коде в среднем в 1.5‑2 раза •
Но это не все ‑ оптимизатор помогает стать еще
быстрее
•
О нем далее... •
Что умеет оптимизатор? Считать константные значения •
Раскрывать статические константы
•
Считать immutable функции во время компиляции
•
Отбрасывать невыполнимые условия во время компиляции
•
Оптимизировать вызов immutable функций
•
Java + PHP? Стек технологий Java
Написание расширений на Java •Возможность вызывать Java код из php без написания расширения
•
Возможность сборки php проекта в jar файл •Компиляция в JVM байткод с возможностью многократной его загрузки
•
Опционально: HOT reload режим работы движка •Встроенная система кеширования классов и функций •
Юникод для строк?
В JPHP юникодные строки (UTF‑16) •Однако, на уровне движка существуют бинарные строки для бинарных данных
•
Все стороковые операции поддерживают юникод •JPHP использует класс java.lang.String для хранения строк
•
Строки immutable внутри движка, но снаружи нет •StringBuilder не нужен, .= заменяет его •$string[1] = "A" ‑ медленная операция •
Мелкие различия с PHP
Для integer используются 64 битные числа на всех платформах
•
eval() ‑ слишком медленный, чтобы его активно использовать
•
Код в глобальном пространтсве медленее чем в функциях и методах (в среднем в 2 раза)
•
Вызывать магические extract(), get_defined_vars(), compact() через call_user_func() невозможно
•
В __toString() можно использовать exceptions •
GUI? Программы?
Возможно! •Есть расширение JPHP‑Swing •Оно позволяет писать GUI программы для Linux/Windows/MacOS
•
Умеет грузить формы из xml файлов •Имеет простой апи •Поддерживается автором jphp •
HTTP Сервер?
Легко! •Многопоточный? Да! •С помощью классов •
php\net\Socket –php\net\ServerSocket –рhp\lang\Thread –php\concurrent\ExecuterService –
Немного о проекте
Разработка начата в октябре 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 •
Какое будущее у проекта?
Android ? •? •
Как попробовать?
Нужен Gradle (http://www.gradle.org/) •Исходники из репозитария jphp •Посмотреть исходники проекта jphp‑example‑project •Запустить его • Детали тут: https://github.com/dim‑s/jphp •
Чем помочь проекту?
Хорошим словом, предложениями и пожеланиями
•
Своим кодом, написанием расширений •Тестированием •Расскажите о проекте своим друзьям •Логотипом, его еще нет •Написанием мануалов, документации •
Спасибо за внимание
Дмитрий Зайцев aka Dim‑S •Java/PHP разработчик (опыт работы с Zend API) –dz@dim‑s.net, [email protected] –Весна, 2014 год –