LINUX.ORG.RU
ФорумTalks

Facebook анонсирует ЯП Hack для HHVM

 , ,


2

2

Что же, видимо эра PHP в фейсбуке подходит к концу, вначале форкнули рантайм и теперь сидят на HHVM, теперь вот планомерно вытравливают PHP из всего кода фейсбука

Чем отличается от PHP и зачем нужен: PHP объявлен legacy для Facebook и весь код портируется на Hack, «почти» полностью совместим с PHP, но имеет кучу плюшек:
- type annotations
- Generics
- Nullable Types
- Collections
- Lambdas
- Shapes
- Type Aliasing
- async/wait
- more to come..

Hack: a new programming language for HHVM
hack language website
много информации можно почерпнуть из ответов разработчиков языка на hacker news

сам лично считаю, что шаг в определенной степени полезен для Facebook, но Hack навряд ли получит какое-то распространение за его пределами, по крайней мере пока Hack+HHVM не ускорят раз в 50 так за счет типизированности, но даже если и так, то зачем тут уже PHP? Берем Java/Scala/C#/Whatever и вперед

★★★★★

Нужно больше языков, хороших и разных!

Deleted
()

но Hack навряд ли получит какое-то распространение за его пределами

Всё зависит от того, в какой степени оно:

«почти» полностью совместим с PHP, но имеет кучу плюшек:

...

Надо будет посмотреть, что за зверь. Сам по себе HHVM меня не привлёк, на сложных задачах выигрыша даёт мало (а иногда и проигрывает чистому PHP), в использовании сложнее. Но вот «PHP с плюшками» интересно оценить. Жаль, Quercus в своё время так и не выстрелил из-за политики разработчика, а то были у меня планы такой интеграции с JVM.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Всё зависит от того, в какой степени оно:

In fact, most PHP files are already valid Hack files. We made a conscious choice not to support a handful of deprecated functions and features that were incompatible with static typing (e.g. “variable variables” and the extract() function).

Не особо подробно что-то пишут об этом.

umren ★★★★★
() автор топика
Ответ на: комментарий от lucentcode

сам подумай, у них нет выбора что бы дальше наращивать производительность и продуктивность, написать свой язык совместимый с PHP и перепиливать на него код для них проще, чем все переделывать на Java/C#.

umren ★★★★★
() автор топика

Забавно. Во-первых, оказалось, что этот hack «у меня уже есть». hhvm ставил для тестов, так что тупо поменял <?php на <?hh — и работает :D

Зарядил быстрый тест на объектный Фибоначчи (https://github.com/Balancer/benchmarks-fib-obj) для Fib(30) — по скорости выигрыша нет. Более того, сейчас вышло интересно, нативный PHP 5.5.3 работает быстрее, чем и hhvm, и hack. 1.45 сек. против 1.8 сек у hack/php-hhvm. По скорости под hhvm что hack, что php вышли одинаково.

Сейчас заряжу полные тесты на Fib(40) и закоммичу результат.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

по ответу одного из разработчиков, выигрыша в скорости Hack over PHP сейчас нет, так как это следующая ступень разгона Hack до скоростей JVM типо.

umren ★★★★★
() автор топика
Ответ на: комментарий от umren

но баги черт с ним. А как там с тем, что описано в php — a fractal of bad design?)

Bad_ptr ★★★★★
()
Ответ на: комментарий от umren

Обновил данные. Что-то HHVM по скорости в новой версии сдал заметно:
https://github.com/Balancer/benchmarks-fib-obj/wiki/Результат-теста:-i3-2.2ГГц

При чём раньше HHVM на малых числах (если я что-то не путаю) показывал заметно лучший результат. Я даже планировал сделать альтернативный тест с большим числом вычислений мелких значений.

А сейчас измерил — разницы никакой. Что Fib(10), что Fib(40), HHVM проигрывает чистому PHP примерно одинаково.

Что-то я в таком случае вообще не понимаю, какой прок с HHVM? :) На чисто процедурной работе и числодробилках, что ли, выигрыш?

Так у меня hhvm-2.4.2 сейчас и на тупом сложении чисел в цикле в полтора раза медленее, чем php-5.5.3 :-/

KRoN73 ★★★★★
()
Ответ на: комментарий от Bad_ptr

https://bugs.php.net/search.phpboolean=0&limit=30&order_by=id&di...

