19
JPHP Новый движок php для Java VM + JIT

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

Embed Size (px)

Citation preview

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

JPHP Новый движок php для Java VM + JIT

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

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 •

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

Цели проекта

Использовать Java библиотеки в PHP •

JIT, увеличить производительность •

Заменить уродливую runtime библиотеку PHP •

Расширить сферы применения PHP •

Юникод, многопоточность (threads) •

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

Взгляд на конкурентов?

JPHP это не замена для Zend PHP или для Facebook

HHVM.

В планах нет реализации Zend расширений (например

Curl, PRCE и т.п.)

Это не конкурент •

Не для того, чтобы заменить Zend PHP на web

хостингах.

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

JPHP это другой путь

JPHP ‑ это лишь реализация языка •

Без библиотек zend ‑ curl, pdo, prce и т.п. •

Со своей runtime библиотекой •

Которая построенна на ООП, с использованием

namespaces

Однако, часть core функций php реализована •

Но в будущем будет удалена как устаревшая •

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

Похожие проекты

Querqus (GPL) ‑ написан на Java, транслятор из php в

Java код, требует javac (и JDK), в составе Resin сервера

JPHP на выходе дает байткод, а не java код –

Phalanger ‑ написан на C#, компилятор в байткод

.NET, завязан на стек технологий Microsoft

А также проекты, не нуждающиеся в представлении: •

Facebook HHVM –

kPHP от vkontakte –

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

Уровень поддержки 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+ •

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

JIT и производительность

JPHP быстрее Zend PHP •

В худшем случае не медленее •

JIT позволяет быть быстрее в 1‑10 раз •

На реальном коде в среднем в 1.5‑2 раза •

Но это не все ‑ оптимизатор помогает стать еще

быстрее

О нем далее... •

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

Что умеет оптимизатор? Считать константные значения •

Раскрывать статические константы

Считать immutable функции во время компиляции

Отбрасывать невыполнимые условия во время компиляции

Оптимизировать вызов immutable функций

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

Java + PHP? Стек технологий Java

Написание расширений на Java •Возможность вызывать Java код из php без написания расширения

Возможность сборки php проекта в jar файл •Компиляция в JVM байткод с возможностью многократной его загрузки

Опционально: HOT reload режим работы движка •Встроенная система кеширования классов и функций •

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

Юникод для строк?

В JPHP юникодные строки (UTF‑16) •Однако, на уровне движка существуют бинарные строки для бинарных данных

Все стороковые операции поддерживают юникод •JPHP использует класс java.lang.String для хранения строк

Строки immutable внутри движка, но снаружи нет •StringBuilder не нужен, .= заменяет его •$string[1] = "A" ‑ медленная операция •

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

Мелкие различия с PHP

Для integer используются 64 битные числа на всех платформах

eval() ‑ слишком медленный, чтобы его активно использовать

Код в глобальном пространтсве медленее чем в функциях и методах (в среднем в 2 раза)

Вызывать магические extract(), get_defined_vars(), compact() через call_user_func() невозможно

В __toString() можно использовать exceptions •

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

GUI? Программы?

Возможно! •Есть расширение JPHP‑Swing •Оно позволяет писать GUI программы для Linux/Windows/MacOS

Умеет грузить формы из xml файлов •Имеет простой апи •Поддерживается автором jphp •

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

HTTP Сервер?

Легко! •Многопоточный? Да! •С помощью классов •

php\net\Socket –php\net\ServerSocket –рhp\lang\Thread –php\concurrent\ExecuterService –

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

Немного о проекте

Разработка начата в октябре 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 •

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

Какое будущее у проекта?

Android ? •? •

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

Как попробовать?

Нужен Gradle (http://www.gradle.org/) •Исходники из репозитария jphp •Посмотреть исходники проекта jphp‑example‑project •Запустить его • Детали тут: https://github.com/dim‑s/jphp •

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

Чем помочь проекту?

Хорошим словом, предложениями и пожеланиями

Своим кодом, написанием расширений •Тестированием •Расскажите о проекте своим друзьям •Логотипом, его еще нет •Написанием мануалов, документации •

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

Спасибо за внимание

Дмитрий Зайцев aka Dim‑S •Java/PHP разработчик (опыт работы с Zend API) –dz@dim‑s.net, [email protected] –Весна, 2014 год –