SlideShare a Scribd company logo
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 год–

More Related Content

PDF
Компиляция скриптов PHP. Алексей Романенко
PPT
PHP: SAPI
PPTX
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
PPTX
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
PDF
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
PDF
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
PDF
"Производительность MySQL: что нового?"
Компиляция скриптов PHP. Алексей Романенко
PHP: SAPI
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
"Производительность MySQL: что нового?"

What's hot (20)

PDF
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
PPTX
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
PPT
Problem my sql_2
PPTX
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
PDF
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
PPT
Install denwer
PPTX
"Великолепный API без Rest", Констатин Якушев (Badoo)
PDF
Алексей Федоров
PDF
Превышаем скоростные лимиты с Angular 2
PDF
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
PDF
Конструктор / Денис Паясь (Яндекс)
PDF
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
PDF
Введение в Python и Django
ODP
Top10 доводов против языка Ruby
PDF
Алексей Иванкин: Highload + PHP
PPTX
Опыт эксплуатации большого проекта на Ruby
PPTX
Django: инструкция по применению
PDF
Константин Осипов
PDF
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Problem my sql_2
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Install denwer
"Великолепный API без Rest", Констатин Якушев (Badoo)
Алексей Федоров
Превышаем скоростные лимиты с Angular 2
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
Конструктор / Денис Паясь (Яндекс)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Введение в Python и Django
Top10 доводов против языка Ruby
Алексей Иванкин: Highload + PHP
Опыт эксплуатации большого проекта на Ruby
Django: инструкция по применению
Константин Осипов
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ad

Viewers also liked (15)

PPT
Effective coding in IntelliJ IDEA
PDF
Макс Волошин: Php + shell = ♥
PDF
Java tricks for high-load server programming
PDF
Выжимаем из сервера максимум (Андрей Паньгин)
PDF
WebAssembly
PPTX
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
PDF
When cqrs meets event sourcing
PPT
TypeScript Presentation
PDF
Как мы сделали PHP 7 в два раза быстрее PHP 5 / Дмитрий Стогов (Zend Technolo...
PPTX
Typescript ppt
PDF
Speed up your Symfony2 application and build awesome features with Redis
PDF
CQRS and Event Sourcing in a Symfony application
PDF
Guide to NoSQL with MySQL
PDF
TypeScript: coding JavaScript without the pain
PDF
RSpec 2 Best practices
Effective coding in IntelliJ IDEA
Макс Волошин: Php + shell = ♥
Java tricks for high-load server programming
Выжимаем из сервера максимум (Андрей Паньгин)
WebAssembly
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
When cqrs meets event sourcing
TypeScript Presentation
Как мы сделали PHP 7 в два раза быстрее PHP 5 / Дмитрий Стогов (Zend Technolo...
Typescript ppt
Speed up your Symfony2 application and build awesome features with Redis
CQRS and Event Sourcing in a Symfony application
Guide to NoSQL with MySQL
TypeScript: coding JavaScript without the pain
RSpec 2 Best practices
Ad

Similar to JPHP - О проекте на простом языке (20)

PPTX
Php and frameworks
PPTX
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
PPTX
Язык программирования PHP
PDF
Компиляция скриптов PHP (Алексей Романенко)
PDF
Роман Еникеев - PHP или откуда взялся слон
PDF
Дмитрий Стогов
PPTX
Язык программирования PHP. EasyCode. Стартовая презентация.
PDF
Памятка о php-шниках
PDF
PHP 5.4 - особенности перехода
PDF
Релиз PHP7 - что нас ждет в октябре 2015
PPT
PDF
Anton Shabouta "Implementing async binary clients in pure PHP"
PDF
Как мы делаем модули PHP в Badoo – Антон Довгаль
PDF
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
PPT
Почему стоит выбрать PHP
PPTX
Base php 1
PPTX
Base php 1
PPTX
Base php 1
PDF
Сладкое будущее: Phalcon и Zephir
Php and frameworks
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
Язык программирования PHP
Компиляция скриптов PHP (Алексей Романенко)
Роман Еникеев - PHP или откуда взялся слон
Дмитрий Стогов
Язык программирования PHP. EasyCode. Стартовая презентация.
Памятка о php-шниках
PHP 5.4 - особенности перехода
Релиз PHP7 - что нас ждет в октябре 2015
Anton Shabouta "Implementing async binary clients in pure PHP"
Как мы делаем модули PHP в Badoo – Антон Довгаль
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
Почему стоит выбрать PHP
Base php 1
Base php 1
Base php 1
Сладкое будущее: Phalcon и Zephir

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

  • 1. JPHP Новый движок php для Java VM + JIT
  • 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 год–