C++, Rust e scambi di criptovalute decentralizzati: applicabilità ed efficienza

C++, Rust e scambi di criptovalute decentralizzati: applicabilità ed efficienza

C++, Rust e scambi di criptovalute decentralizzati: applicabilità ed efficienza

Introduzione

Gli argomenti linguistici diventano particolarmente fuorvianti nel settore delle criptovalute perché i sistemi stessi sono molto facili da descrivere in modo errato. La gente dice "costruisci un DEX" come se uno scambio decentralizzato fosse un eseguibile con un profilo di latenza, un modello di fiducia e un tipo di fallimento. In realtà un DEX serio è un organismo a strati. Può includere logica on-chain, interazioni tra validatori o nodi, consapevolezza della creazione di blocchi, monitoraggio di mempool, raccolta di dati di mercato, simulazione dello stato, prezzi, instradamento, controlli dei rischi, dashboard degli operatori e talvolta registro degli ordini o servizi adiacenti di corrispondenza che assomigliano sospettosamente a infrastrutture di scambio tradizionali che indossano il vocabolario blockchain.

Una volta riconosciuta questa realtà stratificata, la discussione tra C++ e Rust diventa più calma e molto più utile. La domanda giusta non è quale lingua meriti l’intera architettura come punto d’onore. La domanda giusta è quali livelli beneficiano della sicurezza e dell'adattamento all'ecosistema di Rust, quali livelli premiano ancora il controllo delle prestazioni di basso livello di C++ e dove il design ibrido smette di essere un compromesso e inizia ad essere semplice buon senso.

Questo quadro è importante perché i sistemi di scambio decentralizzati vivono sotto pressioni contrastanti. Alcuni livelli vengono puniti più duramente per errori di correttezza, problemi di verificabilità e transizioni di stato non sicure. Altri livelli vengono penalizzati per latenza, velocità effettiva e incapacità di valutare le opportunità con sufficiente rapidità. Altri ancora sono servizi operativi in ​​cui il costo reale è la manutenzione a lungo termine e la velocità del team. Una lingua può essere eccellente per uno di questi oneri e semplicemente adeguata per un altro. L’architettura matura inizia quando lo ammettiamo apertamente.

Un DEX è uno stack, non una dichiarazione di identità

La prima e più importante correzione è concettuale. Un DEX non è una cosa. Un protocollo AMM orientato all'EVM, un ecosistema di programmi nativi di Solana, uno scambio perpetuo di catene di app e un sistema di ricerca che reagisce alle condizioni di mercato meritano tutti istinti ingegneristici diversi. La logica AMM on-chain vive all'interno di una serie di vincoli. I simulatori fuori catena e i valutatori di percorso vivono all'interno di un altro. Componenti simili a ordini o infrastrutture di ricerca ad alta frequenza possono sembrare, dal punto di vista del sistema, molto più vicini al classico software di scambio che al normale sviluppo di applicazioni web.

Questo è il motivo per cui i dibattiti sulla lingua si perdono così rapidamente. Un ingegnere indica Solana e osserva correttamente che Rust è il percorso naturale per lo sviluppo del programma lì. Un altro punta a un motore di routing o simulazione sensibile alla latenza e osserva correttamente che C++ è ancora una scelta brutalmente forte. Entrambi hanno ragione nel contesto. Il problema inizia quando ogni osservazione viene gonfiata in una teoria totale dell’intero stack.

Un utile reset mentale è chiedersi, per ciascun sottosistema, per quale tipo di dolore viene punito. Se un componente è sbagliato, il problema è soprattutto la mancata correttezza pubblica? È un costo operativo privato? È l'incapacità di rispondere a uno stato in rapido cambiamento prima che l'opportunità si chiuda? Si tratta di oneri di audit, di assunzioni o di infrastrutture? Livelli diversi rispondono a queste domande in modo diverso, motivo per cui i sistemi DEX maturi spesso finiscono per mescolarsi linguisticamente anche quando i dibattiti pubblici bramano la purezza.

Dove Rust prende giustamente l'iniziativa

Rust guadagna il suo posto in modo più naturale laddove le transizioni statali, la disciplina della sicurezza e l'adattamento dell'ecosistema dominano l'architettura. Negli ambienti Rust-first blockchain come Solana, questo non è un vantaggio marginale. È il centro di gravità. Il linguaggio è circondato da strutture, esempi, abitudini di sicurezza e strumenti che aiutano i team di protocollo a muoversi all’interno dell’ecosistema piuttosto che contro di esso. Per i programmi on-chain, l’adattamento conta più del confronto linguistico astratto. Il linguaggio migliore sulla carta è spesso il linguaggio peggiore se ogni percorso operativo serio attorno ad esso prevede qualcos’altro.

