Будет ли вывод типа Хиндли Милнера полезен для PyPy для RPython?
Проводит ли PyPy статическую проверку типов во время компиляции, чтобы отследить ошибки типов во время компиляции? И если бы не что-то вроде вывода типа HM, было бы полезно отлавливать эти ошибки во время компиляции?
1 ответ
Нет на обоих аккаунтах. (Я предполагаю, что под PyPy вы подразумеваете интерпретатор Python с JIT-компилятором и другими функциями.) Он не выполняет статическую проверку типов кода Python в любое время, поскольку он реализует язык Python, а не статически типизированный Python-подобный язык. Правда в том, что вы * не можете * обнаружить все ошибки типа (для большинства определений "ошибки типа") в программах Python статически. Вы можете попытаться найти некоторые из них, но даже если вы можете доказать, что во время выполнения произошла ошибка типа, вы не можете отказаться от выполнения программы, потому что вполне допустимо (и иногда полезно) запускать этот код откуда-то еще и ловить исключение.
И, кстати, система типов, которую Дамас-Хиндли-Милнер выводит типы для, даже отдаленно не достаточна для выражения даже полезного подмножества "типов" в программах на Python (не то, чтобы большинство популярных систем статических типов работали лучше). Попробуй набрать zip
Например, (подсказка: у Haskell его нет, у него есть несколько функций, специализирующихся на 2, 3, 4 аргументах). Или, если вы хотите что-то сложнее, getattr
, И затем есть целая вещь номинального и структурного подтипа.
Были попытки вывести типы в Python и аналогичных языках, но эти подходы обязательно сильно отличаются от того, что сделал мир функционального программирования в этой области (см. Выше). Кроме того, эти проекты никогда не находят все ошибки типов в программах Python (хотя некоторые из них охватывают значительно упрощенные подмножества или обнаруживают некоторые ошибки в программах Python). Проведите исследование ( Lambda the Ultimate имеет много ссылок).
Теперь имя "PyPy" исторически также использовалось для цепочки инструментов перевода RPython, которая действительно, среди прочего, выводит статические типы для программ RPython. Но RPython - это не Python (он имеет множество ограничений, в том смысле, что это фактически другой язык), а система типов и вывод типов радикально отличаются от DHM (целая программа, основанная на абстрактной интерпретации, полностью система другого типа).