Как определяется система типов языка Hack?
Пожалуйста, дайте точное описание системы типов языка Hack. Кажется, что он не существует в Интернете - все, что я могу найти, это примеры, разбросанные по всем документам, поэтому, пожалуйста, опишите это подробно в своем ответе.
Например, я хотел бы знать, как определяется определение подтипов в Hack, и какое понятие совместимости назначений используется в различных режимах проверки типов Hack / static-analysis (строго, частично, decl).
1 ответ
Если вы запрашиваете официальную языковую спецификацию для Hack, сейчас ее нет, хотя мы считаем, что в конечном итоге это было бы хорошо. Если вы спрашиваете о правилах вывода и формальных доказательствах языка, ну, мы гораздо больше сосредоточились на создании прагматического языка, чем на том, чтобы сесть и потратить время, чтобы доказать его правильность.:) (Тем не менее, код, который на 100% строгий, должен быть надежным, то есть без ошибок типа времени выполнения, и если нет, то это ошибка; мы просто никогда не собираемся сидеть и формально доказывать это.)
Таким образом, документы, на которые вы ссылаетесь, являются лучшими, если вы не хотите начинать копаться в источнике проверки типов. Для этого вас могут заинтересовать мельчайшие детали нашего кода унификации, нашего отношения к подтипам и общей проверки типов для начала. (Есть много и много еще, но если вы тот человек, который хочет разобраться в мельчайших подробностях того, как мы реализуем объединение, я верю, что вы сможете найти остальное самостоятельно:))
Если у вас есть конкретные вопросы по реализации, не стесняйтесь задавать их здесь, в SO, с тегом "hacklang", если они есть по теме, и в целом я рад поболтать в #hhvm на Freenode в рабочее время по тихоокеанскому времени США.,