Kanoniczny wynik bencode
Zakoduj bajty, ograniczone liczby całkowite, listy i słowniki z kluczami bajtowymi w kanoniczny posortowany bencode do 65536 bajtów wyjścia.
def bencode(value):
active, visited, used, parts = set(), 0, 0, []
def emit(*chunks):
nonlocal used
size = sum(len(chunk) for chunk in chunks)
if size > 65536 - used:
raise ValueError("bencode.output")
used += size
parts.extend(chunks)
def encode(item, depth):
nonlocal visited
visited += 1
if depth > 16 or visited > 2048:
raise ValueError("bencode.bounds")
if type(item) is int:
if not -10**18 <= item <= 10**18:
raise ValueError("bencode.integer")
emit(b"i", str(item).encode("ascii"), b"e")
elif type(item) is bytes:
if len(item) > 65536:
raise ValueError("bencode.bytes")
emit(str(len(item)).encode("ascii"), b":", item)
elif type(item) in (list, dict):
if id(item) in active or len(item) > 64:
raise ValueError("bencode.container")
active.add(id(item))
try:
emit(b"l" if type(item) is list else b"d")
if type(item) is list:
for child in item:
encode(child, depth+1)
else:
if any(type(k) is not bytes for k in item):
raise ValueError("bencode.key")
for key in sorted(item):
encode(key, depth+1)
encode(item[key], depth+1)
emit(b"e")
finally:
active.remove(id(item))
else:
raise ValueError("bencode.type")
encode(value, 0)
return b"".join(parts)
- Projekt
- Sprawdź puste kontenery i zagnieżdżenie, odrzucając cykle, wartości logiczne, liczby poza ±10^18, ponad 64 wpisy w kontenerze, głębokość powyżej 16 lub ponad 2048 odwiedzonych wartości.
- Sprawdź przed zastosowaniem
- Porównaj rzeczywiste zachowanie z oczekiwanym wynikiem. Jeśli sprawdzenie się nie powiedzie, wyjaśnij przyczynę przed kolejnymi zmianami.
- Modele
- Dodaj endpoint zgodny z OpenAI lub Anthropic, podając bazowy URL i klucz API, jeśli jest wymagany. Sprawdź połączenie. Lokalny serwer modelu musi działać; zdalne narzędzia mogą przesyłać dane oddzielnie.
def bencode(value):
active, visited, used, parts = set(), 0, 0, []
def emit(*chunks):
nonlocal used
size = sum(len(chunk) for chunk in chunks)
if size > 65536 - used:
raise ValueError("bencode.output")
used += size
parts.extend(chunks)
def encode(item, depth):
nonlocal visited
visited += 1
if depth > 16 or visited > 2048:
raise ValueError("bencode.bounds")
if type(item) is int:
if not -10**18 <= item <= 10**18:
raise ValueError("bencode.integer")
emit(b"i", str(item).encode("ascii"), b"e")
elif type(item) is bytes:
if len(item) > 65536:
raise ValueError("bencode.bytes")
emit(str(len(item)).encode("ascii"), b":", item)
elif type(item) in (list, dict):
if id(item) in active or len(item) > 64:
raise ValueError("bencode.container")
active.add(id(item))
try:
emit(b"l" if type(item) is list else b"d")
if type(item) is list:
for child in item:
encode(child, depth+1)
else:
if any(type(k) is not bytes for k in item):
raise ValueError("bencode.key")
for key in sorted(item):
encode(key, depth+1)
encode(item[key], depth+1)
emit(b"e")
finally:
active.remove(id(item))
else:
raise ValueError("bencode.type")
encode(value, 0)
return b"".join(parts)
Zachowaj zgodność i ograniczenia zmian serializacji
Wyjście binarne może zmienić znaczenie bez widocznej różnicy w zwykłym porównaniu tekstu. Bencora to środowisko programowania z AI dla Windows do przeglądu kodu serializacji z uwzględnieniem tego ryzyka. Otwórz projekt i poproś podłączony model o sprawdzenie przyjmowanych wartości, kontraktu wyjścia i kodu odbiorcy przed zasugerowaniem poprawki.
Konkretne zadanie może dotyczyć przeglądu kanonicznego wyjścia bencode dla modułu zapisu metadanych. Poproś asystenta o zbadanie porządku kluczy bajtowych, zagnieżdżonych kontenerów i odrzucania nieobsługiwanych typów. Podaj znane dane testowe wyjścia i opisz limity potrzebne aplikacji. Skup propozycję na tym module zapisu i jego wywołaniach, zamiast zakładać nieszkodliwość zmiany serializatora tylko dlatego, że tworzy bajty wyglądające poprawnie.
Sprawdź granice zasobów obok zwykłych konwersji tam i z powrotem. Uruchom własne testy maksymalnej głębokości, zbyt dużego wyjścia i cyklicznych kontenerów oraz porównaj dokładne bajty reprezentatywnych słowników. Sprawdź ścieżki sprzątania po odrzuceniu, aby nieudana próba nie uszkodziła dalszej pracy. Zgodność wymaga dowodów od odbiorców w projekcie oraz przykładów, które kodują się pomyślnie.
Bencora obsługuje połączenia z punktami końcowymi zgodnymi z OpenAI lub Anthropic. Model AI bez cenzury można wybrać, gdy oferuje go skonfigurowana usługa; narzędzia, ograniczenia i kontekst zależą od tej konfiguracji. Wykorzystaj rozmowę do wyjaśnienia zmiany, a dane testowe do ustalenia, czy kontrakt wyjścia pozostaje nienaruszony.
Bezpieczny przegląd modułu zapisu binarnego
Dlaczego porównywać dokładne bajty, a nie same zdekodowane wartości?
Równoważne zdekodowane wartości mogą ukrywać różnice porządku lub reprezentacji istotne dla formatu kanonicznego. Zachowaj znane zestawy bajtów testowych dla tych wymagań i sprawdzaj je obok testów konwersji tam i z powrotem używanych już w projekcie.
Jaki kontekst ma znaczenie dla kolejności w słowniku?
Pokaż rzeczywiste typy kluczy i odbiorców zależnych od zakodowanego wyjścia. Poproś asystenta o rozróżnienie porządku bajtów od porządku tekstu właściwego językowi programowania. Wygodna konwersja na tekst może zmienić kontrakt zdefiniowany na surowych bajtach.
Czy limity rozmiaru wyjścia sprawdzać dopiero po kodowaniu?
Przejrzyj zasady zasobów potrzebne aplikacji. Końcowa kontrola rozmiaru może następować po znacznej pracy lub alokacji. Zapytaj, gdzie propozycja egzekwuje granice, i testuj ścieżki odrzucenia, w tym zagnieżdżone wartości przekraczające dozwolone wyjście.
Dlaczego uwzględnić cykliczny kontener?
Sprawdza obsługę wejścia, którego nie można rozwinąć jako zwykłego skończonego drzewa. Zweryfikuj jawne odrzucenie i sprzątanie. Przykłady udanego kodowania podane przez model nie dowodzą poprawnego zakończenia dla nieprawidłowych struktur kontenerów.
Bencora · Zaktualizowano 2026-10-25