Zig действительно усложняет использование виртуальных функций. Это очень раздражает в начале. Вы не можете просто создать интерфейс и затем легко реализовать его, как это можно сделать в Golang или большинстве других языков. Но это функция, а не ошибка. Вы можете использовать виртуальные функции с помощью comptime. Но Zig делает более очевидными негативные последствия этого. Zig делает написание более простого кода, который не использует виртуальные функции, вашим стандартным путем, и в результате вы в конечном итоге используете интерфейсы и виртуальные функции только тогда, когда это действительно имеет значение и стоит усилий. Оказывается, вам почти никогда не нужны интерфейсы во многом коде.
Я забыл упомянуть, что согласен, кстати. Это больше похоже на положительную сторону, которая изменила восприятие с "что за черт" на "на самом деле это интересный подход, чтобы отговорить от такой абстракции". Что-то вроде отсутствия перечислений в Go или системы заимствований в Rust. Или объектно-ориентированных языков. В целом, мне не нравятся эти вещи, но я как-то научился чему-то, приняв точку зрения языка.
@norswap Кстати, я понимаю, что мой пост не упоминает, что в целом я хочу интерфейсы. Я говорю только о положительном моменте, но, на мой взгляд, интерфейсы — это то, где zig без скрытого управления потоком заходит на шаг слишком далеко.
777