002 Почему Zephir?
Сегодня PHP приложения должны сбалансировать ряд проблем, в том числе стабильности, производительности и функциональности. Каждое РНР приложение основано на наборе общих компонентов, которые также являются базой для большинства приложений.
Эти общие компоненты библиотек/фреймворков или их сочетание. После установки фреймворки меняются редко, являясь основой приложения они должны быть очень функциональным, а также очень быстрыми.
Получение быстрых и надежных библиотек может быть затруднено из-за высоких уровней абстракции, которые, как правило, реализуются в них. Учитывая условие, что базовые библиотеки или фреймворки меняются редко, есть возможность создавать расширения, которые обеспечивают эту функциональность используя компиляцию для улучшение производительности и использования ресурсов.
С Zephir, вы можете реализовать объектно-ориентированные библиотеки/фреймворки/приложения, которые могут быть использованы в PHP, экономя важные секунды, которые могут сделать ваше приложение быстрее, улучшая его потребительские свойства.
Если вы PHP программист...
PHP является одним из самых популярных языков, используемых для разработки веб-приложений. Динамически типизированные и интерпретируемые языки, как PHP предлагают очень высокую скорость разработки благодаря их гибкости.
Начиная с версии 4, а затем 5, PHP основан на реализации движка Zend Engine. Это виртуальная машина, которая выполняет PHP код из представления в байт-коде. Zend Engine практически присутствует в каждой установке PHP в мире, с Zephir, вы можете создавать расширения для PHP, работающих под Zend Engine.
Zephir основывается на PHP, поэтому они, очевидно, имеют много общего, однако; они имеют существенные различия, которые придают Zephir свою собственную индивидуальность. Например, Zephir является более строгим, и это может быть сделать вас менее производительным по сравнению с PHP из-за шага компиляции.
Если вы C программист...
C является одним из самых мощных и популярных языков когда-либо созданных. На самом деле, PHP написан на C, это является одной из причин, почему расширения PHP доступны для него. C дает вам свободу для управления памятью, использования типы низкого уровня и даже встроенные ассемблерные процедуры.
Тем не менее, разработка больших приложений на C может занять гораздо больше времени, чем ожидалось, по сравнению с PHP или Zephir и некоторые ошибки может быть сложно найти, если вы не являетесь опытным разработчиком.
Zephir был разработан, чтобы быть безопасным, поэтому он не реализует указатели или ручное управление памятью, так что если вы программируете на C, вы будете чувствовать, что Zephir менее мощный, но более дружественным, чем C.
Компиляция против интерпретации
Компиляция обычно замедляет разработку; вам потребуется немного больше терпения, чтобы компилировать ваш код перед его запуском. Соответственно, интерпретация ведет к снижению производительности в пользу скорости разработки. В некоторых случаях, не существует какой-либо заметной разницы между скоростью интерпретируемого и скомпилированного кода.
Zephir требует компиляции кода, однако, его функциональность используется с PHP, который интерпретируется.
После компиляции кода не нужно делать ее снова, однако, интерпретируемый код интерпретируется каждый раз, когда он запускается. Разработчик может решить, какие части приложения должны быть написаны на Zephir и какие нет.
Статическая типизация против динамической типизации
Вообще говоря, в статически типизированном языке, переменная связана с конкретным типом всю свою жизнь. Её тип не может быть изменен, и он может ссылаться только на типо-совместимые экземпляры и операции. Языки, типа C/C ++ были реализованы со схемой:
int a = 0; a = "hello"; // не позволяется
В динамической типизации, тип связан со значением, а не переменной. Таким образом, переменная может ссылаться на тип значения, а затем переназначить позже на значение несвязанного типа. Javascript/PHP - примеры динамического типизированного языка:
var a = 0; a = "hello"; // позволяется
Несмотря на свои преимущества производительности, динамические Языки могут быть не лучший выбор для всех приложений, в частности, для очень больших кодовых баз и высокопроизводительных приложений.
Оптимизация производительности динамического языка, такого как PHP, более сложна, чем для статического языка, такого как C. На статическом языке оптимизаторы могут использовать информацию типов для принятия решений. В динамическом языке для оптимизатора доступно меньше таких ключей, что затрудняет выбор вариантов оптимизации.
Хотя последние достижения в оптимизации динамических языков являются многообещающими (например, компиляция JIT), они отстают от уровня техники для статических языков. Таким образом, если вам требуется очень высокая производительность, статические языки, вероятно, более безопасный выбор.
Еще одно небольшое преимущество статических языков - дополнительная проверка компилятора. Компилятор не может найти логические ошибки, которые намного важнее, но компилятор может заранее обнаружить ошибки, которые в динамическом языке могут быть найдены только во время выполнения.
Zephir статически и динамически типизируется, позволяя вам использовать преимущества с обеих сторон, где это возможно.
Схема компиляции
Zephir предлагает генерацию собственного кода (в настоящее время через компиляцию в C), компилятор, подобный gcc/clang/vc ++, оптимизирует и компилирует код до машинного кода. На следующем графике показано, как работает этот процесс:
В дополнение к тому, что предоставляет Zephir, Со временем, в компиляторе были реализованы и назрели ряд оптимизаций, которые улучшают производительность скомпилированных приложений:
Защита кода
В некоторых случаях компиляция не приводит к существенному повышению производительности, это может быть связано с тем, что узкое место расположено в области ввода-вывода приложения (что вполне вероятно), а не в вычислении/памяти. Тем не менее, компиляция кода может также обеспечить определенный уровень интеллектуальной защиты для вашего приложения. Благодаря Zephir, производящему конечные двоичные файлы, вы также получаете возможность скрывать код для пользователей или клиентов.