Przejdź do treści

KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ

Wersjonowany kontrakt usługi

BASIC20 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 ContractCompileSchema dopasuj nazwę metody do schematu wejścia i wyniku.
Wymagania wstępne
  • Ukończ Podstawy i wcześniejszy poziom tej ścieżki.

Wyjaśnienie krok po kroku

Plik .klink opisuje kontrakt. Lokalny protokół broker–plugin i RPC mają własne wersje. Zdefiniowanie usługi nie przyznaje prawa do komunikacji; poprawny schemat to dopiero informacja o strukturze wiadomości.

Praca z kodem źródłowym

Kontrakt usługi `.klink`: kompilacja i schemat

Kontrakt `klink "1.0"` z usługą, wersją SemVer, metodami (parametry, wynik, termin, uprawnienie) i typami KretS. `kret link compile` daje postać kanoniczną JSON i skrót SHA-256, `kret link schema` — JSON Schema żądań i wyników (pochodna kontraktu, nie drugie źródło prawdy). Kontrakt **nie daje prawa do komunikacji**.

klink "1.0"

// Wersjonowany kontrakt usługi notatek.
service notes.api {
    version "1.2.0"

    method add {
        description "Dodaje notatkę i zwraca wszystkie notatki."
        param text String
        returns "List<String>"
        permission kretlink.publish
        timeout 5s
    }
    method count {
        description "Liczba notatek."
        returns Int64
    }
    method find {
        description "Pierwsza notatka z prefiksem albo null."
        param prefix String
        returns "String?"
    }
}

