Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Важнее то, что JIT не генерирует универсальный код. Он генерирует код, в соответствии с условиями, которые существовали на момент создания этого кода. Так что, если ваша функция складывает два целых числа, то такой код мог бы скомпилироваться в простую инструкцию add. Однако компилятор также добавит инструкции проверки параметров на целочисленный тип. И если затем вы передадите в свою функцию не число (что нормально с позиции PHP), одна из проверок даст ложный результат.
Когда проверка дает ложный результат, происходит нечто вроде «аварийного переключения». Проще говоря, движок «отменит» все, что скомпилировал для данного метода и переключится в режим интерпретатора. Проведение такой операции гораздо дороже нежели постоянная работа в режиме интерпретатора.
Если он имеет ввиду, что в php значения хранятся как универсальный тип
Да, над этим пришлось бы очень много и хорошо поработать, однако преимущества не заставили бы себя ждать: от последовательного и более предсказуемого синтаксиса до добавления возможности определять собственный синтаксис средствами самого PHP (представьте себе возможность определять DSL в PHP, которые на самом деле являются частью языка).
HHVM — проект с закрытыми исходниками
HHVM is an open-source virtual machine...
PHP relies on a type-system that truly believes that strings are integers
char *.В последнее время в сообществе разработчиков наблюдается весьма оживленное обсуждение всего того, что касается PHP и его будущего. Что радует — большинство подобных разговоров проходят в позитивном ключе.
«Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует.»
Bjarne Stroustrup.
у меня бот висит с 20-го марта этого года
require('http').createServer(function(request, response) {
var filename = require('path').join(__dirname, 'video.mp4');
var stat = require('fs').statSync(filename);
response.writeHead(200, {
'Content-Type': 'video/mp4',
'Content-Length': stat.size
});
require('fs').createReadStream(filename).pipe(response);
}).listen(80);
require('http').createServer(function(request, response) {
var files = ['1.mp4', '2.mp4'];
function nextfile() {
if (!files.length) return response.end();
require('fs').createReadStream(__dirname+'/files/' + files.shift())
.pipe(response, {end: false})
.on("end", nextfile);
}
response.writeHead(200, {
'Content-Type': 'video/mp4'
});
nextfile();
}).listen(80);
В маленьком API на 10 методов — это ненужная абстракция.
Честно говоря, я бы просто выкинул Zephir
$string = "Foo";
var_dump($string->length); // 3
var_dump($string->toLower()); // string(3) "foo"
// etc
str\replace("string", "s", "a"); // atring
// или, на крайний случай
str::replace("string", "s", "a"); // atring
use str/*;
use array/*;
use str/substr/*;
use Std\Some\Any;
use Any\Some\Ololo\Any;
new Any; // первый use
new Ololo\Any; // второй use
use str\replace as str_replace;
use array\replace as array_replace;
и приходим к бесполезности даже начинать пользоваться вашим предложением.
Одно из мнений о будущем PHP