Це гарне запитання! Він запитує, чого ми очікуємо від типів у набраній мові.
Спершу зауважте, що ми можемо набрати будь-яку мову програмування у юнипе : просто виберіть букву, скажімо U
, і скажіть, що кожна програма має тип U
. Це не дуже корисно, але це має сенс.
Існує багато способів зрозуміти типи, але з точки зору програміста наступне, я вважаю корисним. Подумайте про тип як специфікацію чи гарантію . Для того, щоб сказати , що має тип А це означає , що «ми гарантуємо / очікування / попиту , що е задовольняє властивість кодованого А ». Часто A - це щось просте на кшталт , у цьому випадку властивість просто "це ціле число".еАеААint
Немає кінця, наскільки виразними можуть бути ваші типи. У принципі вони можуть бути будь-якими логічними висловлюваннями, вони можуть використовувати теорію категорій і щось подібне і т. Д. Наприклад, залежні типи дозволять висловити такі речі, як "ця функція відображає списки, щоб перелічити такі, що вихід є впорядкованим введенням". Ви можете піти далі, на даний момент я слухаю розмову про "одночасну логіку поділу", яка дозволяє говорити про те, як працюють паралельні програми зі спільним станом. Фантазії.
Мистецтво типів в дизайні мови програмування - це врівноваження виразності та простоти :
- більш виразні типи дозволяють нам детальніше пояснити (собі та компілятору), що має йти далі
- простіші типи простіші для розуміння і їх легше автоматизувати в компіляторі. (Люди придумують типи, які, по суті, потребують асистента і кореспондента користувача для перевірки типу.)
Простоту не варто недооцінювати, оскільки не кожен програміст має доктор наук з теорії мов програмування.
Тож повернемося до вашого питання: як ви знаєте, що ваша система типу хороша ? Ну, доведіть теореми, які показують, що ваші типи мають бути врівноваженими. Існуватиме два види теорем:
Теореми, які говорять про те, що ваші типи корисні . Знання, що програма має тип, має передбачати певні гарантії, наприклад, що програма не зациклюється (це буде теоремою безпеки ). Інша сім'я теорем з'єднала б типи з семантичними моделями, щоб ми могли почати використовувати реальну математику для доведення речей про наші програми (це були б теореми про адекватність та багато інших). Зверху єдність погана, оскільки не має таких корисних теорем.
Теореми, які говорять про те, що ваші типи прості . Основним з них буде те, що вирішується, чи має певний вираз даний тип. Ще одна особливість простоти - дати алгоритм для виведення типу. Інші теореми про простоту полягають у тому, що вираз має максимум один тип, або що вираз має головний тип (тобто, "найкращий" серед усіх типів, які він має).
Важко бути більш конкретним, оскільки типи є дуже загальним механізмом. Але я сподіваюся, ви побачите, для чого слід стріляти. Як і більшість аспектів дизайну мови програмування, немає абсолютної міри успіху. Натомість є простір можливостей дизайну, і важливо - зрозуміти, де в просторі ви перебуваєте чи хочете бути.