Przejdź do treści

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&lt;T&gt;<br/>jeden przepływ z kontrolą tempa"]
    P --> Q["queue&lt;T&gt;<br/>wiadomości do obsłużenia"]
    P --> S["stream&lt;T&gt;<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&lt;Reading&gt;"| PROCESS["Process<br/>@server"]
    PROCESS -->|"stream&lt;Alert&gt;"| 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.

Dalsze przewodniki