Skip to content

Latest commit

 

History

History
249 lines (217 loc) · 10.5 KB

File metadata and controls

249 lines (217 loc) · 10.5 KB

HackerScript

Jezyk programowania ogolnego przeznaczenia. Zwykla fun kompiluje sie do prawdziwego Rusta (statyczne typy, bezpieczenstwo pamieci, zero-cost abstractions). direct [ …​ ] to ucieczka do czystego Pythona, wykonywanego przez wbudowany interpreter (PyO3) - dla tego niewielkiego fragmentu kodu, ktory nigdy nie bedzie wymagal wydajnosci.

Status

Bootstrap osiagniety - hackerc (transpilator) i virus (menedzer pakietow/narzedzie budowania) sa dzis w calosci napisane w samym HackerScript (.hcs), nie w Pythonie/Rust jak w wersji 0.0.1.

Wersja

0.1 (ta - self-hostujaca sie, wydawana na GitHub Releases) - 0.0.1 to zamrozona wersja startowa sprzed bootstrapu (patrz Historia wersji).

Licencja

MIT (c) 2026 HackerOS Team

struct Point [
    x: Int,
    y: Int
]

fun distance_squared(p: Point) -> Int [
    end (p.x * p.x) + (p.y * p.y)
]

fun main() [
    let p = Point(3, 4)
    log("dist^2 =", distance_squared(p))

    direct [
        print("To jest czysty Python wykonywany wewnatrz binarki Rust.")
    ]
    end
]

Zobacz docs/hello-world/ i docs/module-demo/ - dzialajace przyklady, oraz docs/SYNTAX.md - pelny opis skladni.

Struktura repozytorium

HackerScript/
  hackerc/cmd/          transpilator .hcs -> Rust, W CALOSCI w HackerScript (self-hosted)
    lexer.hcs              tokenizacja + resolve_escape (\n \t \r \e ...)
    parser.hcs              recursive-descent parser -> AST
    ast_nodes.hcs           definicje Expr/Stmt/typow AST
    typecheck.hcs           diagnostyki (bledy/warningi), builtin-y
    typeinfer.hcs           inferencja typow, sygnatury projektu
    codegen.hcs             AST -> tekst Rust (~3700 linii, najwiekszy plik)
    transpiler.hcs          spina lexer/parser/typecheck/codegen w calosc
    project.hcs             wielo-plikowe skladanie projektu, Cargo.toml
    formatter.hcs            formater kodu .hcs
    diagnostics.hcs          renderowanie bledow w stylu rustc (podkreslona linia)
    cli.hcs                  CLI: build/check/lint/fmt (kolorowe, z paskiem postepu)
    playground.hcs           demo/checker uzywany przez playground WASM
  virus/cmd/             menedzer pakietow i build tool, W CALOSCI w HackerScript
    main.hcs                 CLI: init/build/check/lint/fmt/install/remove/repair/clean
    manifest.hcs              parser formatu .hk (Virus.hk - NIE TOML)
    install.hcs               pobieranie zaleznosci z PyPI/crates.io/npm/JSR
    hackerc_bridge.hcs         resolve+download hackerc wg `using <wersja>`
    build.hcs / check.hcs / lint.hcs / fmt.hcs / cache.hcs / cache_cmd.hcs
    progress.hcs               kolorowy CLI (std:term) - naglowki/pasek postepu
    remove.hcs / repair.hcs / clean.hcs / init.hcs
  libs/
    core/lib/memory/        4 alokatory: arena, chained_arena, stack_allocator, pool_allocator
    std/lib/                fs, io, string, math, path, json, toml, hk, env,
                             process, http, term (KOLORY + PASEK POSTEPU - nowe),
                             result, cybersecurity/ (constant_time_eq, shannon_entropy)
  playground/             checker HackerScript skompilowany do WASM (przegladarka)
  docs/
    hello-world/            minimalny dzialajacy przyklad (.hk + .hcs)
    module-demo/            przyklad systemu modulow (get <core:...>)
    SYNTAX.md                 pelny opis skladni
    ROADMAP.md                 co jeszcze brakuje (szczegolowo, per-plik)
  scripts/                install.sh/remove.sh (HackerOS) + skrypty .hl
  .github/workflows/      CI (buduje I URUCHAMIA wygenerowany crate) + Release
