40 lines
2.6 KiB
Markdown
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 |