Ograniczenia i potwierdzone luki
Ten rozdział zbiera wyniki przeglądu referencji 0.2 Experimental. Nie ustanawia nowej semantyki, nie jest roadmapą i nie nadaje priorytetów pracom. Szczegółowy przykład, zakres próby i źródła znajdują się w podlinkowanym rozdziale.
Jak czytać klasyfikację
| Kategoria | Co oznacza |
|---|---|
| Kontrakt | W przejrzanych źródłach nie ma kompletnej, jednoznacznej reguły dla wskazanego zakresu lub źródła są rozbieżne. Nie zastępujemy jej zachowaniem generatora. |
| Implementacja | Kod lub próba pokazują brak kontroli, niepełne przetwarzanie albo rozbieżność między etapami. Nie oznacza to, że przyjęty zapis jest semantycznie poprawny. |
| Dowody | Dostępny test potwierdza węższy przypadek niż oczekiwana gwarancja. Brak szerszego dowodu nie jest sam w sobie dowodem braku implementacji. |
| Poza podzbiorem | Funkcja nie należy do opisanego zakresu, np. join lub transakcja wielu operacji w składni storage. Nie jest automatycznie błędem implementacji. |
Jeden temat może mieć kilka kategorii, ale dotyczą one różnych pytań.
Opis „brak pełnego kontraktu” oznacza granicę tego przeglądu, nie twierdzenie,
że w całym repozytorium nie istnieje żaden dokument dotyczący tematu.
Kod diagnostyki nie określa jej poziomu: przykładowo E0021 jest obecnie
ostrzeżeniem w opisanych próbach. Liczy się pole poziomu diagnostyki.
Braki i rozbieżności kontraktu
| Obszar | Co wymaga rozstrzygnięcia | Rozdział i podstawa |
|---|---|---|
| Liczby | Przenośne zakresy, przepełnienia, zaokrąglenia i konwersje; reprezentacja typu nie wynika z tokenu ani typu hosta. | Typy, leksyka; gramatyka, BuildLiteral i porównywanie typów. |
| Tekst | Pełne znaczenie escape'ów oraz dekodowania wszystkich postaci tekstu, spójne między etapami. | Leksyka; tokeny tekstowe i AstBuilder.BuildLiteral. |
| Unie i kolekcje | Tworzenie i zawężanie unii, podtypowanie, relacja tablicy do List, ograniczenia kluczy Map i operacje na typach generycznych. | Typy; TypeEquals i ValidateTypeRef nie są pełnym kontraktem tych operacji. |
| Efekty i sterowanie | Kompletny model czystości fn, kolejności efektów, krótkiego spięcia i wyczerpującego match, niezależny od backendu. | Deklaracje, wyrażenia; gramatyka i analizator. |
| Instancje zadań | Tożsamość, tworzenie instancji przez wywołania/pipeline, modele mieszane, haki, parametry domyślne, start i zakończenie wejść. | Zadania; ClassifyLifecycle i ograniczony kontrakt lifecycle. |
| Stan i czas | Izolacja replik, reset, współbieżność, migracja stanu, zachowanie po awarii; okresy niedodatnie, opóźnione takty i anulowanie poza ograniczonym scenariuszem. | Stan; TaskLifecycleRuntimeContract i generatory. |
| Komunikacja | Puste/zamknięte/anulowane źródło, pojemności i wielu producentów, zakres ACK/NACK, cykl subskrypcji oraz zachowanie gwarancji po zerwaniu transportu. | Komunikacja; katalog kontraktów i scenariusze zgodności określają węższe własności. |
| Pipeline | Deklarowanie nazwanych wyjść, domyślne wejście przy wielu parametrach, duplikaty krawędzi, instancje, fan-out/fan-in, wykonanie parallel, use bez celu i inicjalizacja cyklu. | Pipeline; graf logiczny nie ustanawia tych reguł wykonania. |
| Rozmieszczenie | Pełny schemat deployment, wiele platform/deploymentów, znaczenie replik i powiązanie z rzeczywistymi zasobami. | Platformy; nieprzezroczyste ciało i tekstowy lowering. |
| Protokoły | Pełne schematy wiązań i adapterów, konflikty, błędy, TLS, autoryzacja, retry; ujednolicenie historycznej tabeli transportów z implementacją. | Protokoły; spec/08-protocols.md i DistributedTopologyLowerer różnią się. |
| Moduły | Pełny zakres kwalifikowania nazw i izolacja nazw po złożeniu modułów; zgodność wszystkich odmian aliasów z wykonaniem. | Moduły; binder, composer i ograniczone przepisywanie aliasów. |
| Extern | Reprezentacja i własność wartości, życie uchwytów, zwalnianie zasobów, błędy, anulowanie i współbieżność na granicy natywnej. | Extern; zgodność sygnatury nie rozstrzyga ABI ani efektów. |
| Metadane | Schematy wnętrz, wiele narrative oraz wykonawcze reguły supervisor, circuit_breaker i quirks. | Metadane; tekst, polityka trace i relacje analityczne mają różne role. |
| Storage | Jawna obsługa błędów i nieznanego skutku w tasku, idempotencja i ponawianie; gwarancje trwałości/izolacji nie wynikają z samej deklaracji. | Storage; kontrakt operacji i kontrakt providera są odrębne. |
Potwierdzone braki implementacji i walidacji
Poniższe obserwacje pochodzą z kodu oraz prób opisanych w rozdziałach. „Przyjęte” oznacza wynik lokalnego check, nie zatwierdzenie znaczenia programu.
| Obszar | Potwierdzona obserwacja | Kategoria szczegółowa i źródło |
|---|---|---|
| Literały liczbowe | Gramatyka dopuszcza podkreślenia, ale konwersja ich nie normalizuje; 0xF_F kończy się P0002, a 1__000 nie jest wprost parsowane przez long.TryParse. | Niespójność etapów; leksyka, AstBuilder.BuildLiteral. |
| Teksty | Przycinanie separatorów nie jest pełnym dekodowaniem escape'ów, apostrofów i podwojonych cudzysłowów raw. | Niepełne przetwarzanie wartości; leksyka. |
| Nazwy typów | Missing daje tylko warning E0021; Unknown |
Luka rozpoznawania; typy, ValidateTypeRef. |
| Struktury | Brakujące/obce pola, zły typ wartości, duplikaty pól i nieznany typ pola przeszły opisane próby. | Luka walidacji; deklaracje, ValidateStructLiteral i kontrola deklaracji. |
| Enum | Nieznany i powtórzony wariant przeszły próby; przyjęcie enum generycznego nie potwierdza podstawiania typów. | Luka walidacji i ograniczenie dowodu; deklaracje. |
| Funkcje | Niepoprawny typ return, brak return i log w fn przeszły próby. | Niepełna kontrola wyniku i efektów; deklaracje, ValidateStmt. |
| Kolizje deklaracji | Dwie funkcje Value w projekcie kończą się wyjątkiem ProjectSymbolBinder zamiast kontrolowanej diagnostyki. | Błąd narzędzia; deklaracje. Nie liczymy go jako poprawnego testu negatywnego. |
| Wyrażenia | not 1, mieszane dodawanie, if 1, zapis do const, obce pole i błędny typ argumentu zwykłej fn przeszły próby. | Luka walidacji operandów, celów i wywołań; wyrażenia. |
| Listy | Typ listy jest wnioskowany z pierwszego rozpoznanego elementu; mieszana lista przeszła jako List |
Luka kontroli elementów; wyrażenia, InferArrayLiteralType. |
| Inicjalizacja state | Zły typ inicjalizatora, samoodwołanie i powtórzona nazwa przeszły check. | Luka walidacji; stan, ValidateTaskBody. |
| Izolacja state | Cache Go i klucz TypeScript są oparte na nazwie zadania, bez ogólnego identyfikatora instancji. | Ograniczenie mechanizmu, nie dowód izolacji replik; stan. |
| Zapis state | Go ignoruje wynik WriteFile; odczyt JSON i kopia TypeScript nie zapewniają migracji ani walidacji schematu. | Ograniczenia zapisu/odczytu; stan. Nie oznacza to, że każdy zapis musi się nie udać. |
| Czas i haki | every 1, delay 1 i nieznany hak przeszły opisane próby. | Niepełna walidacja; stan, zadania. |
| Start embedded | Zadania wymagające parametrów pozostają bez gotowego doprowadzenia wejść na opisanej ścieżce startowej. | Ograniczenie generatora; zadania. |
| Stream | Go for odczytuje Latest bez pozycji niezależnej subskrypcji. | Niepełne powiązanie składni z kontraktem obserwacji; komunikacja. |
| Pipeline | Nieznane porty i połączenie chan |
Luka walidacji portów i typów; pipeline, PipelineGraph. |
| Deployment | Wpis zgodny z blokiem target, lecz sprzeczny z platformą task, przeszedł; nieznane pola/target są pomijane, replicas: 0 jest przyjmowane. | Niepełne rozpoznawanie i walidacja; platformy. |
| Wiązania protokołów | Błędna nazwa/typ parametru przeszły; HEAD z Missing nie daje błędu, gdy zapis nie został rozpoznany. | Niepełna walidacja; protokoły, wzorce loweringu. |
| REST / OpenAPI | Generator emituje uproszczony opis bez pełnych schematów, z ogólną odpowiedzią 200 mimo innych gałęzi handlera. | Ograniczony artefakt; protokoły. |
| Alias modułu | Wywołanie przez alias przechodzi check, ale kwalifikowany typ alias::Reading odrzuca parser; composer nie przepisuje ogólnie wszystkich odwołań. | Ograniczenie składni i składania; moduły. |
| Extern | Brak wiązania daje W0030; check nie potwierdza istnienia pliku, a nieznane klucze i powtórzenia mogą przejść. | Ograniczony zakres walidacji; extern. |
| Metadane | Nieznane trace i children Missing przechodzą; polityka trace jest przeszukiwaniem tekstu pierwszej narrative. | Ograniczona interpretacja i walidacja; metadane. |
Granice podzbioru nie są automatycznie błędami
Nie każda odrzucona konstrukcja jest luką implementacji. Przykładowo:
- Storage świadomie ogranicza typy przenośne; odrzuca u64, insert many, update klucza i single bez pełnego klucza. To egzekwowane reguły podzbioru.
- Joiny, agregacje, raw SQL i transakcje wielu operacji nie należą do opisanej składni storage. Nie dopisujemy ich na podstawie możliwości silnika bazy.
- E0047 dla ACK/NACK bez właściwego powiązania z queue jest kontrolą znaczenia; opisany NACK zmiennej for jest odrzucany. Nie wolno przypisywać takiemu źródłu zachowania niższej warstwy generatora, do której poprawna kompilacja nie dochodzi.
- Brak :ok w literal, brak wzorca x: Int w match i brak a.b w modulePath są ograniczeniami obecnej gramatyki, nie alternatywnymi pisowniami.
- Przyjęcie nazwy platformy lub protokołu nie ustanawia obsługi dowolnego wykonawcy.
Szczegółowe granice importów/aliasów mutacji storage i targetów innych niż server pozostają opisane w storage; nie rozszerzamy dowodu dla query na wszystkie odmiany mutation.
Granice dowodów wykonania
| Dostępny dowód | Czego nie potwierdza |
|---|---|
| Projektowy check i rejestr przykładów | Wykonania, kompletności kontroli semantycznej, poprawności każdego generatora. |
| Test tekstu wygenerowanego kodu lub manifestu | Kompilacji artefaktu natywnego, uruchomienia, połączenia sieciowego ani trwałego zapisu. |
| Lokalne wykonywalne testy chan/queue/stream w C++, Go i TypeScript | Zachowania po awarii sieci, trwałości nośnika ani całej składni źródłowej ACK/NACK. |
| Scenariusz stanu 12, 15, 19 i interwału 250 ms | Izolacji wielu instancji, restartu, trwałości; lista zdarzeń lifecycle jest wpisana w otoczce testu. |
| Test oczekiwania przed pierwszym taktem i wywołań zapisu | Pomiaru czasu rzeczywistego, anulowania ani odtworzenia po utracie zasilania. |
| Test generowania REST i OpenAPI | Faktycznej obsługi żądania HTTP i zgodności dowolnych typów z odpowiedzią. |
| Plan deployment lub descriptor mostu | Utworzenia procesów, replik, instalacji na hostach albo uruchomienia transportu. |
| Manifest extern lub plik scaffold | Dostarczenia poprawnej implementacji i zgodności ABI. |
| Wybór trace i relacje applies-to/supervised-by/protected-by | Dostarczenia wszystkich zdarzeń, restartów lub działania circuit breaker. |
| Plan storage i typowanie wywołania | Wykonania na każdej bazie, izolacji transakcji i trwałości. Repo ma osobne scenariusze providerów; nie zastępują ich te kontrole. |
Nie nazywamy braku szerszego testu potwierdzonym brakiem funkcji. Nie nazywamy nazwy testu w dokumencie wynikiem jego wykonania.
Zasada rozstrzygania źródeł
Składnię przytaczamy z jednego grammar/JunexisLang.g4. Znaczenie opieramy na
jawnych kontraktach i zakresie scenariuszy, a opis implementacji na kodzie
właściwego etapu oraz powtarzalnych próbach. Rozbieżność między nimi pozostaje
nazwana; nie wybieramy po cichu zachowania jednego backendu jako reguły języka.
W szczególności historyczna tabela transportów z spec/08-protocols.md,
ogólne określenia „zero loss” i trwałej kolejki w starszym opisie komunikacji
nie zastępują kontraktów i ograniczeń opisanych w referencji.
Każdy rozdział zawiera sekcję podstawy w repozytorium lub źródeł reguł i dowodów.
Rejestr przykładów jest generowany z spec/reference/examples.json;
raport lokalny .artifacts/language-reference-examples/verification.json
zapisuje wyniki, diagnostyki oraz skróty korpusu i użytego CLI.
Próby graniczne z przeglądów są zapisane osobno w .artifacts/*-reference-audit/.
Artefakty lokalne nie są stabilnym załącznikiem publikacji ani nową regułą języka.
Ten przegląd porządkuje dokumentację. Nie naprawia kompilatora, nie domyka wymienionych kontraktów i nie oznacza gotowości do publicznego wydania.