Podstawy języka
Zakres weryfikacji
Treść zachowana z obecnego źródła. Publikacja dokumentacji nie oznacza ponownego potwierdzenia wszystkich komend, przykładów i deklaracji możliwości.
Poziom: początkujący. To wprowadzenie do modelu; dokładny zapis znajduje się w referencji języka.
Junexis opisuje system przez dane, zadania, miejsca wykonania i przepływy.
Zadanie
task ReadTemperature() @embedded -> chan<Reading> {
// odczyt urządzenia i wysłanie wartości
}
task jest jednostką pracy. Adnotacja @embedded mówi, że zadanie należy do
części urządzeniowej. Typ po strzałce opisuje wyjście.
Miejsce wykonania
Junexis rozróżnia trzy podstawowe środowiska docelowe:
| Środowisko | Przeznaczenie | Główny generator |
|---|---|---|
@embedded |
mikrokontroler lub urządzenie brzegowe | C++ |
@server |
usługa i przetwarzanie backendowe | Go |
@report |
interfejs lub raport w przeglądarce | TypeScript |
Generatory rozwijają się nierównomiernie. Przed wyborem konstrukcji sprawdź macierz języka i wykonania.
flowchart LR
J["Program .jnx"] --> E["@embedded"]
J --> S["@server"]
J --> R["@report"]
E --> CPP["C++<br/>urządzenie"]
S --> GO["Go<br/>usługa"]
R --> TS["TypeScript<br/>interfejs"]
Dane
struct Reading {
celsius: Float
sensor: Text
}
Typy danych są wspólne dla całego projektu. Kompilator wykorzystuje je podczas sprawdzania granic pomiędzy środowiskami docelowymi.
Komunikacja
task Process(readings: chan<Reading>) @server -> stream<Alert> {
// przetwarzanie danych
}
chan<T>— ograniczony kanał FIFO z kontrolą tempa nadawcy,queue<T>— kolejka wiadomości z potwierdzaniem co najmniej raz,stream<T>— strumień obserwacji najnowszej wartości bez odtwarzania historii.
Te typy opisują różne zachowania komunikacji; nie są tylko aliasami kolekcji.
flowchart TB
P["Nadawca"] --> C["chan<T><br/>jeden przepływ z kontrolą tempa"]
P --> Q["queue<T><br/>wiadomości do obsłużenia"]
P --> S["stream<T><br/>obserwacja najnowszych wartości"]
C --> C1["Odbiorca"]
Q --> Q1["Jeden lub więcej konsumentów"]
S --> S1["Wielu obserwatorów"]
Potok wykonania
pipeline Monitoring {
use ReadTemperature -> Process
use Process -> Dashboard
}
Deklaracja pipeline pokazuje kierunek przepływu. Kompilator może dzięki temu sprawdzić
połączenia i zbudować model całego systemu.
flowchart LR
SENSOR["ReadTemperature<br/>@embedded"] -->|"chan<Reading>"| PROCESS["Process<br/>@server"]
PROCESS -->|"stream<Alert>"| DASH["Dashboard<br/>@report"]
Projekt
Manifest junexis.project.toml wskazuje wejście, środowiska docelowe i katalog wynikowy:
name = "monitoring"
entry = "src/main.jnx"
targets = ["embedded", "server", "report"]
outDir = "out"
Podstawową jednostką pracy jest projekt. Tryb pojedynczego pliku służy do krótkich eksperymentów.