Tip
Wczesniejsza architektura (hackerc/ w Pythonie, virus/cli
virus/hk-parser w Rust z clap/reqwest) zostala calkowicie zastapiona kodem HackerScript powyzej - patrz Historia wersji jesli szukasz kontekstu tej zmiany.

Jak to dziala

  1. funhackerc generuje prawdziwy Rust (structstruct
    impl new(), manual[]unsafe{}, List<T>Vec<T>, parametry struct/List/Str automatycznie dostaja &/&mut zamiast przenoszenia wlasnosci).

  2. direct [ …​ ] → surowy Python wykonywany w trakcie dzialania programu przez Python::with_gil (PyO3, tryb auto-initialize) - Rust jest hostem.

  3. get <core:memory::arena> → realnie importuje kod z libs/core/lib/memory/arena.hcs (system modulow: project.hcs dwufazowo zbiera sygnatury z calego projektu, zeby wywolania cross-plikowe tez dostaly poprawne &/&mut).

  4. get <crates:nazwa> → prawdziwa zaleznosc Cargo. get <pypi/npm/jsr:…​> → pobierane przez virus install (bezposrednio z PyPI/crates.io/npm/JSR API, BEZ pip/cargo add/npm install).

  5. virus install vira <nazwa> → szuka biblioteki w oficjalnym rejestrze https://vira.io (JSON publikowany pod github.com/vira-io/repository) i pobiera ja wg zadeklarowanego typu. Dla typu git kod trafia do cache/libs/vira/<nazwa>/ i jest importowalny wprost przez get <vira:nazwa[::plik]> (jak get <std:…​>/get <core:…​> - biblioteka MUSI miec mod.hcs w korzeniu, jesli ma byc importowana bez ::). Dla static-lib/shared-lib/rust-lib linkowanie do wygenerowanego crate’a dzieje sie automatycznie przy virus build (wygenerowany build.rs/.cargo/config.toml), a uzycie w kodzie to extern "nazwa" fun …​ (.hlib zaplanowane na przyszlosc) - patrz docs/ROADMAP.md, sekcja "Ekosystem bibliotek Vira".

  6. using <wersja> na poczatku pliku (albo [package] using w Virus.hk) → deklaruje wymagana wersje hackerc. Jesli nie jest zainstalowana, virus pobiera ja automatycznie z GitHub Releases:

    https://github.com/HackerOS-Linux-System/HackerScript/releases/download/v<wersja>/hackerc

    (przez curl, z natywnym paskiem postepu, cache’owana w cache/env/hackerc-<wersja>/) - patrz virus/cmd/hackerc_bridge.hcs.

  7. virus buildhackerc build (generuje cargo crate) → cargo build (jedyne miejsce, gdzie virus uzywa cargo - jako kompilator, nie menedzer pakietow). Uruchomiony na korzeniu z [workspace] w Virus.hk (patrz glowny /Virus.hk tego repo) buduje KAZDEGO czlonka majacego wlasny, uruchamialny plik wejsciowy - analogicznie do cargo build w workspace Cargo.

Szybki start

# hackerc i virus sa binarkami natywnymi (self-hosted) - najprosciej
# pobrac gotowe wydanie:
curl -L --fail -o hackerc \
  https://github.com/HackerOS-Linux-System/HackerScript/releases/download/v0.1/hackerc
chmod +x hackerc

./hackerc check docs/hello-world/Virus.hk
./hackerc build docs/hello-world/cmd/main.hcs -o /tmp/out
cd /tmp/out && cargo run   # wymaga zainstalowanego Rust

Albo, w projekcie zarzadzanym przez virus (patrz Virus.hk):

virus init --name moj-projekt
cd moj-projekt
virus build --release   # pobierze wlasciwy hackerc automatycznie (using <wersja>)

Kolorowe CLI i pasek postepu

