KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ
Zadania, strumienie i zdarzenia [2.0]
`async fn` i `await` (zadania współbieżne, nie równoległe), `Stream<Int>` z buforem i `for await`, `timeout` obsłużony w `try`/`catch`, deklaracja `event`, handler `on`, `emit` oraz `subscribe … with`.
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
// Deklaracja zdarzenia: nazwa z kropkami i typowane argumenty.
event order.placed(amount: Int)
async fn produce(target: Stream<Int>, count: Int) {
for i in range(1, count + 1) {
await target.send(i * i)
}
target.close()
}
async fn slow(ms: Int) -> Int {
await delay(milliseconds(ms))
return ms
}
// Handler zdarzenia (może leżeć w dowolnym module pluginu).
on order.placed(amount: Int) {
log.info("handler: zamówienie " + toString(amount))
}
// Dodatkowy subskrybent o zgodnej sygnaturze, dołączany i odłączany w czasie działania.
fn extra(amount: Int) {
log.info("subskrybent: zamówienie " + toString(amount))
}
fn Start() -> String {
let first = slow(20)
let second = slow(30)
let sum = await first + await second
let squares: Stream<Int> = stream(2)
produce(squares, 4)
var total = 0
for await value in squares {
total = total + value
}
var late = "nie"
try {
let never = await timeout(milliseconds(10), slow(500))
late = toString(never)
} catch problem {
late = "przekroczony"
}
subscribe order.placed with extra
emit order.placed(5)
unsubscribe order.placed with extra
emit order.placed(1)
return "zadania " + toString(sum) + "; strumień " + toString(total) + "; limit " + late
}
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.// Deklaracja zdarzenia: nazwa z kropkami i typowane argumenty.Komentarz autora; nie jest wykonywany.event order.placed(amount: Int)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.Pusta linia oddziela fragmenty źródła.async fn produce(target: Stream<Int>, count: Int) {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.for i in range(1, count + 1) {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.await target.send(i * i)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.target.close()Odczytaj 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.async fn slow(ms: Int) -> Int {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.await delay(milliseconds(ms))Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.return msZwró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.// Handler zdarzenia (może leżeć w dowolnym module pluginu).Komentarz autora; nie jest wykonywany.on order.placed(amount: Int) {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.log.info("handler: zamówienie " + toString(amount))Odczytaj 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.// Dodatkowy subskrybent o zgodnej sygnaturze, dołączany i odłączany w czasie działania.Komentarz autora; nie jest wykonywany.fn extra(amount: Int) {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.log.info("subskrybent: zamówienie " + toString(amount))Odczytaj 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.fn Start() -> String {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.let first = slow(20)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.let second = slow(30)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.let sum = await first + await secondWiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.Pusta linia oddziela fragmenty źródła.let squares: Stream<Int> = stream(2)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.produce(squares, 4)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.var total = 0Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.for await value in squares {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.total = total + valueOdczytaj 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.var late = "nie"Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.try {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.let never = await timeout(milliseconds(10), slow(500))Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.late = toString(never)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.late = "przekroczony"Odczytaj 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.subscribe order.placed with extraOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.emit order.placed(5)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.unsubscribe order.placed with extraOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.emit order.placed(1)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.Pusta linia oddziela fragmenty źródła.return "zadania " + toString(sum) + "; strumień " + toString(total) + "; limit " + lateZwró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
„zadania 50; strumień 30; limit przekroczony”; w dzienniku dwa wpisy handlera i jeden wpis subskrybenta (po `unsubscribe` subskrybent nie dostaje drugiego zdarzenia).
Oczekiwanie równoległości: wszystkie zadania jednej maszyny działają na jednym wątku. Maszyna wykrywa zakleszczenie (wszystkie zadania czekają) i zgłasza błąd.
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-A02-AsyncStreamsEvents
# Rzeczywisty wynik uruchomienia (SDK 1.0.0-rc.3+kret.local.3, 2026-11-01T12:46:36Z). Ś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-KSA2ASYN",
"name": "AsyncStreamsEvents",
"version": "1.0.0",
"profile": "standard",
"database": false
},
"permissions": {
"required": [
"logs.own.write"
],
"optional": []
},
"handlers": {
"lifecycle": [
"start",
"shutdown"
],
"events": [],
"commands": []
},
"diagnostics": [
{
"file": "<project>\\Script\\Main.krs",
"line": 6,
"column": 26,
"endLine": 6,
"endColumn": 37,
"severity": "warning",
"code": "KCS-KRS-1031",
"message": "Stream\u003CInt64\u003E jest konstrukcj\u0105 eksperymentaln\u0105 (D-KCS-13): pe\u0142ny transport strumieni nie zosta\u0142 zatwierdzony i Stream\u003CT\u003E nie nale\u017Cy do kontraktu Stable 1.0"
},
{
"file": "<project>\\Script\\Main.krs",
"line": 33,
"column": 18,
"endLine": 33,
"endColumn": 29,
"severity": "warning",
"code": "KCS-KRS-1031",
"message": "Stream\u003CInt64\u003E jest konstrukcj\u0105 eksperymentaln\u0105 (D-KCS-13): pe\u0142ny transport strumieni nie zosta\u0142 zatwierdzony i Stream\u003CT\u003E nie nale\u017Cy do kontraktu Stable 1.0"
}
]
}
### 2. run (exit 0, PASS)
> kret run . --policy host-policy.json --data {DATA}
{
"broker": {
"pid": 44944,
"startupMs": 40.6881,
"pluginHostSha256": "93405d128c95234d913efcd6e28fe54073caa0375135a2184290f958e7f7cfe5",
"allowProvisionalRisk": true,
"memoryIdle": {
"managedBytes": 1193376,
"allocatedBytes": 1190736,
"workingSetBytes": 32518144,
"privateBytes": 10072064,
"peakWorkingSetBytes": 32518144,
"cpuMs": 93.75
}
},
"brokerWithPlugins": {
"memory": {
"managedBytes": 1555520,
"allocatedBytes": 1552376,
"workingSetBytes": 38899712,
"privateBytes": 13828096,
"peakWorkingSetBytes": 38903808,
"cpuMs": 171.875
}
},
"plugins": [
{
"package": "<project>\\Build",
"admitted": true,
"startMs": 146.4427,
"subject": "LOCAL-KPL-KSA2ASYN",
"instance": "01a19725-bfab-77e8-ae10-47142d2d69c3",
"pid": 22112,
"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": "zadania 50; strumie\u0144 30; limit przekroczony",
"brokerMs": 69.9046,
"vmMs": 66.0906,
"instructions": 296,
"hostCalls": 3,
"pluginReportedMemory": {
"managedBytes": 793032,
"allocatedBytes": 790824,
"workingSetBytes": 32555008,
"privateBytes": 11231232,
"peakWorkingSetBytes": 32555008,
"cpuMs": 78.125
}
},
{
"operation": "shutdown",
"ok": true,
"status": "Completed",
"type": "Unit",
"value": null,
"brokerMs": 0.5243,
"vmMs": 0.001,
"instructions": 1,
"hostCalls": 0,
"pluginReportedMemory": {
"managedBytes": 798616,
"allocatedBytes": 796384,
"workingSetBytes": 32563200,
"privateBytes": 11231232,
"peakWorkingSetBytes": 32563200,
"cpuMs": 78.125
}
}
],
"processMemoryMeasuredByBroker": {
"workingSetBytes": 32555008,
"privateBytes": 11231232,
"peakWorkingSetBytes": 32555008,
"cpuMs": 93.75
},
"summary": {
"exitCode": 0,
"killed": false,
"hostCalls": 3,
"denials": 0,
"peakCommitBytes": 12050432,
"log": [
"[info] handler: zam\u00F3wienie 5",
"[info] subskrybent: zam\u00F3wienie 5",
"[info] handler: zam\u00F3wienie 1"
]
}
}
],
"brokerAfterClose": {
"memory": {
"managedBytes": 590448,
"allocatedBytes": 1552376,
"workingSetBytes": 39829504,
"privateBytes": 14413824,
"peakWorkingSetBytes": 39829504,
"cpuMs": 171.875
}
},
"audit": {
"entries": 12,
"denials": 0,
"grantsIssued": 1,
"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-A02-AsyncStreamsEventsOdczytaj 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:36Z). Ś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-KSA2ASYN",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."name": "AsyncStreamsEvents",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."logs.own.write"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.],Zamknięcie struktury otwartej we wcześniejszych liniach."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.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."file": "<project>\\Script\\Main.krs",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."line": 6,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."column": 26,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."endLine": 6,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."endColumn": 37,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."severity": "warning",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."code": "KCS-KRS-1031",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."message": "Stream\u003CInt64\u003E jest konstrukcj\u0105 eksperymentaln\u0105 (D-KCS-13): pe\u0142ny transport strumieni nie zosta\u0142 zatwierdzony i Stream\u003CT\u003E nie nale\u017Cy do kontraktu Stable 1.0"Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."file": "<project>\\Script\\Main.krs",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."line": 33,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."column": 18,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."endLine": 33,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."endColumn": 29,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."severity": "warning",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."code": "KCS-KRS-1031",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."message": "Stream\u003CInt64\u003E jest konstrukcj\u0105 eksperymentaln\u0105 (D-KCS-13): pe\u0142ny transport strumieni nie zosta\u0142 zatwierdzony i Stream\u003CT\u003E nie nale\u017Cy do kontraktu Stable 1.0"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.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": 44944,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."startupMs": 40.6881,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."pluginHostSha256": "93405d128c95234d913efcd6e28fe54073caa0375135a2184290f958e7f7cfe5",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allowProvisionalRisk": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."memoryIdle": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."managedBytes": 1193376,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allocatedBytes": 1190736,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 32518144,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 10072064,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 32518144,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": 1555520,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allocatedBytes": 1552376,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 38899712,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 13828096,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 38903808,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": 146.4427,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."subject": "LOCAL-KPL-KSA2ASYN",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."instance": "01a19725-bfab-77e8-ae10-47142d2d69c3",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."pid": 22112,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": "zadania 50; strumie\u0144 30; limit przekroczony",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."brokerMs": 69.9046,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."vmMs": 66.0906,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."instructions": 296,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."hostCalls": 3,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."pluginReportedMemory": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."managedBytes": 793032,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allocatedBytes": 790824,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 32555008,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 11231232,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 32555008,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."cpuMs": 78.125Pole 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.5243,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."vmMs": 0.001,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": 798616,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allocatedBytes": 796384,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 32563200,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 11231232,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 32563200,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."cpuMs": 78.125Pole 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": 11231232,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": 3,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."denials": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakCommitBytes": 12050432,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."log": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."[info] handler: zam\u00F3wienie 5",Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."[info] subskrybent: zam\u00F3wienie 5",Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."[info] handler: zam\u00F3wienie 1"Odczytaj 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.}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": 590448,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."allocatedBytes": 1552376,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."workingSetBytes": 39829504,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."privateBytes": 14413824,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."peakWorkingSetBytes": 39829504,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": 12,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."denials": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."grantsIssued": 1,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
{
"format": "kretos-web-playground-diagnostics/1",
"exampleId": "KRETS-A02-AsyncStreamsEvents",
"sdk": "1.0.0-rc.3+kret.local.3",
"origin": "PRECOMPUTED",
"diagnostics": [
{
"id": "diag.KRETS-A02-AsyncStreamsEvents.1.1",
"exampleId": "KRETS-A02-AsyncStreamsEvents",
"step": 1,
"stepName": "check",
"command": "kret check . --json",
"exitCode": 0,
"file": "Script/Main.krs",
"line": 6,
"column": 26,
"endLine": 6,
"endColumn": 37,
"severity": "warning",
"code": "KCS-KRS-1031",
"message": "Stream<Int64> jest konstrukcją eksperymentalną (D-KCS-13): pełny transport strumieni nie został zatwierdzony i Stream<T> nie należy do kontraktu Stable 1.0",
"origin": "PRECOMPUTED (kret check, SDK 1.0.0-rc.3+kret.local.3)"
},
{
"id": "diag.KRETS-A02-AsyncStreamsEvents.1.2",
"exampleId": "KRETS-A02-AsyncStreamsEvents",
"step": 1,
"stepName": "check",
"command": "kret check . --json",
"exitCode": 0,
"file": "Script/Main.krs",
"line": 33,
"column": 18,
"endLine": 33,
"endColumn": 29,
"severity": "warning",
"code": "KCS-KRS-1031",
"message": "Stream<Int64> jest konstrukcją eksperymentalną (D-KCS-13): pełny transport strumieni nie został zatwierdzony i Stream<T> nie należy do kontraktu Stable 1.0",
"origin": "PRECOMPUTED (kret check, SDK 1.0.0-rc.3+kret.local.3)"
}
]
}
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."format": "kretos-web-playground-diagnostics/1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."exampleId": "KRETS-A02-AsyncStreamsEvents",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."sdk": "1.0.0-rc.3+kret.local.3",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."origin": "PRECOMPUTED",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."diagnostics": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."id": "diag.KRETS-A02-AsyncStreamsEvents.1.1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."exampleId": "KRETS-A02-AsyncStreamsEvents",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."step": 1,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."stepName": "check",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."command": "kret check . --json",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."exitCode": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."file": "Script/Main.krs",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."line": 6,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."column": 26,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."endLine": 6,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."endColumn": 37,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."severity": "warning",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."code": "KCS-KRS-1031",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."message": "Stream<Int64> jest konstrukcją eksperymentalną (D-KCS-13): pełny transport strumieni nie został zatwierdzony i Stream<T> nie należy do kontraktu Stable 1.0",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."origin": "PRECOMPUTED (kret check, SDK 1.0.0-rc.3+kret.local.3)"Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."id": "diag.KRETS-A02-AsyncStreamsEvents.1.2",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."exampleId": "KRETS-A02-AsyncStreamsEvents",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."step": 1,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."stepName": "check",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."command": "kret check . --json",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."exitCode": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."file": "Script/Main.krs",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."line": 33,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."column": 18,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."endLine": 33,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."endColumn": 29,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."severity": "warning",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."code": "KCS-KRS-1031",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."message": "Stream<Int64> jest konstrukcją eksperymentalną (D-KCS-13): pełny transport strumieni nie został zatwierdzony i Stream<T> nie należy do kontraktu Stable 1.0",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."origin": "PRECOMPUTED (kret check, SDK 1.0.0-rc.3+kret.local.3)"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.
Pochodzenie i integralność
KRET_LANGUAGE_KRETS.zip:KretS/Examples/ADVANCED_AsyncStreamsEvents/example.json
02_PLAYGROUND/EXAMPLES/KRETS-A02-AsyncStreamsEvents.json
SHA-256 40396680F4366723FBAEA03087745B963123FDCB1363F424DB2F435787A7ABAAMateriał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-A02-AsyncStreamsEvents — Zadania, strumienie i zdarzenia [2.0]
KRETS-A02-AsyncStreamsEvents — Zadania, strumienie i zdarzenia [2.0]
🇬🇧 English version below.
| Pole | Wartość |
|---|---|
| Technologia | KretS |
| Poziom | ADVANCED |
| 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
async fn i await (zadania współbieżne, nie równoległe), Stream<Int> z buforem i for await, timeout obsłużony w try/catch, deklaracja event, handler on, emit oraz subscribe … with.
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
„zadania 50; strumień 30; limit przekroczony”; w dzienniku dwa wpisy handlera i jeden wpis subskrybenta (po unsubscribe subskrybent nie dostaje drugiego zdarzenia).
Najczęstszy błąd
Oczekiwanie równoległości: wszystkie zadania jednej maszyny działają na jednym wątku. Maszyna wykrywa zakleszczenie (wszystkie zadania czekają) i zgłasza błąd.
Zaloguj się na konto użytkownika, aby zapisywać postęp i zakładki. Konta obsługi mogą czytać bez zapisu postępu. Logowanie →