Przejdź do treści

KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ

Round-trip i błędne grafy

ADVANCED40 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 RoundTripAndErrors porównaj poprawny i niepoprawny przypadek. Wypisz niezmienniki struktury, które można sprawdzić bez wykonania programu.
Wymagania wstępne
  • Ukończ Podstawy i wcześniejszy poziom tej ścieżki.

Wyjaśnienie krok po kroku

Round-trip służy do sprawdzania zachowania struktury w obsługiwanym zakresie. Oczekiwany błąd niepoprawnej krawędzi lub konstrukcji jest częścią testu. Szkic grafu w edytorze WWW jest innym formatem i nie może udawać kompilacji kretflow-ir/2.

Praca z kodem źródłowym

Synchronizacja kod ⇄ graf i diagnostyka przepływu

`kret flow from-krets … --previous` odtwarza dokument przepływu z kodu KretS, zachowując położenia bloków z poprzedniej wersji (powtórna synchronizacja daje identyczny tekst). Wariant `bad-call/` wywołuje nieistniejącą funkcję — kompilator KretS odrzuca blok `action`.

{
  "format": "kretflow-ir/2",
  "name": "Restock",
  "variables": [
    { "name": "stock", "type": "Int64", "initial": "2" },
    { "name": "ordered", "type": "Int64", "initial": "0" },
    { "name": "cost", "type": "Int64", "initial": "0" },
    { "name": "note", "type": "String", "initial": "\"\"" }
  ],
  "nodes": [
    { "id": "start", "kind": "trigger", "event": "stock.low", "position": { "x": 40, "y": 40 } },
    { "id": "enough", "kind": "loop", "expression": "stock < 10", "position": { "x": 200, "y": 40 } },
    { "id": "order", "kind": "assign", "variable": "ordered", "expression": "ordered + 4", "position": { "x": 360, "y": 0 } },
    { "id": "deliver", "kind": "assign", "variable": "stock", "expression": "stock + 4", "position": { "x": 520, "y": 0 } },
    { "id": "price", "kind": "action", "variable": "cost", "call": "Orders.price", "arguments": ["ordered"], "position": { "x": 360, "y": 120 } },
    { "id": "large", "kind": "condition", "expression": "cost > 100", "position": { "x": 520, "y": 120 } },
    { "id": "big", "kind": "assign", "variable": "note", "expression": "\"duże zamówienie\"", "position": { "x": 680, "y": 80 } },
    { "id": "small", "kind": "assign", "variable": "note", "expression": "\"zwykłe zamówienie\"", "position": { "x": 680, "y": 160 } },
    { "id": "say", "kind": "action", "call": "log.info", "arguments": ["note + \": \" + toString(ordered) + \" szt.\""], "position": { "x": 840, "y": 120 } },
    { "id": "done", "kind": "end", "expression": "note + \", sztuk: \" + toString(ordered) + \", koszt: \" + toString(cost)", "position": { "x": 1000, "y": 120 } }
  ],
  "edges": [
    { "from": "start", "port": "next", "to": "enough" },
    { "from": "enough", "port": "body", "to": "order" },
    { "from": "order", "port": "next", "to": "deliver" },
    { "from": "deliver", "port": "next", "to": "enough" },
    { "from": "enough", "port": "done", "to": "price" },
    { "from": "price", "port": "next", "to": "large" },
    { "from": "large", "port": "true", "to": "big" },
    { "from": "large", "port": "false", "to": "small" },
    { "from": "big", "port": "next", "to": "say" },
    { "from": "small", "port": "next", "to": "say" },
    { "from": "say", "port": "next", "to": "done" }
  ]
}
Czytanie kodu linia po linii

Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.

  1. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. "format": "kretflow-ir/2",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  3. "name": "Restock",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  4. "variables": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  5. { "name": "stock", "type": "Int64", "initial": "2" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  6. { "name": "ordered", "type": "Int64", "initial": "0" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  7. { "name": "cost", "type": "Int64", "initial": "0" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  8. { "name": "note", "type": "String", "initial": "\"\"" }Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  9. ],Zamknięcie struktury otwartej we wcześniejszych liniach.
  10. "nodes": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  11. { "id": "start", "kind": "trigger", "event": "stock.low", "position": { "x": 40, "y": 40 } },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  12. { "id": "enough", "kind": "loop", "expression": "stock < 10", "position": { "x": 200, "y": 40 } },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  13. { "id": "order", "kind": "assign", "variable": "ordered", "expression": "ordered + 4", "position": { "x": 360, "y": 0 } },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  14. { "id": "deliver", "kind": "assign", "variable": "stock", "expression": "stock + 4", "position": { "x": 520, "y": 0 } },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  15. { "id": "price", "kind": "action", "variable": "cost", "call": "Orders.price", "arguments": ["ordered"], "position": { "x": 360, "y": 120 } },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  16. { "id": "large", "kind": "condition", "expression": "cost > 100", "position": { "x": 520, "y": 120 } },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  17. { "id": "big", "kind": "assign", "variable": "note", "expression": "\"duże zamówienie\"", "position": { "x": 680, "y": 80 } },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  18. { "id": "small", "kind": "assign", "variable": "note", "expression": "\"zwykłe zamówienie\"", "position": { "x": 680, "y": 160 } },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  19. { "id": "say", "kind": "action", "call": "log.info", "arguments": ["note + \": \" + toString(ordered) + \" szt.\""], "position": { "x": 840, "y": 120 } },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  20. { "id": "done", "kind": "end", "expression": "note + \", sztuk: \" + toString(ordered) + \", koszt: \" + toString(cost)", "position": { "x": 1000, "y": 120 } }Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  21. ],Zamknięcie struktury otwartej we wcześniejszych liniach.
  22. "edges": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  23. { "from": "start", "port": "next", "to": "enough" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  24. { "from": "enough", "port": "body", "to": "order" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  25. { "from": "order", "port": "next", "to": "deliver" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  26. { "from": "deliver", "port": "next", "to": "enough" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  27. { "from": "enough", "port": "done", "to": "price" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  28. { "from": "price", "port": "next", "to": "large" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  29. { "from": "large", "port": "true", "to": "big" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  30. { "from": "large", "port": "false", "to": "small" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  31. { "from": "big", "port": "next", "to": "say" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  32. { "from": "small", "port": "next", "to": "say" },Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  33. { "from": "say", "port": "next", "to": "done" }Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  34. ]Zamknięcie struktury otwartej we wcześniejszych liniach.
  35. }Zamknięcie struktury otwartej we wcześniejszych liniach.

Oczekiwany wynik: Odtworzony dokument przechodzi `to-krets`; wariant z błędem kończy się kodem 1 i diagnostyką z pozycją.

Typowy błąd: `from-krets -o` na istniejący plik bez `--force` — narzędzie nie nadpisze pliku użytkownika.

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.

KretFlow — zgodność i wersje / compatibility and versions

KretFlow — zgodność i wersje / compatibility and versions

Polski

  • kretflow-ir/2 FROZEN_SUPPORTED_SUBSET; zmiana łamiąca → kretflow-ir/3.
  • Nowy blok = zmiana MINOR (polityka języka).
  • sdk-info: syntax: PROVISIONAL — rozbieżność z freeze.
Otwórz cały rozdział ze źródłem →
KretFlow — kody diagnostyczne / diagnostic codes

KretFlow — kody diagnostyczne / diagnostic codes

Kod / codePolski
KCS-FLW-0001…0004zła postać, powtórzenie, nieznany blok, zły port
KCS-FLW-0005 / 0006 / 0007wyzwalacz / niedozwolony cykl / nieosiągalny blok (ostrzeżenie)
KCS-FLW-0010funkcje ochronne
KCS-FLW-0013 / 0014błąd wyrażenia / zmienna (także SDK-D01)
KCS-FLW-0015graf niestrukturalny (nie da się zapisać jako kod)
KCS-FLW-0020konstrukcja zachowana w bloku code (informacja)

Format: kret-diagnostics/1 (kod, plik, wiersz, kolumna, zakres) / (code, file, line, column, range).

Otwórz cały rozdział ze źródłem →
KretFlow — bezpieczeństwo / security

KretFlow — bezpieczeństwo / security

Polski

  • Przepływ kompiluje się do tego samego weryfikowanego bytecode co KretS i podlega tym samym limitom.
  • kret flow run w narzędziu: host pozwala wyłącznie na dziennik.
  • Przepływ nie może być podłączony do funkcji ochronnych.
Otwórz cały rozdział ze źródłem →
KretFlow — rozwiązywanie problemów / troubleshooting

KretFlow — rozwiązywanie problemów / troubleshooting

Problem (PL)Rozwiązanie (PL)
KCS-FLW-0013 przy kret flow rundodaj --module Script/<Moduł>.krs albo uruchom przepływ jako moduł KretS pluginu
from-krets nie zapisuje plikuplik istnieje — użyj --force albo innej ścieżki -o
Otwórz cały rozdział ze źródłem →
KretFlow — samouczek ADVANCED

KretFlow — samouczek ADVANCED

Status 1.0: `FROZEN_SUPPORTED_SUBSET` — zamrożony dokładnie opisany zakres; reszta poza kontraktem 1.0. Gramatyka/wersja: kretflow-ir/2. Status języka nie nadaje uprawnień KCS ani prawa do działania w Production.

Cel: integracja z Core i innymi językami, KretDB, bezpieczny dostęp do API, pluginy, stan, testy, diagnostyka, uprawnienia.

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. Synchronizacja kod ⇄ graf i diagnostyka przepływu (KRETFLOW-A01-RoundTripAndErrors)

Projekt: ../../Examples/ADVANCED_RoundTripAndErrors/ · klasyfikacja VALIDATION_ONLY · Playground LOCAL_VALIDATE

Kroki (katalog roboczy: katalog przykładu):

  1. kret flow from-krets Flow/Restock.krs --previous Flow/Restock.kflow -o {OUT}/Restock.kflow
  2. kret flow to-krets {OUT}/Restock.kflow — w wyniku: Orders.price
  3. kret check bad-call --json — oczekiwany błąd — w wyniku: "succeeded": false

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

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

Ćwiczenie i sprawdzenie wiedzy

W RoundTripAndErrors porównaj poprawny i niepoprawny przypadek. Wypisz niezmienniki struktury, które można sprawdzić bez wykonania programu.

Szkic nie jest wysyłany na serwer i znika po opuszczeniu lekcji. Przed wyjściem możesz go skopiować.
Podpowiedzi
  • KretFlow zapisuje logikę jako graf bloków (JSON, `kretflow-ir/2`). **Nie ma osobnego silnika przepływów**: graf jest obniżany do automatu stanów w KretS, kompilowany zwykłym kompilatorem i wykonywany przez tę samą maszynę, z tymi samymi uprawnieniami i limitami. Nazwa „KretFollow” nie występuje w żadnym źródle — to literówka, nie nazwa historyczna.
  • 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. Round-trip służy do sprawdzania zachowania struktury w obsługiwanym zakresie. Oczekiwany błąd niepoprawnej krawędzi lub konstrukcji jest częścią testu. Szkic grafu w edytorze WWW jest innym formatem i nie może udawać kompilacji kretflow-ir/2.

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

Round-trip służy do sprawdzania zachowania struktury w obsługiwanym zakresie. Oczekiwany błąd niepoprawnej krawędzi lub konstrukcji jest częścią testu. Szkic grafu w edytorze WWW jest innym formatem i nie może udawać kompilacji kretflow-ir/2.

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