Вышла альфа-версия PHP4+Zend Engine 2 (4.3.0-dev)

Вы ждете Zend Engine 2?

  • Да! Давно пора

    Голосов: 11 64,7%
  • Он мне ненужен в текщих проектах

    Голосов: 5 29,4%
  • Нет

    Голосов: 1 5,9%
  • А что это такое?

    Голосов: 0 0,0%

  • Всего проголосовало
    17
  • Опрос закрыт .

[VS]

Guest
Автор оригинала: dr.vint
Спорить и доказывать не буду
но ИМХО Exceptions лучше чем возвращать всякие флажки и lastErrors
Флажки и lastErrors можно очень и очень красиво строить. И возможностей на порядок больше чем с исключениями. К примеру - попробуй построить call stack (список вызываемых функций, можно с их параметрами) на момент ошибки =)
у меня это автоматом красиво делается, а через исключения - вообще не получится.

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

Есть вещи которые без исключений - вообще не сделаешь, это SE (Windows Structured Exceptions) в виндовс, т.е. ошибки при писании/чтении из не выделенной памяти, или если прав нет, деление на нуль, и.т.д.
тут без исключений никак.
 

Crazy

Developer
Автор оригинала: [VS]
Елки палки, я подробно обьясняю, почему он более трудоемкий и менее удобный, а ты не хочешь вникнуть.
...либо тебе не удается объяснить. :) Ага?
 

[VS]

Guest
Ты прочел все мои аргументы? Вдуматься потрудился?
Либо аргументируй, либо не говори.
 

Crazy

Developer
Автор оригинала: [VS]
Флажки и lastErrors можно очень и очень красиво строить.
Бывает. Иногда. :)

И возможностей на порядок больше чем с исключениями. К примеру - попробуй построить call stack (список вызываемых функций, можно с их параметрами) на момент ошибки =)
Не очень понял твой вопрос. Чем явовский Exeception.printStackTrace() отличается от того, что ты имел в виду?

В любом случае, любой грамотный программист просто должен знать как работают исключения, но должен и понимать альтернативы, и что и когда лучше.
Типа да. Лучше быть умным, чем тупым. :)
 

[VS]

Guest
Автор оригинала: Crazy

Бывает. Иногда. :)
настроить можно всегда

Не очень понял твой вопрос. Чем явовский Exeception.printStackTrace() отличается от того, что ты имел в виду?
1 - это только в Яве, в С++ этого нет.
2 - у тебя нет возможности это перенаправить в файл, или вообще в другом формате вывести.
 

Crazy

Developer
Автор оригинала: [VS]
Ты прочел все мои аргументы? Вдуматься потрудился?
Либо аргументируй, либо не говори.
Я какой из твоих аргументов я еще не ответил?
 

Crazy

Developer
Автор оригинала: [VS]
1 - это только в Яве, в С++ этого нет.
Т.е. исключения плОхи только в C++? А к нормальной реализации исключений у тебя притензий нет?

2 - у тебя нет возможности это перенаправить в файл, или вообще в другом формате вывести.
Прости, но если у тебя все аргументы будут такой степени убедительности, то дело кончится совсем смешно. :)

Код:
class Trowable {
  ...
  public void printStackTrace(PrintStream s)
  ..
}
Так что могу. Куда хочу и как хочу.
 

[VS]

Guest
Автор оригинала: Crazy
Т.е. исключения плОхи только в C++? А к нормальной реализации исключений у тебя притензий нет?
printStackTrace не имеет никакого отношения к исключениям, это просто "фича" явы.

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

Код:
class Trowable {
  ...
  public void printStackTrace(PrintStream s)
  ..
}
Так что могу. Куда хочу и как хочу.
Да ничего ты не можешь, у тебя есть результат вызова этой функции, И ВСЕ! Ты не можешь сам, как хочешь составлять call stack и включать туда информацию какую хочешь из всех вызовов функций.
К примеру - сделай call stack, где возле каждой функции - будет значения какой-то переменной класса в момент вызова функции. printStackTrace не поможет, исключения тоже.
 

Crazy

Developer
Автор оригинала: [VS]
printStackTrace не имеет никакого отношения к исключениям, это просто "фича" явы.
Это фича явы, направленная на работу с исключениями. И делает она в точности то, что ты изначально попросил, не так ли?

Да ничего ты не можешь, у тебя есть результат вызова этой функции, И ВСЕ!
Верно.

Ты не можешь сам, как хочешь составлять call stack и включать туда информацию какую хочешь из всех вызовов функций.
И это верно.

К примеру - сделай call stack, где возле каждой функции - будет значения какой-то переменной класса в момент вызова функции. printStackTrace не поможет, исключения тоже.
Не добавляя специального кода в районы вызова -- не могу. Ты хочешь сказать, что если не использовать исключений, то это легко и просто?
 

webdeveloper

Guest
Уважаемые, вы по моему немного увлеклись :)

В конце концов, каждый выбирает то что ему приятнее и удобнее.
 

Crazy

Developer
Ну разве что немного. :) Надеюсь, я еще не начал брызгать слюной? :)
 

pachanga

