Kanonische Bencode-Ausgabe
Kodiere Bytes, begrenzte Ganzzahlen, Listen und Wörterbücher mit Byte-Schlüsseln als sortiertes kanonisches Bencode mit höchstens 65536 Ausgabebytes.
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
- Teste leere Container und Verschachtelung, lehne Zyklen, Boolesche Werte, Zahlen außerhalb ±10^18, mehr als 64 Einträge je Container, Tiefe über 16 oder über 2048 besuchte Werte ab.
- Vor dem Anwenden prüfen
- Vergleichen Sie das tatsächliche Verhalten mit dem erwarteten Ergebnis. Klären Sie fehlgeschlagene Prüfungen vor weiteren Änderungen.
- Modelle
- Richten Sie einen OpenAI-kompatiblen oder Anthropic-Endpunkt mit Basis-URL und gegebenenfalls API-Schlüssel ein. Testen Sie die Verbindung. Ein lokaler Modellserver muss laufen; entfernte Werkzeuge können Daten separat übertragen.
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)
Serialisierungsänderungen kompatibel und begrenzt halten
Binärausgaben können ihre Bedeutung ändern, ohne in einem gewöhnlichen Text-Diff anders auszusehen. Bencora ist eine KI-Programmierumgebung für Windows, um Serialisierungscode mit Blick auf dieses Risiko zu prüfen. Öffnen Sie Ihr Projekt und lassen Sie das verbundene Modell zulässige Werte, Ausgabevertrag und verbrauchenden Code untersuchen, bevor es einen Patch vorschlägt.
Eine konkrete Aufgabe könnte kanonische Bencode-Ausgabe für einen Metadatenschreiber prüfen. Lassen Sie den Assistenten die Reihenfolge von Byte-Schlüsseln, verschachtelte Container und die Zurückweisung nicht unterstützter Typen untersuchen. Geben Sie bekannte Ausgabetestfälle vor und beschreiben Sie die Grenzen Ihrer Anwendung. Konzentrieren Sie den Vorschlag auf diesen Schreiber und seine Aufrufer, statt eine Serialisiereränderung für harmlos zu halten, weil sie gültig aussehende Bytes erzeugt.
Prüfen Sie Ressourcengrenzen neben gewöhnlichen Hin- und Rückumwandlungen. Führen Sie eigene Tests für maximale Tiefe, übergroße Ausgabe und zyklische Container aus und vergleichen Sie exakte Bytes repräsentativer Wörterbücher. Untersuchen Sie Aufräumpfade nach Zurückweisungen, damit ein fehlgeschlagener Versuch spätere Arbeit nicht beschädigt. Kompatibilität braucht Nachweise von den Verbrauchern des Projekts ebenso wie erfolgreich kodierende Beispiele.
Bencora unterstützt Verbindungen zu OpenAI-kompatiblen oder Anthropic-Endpunkten. Ein KI-Modell ohne Zensur lässt sich wählen, wenn Ihr konfigurierter Dienst eines anbietet; Werkzeuge, Einschränkungen und Kontext hängen von dieser Konfiguration ab. Nutzen Sie das Gespräch zur Erklärung der Änderung; Ihre Testfälle belegen, ob der Ausgabevertrag intakt bleibt.
Einen Binärschreiber sicher prüfen
Warum exakte Bytes statt nur dekodierter Werte vergleichen?
Gleichwertige dekodierte Werte können Unterschiede in Reihenfolge oder Darstellung verbergen, die für ein kanonisches Format relevant sind. Bewahren Sie bekannte Byte-Testfälle für diese Anforderungen auf und prüfen Sie sie zusammen mit den bereits im Projekt verwendeten Hin- und Rückumwandlungstests.
Welcher Kontext ist für die Wörterbuchreihenfolge wichtig?
Zeigen Sie die tatsächlichen Schlüsseltypen und die Verbraucher, die auf die kodierte Ausgabe angewiesen sind. Lassen Sie den Assistenten Byte-Reihenfolge von sprachspezifischer Textsortierung unterscheiden. Eine bequeme Zeichenfolgenumwandlung kann einen auf Rohbytes definierten Vertrag verändern.
Sollten Ausgabegrößenlimits erst nach der Kodierung geprüft werden?
Prüfen Sie die Ressourcenstrategie Ihrer Anwendung. Eine abschließende Größenprüfung erfolgt möglicherweise erst nach erheblicher Arbeit oder Speicherzuweisung. Fragen Sie, wo der Vorschlag Grenzen durchsetzt, und testen Sie Zurückweisungspfade einschließlich verschachtelter Werte, die die zulässige Ausgabe überschreiten.
Warum einen zyklischen Container als Testfall aufnehmen?
Er prüft, wie der Schreiber eine Eingabe behandelt, die sich nicht als gewöhnlicher endlicher Baum entfalten lässt. Prüfen Sie ausdrückliche Zurückweisung und Aufräumen. Erfolgreiche Kodierungsbeispiele eines Modells belegen nicht, dass fehlerhafte Containerstrukturen korrekt terminieren.
Bencora · Aktualisiert 2026-10-25