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 Сервер?
Легко!•
Многопоточный? Да!•
С помощью классов•
phpnetSocket–
phpnetServerSocket–
рhplangThread–
phpconcurrentExecuterService–
Немного о проекте
Разработка начата в октябре 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, d.zayceff@gmail.com–
Весна, 2014 год–

JPHP - О проекте на простом языке

  • 1.
  • 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•
  • 14.
    HTTP Сервер? Легко!• Многопоточный? Да!• Спомощью классов• phpnetSocket– phpnetServerSocket– рhplangThread– phpconcurrentExecuterService–
  • 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•
  • 16.
    Какое будущее упроекта? Android ?• ?•
  • 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 год–