Пару дней назад 0xd34df00d опубликовал здесь перевод статьи, описывающей, что можно узнать о функции в разных языках, если рассматривать её как "чёрный ящик", не используя информацию о её реализации (но, разумеется, не мешая ей пользоваться компилятору). Разумеется, получаемая информация очень сильно зависит от языка — в исходной статье рассматривались четыре примера:
- Python — динамически типизированный, информации минимум, какие-то подсказки дают только тесты;
- C — слабо статически типизированный, информации ненамного больше;
- Haskell — сильно статически типизированный, с чистыми функциями, информации существенно больше;
- Idris — язык с зависимыми типами, информации достаточно, чтобы во время компиляции доказать корректность функции.
"Есть C, есть Haskell, а где же Rust?!" — немедленно прозвучал вопрос. Ответ — под катом.