Comments 45
Довольно круто.
Жаль, отказались от реализации стандартной библиотеки, это было бы интересное направление развития.
Все равно же часть пришлось реализовать для Zend тестов, нет?
Жаль, отказались от реализации стандартной библиотеки, это было бы интересное направление развития.
Все равно же часть пришлось реализовать для Zend тестов, нет?
Я реализовал часть функций для работы со строками, с массивами и с файлами, но затем выделил это в отдельный модуль-расширение zend-ext. Проект открытый, если кто-нибудь решится сам реализовывать некоторые расширения zend для JPHP то я не против. Просто я не вижу смысла в конкуренции с facebook hhvm.
Для тестов эти функции практически не нужны.
Для тестов эти функции практически не нужны.
PHP поистине магический язык, я точно не уверен, но в каком еще языке во время выполнения можно обращаться к переменной по названию из строки?Да в куче интерпретируемых языков так можно. Навскидку — JS, Python, Perl, Bash.
Примеры в студию пожалуйста, я до сих пор не знаю как это делается, ну например в JS:
$var = 'asd';
$name = 'var';
echo $$name; // покажет asd, потому что: $$name == $var == 'asd'
В JS обращение по имени из строки возможно только к глобальным переменным. На счет остальных не знаю.
Неглобальные тоже доступны через eval():
var name1 = 345;
var myvar = 'name1'
alert( eval(myvar) ) ; //345
Не знал про такой хак, удивили)
Да, про эвалы я вообще не подумал, снимаю шляпу.
Зачем же сразу eval?
var a = 1;
var varname = "a";
this[varname];
Да, eval — это, конечно же, то же самое, что и $$var…
А магия всякого рода __get(), __call() работает?
Вопрос такой — что Вы скажете на счет платформы vert.x и модуля поддержки php для нее github.com/vert-x/mod-lang-php/
Интересная вещь, основанная на Quercus, о котором я упоминал выше. Более подробно я не смотрел, но идея интегрировать JPHP с vert.x у меня была.
не планируете ли поддержку vert.x и расширений zend (curl и др.)? тогда стеком vert.x можно будет заменить достаточно популярные сейчас apache+mod_php и nginx+php-fpmd
Человек же написал, что сам скорее всего расширениями zend заниматься не будет — неблагодарное дело. Вообще, то что он сделал уже потрясающе.
Так то да, я сам не откажусь от поддержки расширений.
Так то да, я сам не откажусь от поддержки расширений.
возможно я не совсем ясно выразился — это добавление врапперов для того чтобы расширения могли работать по модульной структуре, например таким образом реализованы модули в платформе vert.x
Если в итоге отказываетесь от рантайма Zend, то можно было реализовать и не PHP вовсе?
Примеров таких проектов (не пхп) я знаю много, отход в сторону своего языка это дорога в ад =) Я уже как-то говорил, что это очень сложно, но писать еще поддержку для IDE, более подробную документацию и объяснять зачем миру еще один язык программирования.
Кстати, встроенные функции можно и на PHP реализовать. Тогда весь «рантайм» будет работать и расширять его можно будет быстро и эффективно.
Хорошая идея, я еще думал что рантайм jphp можно реализовать и на zend php для более легкого перехода.
Начнёте реализовывать, дайте знать, я выберу себе какой-нибудь модуль на реализацию :)
Допустим, я хочу реализовать функцию Date на php. Что из PHP-функций мне доступно?
Я написал выше, что на данный момент есть своего в рантайме, что будет после пока не решено. Скорее всего для поддержки дат и времени будет отдельная библиотека.
есть JRE, соответственно эти классы можно использовать за основу
Кстати, а что насчет отхода от возможностей php и имплементации своих «расширений языка»? Например, опциональный тайпхинтнг для членов класса ([visibility] [typehint] $(name)), а так же, тайпхинтинг для примитивов (function f(int $arg)).
Так же, очень хотелось бы результатов бенчмарков для сравнения с оригинальных php, а не голословное «в 2-10 раза быстрее». :)
Так же, очень хотелось бы результатов бенчмарков для сравнения с оригинальных php, а не голословное «в 2-10 раза быстрее». :)
Пока есть нереализованные вещи из стандарта языка php, я даже не задумываюсь о таком. Тут еще необходимо реализовать очень сложную штуку — генераторы.
Пытался реализовать генераторы в своем языке под .NET, но на тот момент не получилось в существующей архитектуре совместить генераторы и замыкания. Пришлось отложить фичу до момента, когда перепишется значительная часть ядра.
А файлы «zend/ext/serialize/001.php» доступны?
Да вот он: github.com/dim-s/jphp/blob/master/jphp-zend-ext/src/main/tests/resources/zend/ext/serialize/001.php. Я перенес тесты zend в папку модуля zend-ext.
Серилизация в jphp не умеет обрабатывать циклические ссылки и выдает предупреждение, когда встречает их.
Серилизация в jphp не умеет обрабатывать циклические ссылки и выдает предупреждение, когда встречает их.
Желаю Вашему проекту создания устойчивой комьюнити! Мне кажется, что у него есть очень хороший потенциал для попадания в мейнстрим. И вообще, это очень-очень круто, снимаю шляпу :)
Автор, Вы монстр! В хорошем смысле этого слова. Удачи Вам и Вашему проекту!
А вот как у Вас строки реализованы? С юникодом, как в Яве, али без, как в PHP?
А вот как у Вас строки реализованы? С юникодом, как в Яве, али без, как в PHP?
Автор, спасибо за статью, с интересом прочитал.
А не было желания/идеи добавить в вашу реализацию, чего-то своего, чего не хватает в PHP, например нативной мультипоточности? Либо сделать это проблемно?
А не было желания/идеи добавить в вашу реализацию, чего-то своего, чего не хватает в PHP, например нативной мультипоточности? Либо сделать это проблемно?
Они же добавлены уже. Что вы понимаете под «нативной мультипоточностью»?
Это полноценные потоки. К тому же можно запускать код не просто в отдельном потоке, а например в одном пространстве.
php\lang\Thread, php\lang\ThreadGroup — классы для работы с мультипоточностью. В языке из коробки должны идти средства для работы с потоками, и на данный момент они не ограничиваются 2 классами.
Это полноценные потоки. К тому же можно запускать код не просто в отдельном потоке, а например в одном пространстве.
php\lang\Environment изолированные окружения для выполнения кода, поддерживают опции: HOT_RELOAD для горячей замены кода и CONCURRENT для использования одного и того же окружения в нескольких потоках.
А какой синтаксический анализатор использовали? Или свой писали?
Очень впечатлён и желаю удачи.
Sign up to leave a comment.
JPHP — Как он работает. История создания