Rust è attraente anche nei servizi greenfield che circondano un DEX quando la correttezza e la manutenibilità a lungo termine sono i principali nemici. I servizi del piano di controllo, i livelli di coordinamento e alcuni strumenti di interfacciamento con i protocolli possono davvero trarre vantaggio dalla disciplina che Rust incoraggia. Il compilatore rileva categorie di errori che altrimenti richiederebbero processo, vigilanza e cultura della revisione per essere controllati in C++. Questa non è un'affermazione romantica. È pratico. Le squadre con un forte talento Rust possono ridurre precocemente alcune classi di rischio e mantenere i confini del servizio più calmi nel tempo.

Un utile controesempio mantiene questo radicato. I team a volte deducono dalla forza di Rust nel lavoro nativo della catena che anche ogni sottosistema fuori catena circostante dovrebbe essere Rust per impostazione predefinita. Ma ciò avviene solo se i sistemi circostanti hanno lo stesso dolore dominante. Un simulatore di hot path o un motore di ricerca che valuta ripetutamente lo stato del mercato sotto una stretta pressione temporale rimane un sistema nativo sensibile alle prestazioni all'interno di un prodotto crittografico. La catena può essere a forma di Rust mentre il percorso di esecuzione circostante rimane molto a forma di C++.

Dove C++ guadagna ancora terreno

C++ diventa difficile da sostituire laddove un DEX inizia a comportarsi meno come una piattaforma applicativa e più come un'infrastruttura di scambio. L'inserimento di dati di mercato, l'ascolto di mempool, le pipeline di normalizzazione, la valutazione del percorso, la simulazione dello stato, la ricerca di arbitraggio, i motori di liquidazione e i servizi adiacenti al registro degli ordini condividono tutti una proprietà comune: eseguono lavoro ripetuto di basso livello sotto pressione e quel lavoro spesso si avvicina al layout della memoria, alla strategia di allocazione, all'efficienza del parser, al comportamento della coda o alla prevedibilità della CPU.

È qui che la lunga storia di C++ nei sistemi e nel trading continua ad avere importanza. Il linguaggio offre agli ingegneri il controllo diretto su strutture dati, modelli di threading, durata degli oggetti, allocatori personalizzati, layout vettoriali e strumenti prestazionali che sono stati testati proprio in questi tipi di ambienti. Beneficia inoltre di un ecosistema più vecchio e più denso di esempi di sistemi di rete ad alte prestazioni, simulatori, parser, gateway nativi e codice attento all'hardware. In un'era in cui agli assistenti IA viene chiesto di aiutare anche con questi problemi, quella densità aumenta il vantaggio.

Considera un ricercatore che ascolta i segnali del mercato, simula percorsi e decide se vale la pena perseguire un'opportunità. Il costo interessante è raramente una formula isolata. Il costo interessante è l'uso ripetuto e con stato di molte formule circondate da logica di acquisizione, decodifica, instradamento e decisione. Alcune copie evitabili, un lucchetto mal posizionato o una coda indisciplinata possono cambiare l’economia dell’intero percorso. C++ offre agli ingegneri un linguaggio profondamente familiare per porre domande esatte alla macchina. Nei sistemi che vivono e muoiono ripetendosi sotto la pressione del tempo, ciò conta ancora.

L’economia cambia la risposta linguistica

Uno dei motivi per cui questi dibattiti si surriscaldano è che gli ingegneri parlano come se la condizione di vittoria fosse l’eleganza. Nei sistemi DEX la condizione di vittoria è solitamente economica. La latenza è importante perché le opportunità perse hanno un costo. L’efficienza è importante perché la simulazione ripetuta su larga scala ha un costo. La sicurezza è importante perché le transizioni di stato errate hanno un costo. La semplicità operativa conta perché un sistema che spaventa costantemente i suoi operatori ha un costo. Una volta formulata la tesi in questi termini, la scelta della lingua smette di essere simbolica e diventa finanziaria.

Rust spesso si ripaga da solo laddove il costo futuro maggiore deriverebbe da errori di correttezza nella logica hard stateful o dal mantenimento di servizi complessi senza una disciplina strutturale sufficiente. C++ spesso si ripaga da solo laddove il costo futuro maggiore deriverebbe dall'inefficienza del percorso caldo, da un'eccessiva astrazione nei calcoli ripetuti o dalla difficoltà di integrazione con l'infrastruttura nativa ad alte prestazioni. Un team sensato si chiede quale costo prevarrà sulla vita del sottosistema e sceglie di conseguenza.

Questa prospettiva aiuta anche a risolvere una confusione comune: la velocità di regolamento e la velocità del percorso di esecuzione non sono la stessa cosa. Una blockchain può avere una serie di caratteristiche temporali a livello di protocollo mentre i sistemi off-chain che la circondano vivono in un mondo di latenza completamente diverso. La lentezza della risoluzione on-chain non rende irrilevante la valutazione veloce off-chain. Infatti, quando le opportunità vengono contestate, la velocità off-chain può diventare ancora più preziosa perché determina chi reagisce, chi valuta in modo accurato e chi invia per primo un’azione utile. Gli ingegneri che appiattiscono questi due domini temporali in un unico concetto chiamato velocità di solito finiscono per disperdere lo sforzo.

