PHP compile time generics: yay or nay?
Кратко:
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 разрабатывала «ассоциированные типы» и поняла, что их легко переформулировать как ограниченные обобщения.
Вопрос сообществу:
Поддержите ли вы такой вариант и проголосуете ли «за»?