SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
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 год–

Weitere ähnliche Inhalte

Was ist angesagt?

"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton Tsitou"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton TsitouFwdays
 
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовБыстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовFuenteovejuna
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Ontico
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Ontico
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)Badoo Development
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей ФедоровCodeFest
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Ontico
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)Ontico
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
Top10 доводов против языка Ruby
Top10 доводов против языка RubyTop10 доводов против языка Ruby
Top10 доводов против языка Rubyguest5f907e
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPOleg Poludnenko
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Django: инструкция по применению
Django: инструкция по применениюDjango: инструкция по применению
Django: инструкция по применениюIvan Kolodyazhny
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 

Was ist angesagt? (20)

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

Andere mochten auch

Effective coding in IntelliJ IDEA
Effective coding in IntelliJ IDEAEffective coding in IntelliJ IDEA
Effective coding in IntelliJ IDEAchashnikov
 
Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥Oleg Poludnenko
 
Java tricks for high-load server programming
Java tricks for high-load server programmingJava tricks for high-load server programming
Java tricks for high-load server programmingAndrei Pangin
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Ontico
 
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...Mail.ru Group
 
When cqrs meets event sourcing
When cqrs meets event sourcingWhen cqrs meets event sourcing
When cqrs meets event sourcingManel Sellés
 
Как мы сделали PHP 7 в два раза быстрее PHP 5 / Дмитрий Стогов (Zend Technolo...
Как мы сделали PHP 7 в два раза быстрее PHP 5 / Дмитрий Стогов (Zend Technolo...Как мы сделали PHP 7 в два раза быстрее PHP 5 / Дмитрий Стогов (Zend Technolo...
Как мы сделали PHP 7 в два раза быстрее PHP 5 / Дмитрий Стогов (Zend Technolo...Ontico
 
Speed up your Symfony2 application and build awesome features with Redis
Speed up your Symfony2 application and build awesome features with RedisSpeed up your Symfony2 application and build awesome features with Redis
Speed up your Symfony2 application and build awesome features with RedisRicard Clau
 
CQRS and Event Sourcing in a Symfony application
CQRS and Event Sourcing in a Symfony applicationCQRS and Event Sourcing in a Symfony application
CQRS and Event Sourcing in a Symfony applicationSamuel ROZE
 
Guide to NoSQL with MySQL
Guide to NoSQL with MySQLGuide to NoSQL with MySQL
Guide to NoSQL with MySQLSamuel Rohaut
 
TypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the painTypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the painSander Mak (@Sander_Mak)
 

Andere mochten auch (15)

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

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

JVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииJVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииNikita Lipsky
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionNikita Lipsky
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Nikita Lipsky
 
20100307 virtualization igotti_lecture05
20100307 virtualization igotti_lecture0520100307 virtualization igotti_lecture05
20100307 virtualization igotti_lecture05Computer Science Club
 
Платформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаПлатформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаГеоргий Драк
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Ontico
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest
 
Путь мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в GrammarlyПуть мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в GrammarlyVsevolod Polyakov
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilationNikita Lipsky
 
PHP 5.4 - особенности перехода
PHP 5.4 - особенности переходаPHP 5.4 - особенности перехода
PHP 5.4 - особенности переходаRoman Pronskiy
 
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOPВнедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOPAlexander Lisachenko
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действииNikita Lipsky
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Ontico
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораSQALab
 

Ähnlich wie JPHP - О проекте на простом языке (20)

JVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииJVM: краткий курс общей анатомии
JVM: краткий курс общей анатомии
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.
 
20100307 virtualization igotti_lecture05
20100307 virtualization igotti_lecture0520100307 virtualization igotti_lecture05
20100307 virtualization igotti_lecture05
 
Платформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаПлатформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчика
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
 
2 bdw.key
2 bdw.key2 bdw.key
2 bdw.key
 
Путь мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в GrammarlyПуть мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в Grammarly
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
Vagrant puppet
Vagrant puppetVagrant puppet
Vagrant puppet
 
PHP 5.4 - особенности перехода
PHP 5.4 - особенности переходаPHP 5.4 - особенности перехода
PHP 5.4 - особенности перехода
 
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOPВнедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 

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 год–