L’architettura ibrida è spesso la risposta degli adulti

Molte delle architetture DEX più serie diventano più facili da ragionare una volta che la progettazione ibrida diventa rispettabile. La logica on-chain può vivere nel linguaggio e nell'ambiente quadro che la catena si aspetta. Il piano di controllo e i servizi del prodotto possono scegliere il linguaggio che mantiene la manutenzione sana. La simulazione del percorso caldo, l'instradamento, l'elaborazione dei dati di mercato o i componenti adiacenti di corrispondenza possono rimanere vicini alle tradizioni prestazionali che li rendono più facili da ottimizzare e verificare. Il risultato non è un compromesso ideologico. È un sistema in cui ciascuna parte può ottimizzare il proprio carico reale.

Ciò richiede maturità. I sistemi ibridi sono sani solo quando i confini sono espliciti. I team hanno bisogno di interfacce chiare, di una ristretta suddivisione delle responsabilità e di onestà riguardo alla collocazione della complessità. Ma questo è vero indipendentemente dalla lingua. Un’architettura monolingue con confini confusi non è più semplice di un’architettura bilingue con confini puliti. A volte è semplicemente un'espressione monolingue della stessa confusione.

C'è anche una dimensione relativa al personale. I team spesso immaginano di dover scegliere una lingua perché l'assunzione in più domini nativi risulta difficile. Questa preoccupazione è comprensibile, ma può diventare una scusa per la pigrizia architettonica. Una domanda migliore è se il livello più sensibile alle prestazioni abbia davvero bisogno di un proprio linguaggio o se il profiler non abbia ancora giustificato tale costo. Alcuni team dovrebbero assolutamente rimanere per lo più in Rust e introdurre C++ solo quando un percorso caldo lo ha guadagnato. Altri hanno già una profonda esperienza in C++ e si danneggerebbero forzando tutto in un flusso di lavoro a forma di Rust che non corrisponde IA loro più forti istinti di sistema. Ancora una volta il contesto conta più del prestigio.

Quali modifiche ingegneristiche assistite da IA

L'arrivo dei sistemi di codifica IA in realtà rafforza la necessità di una scelta linguistica contestuale anziché indebolirla. Negli ecosistemi blockchain Rust-first, gli agenti possono aiutare con impalcature basate sul framework, codice di servizio di routine e alcune categorie di refactoring più comodamente di prima. Ma nei sottosistemi nativi di basso livello e ad alte prestazioni, l'equilibrio pende ancora verso C++ per un semplice motivo: il codice pubblico, gli strumenti pubblici e gli esempi di integrazione pubblica sono molto più densi lì. Gli agenti attualmente dispongono di più materiale storico da cui produrre bozze utili per i tipi di infrastrutture a percorso caldo di cui spesso i sistemi DEX hanno bisogno.

Ciò non significa che IA renda C++ universalmente superiore. Significa che la gravità del vecchio ecosistema è ora amplificata da un nuovo strumento. Quando un assistente aiuta a eseguire il debug di un'integrazione CMake, suggerisce una riprogettazione della coda, migliora un parser o elabora un benchmark per un ciclo di simulazione, beneficia della profonda memoria nativa del mondo pubblico C++. Quando un assistente lavora all'interno di un ambiente on-chain Rust-first, può essere vero il contrario. La decisione linguistica rientra ancora nel carico di lavoro, ma l’era IA rende la densità ambientale ancora più consequenziale di prima.

La mia raccomandazione pratica

Se stai costruendo programmi nativi della catena in un ecosistema Rust-first, non combattere il terreno per amore della retorica linguistica. Lasciamo che Rust conduca dove è già la sede naturale della correttezza, degli strumenti e della pratica comunitaria. Se stai costruendo un'infrastruttura fuori catena che si comporta come un'ingegneria di scambio sensibile alle prestazioni, mantieni C++ sul tavolo nel dominio crittografico. Lascia che C++ svolga il lavoro che svolge ancora eccezionalmente bene: acquisizione rapida, simulazione ripetuta, logica di routing stretta e controllo dei sistemi di basso livello.

E se la tua architettura abbraccia davvero entrambi i mondi, accettalo senza imbarazzo. La buona ingegneria non diventa più pura fingendo che ogni componente soffra dello stesso tipo di guasto. È reso più forte assegnando a ciascun componente un linguaggio che rispetti la fisica del suo lavoro effettivo.

C’è un discreto ottimismo nell’affrontare il problema in questo modo. Ricorda agli ingegneri che l’architettura può essere più calma del discorso pubblico. Non dobbiamo scegliere una lingua per vincere la discussione per sempre. Dobbiamo solo scegliere lo strumento giusto per il successivo livello onesto del sistema. Questo è un tipo di intelligenza molto più redditizio.

Laboratorio pratico: crea un piccolo valutatore di percorsi AMM

Costruiamo qualcosa di abbastanza piccolo da poter essere compreso e abbastanza reale da poter essere toccato.

