KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ
Lifecycle, deklaracje i limity
Czego się nauczysz
- Prześledź źródła i wyjaśnij opisany kontrakt.
- W PermissionsHandlersLimits oddziel deklaracje potrzeb od ograniczeń. Wyjaśnij, dlaczego skopiowanie permissions z przykładu nie odblokowuje Core.
Wymagania wstępne
- Ukończ Podstawy i wcześniejszy poziom tej ścieżki.
Wyjaśnienie krok po kroku
Prześledź parę Main.Start/Main.Shutdown: nazwy muszą odpowiadać rzeczywistym handlerom. Uprawnienie zapisane w KretL jest deklaracją potrzeby. Dopiero host i broker mogą dopuścić operację. Limit wykonania nie jest pozwoleniem na operację systemową.
Praca z kodem źródłowym
Uprawnienia, komendy hosta, limity i izolacja
Manifest deklaruje uprawnienie wymagane (`logs.own.write`) i opcjonalne (`kretdb.read`), komendę hosta `counter.add`, limity pamięci i CPU, profil `light`, preferowaną izolację `sandbox` oraz deklarację obszaru danych `runtimeData`. Polityka hosta testowego przyznaje tylko `logs.own.write` — deklaracja nie jest przyznaniem.
module Main
fn Start() -> String {
log.info("start: uprawnienie logs.own.write przyznane przez hosta")
return "gotowy"
}
fn Shutdown() {
}
// Komenda hosta zadeklarowana w bloku handlers manifestu. Host przekazuje argumenty, typy sprawdza proces pluginu.
on counter.add(a: Int, b: Int) -> Int {
return a + b
}
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
module MainDeklaracja modułu KretS; porównaj nazwę z nazwą pliku.Pusta linia oddziela fragmenty źródła.fn Start() -> String {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.log.info("start: uprawnienie logs.own.write przyznane przez hosta")Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.return "gotowy"Zwrócenie wartości z funkcji; nie jest zapisem do dziennika.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.fn Shutdown() {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.// Komenda hosta zadeklarowana w bloku handlers manifestu. Host przekazuje argumenty, typy sprawdza proces pluginu.Komentarz autora; nie jest wykonywany.on counter.add(a: Int, b: Int) -> Int {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.return a + bZwrócenie wartości z funkcji; nie jest zapisem do dziennika.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.
Oczekiwany wynik: Wynik `start` = „gotowy”, wynik komendy = 42, w dzienniku wpis z `log.info`. Uprawnienie opcjonalne `kretdb.read` nie zostało przyznane i nie jest używane.
Typowy błąd: Wywołanie komendy, której nie ma w bloku `handlers` — broker ją odrzuci, nawet gdy handler `on …` istnieje w kodzie.
Instrukcja, wersje i zapisane wyniki →Materiały źródłowe do tego tematu
Przeczytaj powiązane rozdziały. Kod i kontrakty zachowano z importu; historia źródeł jest dostępna przy każdym rozdziale.
KretL — API / CLI
KretL — API / CLI
Polski
| API / polecenie | Opis |
|---|---|
kret check <projekt> [--json] | analiza manifestu i całego projektu → kret-diagnostics/1 |
kret build <projekt> | zapis Build/manifest.json (kretl-manifest/1) |
kret import-legacy <Main.kret> [-o plugin.kretl] [--report plik] | import manifestu 0.4.x bez nadpisywania oryginału |
KretCore.Test.exe check <projekt> | walidator referencyjny Core (SDK + reguły układu hosta) |
Tests/Run-LanguageConformance.ps1 | korpus 23 przypadków + blokada sum parsera i specyfikacji |
KretL — specyfikacja (zakres kontraktu 1.0)
KretL — specyfikacja (zakres kontraktu 1.0)
Status 1.0: `FROZEN_1_0` — pełny zakres 1.0, stabilny kontrakt, testy zgodności. Gramatyka/wersja: kretl-1.0. Status języka nie nadaje uprawnień KCS ani prawa do działania w Production.Źródła normatywne (kopie w Sources/, kolejność pierwszeństwa: decyzje właściciela → zamrożony kontrakt → kod SDK → testy):
LANGUAGE_FREEZE_1_0/02_KRETL_1_0_SPECIFICATION.mdLANGUAGE_FREEZE_1_0/kretl-1.0.contract.jsonLANGUAGE_FREEZE_1_0/16_HISTORICAL_CONFLICT_RESOLUTION.md- SDK
04_Languages/KretL/SPEC.md
Elementy języka
| Element | Stan w KretL |
|---|---|
| Struktura pliku | manifestVersion "1.0" jako pierwsze pole, potem dokładnie jeden blok plugin { … }. |
| Rozszerzenie | .kretl; obowiązkowa nazwa plugin.kretl. |
| Komentarze | // … i /* … */. |
| Typy danych | wartości: tekst w cudzysłowie, liczba, liczba z jednostką (256MB, 5s, 5%), true/false, nazwa (np. system.ram.read). |
| Zmienne / stałe / instrukcje / operatory / funkcje / warunki / pętle | nie istnieją — KretL jest deklaratywny. |
| Moduły / import | brak; plik odwołuje się do modułów KretS przez nazwy handlerów ("Main.Start") i do mapy KretM (project { map }). |
| Obsługa błędów | diagnostyka kret-diagnostics/1 (KCS-KRL-xxxx, KCS-ID-*, KCS-VER-*) z plikiem, wierszem i kolumną. |
| Asynchroniczność | nie dotyczy. |
| Limity parsera | zagnieżdżenie 32, 10 000 węzłów, 512 KiB. |
Zakres poza kontraktem / ograniczenia
- zapisywanie logiki (KretL jej nie ma — użyj KretS)
- ustawienia użytkownika (użyj KretConfig)
- próba „nadania” uprawnień — deklaracja niczego nie przyznaje
- stare manifesty
KretL/Main.kret(generacja 0.4.x, tylko import przezkret import-legacy) - KretL 1.0 =
manifestVersion "1.0"; zmiana znaczenia → nowymanifestVersion(np."2.0"). - Poprawka parsera (PATCH) musi przejść korpus i aktualizuje sumę parsera w kontrakcie; kandydat
rc.3+kret.local.3ma nową sumę (oczekiwane, G-02), zachowanie 21/21. - Generacja 0.4.x (
KretL/Main.kret) — LEGACY_COMPATIBILITY: tylko walidacja ikret import-legacy. - MINOR w KretL 1.0 wyłącznie w
metadata.
Pełna referencja konstrukcji: SYNTAX_REFERENCE.md.
KretL — samouczek INTERMEDIATE
KretL — samouczek INTERMEDIATE
Status 1.0: `FROZEN_1_0` — pełny zakres 1.0, stabilny kontrakt, testy zgodności. Gramatyka/wersja: kretl-1.0. Status języka nie nadaje uprawnień KCS ani prawa do działania w Production.Cel: moduły, łączenie funkcji, dane, konfiguracja, komunikacja, obsługa błędów, interfejsy SDK.
Narzędzia: kret = <SDK>\Compiler\kret.exe (SDK 1.0.0-rc.3+kret.local.3), kretui-host = <SDK>\UiHost\kretui-host.exe. {DATA}/{OUT} = nowe, puste katalogi.
1. Uprawnienia, komendy hosta, limity i izolacja (KRETL-I01-PermissionsHandlersLimits)
Projekt: ../../Examples/INTERMEDIATE_PermissionsHandlersLimits/ · klasyfikacja RUNNABLE_LOCAL · Playground LOCAL_EXECUTE
Kroki (katalog roboczy: katalog przykładu):
kret check . --json— w wyniku:"succeeded": truekret run . --policy host-policy.json --data {DATA} --invoke counter.add=[2,40]— w wyniku:42
Wynik tej rundy: PASS — zob. EXPECTED_OUTPUT.txt.
Ćwiczenie i sprawdzenie wiedzy
W PermissionsHandlersLimits oddziel deklaracje potrzeb od ograniczeń. Wyjaśnij, dlaczego skopiowanie permissions z przykładu nie odblokowuje Core.
Szkic nie jest wysyłany na serwer i znika po opuszczeniu lekcji. Przed wyjściem możesz go skopiować.Podpowiedzi
- KretL opisuje plugin: tożsamość, zgodność z Core i API, uprawnienia (deklaracje), cykl życia, tryb wykonania, limity, izolację, obszary danych, zależności i komendy hosta. Nie zawiera logiki. Jedyny manifest bieżącej generacji to `plugin.kretl` w katalogu głównym projektu.
- Odczytaj ograniczenia i oczekiwane błędy z dostarczonego samouczka; check i run są oddzielnymi krokami.
Omówienie rozwiązania
Odpowiedź oprzyj na pokazanym kodzie i rozdziale źródłowym. Prześledź parę Main.Start/Main.Shutdown: nazwy muszą odpowiadać rzeczywistym handlerom. Uprawnienie zapisane w KretL jest deklaracją potrzeby. Dopiero host i broker mogą dopuścić operację. Limit wykonania nie jest pozwoleniem na operację systemową.
Podsumowanie i następny krok
Prześledź parę Main.Start/Main.Shutdown: nazwy muszą odpowiadać rzeczywistym handlerom. Uprawnienie zapisane w KretL jest deklaracją potrzeby. Dopiero host i broker mogą dopuścić operację. Limit wykonania nie jest pozwoleniem na operację systemową.
Zaloguj się na konto użytkownika, aby zapisywać postęp i zakładki. Konta obsługi mogą czytać bez zapisu postępu. Logowanie →