PHP и с чем его едят....

ostapoff

Member
PainKiller: Вы невнимательно читаете документацию и делаете неправильные выводы. trim() принимает string (!!!) и все, что Вы будете туда передавать, будет преобразовано в string а именно, null -> "". С чего Вы взяли, что trim вообще принимает null? PHP язык со слабой динамической типизацией и именно так должно происходить преобразование типов в этих языках.
 

PainKiller

Пастафарианец
Команда форуму
Супер Модератор

Вот что-то мне подсказывает, что документацию я читаю внимательно.

PHP:
echo '<pre>';
var_dump(null);
var_dump('null');
echo '</pre>';
Внезапно:
NULL
string(4) "null"
А исходя из вышесказанного, разницы между ними быть не должно, не?)
Про преобразования я как раз там ничего и не нашел(в документации), может быть она у нас отличается?

P.S.
Дабы не пустословить, я одно время писал на пыхе, но потом надоело, частично из-за таких вещей.
 

ostapoff

Member
void var_dump ( mixed $expression [, mixed $... ] )
string trim ( string $str [, string $charlist ] )

Вы разницу видите?

Буквально в случае trim при передаче null компилятор (!) делает след. Преобразований типа:

trim( (string) NULL )
 

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
Ок, но не компилятор, а интерпретатор. Далее переливать из пустого в порожнее смысла не вижу)
 

ostapoff

Member
Я специально отметил ! это слово. Если Вы внимательно посмотрите исходный код PHP, Вы поймете почему. При выполнении PHP 5.x компилирует исходный код в байт-код, который затем выполняется на виртуальной машине Zend VM. Режим потоковой интерпретации в php был упразднен с версии 4.0
Для примера, вами-же любимый перл с 6й версии компилирует исходник в байт-код для parrot VM.

Простите меня за резкость, но Вы просто не знаете основ самого языка.
 

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
Я специально отметил ! это слово. Если Вы внимательно посмотрите исходный код PHP, Вы поймете почему. При выполнении PHP 5.x компилирует исходный код в байт-код, который затем выполняется на виртуальной машине Zend VM. Режим потоковой интерпретации в php был упразднен с версии 4.0
Для примера, вами-же любимый перл с 6й версии компилирует исходник в байт-код для parrot VM.

Простите меня за резкость, но Вы просто не знаете основ самого языка.
Именно потому я PHP, как язык, и забросил, это было до того, как 5.0 пошло в массы.

Даже не так. PHP перестал меня удовлетворять как инструмент для достижения определенного профита. В нутре его ковыряться смысла не вижу, интересно, ооп до ума довели?)
Насчет Perl.
В 5 перле тоже можно компилировать программки в байт код для машины, эта штука называется perlcc.
Ну и решающим фактором в выборе были мощные регулярные выражения, ну и, естественно, perlcritic и use strict;
Ну и насчет perl6. Я сомневаюсь, что это будет прорыв. Интересная реализация, бесспорно, НКА, их встроили прямо в язык, активируются простым ключом. Memoize(производительность) можно подключать в 5 перле, для ряда моих задач он гораздо нужнее, чем php.
1;
Ну и еще, как следствие работы с перлом, впадло писать много кода, по той же причине яву и забросил.
и Вы меня простите за резкость, но утверждать, что перл компилируется в байт код только с 6 версии - тоже говорит о незнании основ языка :D
Будем дальше офтопить?
 
Останнє редагування:

ostapoff

Member
Читайте внимательно - в byte-code для Parrot VM. perlcc производил компиляцию perl в с, затем gcc компилировало его в asm. Но это не касается модулей подключаемых через use. Так что особого смысла в этой компиляции не было. perl5 выполнял-же код в режиме потоковой интерпретации.

PainKiller, с Вами неинтересно дискутировать, Вы невнимательно читаете, что Вам пишут, вынуждая собеседника повторять по 2 раза одно и то-же.
 

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
Ок, но у Perlcc была возможность компилить в байткод, perlcc -MO=Bytecode, оно генерило .bin файл, насколько я знаю, он был платформозависимым.
use base qw/LibName/;
Позволяет делать полный экспорт, грубо говоря, наследование, так вот, оно сгребается в кучу.
Действительно, насчет попугайчега мог и не заметить.

Это как вариант ВМ.
К сожалению, по "потоковой интерпретации" man и монастырь молчат, но, насколько я знаю, perl5 таки использует прекомпиляцию, проверяя синтаксис в отдельном потоке, но в конечном итоге, все-таки используется байт код, если это называется "потоковая интерпретация", то ок.
Мне тоже не нравится такая дискуссия.
 

ostapoff

Member
Мы как-то плавно ушли от темы дискуссии – преобразования типов в PHP.

На счет perlcc, на моей памяти, все что мало-мальски серьезное я им пробовал компилировать, просто не работало или вылетало во время работы. Но, как говориться, о покойниках принято говорить либо хорошо, либо никак. Кажется, perlcc уже лет 5 как похоронили… :)
 

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
Да, только 3 года, его, по-моему, из перла 5.8 или 5.9 исключили, много моего кода работает благодаря perlcc + Redis, полезная штука, потому приходится пользоваться старым перлом.
Для нормальной компиляции надо было использовать либо Bytecode, либо использовать perlcritic, use strict и DynaLoader. Всегда, кстати, не хватало в пхп параноидальности интерпретатора, ругается он мало =)
 
Зверху