Команда Facebook выложила в открытый доступ язык Hack

    Новый язык Hack является прямым потомком PHP, основанным на его синтаксисе. Hack создан специально для виртуальной машины HHVM (Hip Hop Virtual Machine). Команда Facebook полностью перевела разработку на новый язык и называет эту миграцию большим успехом. Однако Facebook не отказывается от поддержки PHP и планирует доработать поддержку PHP5 в HHVM.
    Подробная документация по языку доступна здесь (на английском языке).
    Официальный сайт нового языка — http://hacklang.org/.
    Новость о релизе языка.

    Пример кода


    <?hh
    class MyClass {
      public function alpha(): int {
        return 1;
      }
    
      public function beta(): string {
        return 'hi test';
      }
    }
    
    function f(MyClass $my_inst): string {
      // Fix me!
      return $my_inst->alpha();
    }
    


    Возможности нового языка


    Основной особенностью Hack стала реализация статической типизации. Это потребовало отключения некоторых возможностей языка, таких как переменная в переменной $$ и функция extract (неявное создание переменных в таблице символов из массива).
    Также было внедрено множество фичей из современных языков программирования: обобщенное программирование, псевдонимы типов, обнуляемые типы и ограничения на параметры типов, коллекции, лямбды, а также проверка возвращаемых типов и типов параметров во время выполнения.
    Типы проверяются специальным сервером (сервисом, демоном), который следит за изменением файлов исходного кода на диске.
    Каким образом оповещается программист, пока не ясно, но вместе с Hack в комплекте идет несколько инструментов.

    Спасибо, Facebook, возможно это то, чего так долго не хватало PHP!
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 38
    • +19
      Ну и как теперь называться «хакерам», которые были до появления этого языка? :)
      • +6
        Я не очень понимаю эту тягу Facebook сделать из PHP клон Java. Хотя понятно, что с помощью статической типизации компилятор может произвести намного больше оптимизаций.
        • +1
          Если я правильно поняла, то статическая типизация в hack не является обязательной, т.е. даже в пределах одного файла возможна и динамическая и статическая типизация. К тому же, они пишут, что многие типы типы сглаживаются (приводятся) таким образом, чтобы разработка была максимально похожа на работу с PHP. Т.е. используем строгие проверки там, где это действительно необходимо.
          • –4
            они скорее всего это делают затем, зачем и вы ). рассказали-бы о вашем проекте здесь.
            • +10
              В PHP де факто уже есть все данные для использования статической типизации. Только они находятся в phpdoc и используются IDE, а не самим PHP.
              • 0
                Скажем так: во многих проектах возможности динамической типизации не используются де-факто — по сути работает автоматический вывод типов при инициализации, а далее тип никогда не меняется (разве что на null). И во многих проектах есть информация для статического сильного контроля типов — phpdoc.
            • 0
              Извините, если глупый вопрос — но кто мне объяснит, можно ли с помощью Hack/HHVM писать GUI-приложения с использованием сторонних PHP-библиотек? Так мало внятной информации в рунете по поводу «фейсбучного PHP»… :(
                • –1
                  Спасибо, посмотрю. Помнится, щупал летом DevelStudio. В целом понравилось, но что-то мне для моего проекта не подошло. Не помню почему именно… Уже скачал заново, попробую ещё раз. Возможно, мои давнишние тревоги были напрасные.

              • –8
                Типы проверяются специальным сервером (сервисом, демоном), который следит за изменением файлов исходного кода на диске.

                то есть дальше можно не читать?
                • +3
                  Синтаксис
                  image
                  • –3
                    Очень интересный язык! Все то чего не достаёт в PHP. Если бы появилась поддержка его в PhpStorm с удовольствием программировал бы на нем.
                    • +3
                      phpstorm, к сожалению и текущий php фигово поддерживает. Хотя казалось бы — добавить пару аннотаций и все было-бы в шоколаде.
                      • 0
                        А чего именно вам не хватает в phpstorm?
                        • 0
                          Ну например работы с ArrayAccess, да и вообще с массивами.
                          Ясно что когда используются переменные — сложно угадать, что в массиве, но когда явно пишешь:
                          $arr['foo'] = new Foo();
                          $arr['foo']->bar(); // тут уже контекст теряется
                          

                          Ну и всяческих мелких аннотаций, типо @return argument<$object>.
                          Хотя с поддержкой JS там все еще хуже, так что я молчу и не жужу:)
                          • –1
                            PhpStorm 7.3.1 — Ваш пример работает без каких-либо аннотаций.
                            • 0
                              /** @var Foo[] $arr */ 
                              $arr = [];
                              //...
                              

                              Ведь можно и так.
                              • 0
                                Да, знаю про инлайн-аннотации. Но что если я в массиве разные классы храню?
                                • 0
                                  Я даже не могу представить как это вообще можно проинспектировать. Можно только явно указать все возможные типы через пайп.
                                  • +1
                                    Нужно научить IDE исполнять код, вот и все.
                                    • 0
                                      А если содержимое массива будет зависеть от данных, которые пришли со стороны пользователя? Я думаю, что тут проще будет научить IDE писать код за программиста… :)
                                      • 0
                                        Зря так думаете) Посмотрите хотя бы на COLT. IDE знает какие параметры метод принимает, какие у них сигнатуры. Да и вообще. По вашему $fooBar и $foo['bar'] сильно отличается? На мой взгляд нет.
                                      • +1
                                        Не исполнять, а анализировать.
                        • 0
                          Замечательно! Популярность языка сделала свое дело — он стал развиваться самостоятельно.
                          Интересно, почему не отказались от <?hh
                          Особенно радует доработанность языка, не просто добавили типы, но и шаблоны. Супер!
                          • НЛО прилетело и опубликовало эту надпись здесь
                            • 0
                              Мне кажется ваши претензии относятся скорее к виртуальной машине, нежели к языку?
                              • 0
                                Кажется. Или вы считаете, что по запросу «Hack» будет находится этот язык программирования?
                              • 0
                                Полное название — hacklang. По аналогии Go -> Golang.
                                • 0
                                  Как и многие другие. Автор оригинального комментария сетует на то, что многие современные языки используют в качестве названия имена нарицательные, что иногда слегка, иногда драматически ухудшает поиск инфы по ним. Примеры:
                                  Hack, Go, Rust, Ceylon.

                                  Ещё есть язык D (однобуквенное название).
                              • 0
                                В PHP это не нужно, если используется сам PHP, а не mod_apache или FPM.
                                • +10
                                  JavaScript – TypeScript (static typing, generics etc.)
                                  PHP – Hack (static typing, generics etc.)
                                  • 0
                                    Наконец-то слово хакер (особенно в Америке) перестанет нести налет специалиста по противоправным действиям.
                                    • –1
                                      Новый налёт будет тоже не слишком радостным, учитывая отношение остальных разработчиков к разработчикам на PHP. Лично мне всё равно, что думают о PHP'шниках, но я бы предпочёл возвращение первоначального смысла этому слову, т.к. в некотором смысле являюсь хакером сам (без претензий на крутизну). Ну и да, название, на мой взгляд, неудачное по двум причинам:
                                      1. Одно из значений слова hack, пережившее эффекты журнализма — быстрая правка, решающая проблему здесь и сейчас, без раздумий о красоте кода и о его поддержке. Не очень хорошая ассоциация для языка, на который переводят почти весь свой код такие компании, как Facebook — надолго ли?
                                      2. Трудность поиска информации по языку. Если же язык станет очень популярным, станет сложно искать просто слово hack. Примеры языков Go и D как бы намекают нам, что, скорее всего, при поиске придётся добавлять -lang к названию языка.
                                      • 0
                                        ой да ладно вам. По Си сложно материалы найти?
                                    • 0
                                      Хороший логотип, мне нравится
                                      image
                                      image
                                      • –1
                                        я просто оставлю это здесь. Видимо осталось уже недолго!
                                        habrahabr.ru/post/210206/#comment_7241200

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