L'obiettivo non è ricreare Uniswap. L’obiettivo è sentire quanto velocemente il lavoro DEX diventa una questione di ripetute simulazioni e confronti.

main.cpp

#include <cmath>
#include <iomanip>
#include <iostream>
#include <string>
#include <vector>

struct Pool {
    std::string name;
    double reserve_in;
    double reserve_out;
    double fee; // 0.003 for 0.3%
};

double swap_out(const Pool& p, double amount_in) {
    const double effective_in = amount_in * (1.0 - p.fee);
    return (effective_in * p.reserve_out) / (p.reserve_in + effective_in);
}

double two_hop(const Pool& a, const Pool& b, double amount_in) {
    const double mid = swap_out(a, amount_in);
    return swap_out(b, mid);
}

int main() {
    Pool eth_usdc_a{"ETH/USDC pool A", 500.0, 1750000.0, 0.003};
    Pool eth_usdc_b{"ETH/USDC pool B", 650.0, 2262000.0, 0.0005};
    Pool usdc_dai{"USDC/DAI stable pool", 900000.0, 901200.0, 0.0001};

    const double trade_eth = 4.0;

    const double direct_a = swap_out(eth_usdc_a, trade_eth);
    const double direct_b = swap_out(eth_usdc_b, trade_eth);
    const double routed = two_hop(eth_usdc_b, usdc_dai, trade_eth);

    std::cout << std::fixed << std::setprecision(4);
    std::cout << "Input: " << trade_eth << " ETH\n";
    std::cout << "Direct via " << eth_usdc_a.name << ": " << direct_a << " USDC\n";
    std::cout << "Direct via " << eth_usdc_b.name << ": " << direct_b << " USDC\n";
    std::cout << "Two-hop via " << eth_usdc_b.name << " -> " << usdc_dai.name
              << ": " << routed << " DAI\n";

    if (direct_b > direct_a) {
        std::cout << "Best direct route: " << eth_usdc_b.name << "\n";
    } else {
        std::cout << "Best direct route: " << eth_usdc_a.name << "\n";
    }
}

Costruire

Su Linux o macOS:

g++ -O2 -std=c++20 -o amm_router main.cpp
./amm_router

Su Windows:

cl /O2 /std:c++20 main.cpp
.\main.exe

Perché questo è importante

Anche questo minuscolo programma suggerisce già la reale forma del lavoro DEX off-chain:

  • valutazione del percorso ripetuto
  • confronto a pagamento
  • uscita dipendente dallo stato
  • tensione costante tra correttezza e velocità

Scala questo fino a centinaia di pool, aggiornamenti frequenti dello stato e pressione temporale degli avversari e inizi a capire perché la scelta della lingua smette di essere astratta molto rapidamente.

Attività di prova per appassionati

  1. Aggiungi tolleranza allo slittamento e rifiuta percorsi il cui output effettivo scende al di sotto di una soglia configurata.
  2. Estendi il programma per confrontare cinque o dieci pool invece di due e profilare il tempo che passa.
  3. Aggiungi un circuito che rivaluta il percorso un milione di volte con riserve leggermente variabili e misura come un router "giocattolo" inizia ad assomigliare a un vero percorso caldo.
  4. Sostituisci la formattazione dell'output in virgola mobile con la registrazione numerica strutturata e osserva quanto lavoro "non matematico" appare attorno alla logica del percorso effettivo.
  5. Aggiungi una seconda versione in Rust o in un'altra lingua e confronta il runtime grezzo con la comodità della lingua una volta che il ciclo di simulazione diventa il centro del lavoro.

Questo è un buon esercizio perché rivela qualcosa di sottile: nei software di scambio, la difficoltà interessante spesso risiede nell'uso ripetuto, con stato e sensibile alla latenza di molte formule ordinarie contemporaneamente.

Riepilogo

C++ e Rust appartengono entrambi all'ingegneria degli scambi decentralizzati, ma vi appartengono per ragioni diverse. Rust guadagna fiducia negli ecosistemi e nei livelli in cui la sicurezza statale, la verificabilità e il flusso di lavoro nativo della catena sono centrali. C++ guadagna fiducia in livelli in cui il lavoro inizia ad assomigliare di nuovo a un'infrastruttura di scambio: simulazione ripetuta, elaborazione dei dati di mercato, routing, ricerca e altri sistemi hot-path che premiano uno stretto controllo su memoria, pianificazione e verifica delle prestazioni.

La domanda più utile quindi non è quale lingua vince l’intero stack. Riguarda quale livello stiamo effettivamente progettando e quale tipo di fallimento quel livello può meno permettersi. Una volta posta onestamente la domanda, l’architettura di solito diventa molto più chiara e l’argomentazione diventa meno ideologica. Un DEX ben progettato è raramente un monumento alla purezza del linguaggio. Si tratta di una disposizione pratica di componenti, ciascuno scritto nella lingua che meglio rispetta il peso che porta con sé.

