Przejdź do treści

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 może przejść bez diagnostyk, bo nazwa konstruktora nie jest walidowana. 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 z queue przeszły bez diagnostyk. 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.