Czytanie kodu linia po linii

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

  1. klink "1.0"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. Pusta linia oddziela fragmenty źródła.
  3. // Wersjonowany kontrakt usługi notatek.Komentarz autora; nie jest wykonywany.
  4. service notes.api {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  5. version "1.2.0"Pole tożsamości lub wersji w otaczającym bloku; zachowaj jego kontekst.
  6. Pusta linia oddziela fragmenty źródła.
  7. method add {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  8. description "Dodaje notatkę i zwraca wszystkie notatki."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  9. param text StringOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  10. returns "List<String>"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  11. permission kretlink.publishOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  12. timeout 5sOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  13. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  14. method count {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  15. description "Liczba notatek."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  16. returns Int64Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  17. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  18. method find {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  19. description "Pierwsza notatka z prefiksem albo null."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  20. param prefix StringOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  21. returns "String?"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  22. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  23. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  24. Pusta linia oddziela fragmenty źródła.

Oczekiwany wynik: Kod 0 w obu krokach; schemat wymienia usługę `notes.api` i jej metody.

Typowy błąd: Rekord jako typ parametru — rekordy w kontraktach 1.0 są NOT_SUPPORTED. Dozwolone: `Bool Int64 Float64 String Bytes Unit List<T> Map<String,T> T?`.

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.

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

KretLink to wersjonowane kontrakty usług (.klink) i dwa protokoły: łącze broker↔plugin kretlink-local/1 (stdin/stdout) oraz RPC kretlink-rpc/1 na potokach nazwanych (tożsamość procesu, wzajemny HMAC, terminy). Kontrakt można walidować, ale nie daje on prawa do komunikacji. Eksport usług pluginów, stream w Core i produkcyjne uprawnienia kretlink.* są zablokowane (A17, FB-06).

Kontrakt mówi, jakie metody ma usługa, jakie przyjmują parametry i co zwracają. SDK sprawdza kontrakt i generuje z niego JSON Schema. To jak umowa interfejsu — sama nie łączy programów.

Postać kanoniczna JSON + SHA-256 niezależny od kolejności metod. Dopuszczenie połączenia: tożsamość procesu z systemu (PID, ścieżka, opcjonalnie SHA-256) → wersja protokołu → wzajemny HMAC-SHA256 (usługa dowodzi pierwsza) → zgodność kontraktów. Każde wywołanie: metoda → uprawnienia → typy → limit równoległości → termin. Ramki ≤ 524 288 B (limit dokumentu KCS); identyfikator korelacji D-KCS-10; powtórzone/cofnięte identyfikatory wywołań zamykają połączenie. Strumienie z kredytem — EXPERIMENTAL (KCS-LNK-0121).

Jawne, wersjonowane kontrakty komunikacji i bezpieczne lokalne IPC bez zaufania do samej możliwości połączenia z potokiem.

  • kontrakty komunikacyjne i wersjonowane API
  • kontrakty KretBridge (KretS ↔ C#)
  • JSON Schema dla narzędzi
  • eksport usług pluginów (zablokowany)
  • RPC między komputerami (NOT_SUPPORTED)
  • rekordy w kontraktach (NOT_SUPPORTED)
  • Linux/macOS (tożsamość procesu niedostępna — NOT_SUPPORTED)

KretBridge (kontrakt usługi C#), KretS (kompilator sprawdza wywołania), broker (łącze kretlink-local/1), Core (RPC health, ramUsage).

FROZEN_SUPPORTED_SUBSET — zamrożony dokładnie opisany zakres; reszta poza kontraktem 1.0.

Dalej: ARCHITECTURE.md · SYNTAX_REFERENCE.md · ../Tutorials/BASIC/TUTORIAL_PL.md

Otwórz cały rozdział ze źródłem →
KretLink — referencja składni
Status 1.0: `FROZEN_SUPPORTED_SUBSET` — zamrożony dokładnie opisany zakres; reszta poza kontraktem 1.0. Gramatyka/wersja: klink-1.0. Status języka nie nadaje uprawnień KCS ani prawa do działania w Production.

Opisane są wyłącznie konstrukcje potwierdzone implementacją SDK (i, gdzie zaznaczono, testami tej rundy).

Usługa i jej wersja SemVer.

klink "1.0"
service notes.api {
    version "1.2.0"
}
Czytanie kodu linia po linii

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

  1. klink "1.0"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. service notes.api {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  3. version "1.2.0"Pole tożsamości lub wersji w otaczającym bloku; zachowaj jego kontekst.
  4. }Zamknięcie struktury otwartej we wcześniejszych liniach.
CechaWartość
Parametry / typy—
Wynik—
Wymagania—
Ograniczeniazgodność: ta sama wersja główna
Możliwe błędyKCS-LNK-*
Wprowadzono1.0

Metoda z parametrami, wynikiem, uprawnieniem i terminem.

method add {
    description "…"
    param text String
    returns "List<String>"
    permission kretlink.publish
    timeout 5s
}
Czytanie kodu linia po linii

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

  1. method add {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. description "…"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  3. param text StringOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  4. returns "List<String>"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  5. permission kretlink.publishOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  6. timeout 5sOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  7. }Zamknięcie struktury otwartej we wcześniejszych liniach.
CechaWartość
Parametry / typyparam nazwa Typ
Wynikreturns
Wymaganiapermission → uprawnienie KCS sprawdzane przez brokera
Ograniczeniateksty bez znaków sterujących/BiDi (KCS-LNK-0116)
Możliwe błędyKCS-LNK-0116
Wprowadzono1.0

Strumień z kontrolą przepływu (kredyt).

stream ticks {
    param limit Int64
    returns Int64
}
Czytanie kodu linia po linii

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

  1. stream ticks {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. param limit Int64Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  3. returns Int64Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  4. }Zamknięcie struktury otwartej we wcześniejszych liniach.
CechaWartość
Parametry / typy—
Wyniktyp elementu
Wymagania—
Ograniczeniapoza Stable 1.0 (D-KCS-13); KretS 2.0 nie wywołuje strumieni
Możliwe błędyKCS-LNK-0121 (ostrzeżenie / warning)
Wprowadzono1.0 (experimental)
Otwórz cały rozdział ze źródłem →
KretLink — samouczek BASIC
Status 1.0: `FROZEN_SUPPORTED_SUBSET` — zamrożony dokładnie opisany zakres; reszta poza kontraktem 1.0. Gramatyka/wersja: klink-1.0. Status języka nie nadaje uprawnień KCS ani prawa do działania w Production.

Cel: pierwszy plik, podstawowa struktura, najprostszy działający przykład, najczęstszy błąd, sposób uruchomienia.

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.

Projekt: ../../Examples/BASIC_ContractCompileSchema/ · klasyfikacja VALIDATION_ONLY · Playground PUBLIC_STATIC

Kroki (katalog roboczy: katalog przykładu):

  1. kret link compile Bridge/notes.klink -o {OUT}/notes.json
  2. kret link schema Bridge/notes.klink — w wyniku: notes.api

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

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

Ćwiczenie i sprawdzenie wiedzy

W ContractCompileSchema dopasuj nazwę metody do schematu wejścia i wyniku.

Szkic nie jest wysyłany na serwer i znika po opuszczeniu lekcji. Przed wyjściem możesz go skopiować.
Podpowiedzi
  • KretLink to wersjonowane kontrakty usług (`.klink`) i dwa protokoły: łącze broker↔plugin `kretlink-local/1` (stdin/stdout) oraz RPC `kretlink-rpc/1` na potokach nazwanych (tożsamość procesu, wzajemny HMAC, terminy). Kontrakt można walidować, ale **nie daje on prawa do komunikacji**. Eksport usług pluginów, `stream` w Core i produkcyjne uprawnienia `kretlink.*` są zablokowane (A17, FB-06).
  • 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. Plik .klink opisuje kontrakt. Lokalny protokół broker–plugin i RPC mają własne wersje. Zdefiniowanie usługi nie przyznaje prawa do komunikacji; poprawny schemat to dopiero informacja o strukturze wiadomości.

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

Plik .klink opisuje kontrakt. Lokalny protokół broker–plugin i RPC mają własne wersje. Zdefiniowanie usługi nie przyznaje prawa do komunikacji; poprawny schemat to dopiero informacja o strukturze wiadomości.

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