Riferimenti

  1. Libro bianco su Uniswap v3: https://uniswap.org/whitepaper-v3.pdf
  2. Repository principale di Uniswap v3: https://github.com/Uniswap/v3-core
  3. Documentazione MEV di Ethereum.org: https://ethereum.org/developers/docs/mev/
  4. Panoramica dei programmi Solana: Solana
  5. Sviluppo del programma Solana Rust: Solana
  6. Documentazione di ancoraggio: https://www.anchor-lang.com/docs
  7. Documentazione della catena dYdX: https://docs.dydx.exchange/
  8. Documentazione sull'integrazione dYdX: https://docs.dydx.xyz/
  9. dYdX su order book off-chain con regolamento on-chain: https://integral.dydx.exchange/dydx-closes-10m-series-b-investment/
  10. Documentazione di Cosmos SDK: SDK

    Come appare quando il sistema è già sotto pressione

La scelta della lingua nell’infrastruttura dex tende a diventare urgente nel momento esatto in cui una squadra sperava in un trimestre più tranquillo. Una funzionalità è già di fronte IA clienti, o una piattaforma porta già una dipendenza interna, e il sistema ha scelto quella particolare settimana per rivelare che la sua elegante teoria e il suo comportamento in fase di esecuzione hanno vissuto educatamente vite separate. Questo è il motivo per cui un lavoro ingegneristico così serio inizia con la riconciliazione. Il team deve riconciliare ciò che ritiene faccia il sistema con ciò che effettivamente fa il sistema sotto carico, sotto cambiamento e con quel tipo di scadenze che rendono tutti leggermente più creativi e leggermente meno saggi.

Nell'ingegneria dei sistemi crittografici, i casi che contano di più sono solitamente i backend di ricerca e simulatore, i servizi di routing sensibili alla latenza e le infrastrutture di rischio e regolamento fuori catena. Tali situazioni comportano conseguenze tecniche, di budget, di fiducia, di roadmap e talvolta di reputazione. Un problema tecnico diventa politicamente più grande nel momento in cui diverse squadre dipendono da esso e nessuno riesce a spiegare perché si comporti ancora come un procione all'interno delle mura: rumoroso di notte, difficile da localizzare e costoso da ignorare.

Ecco perché consigliamo di leggere il problema attraverso la lente della pressione operativa e della realtà delle consegne. Un progetto può essere teoricamente bello e operativamente rovinoso. Un altro progetto può essere quasi noioso e tuttavia portare avanti il ​​prodotto per anni perché è misurabile, riparabile e onesto riguardo IA suoi compromessi. Gli ingegneri seri imparano a preferire la seconda categoria. Ciò comporta meno discorsi epici, ma anche meno retrospettive di emergenza in cui tutti parlano con voce passiva e nessuno ricorda chi ha approvato la scorciatoia.

Pratiche che invecchiano costantemente bene

La prima pratica duratura è quella di mantenere un percorso rappresentativo sotto costante misurazione. I team spesso raccolgono una telemetria troppo vaga e un segnale di qualità decisionale troppo scarso. Scegli il percorso che conta davvero, misuralo ripetutamente e rifiuta di lasciare che la discussione si trasformi in una narrazione decorativa. Nel lavorare sulla scelta del linguaggio nell’infrastruttura DEX, le misure utili sono solitamente il determinismo del percorso caldo, la chiarezza operativa, la superficie di interoperabilità e il realismo della simulazione. Una volta che queste sono visibili, il resto delle decisioni diventano più umane e meno mistiche.

La seconda pratica durevole è quella di separare la prova dalla promessa. Gli ingegneri sono spesso spinti a dire che una direzione è giusta prima che il sistema abbia raggiunto quella conclusione. Resisti a quella pressione. Costruisci prima una dimostrazione ristretta, soprattutto quando l'argomento è vicino IA clienti o al denaro. Un piccolo miglioramento verificato ha più valore commerciale di una grande ambizione non verificata. Ciò sembra ovvio finché una revisione di fine trimestre non trasforma un’ipotesi in una scadenza e l’intera organizzazione inizia a trattare l’ottimismo come un artefatto di pianificazione.

La terza pratica duratura è scrivere raccomandazioni nella lingua di proprietà. Un paragrafo che dice "migliorare le prestazioni" o "rafforzare i confini" è emotivamente piacevole e operativamente inutile. Un paragrafo che dice chi cambia cosa, in quale ordine, con quale condizione di rollback, è quello che effettivamente sopravvive lunedì mattina. È qui che gran parte della scrittura tecnica fallisce. Vuole sembrare avanzato più che essere programmabile.

Controesempi che fanno risparmiare tempo

Uno dei controesempi più comuni assomiglia a questo: il team ha un netto successo locale, presuppone che il sistema sia ormai compreso e quindi adatta l’idea a un ambiente molto più impegnativo senza aggiornare la disciplina di misurazione. Questo è l'equivalente ingegneristico di imparare a nuotare nella piscina di un hotel e poi tenere un discorso TED fiducioso sul tempo in mare. L'acqua è acqua fino a quando non lo è più.

