Przejdź do treści

KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ

KretS — referencja składni

KretS — referencja składni

Status 1.0: `FROZEN_SUPPORTED_SUBSET` — zamrożony dokładnie opisany zakres; reszta poza kontraktem 1.0. Gramatyka/wersja: krets-2.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).

module / fn

Moduł i funkcja; funkcje bez parametrów mogą być handlerami cyklu życia.

module Main

fn Start() -> String {
    return "Witaj"
}
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. return "Witaj"Zwrócenie wartości z funkcji; nie jest zapisem do dziennika.
  5. }Zamknięcie struktury otwartej we wcześniejszych liniach.
CechaWartość
Parametry / typynazwa: Typ …
Wynik-> Typ (domyślnie Unit)
Wymaganianazwa modułu = nazwa pliku
Ograniczenia4096 funkcji; brak przeciążania
Możliwe błędyKCS-KRS-01xx…03xx
Wprowadzono1.0 (KretScript)

let / var / const

Stała modułu, stała lokalna, zmienna.

const LIMIT: Int = 100
let name = "Kret"
var total = 0
Czytanie kodu linia po linii

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

  1. const LIMIT: Int = 100Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  2. let name = "Kret"Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  3. var total = 0Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
CechaWartość
Parametry / typywartość początkowa; const tylko literał
Wynik—
Wymaganianull, [], list(), map() wymagają znanego typu
Ograniczenianazwa w funkcji raz
Możliwe błędyKCS-KRS-0307, KCS-KRS-1029
Wprowadzonoconst: 2.0

record

Typ rekordowy; == porównuje pola; wspólny dla całego pluginu.

