Przejdź do treści

KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ

Lifecycle, deklaracje i limity

INTERMEDIATE30 min
Postęp nauki 0 / 3
Zaloguj się na konto użytkownika, aby zachować postęp.

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.

  1. module MainDeklaracja modułu KretS; porównaj nazwę z nazwą pliku.
  2. Pusta linia oddziela fragmenty źródła.
  3. fn Start() -> String {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  4. 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.
  5. return "gotowy"Zwrócenie wartości z funkcji; nie jest zapisem do dziennika.
  6. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  7. Pusta linia oddziela fragmenty źródła.
  8. fn Shutdown() {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  9. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  10. Pusta linia oddziela fragmenty źródła.
  11. // Komenda hosta zadeklarowana w bloku handlers manifestu. Host przekazuje argumenty, typy sprawdza proces pluginu.Komentarz autora; nie jest wykonywany.
  12. on counter.add(a: Int, b: Int) -> Int {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  13. return a + bZwrócenie wartości z funkcji; nie jest zapisem do dziennika.
  14. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  15. 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 / polecenieOpis
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.ps1korpus 23 przypadków + blokada sum parsera i specyfikacji
Otwórz cały rozdział ze źródłem →
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.md
  • LANGUAGE_FREEZE_1_0/kretl-1.0.contract.json
  • LANGUAGE_FREEZE_1_0/16_HISTORICAL_CONFLICT_RESOLUTION.md
  • SDK 04_Languages/KretL/SPEC.md

Elementy języka

ElementStan w KretL
Struktura plikumanifestVersion "1.0" jako pierwsze pole, potem dokładnie jeden blok plugin { … }.
Rozszerzenie.kretl; obowiązkowa nazwa plugin.kretl.
Komentarze// … i /* … */.
Typy danychwartoś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ętlenie istnieją — KretL jest deklaratywny.
Moduły / importbrak; plik odwołuje się do modułów KretS przez nazwy handlerów ("Main.Start") i do mapy KretM (project { map }).
Obsługa błędówdiagnostyka kret-diagnostics/1 (KCS-KRL-xxxx, KCS-ID-*, KCS-VER-*) z plikiem, wierszem i kolumną.
Asynchronicznośćnie dotyczy.
Limity parserazagnież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 przez kret import-legacy)
  • KretL 1.0 = manifestVersion "1.0"; zmiana znaczenia → nowy manifestVersion (np. "2.0").
  • Poprawka parsera (PATCH) musi przejść korpus i aktualizuje sumę parsera w kontrakcie; kandydat rc.3+kret.local.3 ma nową sumę (oczekiwane, G-02), zachowanie 21/21.
  • Generacja 0.4.x (KretL/Main.kret) — LEGACY_COMPATIBILITY: tylko walidacja i kret import-legacy.
  • MINOR w KretL 1.0 wyłącznie w metadata.

Pełna referencja konstrukcji: SYNTAX_REFERENCE.md.

Otwórz cały rozdział ze źródłem →
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):

  1. kret check . --json — w wyniku: "succeeded": true
  2. kret run . --policy host-policy.json --data {DATA} --invoke counter.add=[2,40] — w wyniku: 42

Wynik tej rundy: PASS — zob. EXPECTED_OUTPUT.txt.

Otwórz cały rozdział ze źródłem →

Ć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ą.

Porównujemy zapis z referencją. To ćwiczenie nie jest walidatorem programu.
Które podsumowanie jest zgodne z lekcją?

To quiz o opisanym kontrakcie. Nie kompiluje kodu, nie potwierdza wykonania programu i nie przyznaje nagród.

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 →

Wybierz, co możemy zapamiętać w tej przeglądarce. Możesz zmienić decyzję w każdej chwili.

Polityka prywatności