Un altro controesempio è l’inflazione degli strumenti. Un nuovo profiler, un nuovo runtime, una nuova dashboard, un nuovo agente, un nuovo livello di automazione, un nuovo wrapper che promette di armonizzare il vecchio wrapper. Nessuna di queste cose è intrinsecamente negativa. Il problema è cosa succede quando viene loro chiesto di compensare un confine che nessuno ha nominato chiaramente. Il sistema diventa quindi più strumentato, più impressionante e solo occasionalmente più comprensibile. Gli acquirenti lo percepiscono molto rapidamente. Anche senza quella frase, possono sentire l'odore quando uno stack è diventato un costoso sostituto di una decisione.

Il terzo controesempio è considerare la revisione umana come un fallimento dell’automazione. Nei sistemi reali, la revisione umana è spesso il controllo che mantiene l’automazione commercialmente accettabile. I team maturi sanno dove automatizzare in modo aggressivo e dove mantenere visibile l'approvazione o l'interpretazione. I team immaturi vogliono che la macchina faccia tutto perché "tutto" sembra efficiente in una diapositiva. Poi arriva il primo incidente grave, e all'improvviso il ripasso manuale si riscopre con la sincerità di un'esperienza di conversione.

Un modello di consegna che consigliamo

Se il lavoro viene svolto bene, il primo risultato finale dovrebbe ridurre lo stress fornendo al team una lettura tecnica sufficientemente forte da smettere di discutere in tondo. Successivamente, la successiva implementazione limitata dovrebbe migliorare un percorso cruciale e il nuovo test dovrebbe rendere la direzione leggibile sia agli ingegneri che alla leadership. Questa sequenza conta più della scelta esatta dello strumento perché è ciò che trasforma l’abilità tecnica in movimento in avanti.

In termini pratici, consigliamo un primo ciclo ristretto: raccogliere gli artefatti, produrre una diagnosi difficile, fornire un cambiamento limitato, testare nuovamente il percorso reale e scrivere la decisione successiva in un linguaggio semplice. Il linguaggio semplice è importante. Un acquirente raramente si rammarica della chiarezza. Un acquirente spesso si rammarica di essere rimasto colpito prima dell'arrivo delle ricevute.

Anche qui conta il tono. Un forte lavoro tecnico dovrebbe suonare come se avesse già incontrato la produzione in precedenza. Calmo, preciso e leggermente divertito dall'hype piuttosto che nutrito da esso. Quel tono porta il segnale operativo. Dimostra che il team comprende la vecchia verità dell’ingegneria dei sistemi: le macchine sono veloci, le tabelle di marcia sono fragili e prima o poi arriva il conto per ogni ipotesi a cui è stato permesso di rimanere poetica.

La lista di controllo che utilizzeremmo prima di dirlo pronto

Nell’ingegneria dei sistemi crittografici, la prontezza non è uno stato d’animo. È una lista di controllo con conseguenze. Prima di considerare il lavoro sulla scelta della lingua nell'infrastruttura DEX pronto per un lancio più ampio, vogliamo che alcune cose siano noiose nel miglior modo possibile. Vogliamo un percorso che si comporti in modo prevedibile sotto un carico rappresentativo. Vogliamo una serie di misurazioni che non si contraddica. Vogliamo che la squadra sappia dove si trova il confine e cosa significherebbe infrangerlo. E vogliamo che il risultato del lavoro sia sufficientemente chiaro da consentire a qualcuno al di fuori della sala di implementazione di prendere una decisione valida.

Questa lista di controllo di solito tocca il determinismo del percorso caldo, la chiarezza operativa, la superficie di interoperabilità e il realismo della simulazione. Se i numeri si muovono nella giusta direzione ma la squadra non riesce ancora a spiegare il sistema senza improvvisare, il lavoro non è pronto. Se l’architettura sembra impressionante ma non riesce a sopravvivere a un modesto controesempio tratto dal campo, il lavoro non è pronto. Se l'implementazione esiste ma la storia del rollback suona come una preghiera con timestamp, il lavoro non è pronto. Nessuna di queste è obiezioni filosofiche. Sono semplicemente le forme in cui tendono a presentarsi costose sorprese.

Questo è anche il momento in cui i team scoprono se stavano risolvendo il vero problema o semplicemente provando la competenza nelle sue vicinanze. Moltissimi sforzi tecnici sembrano avere successo fino a quando qualcuno non chiede ripetibilità, prove di produzione o una decisione che influirà sul budget. In quel momento l’opera debole diventa sfocata e l’opera forte diventa stranamente chiara. La pianura è buona. Semplice di solito significa che il sistema ha smesso di fare affidamento sul carisma.

Come consigliamo di parlare del risultato

La spiegazione finale dovrebbe essere abbastanza breve da sopravvivere a una riunione di leadership e abbastanza concreta da sopravvivere a una revisione tecnica. È più difficile di quanto sembri. Il linguaggio eccessivamente tecnico nasconde la sequenza. Un linguaggio troppo semplificato nasconde dei rischi. La giusta via di mezzo è descrivere il percorso, le prove, il cambiamento limitato e il prossimo passo consigliato in un modo che sembri calmo piuttosto che trionfante.

