Hacker News Digest

Тег: #abstract-classes

Постов: 1

PHP compile time generics: yay or nay? (thephp.foundation)

Кратко:
PHP-фонд предлагает реализовать только компиляторные обобщения (generics) для интерфейсов и абстрактных классов.
Синтаксис:

interface Repository<Item> {
    public function find(int $id): Item;
}

class UserRepo implements Repository<User> { … }
  • Все проверки типов происходят на этапе компиляции.
  • Ошибки ловятся до запуска кода.
  • new Repository<User>() по-прежнему невозможно, но и не усложняется.

Почему не полные обобщения?
Полноценные runtime-generics требуют сложного вывода типов и резко замедляют работу, особенно при объединённых типах и массивах.

Откуда идея?

  • 2023-2024: эксперименты Arnaud Le Blanc показали, что 80 % пользы можно получить без 80 % сложностей.
  • 2025: Gina Banyard разрабатывала «ассоциированные типы» и поняла, что их легко переформулировать как ограниченные обобщения.

Вопрос сообществу:
Поддержите ли вы такой вариант и проголосуете ли «за»?

by moebrowne • 07 августа 2025 г. в 11:49 • 86 points

ОригиналHN

#php#generics#compile-time#interfaces#abstract-classes#type-checking#c##java

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

  • В обсуждении разбираются плюсы и минусы добавления дженериков в PHP.
  • Участники спорят, не приведёт ли это к «размагничиванию» типов, и объясняют разницу между reified (типы сохраняются в рантайме, как в C#) и erased (типы стираются, как в Java) дженериками.
  • Поднимается вопрос: почему class Repo<T> {} труднее реализовать, чем class BlogPostRepo extends BaseRepo<BlogPost> {}.
  • Многие разработчики просят хотя бы строго типизированные массивы, считая их более полезными, чем полноценные дженерики.
  • Часть команды уже использует PHPStan и strict_types, считая этого достаточным без изменений ядра языка.