Files
Aura/README.md
2026-02-23 08:51:37 -05:00

40 lines
2.6 KiB
Markdown

# 🚀 Aura Programming Language
**Aura** to eksperymentalny, ultrawydajny język programowania stworzony z myślą o wyzwaniach inżynierii oprogramowania 2026 roku. Łączy w sobie bezwzględne bezpieczeństwo pamięci znane z Rusta, matematyczne dowody poprawności z Haskella oraz minimalistyczną, czytelną składnię inspirowaną Pythonem.
Kompilator Aury (`aurac`) został w całości napisany w Ruście i kompiluje kod źródłowy bezpośrednio do **LLVM IR** (Intermediate Representation), zapewniając wydajność na poziomie C/C++ przy zerowym narzucie w czasie działania programu (Zero-Cost Abstractions).
---
## ✨ Główne założenia (Filozofia Języka)
Aura rozwiązuje największy problem współczesnego IT: **brak zaufania do kodu**. Zamiast polegać na testach jednostkowych i Garbage Collectorze, Aura przenosi cały ciężar weryfikacji na etap kompilacji.
### 1. Niewidzialny Borrow Checker (Elided Affine Typing)
Koniec z wyciekami pamięci, wskaźnikami `null` i skomplikowanymi adnotacjami czasu życia (`<'a>`). Aura używa analizy przepływu danych (Dataflow Analysis), aby automatycznie śledzić "własność" (Ownership) zmiennych. Gdy przekazujesz zmienną do funkcji, zostaje ona skonsumowana. Próba jej ponownego użycia (Use-After-Move) kończy się natychmiastowym błędem kompilacji.
### 2. Typy Semantyczne (Refinement Types) i Silnik Wnioskowania
Typ `f32` to tylko informacja o rozmiarze w pamięci. W Aurze typy niosą ze sobą matematyczne gwarancje!
Dzięki wbudowanemu weryfikatorowi (Symbolic Verifier), kompilator na etapie budowania programu udowadnia, że operacje są logicznie poprawne.
Zamiast pisać `if czas < 0`, definiujesz typ: `type PositiveTime = f32{t | t > 0.0}`. Jeśli kompilator nie jest w stanie matematycznie udowodnić, że zmienna spełnia ten warunek, program się nie skompiluje.
### 3. Zorientowanie na Dane (Data-Oriented Design)
Aura odrzuca tradycyjne programowanie obiektowe (OOP) na rzecz czystych transformacji danych. Skupia się na lokalności pamięci podręcznej (Cache Locality), co czyni ją idealną do pisania silników gier, systemów wbudowanych i oprogramowania HFT (High-Frequency Trading).
---
## 💻 Przykłady Kodu
### Symulacja Fizyki z Gwarancją Matematyczną
```aura
// Typ ograniczony: Czas musi być zawsze dodatni!
type PositiveTime = f32{t | t > 0.0}
pure fn calculate_new_position(initial_x: f32, v: f32, dt: PositiveTime) -> f32:
// Mnożenie: Zmienne 'v' i 'dt' zostają skonsumowane przez Borrow Checkera
let displacement = v * dt
// Dodawanie: 'initial_x' i 'displacement' zostają skonsumowane
let new_x = initial_x + displacement
return new_x