Consigliamo una struttura come questa. Per prima cosa, spiega quale percorso è stato valutato e perché era importante. In secondo luogo, dì cosa c'era di sbagliato o di incerto in quel percorso. In terzo luogo, indicare cosa è stato modificato, misurato o convalidato. In quarto luogo, dire cosa rimane irrisolto e cosa comprerebbe il prossimo investimento. Questa struttura funziona perché rispetta sia il comportamento ingegneristico che quello di acquisto. Gli ingegneri vogliono dettagli. Gli acquirenti vogliono il sequenziamento. Tutti vogliono meno sorprese, anche quelli che fingono di apprezzarle.

Il vantaggio nascosto di parlare in questo modo è culturale. I team che spiegano chiaramente il lavoro tecnico di solito lo eseguono anche in modo più chiaro. Smettono di considerare l’ambiguità come sofisticazione. Diventa più difficile impressionarli con il gergo ed è più facile fidarsi di loro con sistemi difficili. Questa è una delle forme di maturità ingegneristica più sottovalutate.

Ciò che ci rifiuteremmo ancora di falsificare

Anche dopo che il sistema è migliorato, i team maturi mantengono onesta l’incertezza nell’ingegneria dei sistemi crittografici. Misurazioni deboli necessitano di prove più chiare, confini rigidi necessitano di un linguaggio semplice e dimostrazioni più tranquille necessitano di una reale prontezza operativa. È necessario ridurre alcune incertezze; alcuni devono essere nominati onestamente. Confondere questi due lavori significa che progetti rispettabili diventano parabole costose.

La stessa regola si applica alle decisioni relative alla scelta della lingua nell'infrastruttura DEX. Se a un team manca ancora un punto di riferimento riproducibile, un percorso di rollback affidabile o un chiaro proprietario per l’interfaccia critica, allora il risultato più utile potrebbe essere un no più netto o un passo successivo più ristretto piuttosto che una promessa più grande. Questa disciplina mantiene il lavoro tecnico allineato alla realtà che intende migliorare.

C’è uno strano sollievo nel lavorare in questo modo. Una volta che il sistema non dipende più da uno storytelling ottimistico, il dialogo tecnico diventa più semplice, anche quando il lavoro rimane duro. E nella produzione questo spesso conta come una forma minore di grazia.

Note aggiuntive sulla pianificazione dell'infrastruttura Dex

Una buona suddivisione linguistica nell’infrastruttura DEX di solito sembra modesta sulla carta. Una lingua possiede il luogo in cui la prevedibilità, l’effetto leva dell’eredità o la familiarità con i sistemi grezzi contano di più. L'altro possiede il luogo in cui la disciplina dei confini e il nuovo isolamento dei componenti rendono la storia della consegna più sana. L’errore è cercare di trasformare la scelta della lingua in ideologia. I sistemi commerciali non si preoccupano dell’ideologia. Si preoccupano dei pacchetti mancati, delle code instabili, della falsa fiducia nella simulazione e della fattura per aver finto il contrario.

Questo è il motivo per cui consigliamo mappe dell’architettura che mostrano esattamente dove le lingue si incontrano, come vengono testate tali giunzioni e quali metriche operative appartengono a ciascuna parte. Se uno stack misto C++/Rust non può essere spiegato come operazioni in un diagramma calmo, probabilmente non è pronto. E se si può spiegare chiaramente, lo stack misto spesso smette di sembrare esotico. Sembra semplicemente che l'ingegneria sia disposta a scegliere la vestibilità rispetto alla moda.

Note sul campo da una vera revisione tecnica

Nella distribuzione dei sistemi C++, il lavoro diventa serio quando la demo incontra una consegna reale, utenti reali e costi operativi reali. Questo è il momento in cui un’idea ordinata inizia a comportarsi come un sistema, e i sistemi hanno un senso dell’umorismo notoriamente secco. A loro non importa quanto fosse elegante il mazzo kickoff. Si preoccupano dei confini, delle modalità di fallimento, dei percorsi di implementazione e se qualcuno può spiegare il passaggio successivo senza inventare una nuova mitologia attorno allo stack.

Per C++, Rust, and Decentralized Crypto Exchanges: Applicability and Efficiency, la questione pratica è se crea un percorso di consegna più forte per un acquirente che ha già pressioni su una tabella di marcia, una piattaforma o una revisione della sicurezza. Quell'acquirente non ha bisogno di una conferenza lucidata nella nebbia. Hanno bisogno di una lettura tecnica da poter utilizzare.

Cosa ispezioneremmo per primo

