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

Модулі та Self Type

Абстракції Axiom будуються через compile-time contracts та Self Type, а не через vtable-oriented OOP.

Self Type потрібен, щоб один і той самий високорівневий код працював з Linux, Windows, INVARIANT OS або bare-metal implementation без runtime polymorphism.

Інтерфейс файлів

Self-bound interfaceAxiom
1file_system(Self):2    read(Self self, text path) -> result<bytes, io_error>3    write(Self self, text path, view<const u8> data) -> result<void, io_error>4END file_system
1

Self означає concrete implementation type, який буде відомий під час semantic linking.

2

Інтерфейс описує required operation.

3

Друга required operation.

4

Немає hidden vtable або heap object.

Linux implementation

Concrete implementationAxiom
1linux_fs:2    read(linux_fs self, text path) -> result<bytes, io_error>:3        RETURN linux_os.read_file(path)45    write(linux_fs self, text path, view<const u8> data) -> result<void, io_error>:6        RETURN linux_os.write_file(path, data)7END linux_fs
1

Concrete type.

2

Signature задовольняє Self interface.

3

OS-specific module робить syscall/ABI lowering.

5

Те саме для write.

Generic application code

No runtime polymorphismAxiom
1-- FS enable if file_system(FS)2load_config(FS fs, text path) -> result<config, app_error>:3    const bytes raw = fs.read(path)?4    RETURN config.parse(raw)
1

Generic параметр приймається лише якщо implementation задовольняє interface.

2

Код не знає, Linux це чи INVARIANT OS.

3

Static dispatch до concrete read визначиться при linking.

4

Далі звичайна логіка програми.

Навіщо semantic linking

Звичайний linker знає symbols і relocations, але не знає про Self Type, contracts, generic instantiations чи ownership. Тому Axiom спершу робить semantic/module linking, і лише потім target lowering та binary linking.