record Order {
    customer: String
    amount: Int
}
let o = Order(customer = "ala", amount = 30)
Czytanie kodu linia po linii

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

  1. record Order {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. customer: StringOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  3. amount: IntOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  4. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  5. let o = Order(customer = "ala", amount = 30)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
CechaWartość
Parametry / typypola nazwane
Wynikinstancja rekordu
Wymagania—
Ograniczenia1024 rekordy
Możliwe błędyKCS-KRS-03xx
Wprowadzono1.0

if / else / while / for / break / continue

Sterowanie przepływem. for po liście, mapie (klucze rosnąco) i range(a, b).

for v in [1, 2, 3] {
    if v == 2 {
        continue
    }
}
while n < 10 {
    n = n + 1
}
Czytanie kodu linia po linii

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

  1. for v in [1, 2, 3] {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
  2. if v == 2 {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
  3. continueOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  4. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  5. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  6. while n < 10 {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
  7. n = n + 1Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  8. }Zamknięcie struktury otwartej we wcześniejszych liniach.
CechaWartość
Parametry / typywarunek Bool
Wynik—
Wymagania—
Ograniczenialimit instrukcji profilu
Możliwe błędyKCS-VM-*
Wprowadzonowhile/break/continue: 2.0

try / catch / throw

Obsługa błędów; catch dostaje String.

try {
    db.set("t", 1, "x")
} catch problem {
    log.warn(problem)
}
Czytanie kodu linia po linii

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

  1. try {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
  2. db.set("t", 1, "x")Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  3. } catch problem {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  4. log.warn(problem)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  5. }Zamknięcie struktury otwartej we wcześniejszych liniach.
CechaWartość
Parametry / typydowolne wyrażenie w throw
Wynik—
Wymagania—
Ograniczenialimity zasobów i anulowanie przez hosta nieprzechwytywalne
Możliwe błędyKCS-VM-*, KCS-PERM-*
Wprowadzono2.0

nullable T? / orElse / unwrap

Wartość opcjonalna. parseInt zwraca Int64?, Map.get zwraca V? (sprawdzone w tej rundzie).

let n = orElse(parseInt("42"), 0)
let m: Map<String, Int> = map()
let v = orElse(m.get("x"), 0)
Czytanie kodu linia po linii

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

  1. let n = orElse(parseInt("42"), 0)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  2. let m: Map<String, Int> = map()Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  3. let v = orElse(m.get("x"), 0)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
CechaWartość
Parametry / typy—
WynikT
Wymaganiaodczyt/arytmetyka na T? wymaga orElse/unwrap
Ograniczeniaunwrap(null) → błąd wykonania
Możliwe błędyKCS-KRS-0322, KCS-KRS-0320
Wprowadzono1.0

class / interface / override / init / super

Klasy z pojedynczym dziedziczeniem, dowolna liczba interfejsów, wywołania wirtualne.

interface Shape {
    fn area() -> Int
}
class Rect : Shape {
    w: Int
    init(w: Int) {
        this.w = w
    }
    fn area() -> Int {
        return this.w
    }
}
Czytanie kodu linia po linii

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

  1. interface Shape {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. fn area() -> IntSygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  3. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  4. class Rect : Shape {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  5. w: IntOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  6. init(w: Int) {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  7. this.w = wOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  8. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  9. fn area() -> Int {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  10. return this.wZwrócenie wartości z funkcji; nie jest zapisem do dziennika.
  11. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  12. }Zamknięcie struktury otwartej we wcześniejszych liniach.
CechaWartość
Parametry / typypola let/var, jeden init
Wynikobiekt: Rect(2)
Wymaganianadpisanie wymaga override
Ograniczeniabrak wielokrotnego dziedziczenia klas, metod async, wielu konstruktorów, struct
Możliwe błędyKCS-KRS-1xxx
Wprowadzono2.0

generics

Generyki klas, interfejsów i funkcji z ograniczeniem T: Typ; argumenty typów wnioskowane.

class Pair<A, B> { … }
fn largest<T: Shape>(items: List<T>) -> T { … }
Czytanie kodu linia po linii

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

  1. class Pair<A, B> { … }Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. fn largest<T: Shape>(items: List<T>) -> T { … }Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
CechaWartość
Parametry / typyparametry typu
Wynik—
Wymagania—
Ograniczenia—
Możliwe błędyKCS-KRS-1xxx
Wprowadzono2.0

event / on / emit / subscribe

Zdarzenia pluginu i handlery; on nazwa(...) -> T z wynikiem = komenda hosta/KretUI.

event order.placed(amount: Int)
on order.placed(amount: Int) {
    log.info(toString(amount))
}
emit order.placed(5)
subscribe order.placed with extra
Czytanie kodu linia po linii

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

  1. event order.placed(amount: Int)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. on order.placed(amount: Int) {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  3. log.info(toString(amount))Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  4. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  5. emit order.placed(5)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  6. subscribe order.placed with extraOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
CechaWartość
Parametry / typytypowane argumenty
Wynikkomenda: -> T
Wymaganiahost dostarcza tylko nazwy z handlers manifestu
Ograniczeniaemit nieznanego zdarzenia = błąd
Możliwe błędyKCS-KRS-1028
Wprowadzono2.0

async / await / Task / Stream

Zadania współbieżne i strumienie z buforem.

async fn slow(ms: Int) -> Int {
    await delay(milliseconds(ms))
    return ms
}
let s: Stream<Int> = stream(2)
for await v in s { … }
Czytanie kodu linia po linii

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

  1. async fn slow(ms: Int) -> Int {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  2. await delay(milliseconds(ms))Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  3. return msZwrócenie wartości z funkcji; nie jest zapisem do dziennika.
  4. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  5. let s: Stream<Int> = stream(2)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  6. for await v in s { … }Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
CechaWartość
Parametry / typy—
WynikTask<T>
Wymagania—
Ograniczenia1024 zadania/liczniki; jeden wątek; zakleszczenie = błąd
Możliwe błędyKCS-VM-*
Wprowadzono2.0

is / as / Any

Sprawdzenie i rzutowanie typu w czasie wykonania (także obiektów klas).

if shape is Square { … }
let n = value as Int
Czytanie kodu linia po linii

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

  1. if shape is Square { … }Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
  2. let n = value as IntWiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
CechaWartość
Parametry / typy—
WynikBool / typ docelowy
Wymagania—
Ograniczeniazłe rzutowanie → KCS-VM-0006
Możliwe błędyKCS-VM-0006
Wprowadzono2.0

log.*

Dziennik pluginu: info warn error debug.

log.info("tekst")
Czytanie kodu linia po linii

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

  1. log.info("tekst")Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
CechaWartość
Parametry / typyString
WynikUnit
Wymaganialogs.own.write (w Core zablokowane przez D-KCS-01)
Ograniczenia—
Możliwe błędyKCS-KRL-0302, KCS-PERM-*
Wprowadzono1.0

Kret.Hardware (moduł hosta, PROVISIONAL)

Odczyty sensorów przez KCS i dostawcę hosta (Core). Używany przez KretSystemDashboard/KretSensorsViewer. Nieopisany w LANGUAGE_FREEZE_1_0 — G-06 (proponowany status PROVISIONAL).

use Kret.Hardware as hardware
let text = hardware.text("cpu.usage")
let sample = hardware.sample("memory.usage")
Czytanie kodu linia po linii

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

  1. use Kret.Hardware as hardwareOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. let text = hardware.text("cpu.usage")Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  3. let sample = hardware.sample("memory.usage")Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
CechaWartość
Parametry / typynazwa odczytu (np. memory.usage, cpu.usage)
Wyniktext → String, sample → List<String>
Wymaganiauprawnienia sensorów (system.ram.read, …) — Production BLOCKED_BY_KCS
Ograniczeniaw samym SDK brak dostawcy — odmowa/UNAVAILABLE; starsze SDK → KCS-KRS-1010
Możliwe błędyKCS-KRS-1010, KCS-PERM-*
Wprowadzonorc.3+kc-base (Core 6.10)

Źródło i wersja

Zweryfikowany import PUBLIC_CANDIDATE. Identyfikatory źródeł odnoszą się do eksportu i nie dają dostępu do plików serwera.

01_LANGUAGES/KretS/Documentation/SYNTAX_REFERENCE.md
SHA-256 69E6769BF0B8BDE55810B363EE33311E12C1BA0074614E6B25B7F477E4E47FE9

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