Inizieremo con un percorso rappresentativo: inferenza nativa, profilazione, percorsi HFT, sistemi DEX e scelte di modernizzazione C++/Rust. Quel percorso dovrebbe essere abbastanza stretto da poter misurare e abbastanza ampio da rivelare la verità. Il primo passaggio dovrebbe acquisire il comportamento di allocazione, la latenza p99, l'evidenza del profilo, l'attrito ABI e rilasciare fiducia. Se questi segnali non sono disponibili, il progetto è ancora per lo più un’opinione che indossa un camice da laboratorio, e l’opinione pubblica ha una lunga storia nel presentarsi come strategia.

Il primo elemento utile è una lettura dei sistemi nativi con benchmark, prove di profilazione e un piano di implementazione mirato. Dovrebbe mostrare il sistema come si comporta, non come tutti speravano che si comportasse durante la riunione di pianificazione. Una traccia, una riproduzione, un piccolo benchmark, una matrice politica, un dispositivo di analisi o un test ripetibile spesso raccontano la storia più velocemente di un'altra discussione sull'architettura astratta. I buoni artefatti sono meravigliosamente maleducati. Interrompono i desideri.

Un controesempio che fa risparmiare tempo

L’errore costoso è rispondere con una soluzione più ampia della prima dimostrazione utile. Un team vede il rischio o il ritardo e cerca immediatamente una nuova piattaforma, una riscrittura, un refactoring radicale o una dashboard favorevole agli approvvigionamenti con un nome che sembra fare yoga. A volte questa scala è giustificata. Molto spesso è un modo per posticipare la misurazione.

La mossa migliore è più piccola e più nitida. Dai un nome al confine. Cattura prove. Cambia una cosa importante. Ripetere lo stesso percorso. Quindi decidi se il prossimo investimento merita di essere più grande. Questo ritmo è meno drammatico di un programma di trasformazione, ma tende a sopravvivere al contatto con i budget, i calendari di rilascio e gli incidenti di produzione.

Il modello di consegna che consigliamo

Il modello più affidabile prevede quattro passaggi. Innanzitutto, raccogli artefatti rappresentativi. In secondo luogo, trasformare questi artefatti in una difficile diagnosi tecnica. Terzo, spedisci una modifica limitata o un prototipo. In quarto luogo, ripetere il test con lo stesso quadro di misurazione e documentare la decisione successiva in un linguaggio semplice. In questa classe di lavoro, le apparecchiature CMake, i cablaggi di profilazione, le piccole riproduzioni native e le note del compilatore/runtime sono in genere più preziosi di un altro incontro sulla direzione generale.

Il linguaggio semplice è importante. Un acquirente dovrebbe essere in grado di leggere l’output e capire cosa è cambiato, cosa rimane rischioso, cosa può aspettare e cosa comprerebbe il passo successivo. Se la raccomandazione non può essere pianificata, testata o assegnata a un proprietario, è comunque troppo decorativa. La scrittura tecnica decorativa è gradevole, ma i sistemi di produzione non sono noti per premiare la gradevolezza.

Come giudicare se il risultato ha aiutato

Per C++, Rust, and Decentralized Crypto Exchanges: Applicability and Efficiency, il risultato dovrebbe migliorare almeno uno dei tre aspetti: velocità di consegna, affidabilità del sistema o disponibilità commerciale. Se non migliora nessuno di questi, il team potrebbe aver imparato qualcosa, ma l'acquirente non ha ancora ricevuto un risultato utile. Questa distinzione è importante. L'apprendimento è nobile. Anche un impegno retribuito dovrebbe muovere il sistema.

Il risultato più forte può essere una tabella di marcia più ristretta, il rifiuto di automatizzare un percorso pericoloso, un confine migliore attorno a un modello, un’integrazione nativa più pulita, una prova misurata che una riscrittura non è ancora necessaria o un breve elenco di soluzioni correttive che la leadership può effettivamente finanziare. L'ingegneria seria è una sequenza di decisioni migliori, non una gara di costumi per gli strumenti.

Come si avvicinerebbe SToFU

SToFU tratterebbe questo problema prima come un problema di consegna e poi come un problema tecnologico. Apporteremmo la profondità ingegneristica rilevante, ma manterremmo l’impegno ancorato all’evidenza: il percorso, il confine, il rischio, la misurazione e il prossimo cambiamento che vale la pena apportare. Il punto non è far sembrare facile il duro lavoro. Il punto è rendere la prossima mossa seria abbastanza chiara da poter essere eseguita.

Questa è la parte che gli acquirenti solitamente apprezzano di più. Possono assumere opinioni ovunque. Ciò di cui hanno bisogno è un team in grado di ispezionare il sistema, dare un nome al vero vincolo, costruire o convalidare la sezione giusta e lasciare dietro di sé artefatti che riducano la confusione al termine della chiamata. In un mercato rumoroso, la chiarezza non è una soft skill. È l'infrastruttura.

Philip P.

Philip P. – CTO

Torniamo IA blog

Contatto

Inizia la conversazione

Bastano poche righe chiare. Descrivi il sistema, la pressione, la decisione bloccata. Oppure scrivi direttamente a midgard@stofu.io.

0 / 10000
Nessun file selezionato