Які мови досліджень мають більш сильну типову систему, ніж Haskell і чому?


14

Ось я прочитав це:

У Haskell, безумовно, немає найсучаснішої системи типів (навіть не тісна, якщо рахувати дослідницькі мови), але з усіх мов, які фактично використовуються у виробництві Haskell, ймовірно, на самому верху.

Тому я запитую дві речі:

  1. які дослідницькі мови мають більш потужні системи типу, ніж Haskell;
  2. що вони покращують.

Я просто програміст, тому я не знаю багатьох математичних об'єктів, які використовуються в теорії типів, будь ласка, надайте ніжні пояснення, якщо можете.


3
Що "краще"?
Девід Річербі

2
@DavidRicherby Я думаю, це означає більш потужну систему типу
Виталий Олегович

2
Після того, як ви довели, що типова система є Тьюрінгом , це насправді має значення? ;-)
DevSolar

7
Машини Тьюрінга є повним комплексом Тьюрінга, чому ви не використовуєте їх для своїх повсякденних завдань програмування?
Галайз

4
Зауважте, що в оригінальному тексті згадуються мови з більш досконалими системами типу і не робиться жодних тверджень, що "більш вдосконалений" є кращим або гіршим для типової системи.
Петергіс

Відповіді:


25

Питання дещо проблематичне, оскільки воно спирається на суб’єктивне визначення "кращого".

Мови залежно набраних типів, такі як Agda , Idris та Coq, мають більш сильну систему типу, ніж Haskell. Це означає, що ви можете використовувати типи на цих мовах, щоб довести строго більше властивостей вашого коду, ніж у Haskell. Тобто є більше неправильних програм, які будуть спіймані.

Однак це досягається ціною: висновок про тип і перевірка наявності будь-яких значень даного типу вже неможливі. Це означає, що для цих мов вам потрібно чітко анотувати свій код за типами. По суті, це зводиться до написання власних підтверджень правильності для вашого коду.

Тож ці мови "кращі", ніж Haskell? Вони можуть перевірити вдосконалені докази правильності вашого коду, але вони не можуть автоматично довести властивості вашого коду так, як може Haskell.

Ще одна мова дослідження, яка «краща», ніж Haskell, - LiquidHaskell . Це в основному Haskell з вишуканими типами, закріпленими зверху, проаналізованими із спеціальних коментарів.

Типи уточнення дозволяють уточнити типи з властивостями. Наприклад, замість того, щоб мати Int, ви можете вказати {i : Int | i > 0}, вказавши тип усіх натуральних чисел. Вибір типу вирішується для типів уточнення, але ви не можете довести майже стільки властивостей правильності з ними, скільки можна для залежних типів.

Існують і інші системи вдосконалення типу, але я не страшенно знайомий з жодною з них.


Дякую! Чи можна довести, що система типу Haskell є найсильнішою, яка все ще дозволяє зробити висновок про тип?
Виталий Олегович

3
Haskell, безумовно, НЕ найсильніший, що дозволяє зробити висновок про тип. Згадані мною типи уточнення дозволяють зробити висновок про тип, а до Haskell додано багато розширень GHC, які дозволяють створити трохи більш сильну систему типу.
jmite

4
На додаток до цього, існує багато типів систем, і багато з них незрівнянні: вони будуть сильнішими за Haskell в деяких аспектах, але слабкішими, ніж Haskell в інших. Немає лінійного впорядкування типів систем від найсильніших до найслабших.
jmite

5
Тепер я хочу довести, що немає найсильнішої системи типів, яка б дозволяла виводити тип. Повинен протистояти доказу марних фактів.
Андрій Бауер

1
Факт не здається мені марним. Знання про те, що існує найсильніша система типу з висновком типу, викликало б великий інтерес, особливо якщо це виявилося б можливим впровадити.
раціоналіс

10

Сімейство мов ML (StandardML, OCaml ) випливає з подібної традиції, як Haskell, і тому мають схожі системи. Однак вони зовсім не такі, як Haskell, і деякі їх функції можуть вам більше подобатися ( об'єктивно кращої системи немає, тому що типові системи в мовах програмування існують, щоб допомогти людині ). Ось деякі особливості OCaml, які Haskell або не мають (але можуть мати відповідну концепцію), або Haskell мають, але роблять інакше:

  1. Поліморфні варіанти .
  2. Об'єкти з глибоким підтипуванням та класами .
  3. Функціонери , які представляють собою карти між модулями (у Haskell є модулі), і навіть першокласні модулі

І, будь ласка, немає необхідності перетворювати це на перестрілку ML-Haskell, інакше я почну посилатись на повідомлення в блозі Боб Харпер ;-)


9

Мова дослідження Clean має кращу систему типу, ніж Haskell, оскільки вона має унікальні типи . Ідеї, що стоять за типами унікальності, тісно пов'язані з лінійною логікою , яка ближче до обмеженого ресурсом "реального світу", ніж класична логіка.

Антидослідницька мова Rust також має типову систему з унікальними особливостями, які ближче до "реального світу", ніж класичні системи чистого типу. Більшість ідей, що вплинули на типову систему, були опубліковані абсолютно незалежно від Іржі задовго до її існування. Але спосіб цих старих ідей є унікальним, а також заслуговує на справжні наукові публікації, навіть якщо існують відомі лазівки та невідповідності.


3
Якось "опубліковані" та "антидослідницькі" не йдуть разом.
Андрій Бауер

1
Унікальність, безумовно, цікава концепція, але в IMO йдеться скоріше про семантику, а не про типову функцію системи як таку. І чи справді це робить систему типу суворо кращою ? Чи може чистіші нові речі, які Haskell додав до своєї типової системи, поліморфізм вищого рангу і т. Д. - деякі з них навіть можливі, коли типовій системі вже потрібно мати справу з унікальністю?
близько

1
@leftaroundabout Наскільки ви знайомі з унікальними типами або лінійною логікою? Якщо x має унікальний тип, то f (x, x), наприклад, не надруковано. Можливо, можливо розширити Haskell також на підтримку унікальних типів. Семантика руху в C ++ також може розглядатися як поліпшення підтримки унікальних типів поверх існуючої системи типів.
Томас Клімпель

Мені добре знайома семантика руху C ++, можливо, саме тому моє враження про унікальність - це «не дуже річ із системою типу». Що мені здається цікавим, чи заважають повні типи унікальності, що розповсюджуються, перешкоджають іншим особливостям системи вдосконаленого типу?
близько

1
@leftaroundabout Посилання на Rvalue мені здаються типовою системою. Чому унікальні типи перешкоджають іншим особливостям розширеного типу? У гіршому випадку ці розширені функції просто не стосуються типів унікальності. Звичайно, такі "реальні світові" характеристики, як типи унікальності, означають досягнення ширини замість глибини, і час, який ви витратите на просування ширше, більше не буде для проникнення вглиб. Але в мене таке враження, що типи унікальності пропонують хороший баланс між теорією та практикою, тому я думаю, що час було б добре витрачено.
Томас Клімпель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.