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 + FFI 0.3 + workspace 0.4 - |
Wersja |
|
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/, docs/module-demo/, docs/showcase/
(ogromny, jednoplikowy przeglad niemal calego jezyka - zmienne,
funkcje, struct/enum/match/impl, kolekcje, stringi, manual[…],
oraz FFI 0.3) i docs/ffi-demo/ (minimalny, samodzielny przyklad
samego FFI: get<extern:…> use<…> + region, get<c:…>/
get<cpp:…>, i kompilowany build-time blok C++) - dzialajace
przyklady, wszystkie zweryfikowane realna kompilacja i uruchomieniem
(patrz naglowkowy komentarz kazdego pliku po instrukcje budowania).
Oraz docs/SYNTAX.md - pelny opis skladni (w tym, od 0.4,
get <work:czlonek[::plik]> - import dowolnego czlonka workspace) i
docs/ROADMAP.md - pelna, szczera lista tego co jeszcze brakuje.
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)
main.hcs CLI: build/check/lint/fmt (kolorowe, z paskiem postepu) - do 0.3: cli.hcs
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) - [build] usuniete w 0.4
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, 0.4)
cmd/main.hcs statycznie linkuje hackerc przez get<work:...>, @wasm_export check_source
web/ index.html + main.js - dzialajaca strona w stylu Rust Playground
web/README.md dokladne kroki budowania (virus build --wasm + wasm-bindgen-cli)
docs/
hello-world/ minimalny dzialajacy przyklad (.hk + .hcs)
module-demo/ przyklad systemu modulow (get <core:...>)
showcase/ ogromny, jednoplikowy przeglad jezyka (0.3/0.4)
ffi-demo/ samodzielny przyklad FFI 0.3 (extern/region/c/cpp)
SYNTAX.md pelny opis skladni (w tym get <work:...>, 0.4)
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/clivirus/hk-parser w Rust z clap/reqwest) zostala calkowicie
zastapiona kodem HackerScript powyzej - patrz Historia wersji
jesli szukasz kontekstu tej zmiany.
|
-
fun→hackercgeneruje prawdziwy Rust (struct→struct
impl new(),manual[]→unsafe{},List<T>→Vec<T>, parametrystruct/List/Strautomatycznie dostaja&/&mutzamiast przenoszenia wlasnosci). -
direct [ … ]→ surowy Python wykonywany w trakcie dzialania programu przezPython::with_gil(PyO3, trybauto-initialize) - Rust jest hostem. -
get <core:memory::arena>→ realnie importuje kod zlibs/core/lib/memory/arena.hcs(system modulow:project.hcsdwufazowo zbiera sygnatury z calego projektu, zeby wywolania cross-plikowe tez dostaly poprawne&/&mut). -
get <crates:nazwa>→ prawdziwa zaleznosc Cargo.get <pypi/npm/jsr:…>→ pobierane przezvirus install(bezposrednio z PyPI/crates.io/npm/JSR API, BEZpip/cargo add/npm install). -
virus install vira <nazwa>→ szuka biblioteki w oficjalnym rejestrze https://vira.io (JSON publikowany podgithub.com/vira-io/repository) i pobiera ja wg zadeklarowanego typu. Dla typugitkod trafia docache/libs/vira/<nazwa>/i jest importowalny wprost przezget <vira:nazwa[::plik]>(jakget <std:…>/get <core:…>- biblioteka MUSI miecmod.hcsw korzeniu, jesli ma byc importowana bez::). Dlastatic-lib/shared-lib/rust-liblinkowanie do wygenerowanego crate’a dzieje sie automatycznie przyvirus build(wygenerowanybuild.rs/.cargo/config.toml), a uzycie w kodzie toextern "nazwa" fun …(.hlibzaplanowane na przyszlosc) - patrzdocs/ROADMAP.md, sekcja "Ekosystem bibliotek Vira". -
using <wersja>na poczatku pliku (albo[package] usingwVirus.hk) → deklaruje wymagana wersjehackerc. Jesli nie jest zainstalowana,viruspobiera 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 wcache/env/hackerc-<wersja>/) - patrzvirus/cmd/hackerc_bridge.hcs. -
virus build→hackerc build(generuje cargo crate) →cargo build(jedyne miejsce, gdzievirusuzywa cargo - jako kompilator, nie menedzer pakietow). Uruchomiony na korzeniu z[workspace]wVirus.hk(patrz glowny/Virus.hktego repo) buduje KAZDEGO czlonka majacego wlasny, uruchamialny plik wejsciowy - analogicznie docargo buildw workspace Cargo. -
(0.4) Plik wejsciowy KAZDEGO budowalnego czlonka/projektu jest teraz ZAWSZE
cmd/main.hcs- sekcja[build] → entry ⇒ <sciezka>, pozwalajaca to kiedys nadpisac, zostala calkowicie usunieta z formatu.hk(dokladny analog tego, jak Cargo samo znajdujesrc/main.rs, bez zadnego pola wCargo.toml) - patrzfind_cmd_entry()wvirus/cmd/manifest.hcs. -
(0.4)
get <work:czlonek[::plik]>→ importujelib/mod.hcs(albolib/<plik>.hcs) DOWOLNEGO czlonka[workspace] → members, nie tylko uprzywilejowanychcore/std(ktore maja wlasne, krotsze aliasyget <core:…>/get <std:…>, dzialajace identycznie) - analog Rustowegouse nazwa_membera::modul::*;w workspace Cargo. Patrzdocs/SYNTAX.md. -
(0.4)
cache/jest teraz NAPRAWDE wspolny dla calego workspace, niezaleznie z ktorego czlonka odpaliszvirus(hackerc/,virus/,libs/core/,libs/std/czy korzenia) - wczesniej kazdy z nich (majac WLASNY, poprawnyVirus.hk) dostawal WLASNY, osobnycache/zamiast dzielic jeden z korzeniem, dokladnie tak jakcargow workspace zawsze dzieli jedentarget/. Patrzvirus/cmd/cache.hcs.
# 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.4/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 RustAlbo, 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>)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-pobieraniehackercwgusing <wersja>) uzywa natywnego paskacurl --progress-barzamiast wlasnego renderowania -virusnie ma dostepu do bajtow strumienia w trakcie trwania procesu pobierania (patrzdocs/ROADMAP.md, sekcja "CLI - kolory i pasek postepu", po wyjasnienie dlaczego).
|
Zamrozona. Wersja startowa: |
|
Bootstrap. |
|
Wewnetrzna. Kolorowe CLI i realny pasek postepu
( |
|
Przeprojektowane FFI. Stare, jedno-funkcyjne
|
|
Ta wersja. Workspace + porzadki + WASM. Szesc zmian:
|
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/main.hcs/
formatter.hcs/parser.hcs), luki w libs/std poza rdzeniem, oraz
gapy w FFI 0.3/0.4 (kompilacja wlasnego zrodla .c/.cpp z projektu
przez cc zamiast linkowania systemowej biblioteki dla
get <c:…>/get <cpp:…>) - jest w docs/ROADMAP.md, razem z
lista tego, co juz naprawiono w 0.4 (wspolny cache/ dla
workspace, usuniecie [build], get <work:…>).
-
docs/SYNTAX.md- pelny opis skladni (w tym FFI 0.3:get <extern:…> use <…>+region [ … ],get <c:…>/get <cpp:…>,native {C++} [ … ]). -
docs/ROADMAP.md- co brakuje, szczegolowo i per-plik -
Format
.hk: https://hackeros-linux-system.github.io/HackerOS-Website/tools-docs/hk.html