не ☺, если бы ты зашел в эти «баги» то понял бы, что большинство тут как раз не баги, а всякие proposal, documentation problem, итд, каких-то мега серьезных багов у пхп открытых нет, ветку секьюрити посмотри + заюзай поиск и фильтрацию, really

ну а фрактал уже стопятсот раз везде обсасывался, вот лучше фрактал отсоса почитай

umren ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Зачем Фибоначчи?

Фейсбук на хипхопе страницы генерирует, а не чиселки дробит, разве нет? Конкатенацию надо измерять :)

yoghurt ★★★★★
()
Ответ на: комментарий от umren

вот лучше фрактал отсоса почитай

ну да, в жабаскрипте тоже негров линчуют.)

Bad_ptr ★★★★★
()
Ответ на: комментарий от KRoN73

какой прок с HHVM?

Вверху всё сказано:

- type annotations
- Generics
- Nullable Types
- Collections
- Lambdas
- Shapes
- Type Aliasing
- async/wait
- more to come..

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)

Почитаем. Если они сумели вычистить эти авгиевы коровники, то честь им и хвала. Правда, встаёт вопрос целесообразности...

Miguel ★★★★★
()
Ответ на: Зачем Фибоначчи? от yoghurt

Зачем Фибоначчи?

См. начало на https://github.com/Balancer/benchmarks-fib-obj

Фейсбук на хипхопе страницы генерирует, а не чиселки дробит, разве нет? Конкатенацию надо измерять :)

Да, на конкатенации hhvm оказался на 30% быстрее. Только работа с объектами всё равно всё сожрёт. В лучшем случае паритет в итоге получится.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

странный тест какой-то. говоришь, что тестируешь скорость создания и удаления объектов (при этом со сборщиком мусора не общаешься в коде, соответственно, будет только время на создание), однако всунул фибоначи и назвал тест его именем, чем вгоняешь в ступор читателя. когда увидел результат в полторы секунды для f(30) первая реакция - какой-то лютый булшит. не поленился, пошел по ссылке и почитал. внять адекватность теста не смог. это какая-то эфемерная империка :)

Deleted
()
Ответ на: комментарий от Deleted

однако всунул фибоначи и назвал тест его именем, чем вгоняешь в ступор читателя

Этот тест довольно старый и рождался в контексте длинной серии тестов на форуме :) Просто в какой-то момент я результат закоммитил на GitHub. Естественно, под уже сложившимся тогда названием.

внять адекватность теста не смог. это какая-то эфемерная империка :)

Сложно придумать _простой_ тест, который позволит широко протестировать работу с объектами. Простая генерация в цикле, например, не отразит эффективность вложенных вызовов.

Придумай лучший вариант, который также, в несколько строк, позволит грубо оценить языки по этому критерию — я рассмотрю его )

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

в несколько строк, позволит грубо оценить языки по этому критерию

переключить работющий сайт на хак и показать график загрузки сервера

stevejobs ★★★★☆
()

Из PHP окончательно сделали Java/Scala? Но зачем, когда есть Java/Scala?

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

переключить работющий сайт на хак и показать график загрузки сервера

Для оценки, скажем, Go и Dart будешь свой сайт на RoR на них переписывать? :D

KRoN73 ★★★★★
()

из говна слепили велосипед

reliktt
()
Ответ на: комментарий от stevejobs

достаточно поменять <?php на <?hh, не?

А поменять на <?ror или <?ocaml достаточно будет?

Контекст спора, который ты прокомментировал, был не о производительности hack vs php, а об объектом бенчмарке для разнокалиберных языков.

KRoN73 ★★★★★
()
Ответ на: комментарий от NeverLoved

Долго ждать. Я писал ебилды на HHVM и пришёл к выводу, что это ЛЮТОЕ ГОВНИЩЕ с забандленным* libcurl и libevent. Причём если без первого оно, вроде как, жить ещё может, то без второго тупо не работает.

А ещё оно не собирается на не-64битных платформах.

* на самом деле, оно там качается отдельно, потом патчится их патчами, потом складывается в /usr/lib/hhvm/lib а потом LD_PRELOAD'ится оттуда в инит-скрипте.

// каксделать такой же хак для systemD-юнита - я даже искать побоялся...


P.S. По примеру mod_pagespeed для NgX я бы даже сказал, что «оно не собирается на платформах отличных от amd64, но вспомнил, что FB, в отличие от гугла, держит толпу армов.Так что, может, на 64битных ARM'ах и соберётся. А вот гугловый mod_pagespeed умеет только в x86 (который обзывает ia32) и amd64 (который обзывает х64).

