KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ
Przetwarzanie danych: rekordy, listy, mapy, błędy
Parsowanie wierszy tekstu do rekordów (`record`), filtrowanie i sumowanie w pętli `for`, grupowanie w `Map<String, Int>`, typy nullable (`parseInt` → `Int64?`, `Map.get` → `V?`) z `orElse`, obsługa błędu `try`/`catch` i `throw`, stała `const`.
Witryna nie wykonuje kodu ani nie prowadzi walidacji SDK. Wyniki poniżej pochodzą z eksportu określonej wersji i przestają opisywać kod po jego zmianie.
Kanoniczne pliki projektu
module Main
const LIMIT: Int = 100
record Order {
customer: String
amount: Int
}
// Zamienia wiersz "klient;kwota" na rekord. Zły wiersz kończy się wyjątkiem.
fn parse(line: String) -> Order {
let parts = line.split(";")
if parts.size != 2 {
throw "zły wiersz: " + line
}
// parseInt zwraca Int64? (null, gdy tekst nie jest liczbą) — orElse podaje wartość zastępczą.
let amount = orElse(parseInt(parts.get(1).trim()), -1)
if amount < 0 {
throw "zła kwota: " + parts.get(1)
}
return Order(customer = parts.get(0).trim(), amount = amount)
}
fn Start() -> String {
let lines = ["ala; 30", "bob; 120", "ala; 45", "zły wiersz", "cecylia; x", "bob; 15"]
var orders: List<Order> = []
var rejected = 0
for line in lines {
try {
orders.add(parse(line))
} catch problem {
rejected = rejected + 1
}
}
var totals: Map<String, Int> = map()
var large = 0
for order in orders {
// Map.get zwraca V? — brak klucza to null.
totals.set(order.customer, orElse(totals.get(order.customer), 0) + order.amount)
if order.amount > LIMIT {
large = large + 1
}
}
var parts: List<String> = []
for customer in totals {
parts.add(customer + "=" + toString(orElse(totals.get(customer), 0)))
}
return "przyjęte " + toString(orders.size) + ", odrzucone " + toString(rejected) + ", duże " + toString(large) + "; " + parts.join(", ")
}
fn Shutdown() {
}
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.const LIMIT: Int = 100Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.Pusta linia oddziela fragmenty źródła.record Order {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.customer: StringOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.amount: IntOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.// Zamienia wiersz "klient;kwota" na rekord. Zły wiersz kończy się wyjątkiem.Komentarz autora; nie jest wykonywany.fn parse(line: String) -> Order {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.let parts = line.split(";")Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.if parts.size != 2 {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.throw "zły wiersz: " + lineSterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.}Zamknięcie struktury otwartej we wcześniejszych liniach.// parseInt zwraca Int64? (null, gdy tekst nie jest liczbą) — orElse podaje wartość zastępczą.Komentarz autora; nie jest wykonywany.let amount = orElse(parseInt(parts.get(1).trim()), -1)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.if amount < 0 {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.throw "zła kwota: " + parts.get(1)Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.}Zamknięcie struktury otwartej we wcześniejszych liniach.return Order(customer = parts.get(0).trim(), amount = amount)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 Start() -> String {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.let lines = ["ala; 30", "bob; 120", "ala; 45", "zły wiersz", "cecylia; x", "bob; 15"]Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.var orders: List<Order> = []Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.var rejected = 0Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.for line in lines {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.try {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.orders.add(parse(line))Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.} catch problem {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.rejected = rejected + 1Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.}Zamknięcie struktury otwartej we wcześniejszych liniach.var totals: Map<String, Int> = map()Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.var large = 0Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.for order in orders {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.// Map.get zwraca V? — brak klucza to null.Komentarz autora; nie jest wykonywany.totals.set(order.customer, orElse(totals.get(order.customer), 0) + order.amount)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.if order.amount > LIMIT {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.large = large + 1Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.}Zamknięcie struktury otwartej we wcześniejszych liniach.var parts: List<String> = []Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.for customer in totals {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.parts.add(customer + "=" + toString(orElse(totals.get(customer), 0)))Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.return "przyjęte " + toString(orders.size) + ", odrzucone " + toString(rejected) + ", duże " + toString(large) + "; " + parts.join(", ")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.
Wynik i typowy błąd
„przyjęte 4, odrzucone 2, duże 1; ala=75, bob=135” — mapa jest przechodzona po kluczach rosnąco (deterministycznie).
Odczyt `.isOk`/`.value` albo arytmetyka na wartości `Int64?` bez `orElse`/`unwrap` → `KCS-KRS-0322` / `KCS-KRS-0320` (sprawdzone w tej rundzie eksportu).
Wymagania wersji i procedura lokalna
- sdk
- 1.0.0-rc.3+kret.local.3
- sdkInfoReports
- 1.0.0-rc.3
- core
- 1.0.0-test.6.11-draft.1
- os
- Windows 11 x64
- dotnet
- .NET 10 runtime
Polecenia poniżej są instrukcją do samodzielnego wykonania z właściwym lokalnym SDK. DATA/OUT muszą wskazywać nowe katalogi testowe. Nie ma przycisku uruchamiania na serwerze.
- check
kret check . --jsonKatalog: project · Oczekiwany kod wyjścia: 0 - run
kret run . --policy host-policy.json --data {DATA}Katalog: project · Oczekiwany kod wyjścia: 0
Wyniki zapisane w pakiecie źródłowym
To dowód z eksportu, nie wynik bieżącego wykonania w przeglądarce.
# EXPECTED_OUTPUT — KRETS-I01-DataProcessing
# Rzeczywisty wynik uruchomienia (SDK 1.0.0-rc.3+kret.local.3, 2026-11-01T12:46:40Z). Ścieżki zastąpione znacznikami <project>, <data>, <out>, <sdk>.
# Actual output of the run. Paths replaced by placeholders.
### 1. check (exit 0, PASS)
> kret check . --json
{
"format": "kret-diagnostics/1",
"project": "<project>",
"succeeded": true,
"plugin": {
"id": "LOCAL-KPL-KSM2DATA",
"name": "DataProcessing",
"version": "1.0.0",
"profile": "standard",
"database": false
},
"permissions": {
"required": [],
"optional": []
},
"handlers": {
"lifecycle": [
"start",
"shutdown"
],
"events": [],
"commands": []
},
"diagnostics": []
}
### 2. run (exit 0, PASS)
> kret run . --policy host-policy.json --data {DATA}
{
"broker": {
"pid": 18332,
"startupMs": 44.9461,
"pluginHostSha256": "93405d128c95234d913efcd6e28fe54073caa0375135a2184290f958e7f7cfe5",
"allowProvisionalRisk": false,
"memoryIdle": {
"managedBytes": 1193216,
"allocatedBytes": 1190576,
"workingSetBytes": 32538624,
"privateBytes": 10117120,
"peakWorkingSetBytes": 32538624,
"cpuMs": 93.75
}
},
"brokerWithPlugins": {
"memory": {
"managedBytes": 1533608,
"allocatedBytes": 1530488,
"workingSetBytes": 38825984,
"privateBytes": 13914112,
"peakWorkingSetBytes": 38830080,
"cpuMs": 171.875
}
},
"plugins": [
{
"package": "<project>\\Build",
"admitted": true,
"startMs": 145.8753,
"subject": "LOCAL-KPL-KSM2DATA",
"instance": "01a19725-d061-7f1f-9bf1-e84a4d7aacb1",
"pid": 27504,
"jobObject": true,
"isolation": {
"level": "Restricted",
"restrictedToken": true,
"lowIntegrity": true,
"appContainer": false
},
"limits": {
"profile": "standard",
"scriptMemoryBytes": 67108864,
"processMemoryBytes": 201326592,
"cpuPercent": 25,
"maxInstructions": 50000000,
"clamped": []
},
"calls": [
{
"operation": "start",
"ok": true,
"status": "Completed",
"type": "String",
"value": "przyj\u0119te 4, odrzucone 2, du\u017Ce 1; ala=75, bob=135",
"brokerMs": 11.6977,
"vmMs": 6.8457,
"instructions": 554,
"hostCalls": 0,
"pluginReportedMemory": {
"managedBytes": 784088,
"allocatedBytes": 781904,
"workingSetBytes": 32444416,
"privateBytes": 11292672,
"peakWorkingSetBytes": 32550912,
"cpuMs": 93.75
}
},
{
"operation": "shutdown",
"ok": true,
"status": "Completed",
"type": "Unit",
"value": null,
"brokerMs": 0.5743,
"vmMs": 0.0014,
"instructions": 1,
"hostCalls": 0,
"pluginReportedMemory": {
"managedBytes": 792312,
"allocatedBytes": 790104,
"workingSetBytes": 32559104,
"privateBytes": 11309056,
"peakWorkingSetBytes": 32559104,
"cpuMs": 93.75
}
}
],
"processMemoryMeasuredByBroker": {
"workingSetBytes": 32555008,
"privateBytes": 11309056,
"peakWorkingSetBytes": 32555008,
"cpuMs": 93.75
},
"summary": {
"exitCode": 0,
"killed": false,
"hostCalls": 0,
"denials": 0,
"peakCommitBytes": 12005376,
"log": []
}
}
],
"brokerAfterClose": {
"memory": {
"managedBytes": 580744,
"allocatedBytes": 1530488,
"workingSetBytes": 39866368,
"privateBytes": 14442496,
"peakWorkingSetBytes": 39866368,
"cpuMs": 171.875
}
},
"audit": {
"entries": 10,
"denials": 0,
"grantsIssued": 0,
"denied": []
},
"exitCode": 0
}
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
# EXPECTED_OUTPUT — KRETS-I01-DataProcessingOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.# Rzeczywisty wynik uruchomienia (SDK 1.0.0-rc.3+kret.local.3, 2026-11-01T12:46:40Z). Ścieżki zastąpione znacznikami <project>, <data>, <out>, <sdk>.Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.# Actual output of the run. Paths replaced by placeholders.Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.Pusta linia oddziela fragmenty źródła.### 1. check (exit 0, PASS)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.> kret check . --jsonOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."format": "kret-diagnostics/1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."project": "<project>",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."succeeded": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."plugin": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."id": "LOCAL-KPL-KSM2DATA",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."name": "DataProcessing",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."version": "1.0.0",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."profile": "standard",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."database": falsePole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach."permissions": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."required": [],Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."optional": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach."handlers": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."lifecycle": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."start",Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."shutdown"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.],Zamknięcie struktury otwartej we wcześniejszych liniach."events": [],Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."commands": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach."diagnostics": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.### 2. run (exit 0, PASS)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.> kret run . --policy host-policy.json --data {DATA}Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."broker": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."pid": 18332,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."startupMs": 44.9461,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."pluginHostSha256": "93405d128c95234d913efcd6e28fe54073caa0375135a2184290f958e7f7cfe5",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allowProvisionalRisk": false,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."memoryIdle": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."managedBytes": 1193216,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allocatedBytes": 1190576,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 32538624,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 10117120,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 32538624,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."cpuMs": 93.75Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.},Zamknięcie struktury otwartej we wcześniejszych liniach."brokerWithPlugins": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."memory": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."managedBytes": 1533608,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allocatedBytes": 1530488,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 38825984,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 13914112,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 38830080,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."cpuMs": 171.875Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.},Zamknięcie struktury otwartej we wcześniejszych liniach."plugins": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."package": "<project>\\Build",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."admitted": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."startMs": 145.8753,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."subject": "LOCAL-KPL-KSM2DATA",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."instance": "01a19725-d061-7f1f-9bf1-e84a4d7aacb1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."pid": 27504,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."jobObject": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."isolation": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."level": "Restricted",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."restrictedToken": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."lowIntegrity": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."appContainer": falsePole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach."limits": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."profile": "standard",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."scriptMemoryBytes": 67108864,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."processMemoryBytes": 201326592,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."cpuPercent": 25,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."maxInstructions": 50000000,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."clamped": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach."calls": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."operation": "start",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."ok": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."status": "Completed",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."type": "String",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."value": "przyj\u0119te 4, odrzucone 2, du\u017Ce 1; ala=75, bob=135",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."brokerMs": 11.6977,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."vmMs": 6.8457,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."instructions": 554,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."hostCalls": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."pluginReportedMemory": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."managedBytes": 784088,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allocatedBytes": 781904,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 32444416,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 11292672,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 32550912,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."cpuMs": 93.75Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.},Zamknięcie struktury otwartej we wcześniejszych liniach.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."operation": "shutdown",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."ok": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."status": "Completed",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."type": "Unit",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."value": null,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."brokerMs": 0.5743,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."vmMs": 0.0014,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."instructions": 1,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."hostCalls": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."pluginReportedMemory": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."managedBytes": 792312,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allocatedBytes": 790104,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 32559104,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 11309056,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 32559104,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."cpuMs": 93.75Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.}Zamknięcie struktury otwartej we wcześniejszych liniach.],Zamknięcie struktury otwartej we wcześniejszych liniach."processMemoryMeasuredByBroker": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 32555008,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 11309056,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 32555008,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."cpuMs": 93.75Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach."summary": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."exitCode": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."killed": false,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."hostCalls": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."denials": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakCommitBytes": 12005376,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."log": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.}Zamknięcie struktury otwartej we wcześniejszych liniach.],Zamknięcie struktury otwartej we wcześniejszych liniach."brokerAfterClose": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."memory": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."managedBytes": 580744,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allocatedBytes": 1530488,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 39866368,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 14442496,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 39866368,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."cpuMs": 171.875Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.},Zamknięcie struktury otwartej we wcześniejszych liniach."audit": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."entries": 10,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."denials": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."grantsIssued": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."denied": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach."exitCode": 0Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.Pusta linia oddziela fragmenty źródła.
Diagnostyka i raporty testów
null
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
nullOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
Pochodzenie i integralność
KRET_LANGUAGE_KRETS.zip:KretS/Examples/INTERMEDIATE_DataProcessing/example.json
02_PLAYGROUND/EXAMPLES/KRETS-I01-DataProcessing.json
SHA-256 2480AF96A8B2B9C632F5C00CE25BB25F2AEBBAF2DCEAE2145F6BFA8798F0EE91Materiał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.
KRETS-I01-DataProcessing — Przetwarzanie danych: rekordy, listy, mapy, błędy
KRETS-I01-DataProcessing — Przetwarzanie danych: rekordy, listy, mapy, błędy
🇬🇧 English version below.
| Pole | Wartość |
|---|---|
| Technologia | KretS |
| Poziom | INTERMEDIATE |
| Klasyfikacja | RUNNABLE_LOCAL — Uruchamialny lokalnie (SDK, izolowany proces pluginu) |
| Playground | LOCAL_EXECUTE — lokalnie: wykonanie w KretStudio / SDK (publicznie: tylko statycznie) |
| SDK | 1.0.0-rc.3+kret.local.3 (kandydat lokalny, niepodpisany) |
| Wynik testu | TEST_RESULTS.json, rzeczywisty wynik: EXPECTED_OUTPUT.txt |
Co pokazuje
Parsowanie wierszy tekstu do rekordów (record), filtrowanie i sumowanie w pętli for, grupowanie w Map<String, Int>, typy nullable (parseInt → Int64?, Map.get → V?) z orElse, obsługa błędu try/catch i throw, stała const.
Pliki
| Plik |
|---|
Script/Main.krs |
host-policy.json |
plugin.kretl |
Jak uruchomić
Katalog roboczy: katalog tego przykładu. kret oznacza <SDK>\Compiler\kret.exe, kretui-host — <SDK>\UiHost\kretui-host.exe. {DATA} / {OUT} to nowe, puste katalogi poza projektem. Wymagania: REQUIREMENTS.md.
kret check . --json— walidacjakret run . --policy host-policy.json --data {DATA}— uruchomienie
Oczekiwany wynik
„przyjęte 4, odrzucone 2, duże 1; ala=75, bob=135” — mapa jest przechodzona po kluczach rosnąco (deterministycznie).
Najczęstszy błąd
Odczyt .isOk/.value albo arytmetyka na wartości Int64? bez orElse/unwrap → KCS-KRS-0322 / KCS-KRS-0320 (sprawdzone w tej rundzie eksportu).
Zaloguj się na konto użytkownika, aby zapisywać postęp i zakładki. Konta obsługi mogą czytać bez zapisu postępu. Logowanie →