Еквівалентність аналізу потоку даних, абстрактної інтерпретації та виводу типу?


9

@ Відповідь Бабу на недавнє запитання нагадує мені, що свого часу я думаю, що я прочитав документ про еквівалентність (з точки зору обох фактів, які можна зробити висновками або довести, та складності часу виконання алгоритму висновку) аналізу потоків даних , абстрактна інтерпретація та тип висновку .

У деяких підставах (як, наприклад, міжпроцедурний інтерпроцедурний аналіз потоку даних та абстрактне тлумачення) еквівалентність для мене відносно очевидна, але питання видається більш тонким для інших порівнянь. Наприклад, я не можу зрозуміти, як можна зробити висновок типу Хіндлі-Мілнера, щоб довести деякі властивості, які можна довести за допомогою аналізу потоків даних, залежних від потоку.

Які насінні посилання обговорюють еквівалентність (або відмінності) між аналізом потоку даних, абстрактною інтерпретацією та висновком типу?

Відповіді:


4

Аналіз потоку даних та висновок типу - це конкретні випадки абстрактної інтерпретації.

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

Виявляється, висновок типу також стосується обчислення з фіксованою точкою, хоча це далеко не очевидно, іммо. Ось документ, який прямо показує, що типи є абстрактними тлумаченнями: папір . В основному типи розглядаються як абстракція програмної конкретної семантики. Наприклад, у системі типу Хіндлі-Мілнера абстрактна область типів має нескінченну висоту, а обчислення (найбільш загального) типу за допомогою об'єднання по суті виконує (дуже неточну) операцію розширення.


4

Хорошим місцем для ознайомлення з цими трьома підходами та про те, як це стосується, є книга Принципи програмного аналізу Нільсона, Нільсона та Ханкіна.

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


3

Я вважаю їх в основному однаковими. Вони просто мали спочатку різні цілі і були придумані різними фракціями інформатики.

Аналіз потоку даних походить від інженерної фракції компілятора, намагаючись розповісти про їх алгоритми оптимізації та перевірити верхні межі їх складності тощо.

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

Висновок типу походить з академічної області функціонального програмування, де він спочатку був інструментом робити класні речі з компіляторами. Тоді виникла думка, що тип може бути набагато більше, ніж просто "int" або "float", а також інші речі, наприклад, у класичному аналізі потоку даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.