mva
()
Ответ на: комментарий от KRoN73

Да, я знаю, «критикуешь? Предлагай!», но с ходу что-то внятное предложить не могу :), но почему-то кажется, ход мысли должен идти в направлении «скорость клонирования объектов».

Deleted
()

Чего только не сделают, лишь бы не использовать Java

OldWiseCat ★★
()
Ответ на: комментарий от mva

Не собралось :(

Linking CXX executable hhvm
[100%] Building CXX object hphp/test/CMakeFiles/test.dir/ext/test_ext_mysql.cpp.o
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lmysqlclient_r
collect2: error: ld returned 1 exit status
hphp/hhvm/CMakeFiles/hhvm.dir/build.make:257: recipe for target 'hphp/hhvm/hhvm' failed
make[2]: *** [hphp/hhvm/hhvm] Error 1
CMakeFiles/Makefile2:1467: recipe for target 'hphp/hhvm/CMakeFiles/hhvm.dir/all' failed
make[1]: *** [hphp/hhvm/CMakeFiles/hhvm.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[100%] Building CXX object hphp/test/CMakeFiles/test.dir/ext/test_all.cpp.o
[100%] Building CXX object hphp/test/CMakeFiles/test.dir/ext/test_base.cpp.o
[100%] Building CXX object hphp/test/CMakeFiles/test.dir/ext/test_util.cpp.o
[100%] Building CXX object hphp/test/CMakeFiles/test.dir/ext/test_ext_server.cpp.o
[100%] Building CXX object hphp/test/CMakeFiles/test.dir/ext/test_cpp_base.cpp.o
[100%] Building CXX object hphp/test/CMakeFiles/test.dir/ext/test_parser.cpp.o
[100%] Building CXX object hphp/test/CMakeFiles/test.dir/ext/test_parser_expr.cpp.o
[100%] Building CXX object hphp/test/CMakeFiles/test.dir/__/hhvm/process-init.cpp.o
[100%] Building CXX object hphp/test/CMakeFiles/test.dir/__/hhvm/global-variables.cpp.o
Linking CXX executable test
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lmysqlclient_r
collect2: error: ld returned 1 exit status
hphp/test/CMakeFiles/test.dir/build.make:757: recipe for target 'hphp/test/test' failed
make[2]: *** [hphp/test/test] Error 1
CMakeFiles/Makefile2:1537: recipe for target 'hphp/test/CMakeFiles/test.dir/all' failed
make[1]: *** [hphp/test/CMakeFiles/test.dir/all] Error 2
Makefile:116: recipe for target 'all' failed
make: *** [all] Error 2
emake failed
 * ERROR: dev-php/hhvm-9999::javer failed 
NeverLoved ★★★★★
()

necroposter, вот же борщехлебы, целый язык разработали на Ocaml'е, только чтобы меньше пхп жрать.

aedeph_ ★★
()
Ответ на: комментарий от bhfq

оперативку еще не тяжело купить, доставить. а вот с пхп на жабу - надо еще докупить кодеров, поменять апп-сервера.

bl ★★★
()
Ответ на: комментарий от Deleted

но с ходу что-то внятное предложить не могу :)

Вот я тоже смог родить только «объектный Фибоначчи» :) Крайне просто (У 3/4 языков, для которых я писал тесты, этот код — первый и последний в моей практике :D), при этом достаточно активно тестирует и создание объектов, и вызовы методов.

Было только желание расширить этот тест до использования глубокого наследования (проверить, насколько оверхед растёт) и добавить тест с многопоточной работой.

Для серьёзных практических тестов я планировал делать полноценные тесты разных Web-фреймворков, но тут, во-первых, сперва меня остановил объём работы (за 5 минут можно понять, как на незнакомом языке слепить простой тест с объектами, но полноценную проверку фреймворка, со статикой, кешированием, БД/ОРМ и прочим и за 5 дней не факт, что разберёшься), а потом сделали такое: http://www.techempower.com/benchmarks/

ход мысли должен идти в направлении «скорость клонирования объектов».

А оно зачем? Разве сегодня активно используется клонирование объектов?

KRoN73 ★★★★★
()
Ответ на: комментарий от lucentcode

не мало, но намного меньше чем если уйти на другую платформу, добавить типы значений в большинство старого кода вполне достаточно для перехода

umren ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.