Phalcon 2 i projekt Zephir

Zephir

Nie tak dawno temu opisywałem Wam możliwości oraz niespotykaną wcześniej wydajność Phalcon. Zaraz po publikacji tamtego wpisu, twórcy frameworka opublikowali na swoim blogu post dotyczący przyszłości Phalcon oraz wersji 2, a także projektu Zephir.

Na wstępie posłużę się cytatem z bloga, który najlepiej oddaje myśli twórców:

Despite being a PHP extension implemented in C and its young age, Phalcon offers the same or better features than other frameworks that have been around a lot longer. Phalcon is a fast, robust, secure, extendable PHP framework for everyone to use.

Since we have created a great framework, framework’s development is an every day task, constant improvement and evolution is required to deliver more and better applications.

Twórcy Phalcon dostrzegają ogromny potencjał w rozwijaniu swojego dzieła. Rosnąca społeczność wyraźnie o tym świadczy. Ze względu na wykorzystanie języka C, występują problemy w łataniu dziur oraz rozwoju całego frameworka. Widać wyraźnie, że w tym wypadku wsparcie jest mniejsze niż w przypadku pozostałych frameworków, które pisane są w czystym PHP.

Zephir

W związku z powyższym, zespół Phalcon zdecydował się stworzyć projekt Zephir. Jest to nowy język programowania, który pomóc ma w tworzeniu, wspieraniu oraz rozwoju całego ekosystemu.

Jak określają twórcy, Zephir to:

It’s a high level language, something between C and PHP. It’s both dynamic and static typed and it supports just the features we need to create and maintain a project like Phalcon.

namespace Test;

class MyTest extends SomeNamespaceMyAnotherClass 
{
    public function someFunction(a, b) 
    { 
        return a + b;
    }
}

Cały kod w Zephir musi być umieszczony w klasach, które to umiejscowione są w przestrzeniach nazw (namespaces). Użycie $ nie jest wymagane. Zephir to także dynamiczne typowanie ( jak w PHP), ale istnieje także możliwość użycia statycznego typowania, które powodować będzie wzrost wydajności, ponieważ wykonujemy jedną z czynności kompilatora już podczas pisania samego kodu.

Dostępne typy to: long/int, double/float, bool oraz string, które konwertowane są do typów w języku C.

Deweloperzy zwolnieni zostali także z konieczności rezerwowania i zwalniania pamięci. Robi to za nich kompilator.

Składnia języka inspirowana była C, PHP, JavaScript oraz Rust, co bardzo wyraźnie widać na poniższym przykładzie:

namespace Test;

class MyTest 
{
    public function someMethod()
    {
        /* Variables must be declared */
        var fruits;
        int i = 0, length;

        /* Create PHP array */
        let myArray = ["hello", 0, 100.25, false, null];

        /* count the array into a 'int' variable */
        let length = count(myArray);

        /* Print value types */
        while i < length {
            echo typeof myArray[i], "n";
            let i++;
        }

        return fruits;
    }
}

Bardzo ciekawe. Przyznam, że nie spodziewałem się takiego połączenia. Twórcy w swoim wpisie wspominają także o celach samego projektu Zephir, przyszłości Phalcon z tym związanej oraz opisują wyraźnie to, czym Zephir na pewno nie będzie. Zachęcam do lektury, a sam kibicuję zespołowi.