AXIOM Документація Axiom
ENBLACKGRAYWHITE
Axiom · black

Від Axiom до Ada та SPARK

Після Axiom багато «дивних» ідей Ada перестають бути дивними: ranges, contracts, strong types і proof-oriented design мають одну мету — прибрати випадкові стани.

Axiom не копіює Ada syntax. Він намагається дати сучасному програмісту той самий рефлекс: спочатку сформулюй допустимий стан, потім пиши операцію.

AxiomAda/SPARK ідеяЩо спільного
requirePreconditionCaller obligation
ensurePostconditionCallee obligation
invariantType/Loop invariantВластивість зберігається
bounded values / contractsRange / subtype constraintsНедопустимі значення відсікаються рано
view + lifetime proofaccessibility/ownership disciplineНе дозволити dangling references
no recursion + memory reportshigh-integrity resource reasoningBounded stack/resources
proof reportsGNATprove-style analysisДіагностика як доказ, а не тільки warning

Маленький приклад мислення

Design by contractAxiom
1percentage(i32 value) -> i32:2    require value >= 03    require value <= 1004    ensure result >= 05    ensure result <= 1006    RETURN value
1

Тип i32 сам по собі занадто широкий для domain concept.

2

Передумови звужують допустимий domain.

4

Післяумови роблять гарантію функції доступною наступному caller-у.

6

Тіло тривіальне, але контракт формує semantic knowledge graph для решти програми.

Що читати далі в Ada

Коли вперше відкриєте Ada/SPARK, звертайте увагу не на багатослівний syntax, а на subtypes/ranges, contracts, tasking, strong typing, accessibility rules і GNATprove. Саме це — не «академічний шум», а інструменти для програм, де «майже завжди працює» недостатньо.

Кінцева ціль Axiom

Щоб web-розробник міг поступово дійти до драйвера, DSP, kernel або embedded-коду, не переходячи від безпечної високорівневої моделі до «тепер усе на pointer-ах і молитвах». Межі мають ставати нижчими, але правила — залишатися зрозумілими.