Новичок
Автор оригинала: [VS]

Флажки и lastErrors можно очень и очень красиво строить. И возможностей на порядок больше чем с исключениями. К примеру - попробуй построить call stack (список вызываемых функций, можно с их параметрами) на момент ошибки =)
у меня это автоматом красиво делается, а через исключения - вообще не получится.
Уважаемый, это немного не в тему, но немогли бы привести схему ваших флажков и lasterrors или линки, а то пишем большое приложение с этим столкнулись и решили унифицировать, вот интересно, как другие это решают.
 

si

Administrator
Уважаемый, это немного не в тему, но немогли бы привести схему ваших флажков и lasterrors или линки, а то пишем большое приложение с этим столкнулись и решили унифицировать, вот интересно, как другие это решают.
Опоздал ты, он уехал, будет через 2-3 недели.
 

nail

Guest
Часто при наследовании используется вызов конструктора родительского класса. В Java для этого есть super(). А в PHP приходится использовать parent::className()
А теперь представь, что надо переделать структуру классов - придется очень много кода переписывать. А если будет унифицированное parent::__constructor() , то это уже намного проще. Вот для этого и нововведение.


Автор оригинала: webdeveloper

... Плохо то что теперь они придумали новый вид конструкторов. Зачем только? Что нельзя былдо сдедлать деструктор вида __className() ? или уже так ~className()?

По крайней мере мне это не понраивлось. Может я конечно не прав.
 

andrew005

Guest
Originally posted by nail
Часто при наследовании используется вызов конструктора родительского класса. В Java для этого есть super(). А в PHP приходится использовать parent::className()
А теперь представь, что надо переделать структуру классов - придется очень много кода переписывать. А если будет унифицированное parent::__constructor() , то это уже намного проще. Вот для этого и нововведение.
В таком случае, в parent'e должен быть конструктор именно __constructor(), а не ClassName()! , "то это уже намного" ЗАПУТАННЕЕ.

P.S. Странно, что вроде 2.0 выносилось на обсуждение широким массам, и в спецификации всеравно осталось полно ляпов. Никому нет дела?
 

nail

Guest
Вообще-то PHP находится в трудном положении с точки зрения дальнейшего развития.
Изначально он был ориентирован на простоту и незатейливость, отсюда его недостатки.
Недостаток с глобальными переменными вроде плавно преодолен, а вот с вещами посложнее труднее. Сущность языка изменить довольно непросто и болезненно.
Я думаю, что будет проблема с хостерами. Даже сейчас надо опасаться, что у заказчика может оказаться PHP 4.0.6, соответственно, проблемы с использованием фич 4.1.0
А ведь именно из-за хостинга и простоты языка (и, как следствие, дешевизны разработок) так популярен PHP.
Кстати, MS эту проблему (с VBScript, JScript) обошла, просто создав новый язык (C#).
 

nail

Guest
Автор оригинала: andrew005

В таком случае, в parent'e должен быть конструктор именно __constructor(), а не ClassName()! , "то это уже намного" ЗАПУТАННЕЕ.
Что мешает в будущем в разработках, ориентированных на ZE2, использовать __constructor() ?
 

_KV_

Новичок
Автор оригинала: kvn
Мужики, КАК вы его собрали???
Я пробовал у меня ругнулось на еррор в файле типа apache..что-то.c..и все..:(
Собирал сначала как SO (--with-apxs с кучей опций), потом плюнул начал просто --with-pgsql --with-xml и ВСЕ!
Причем как ЦГИ, а он все-равно ругнулся и послал make нафиг.
(Error code 1..)

FreeBSD-4.5R. Дистрибутив в php.net..
может попробовать с CVS стянуть..

Но вопрос остался - как вы его собирали?
Или здесь обсуждали binary version for Win...?
Я собрал на FreeBSD 4.5 нормально без ерроров. Брал из CVS.

cvsup php.cvsup
cvs -d :pserver:[email protected]:/repository co TSRM ZendEngine2

ZendEngine2 переименовал в Zend и положил вместе с TSRM в php4

./configure --disable-cli --with-tsrm-pth --with-dom=/usr/local --with-dom-xslt=/usr/local --with-dom-exslt=/usr/local --with-exec-dir=/usr/local/php/bin --with-mnogosearch=/usr/local/mnsh --enable-dbg=shared --with-dbg-profiler --enable-inline-optimization --with-freetype-dir=/usr/local --enable-trans-sid --enable-versioning --enable-ftp --with-xml --with-magic-quotes --enable-track-vars --enable-gd-native-ttf --with-png-dir=/usr/local --with-apxs=/usr/local/apache/bin/apxs --with-gd=/usr/local --with-jpeg-dir=/usr/local --with-gettext=/usr/local --with-bz2=/usr/local --with-zlib=/usr/local --with-mysql=/usr/local/mysql --enable-calendar --enable-safe-mode --enable-sysvsem --enable-sysvshm --with-config-file-path=/usr/local/php/ --with-exec-dir=/usr/local/php/bin --with-mod_charset --enable-bcmath --with-iconv=/usr/local

скомпилил, поставил, запустил, работает, глючит
 
Сверху