BBencora
AI-werkruimte voor code

Canonieke bencode-uitvoer

Codeer bytes, begrensde gehele getallen, lijsten en kaarten met bytesleutels als gesorteerde canonieke bencode van maximaal 65536 bytes.

● ● ●Bencora●
Werkprocessen · Canonieke bencode-uitvoer ×
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)
✳Canonieke bencode-uitvoer
✓ WijzigingenControleer vóór het toepassen ↗
Illustratie van de werkruimte
Project
Test lege containers en nesting, en weiger cycli, booleans, getallen buiten ±10^18, meer dan 64 items per container, diepte boven 16 of meer dan 2048 bezochte waarden.
Controleer vóór het toepassen
Vergelijk het werkelijke gedrag met het verwachte resultaat. Onderzoek een mislukte controle voordat je verdergaat met wijzigingen.
Modellen
Stel een OpenAI-compatibel of Anthropic-endpoint in met de basis-URL en zo nodig een API-sleutel. Test de verbinding. Een lokale modelserver moet actief zijn; externe hulpmiddelen kunnen apart gegevens versturen.
Werkprocessen

Canonieke bencode-uitvoer

Werkprocessen ↗
Werkprocessen
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)
AI-werkruimte voor code

Houd serialisatiewijzigingen compatibel en begrensd

Binaire uitvoer kan van betekenis veranderen zonder er in een gewone tekstdiff anders uit te zien. Bencora is een AI-programmeeromgeving voor Windows om serialisatiecode met dat risico in gedachten te beoordelen. Open je project en vraag het verbonden model geaccepteerde waarden, het uitvoercontract en de gebruikende code te bekijken voordat het een patch voorstelt.

Een concrete taak kan canonieke bencode-uitvoer voor een metadataschrijver beoordelen. Vraag de assistent de volgorde van bytesleutels, geneste containers en weigering van niet-ondersteunde typen te onderzoeken. Geef bekende uitvoertestgevallen en beschrijf de limieten die je toepassing nodig heeft. Richt het voorstel op die schrijver en zijn aanroepers in plaats van aan te nemen dat een serialisatiewijziging onschadelijk is omdat de bytes geldig lijken.

Controleer middelengrenzen naast gewone heen-en-terugtests. Voer eigen tests uit voor maximale diepte, te grote uitvoer en cyclische containers en vergelijk exacte bytes voor representatieve dictionaries. Inspecteer opruimpaden na weigering, zodat een mislukte poging later werk niet beschadigt. Compatibiliteit vereist bewijs uit de gebruikende projectcode, naast voorbeelden die succesvol worden gecodeerd.

Bencora ondersteunt verbindingen met OpenAI-compatibele of Anthropic-endpoints. Een AI-model zonder censuur is te selecteren waar je ingestelde dienst het aanbiedt; tools, beperkingen en context worden door die configuratie bepaald. Gebruik het gesprek om de wijziging uit te leggen; je testgevallen stellen vast of het uitvoercontract intact blijft.

Een binaire schrijver zorgvuldig beoordelen

Waarom exacte bytes vergelijken en niet alleen gedecodeerde waarden?

Gelijkwaardige gedecodeerde waarden kunnen verschillen in volgorde of representatie verbergen die voor een canoniek formaat belangrijk zijn. Bewaar bekende bytetestgevallen voor die eisen en bekijk ze naast bestaande heen-en-terugcontroles van je project.

Welke context is belangrijk voor dictionaryvolgorde?

Toon de werkelijke sleuteltypen en de gebruikende code die op de gecodeerde uitvoer vertrouwt. Vraag de assistent bytevolgorde van taalspecifieke tekstvolgorde te onderscheiden. Een handige tekenreeksconversie kan een contract veranderen dat over ruwe bytes is gedefinieerd.

Moeten uitvoerlimieten pas na codering worden gecontroleerd?

Beoordeel het middelenbeleid dat je toepassing nodig heeft. Een eindcontrole op grootte kan pas na veel werk of geheugentoewijzing plaatsvinden. Vraag waar het voorstel grenzen afdwingt en test weigeringspaden, inclusief geneste waarden die de toegestane uitvoer overschrijden.

Waarom een cyclische container opnemen?

Die controleert hoe de schrijver omgaat met invoer die niet als gewone eindige boom kan worden uitgewerkt. Verifieer expliciete weigering en opruiming. Geslaagde codeervoorbeelden van een model bewijzen niet dat de verwerking van ongeldige containerstructuren correct eindigt.

Download voor Windows ↗

Bencora · Bijgewerkt 2026-10-25