hackerc build/virus build/check/lint/fmt maja teraz kolorowe wyjscie (zielony = sukces, czerwony = blad, cyan = nazwy/etykiety) i realny, procentowy pasek postepu renderowany w miejscu (nie osobna linia per krok) - patrz nowy modul libs/std/lib/term.hcs (get <std:term>).

  • Kolory wylaczaja sie automatycznie gdy ustawiona jest zmienna srodowiskowa NO_COLOR (https://no-color.org).

  • Pasek dla hackerc build: 4 kroki (parsowanie → sygnatury projektu → sprawdzanie typow → generowanie crate’a Rust).

  • Pobieranie binarek (virus install, auto-pobieranie hackerc wg using <wersja>) uzywa natywnego paska curl --progress-bar zamiast wlasnego renderowania - virus nie ma dostepu do bajtow strumienia w trakcie trwania procesu pobierania (patrz docs/ROADMAP.md, sekcja "CLI - kolory i pasek postepu", po wyjasnienie dlaczego).

Historia wersji

0.0.1

Zamrozona. Wersja startowa: hackerc w Pythonie, virus (cli/hk-parser) w Rust z clap/reqwest. Nie jest juz rozwijana - punkt odniesienia "skad zaczelismy".

0.1

Ta wersja. Bootstrap osiagniety: hackerc i virus przepisane w calosci na sam HackerScript (.hcs), kompilowane przez wlasny transpilator do Rusta. Pierwsze wydanie publikowane binarnie na GitHub Releases pod v0.1 (stad mechanizm using <0.1> opisany wyzej pobiera wlasnie ta binarke).

0.2 / 0.3

Planowana. Niezalezny backend generujacy kod maszynowy bezposrednio przez get <crates:cranelift>, bez zaleznosci od rustc w trakcie dzialania - zachowujac caly dzisiejszy front jezyka (lexer/parser/typecheck/typeinfer, struct/enum/match, direct[…​], system modulow get<…​>) bez zmian. Motywacja: rustc jest ciezka zaleznoscia zewnetrzna i wolny do iteracji debugowej - Cranelift jako biblioteka pozwoliby hackerc/virus byc samowystarczalnym. Szczegoly i uzasadnienie: docs/ROADMAP.md, sekcja "Wersja 0.2/0.3 - niezalezny backend (Cranelift)".

Status projektu

Caly kompilator (hackerc/cmd/) i menedzer pakietow (virus/cmd/) sa dzis napisane w HackerScript i weryfikowane strukturalnie przez hackerc check + inspekcje, a koncowo przez CI (.github/workflows/ci.yml), ktore kompiluje i uruchamia wygenerowany crate na prawdziwym runnerze z Rustem - to jedyne miejsce, gdzie poprawnosc generowanego kodu Rust jest dzis realnie zweryfikowana automatycznie przy kazdym PR.

W trakcie przepisywania na self-hosting znaleziono i naprawiono kilka realnych bledow odziedziczonych z oryginalnej wersji Pythonowej (m.in. != mylone z komentarzem, Vec::len() zwracajace usize a nie i64, przenoszenie wlasnosci struct/Vec/String przy wielokrotnym uzyciu tej samej zmiennej).

Pelna, szczera lista tego co jeszcze brakuje - braki jezykowe bootstrapu (iteracja po Dict, Set, numery linii w AST, prawdziwe ParseError, log() dla struct/enum), uproszczenia per-plik (codegen.hcs/typeinfer.hcs/project.hcs/cli.hcs/ formatter.hcs/parser.hcs), luki w libs/std poza rdzeniem, oraz plan backendu Cranelift - jest w docs/ROADMAP.md.

Dokumentacja

  • docs/SYNTAX.md - pelny opis skladni.
    UWAGA: w tym stanie repozytorium ten plik jest referencjonowany z dziesiatek komentarzy !!! w calym kodzie (lexer.hcs, libs/core/lib/mod.hcs, i inne), ale sam plik jeszcze nie istnieje

    • patrz docs/ROADMAP.md. Do czasu jego napisania jedynym pelnym zrodlem prawdy o skladni jest sam kod hackerc/cmd/parser.hcs
      przyklady w docs/hello-world//docs/module-demo/.

  • docs/ROADMAP.md - co brakuje, szczegolowo i per-plik

  • Format .hk: https://hackeros-linux-system.github.io/HackerOS-Website/tools-docs/hk.html

Uwaga

HackerScript osiagnal juz bootstraping.