0,0
рейтинг
22 марта 2014 в 19:57

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

PHP*
Новый язык 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!
Екатерина Никитина @sferrka
карма
25,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (38)

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

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