The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Dropbox прекращает разработку Pyston. Опубликован финальный ..."
Отправлено Аноним, 07-Фев-17 18:22 
> Мой вердикт - там фигня, а не тесты. Хотите поспорить, давайте приводите
> свои аргументы, а я приведу свои.

Спорить с пыхапистоми о производительности? Зачем? Это все равно что обсуждать музыкальное произведение с теми, кто слышал его только в «напеве Рабиновича».

Динамика в ЯП сама по себе вещь, производительности никак не способствующая, а уж совместно со слабой типизацией – вообще убойное для анализатора и оптимизатора сочетание.
Из-за этого, примитивных типов там, как таковых нет.

Есть универсальные конструкты-обертки, способные вместить любой нужный тип плюс информацию о текущем. В похапе это zval:

https://github.com/php/php-src/blob/master/Zend/zend_types.h...


typedef struct _zval_struct     zval;

typedef union _zend_value {
    zend_long         lval;                /* long value */
    double            dval;                /* double value */
    zend_refcounted  *counted;
    zend_string      *str;
    zend_array       *arr;
    zend_object      *obj;
    zend_resource    *res;
    zend_reference   *ref;
    zend_ast_ref     *ast;
    zval             *zv;
    void             *ptr;
    zend_class_entry *ce;
    zend_function    *func;
    struct {
        uint32_t w1;
        uint32_t w2;
    } ww;
} zend_value;

struct _zval_struct {
    zend_value        value;            /* value */
    union {
        struct {
            ZEND_ENDIAN_LOHI_4(
                zend_uchar    type,            /* active type */
                zend_uchar    type_flags,
                zend_uchar    const_flags,
                zend_uchar    reserved)        /* call info for EX(This) */
        } v;
        uint32_t type_info;
    } u1;
    union {
        uint32_t     next;                 /* hash collision chain */
        uint32_t     cache_slot;           /* literal cache slot */
        uint32_t     lineno;               /* line number (for ast nodes) */
        uint32_t     num_args;             /* arguments number for EX(This) */
        uint32_t     fe_pos;               /* foreach position */
        uint32_t     fe_iter_idx;          /* foreach iterator index */
        uint32_t     access_flags;         /* class constant access flags */
        uint32_t     property_guard;       /* single property guard */
        uint32_t     extra;                /* not further specified */
    } u2;
};


Поэтому, на самом деле, даже просто «добраться до начинки», т.е. самих данных переменной, относительно недешево, потому как сначала нужно прочитать и определить тип.

А уж про операции я и объяснять не буду. Пускай пыхпышники и далее считают, что


add REG1, REG2

и

PUSH zval1
PUSH zval2
MOV REG1, [zval1+type_info*magic_val]
CALL [add_op_offset + REG1]
...
здесь еще следует определение типа для второй переменной и ее приведение в случае необходимости.

почти одинаковы по затратам. Ведь они точно знают, что мифические бранчпредикторы давно вышли на уровень ораклов, все кэши отменили за ненадобностью и поэтому ПоХаПе и производительность можно вполне упоминать в одном предложении )
 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру