Script C++: la toolchain Clang in WebAssembly e l'ABI v1
Senzoukria può compilare uno script C++17 in WebAssembly dentro la propria sandbox con un vero Clang, poi eseguirlo sulle barre del grafico. La toolchain si scarica una volta sola su richiesta, verificata per dimensione e SHA-256, ed espone un ABI ridotto: of_compute traccia un valore per barra, of_strategy restituisce intenzioni di acquisto o vendita per il conto simulato.
Senzoukria · Documentazione · Aggiornato a settembre 2026
Dove trovarlo
- Dove
- Pagina Scripting → selettore del linguaggio → C++ (sopra l'editor compare una fascia «Toolchain C++»)
- Toolchain
- Clang 8.0.1 + LLD + libc++ compilati in WebAssembly, fissati al commit Binji wasm-clang 648c4a89; circa 60,4 MB (mostrati come «60.4 Mo») scaricati una volta sola
- Capacità
- 256 barre più recenti per chiamata; sorgente fino a 64 KiB; 2 s per esecuzione; timeout di compilazione 45 s
- Perimetro della strategia
- Solo conto simulato; l'app non trasforma mai un'intenzione C++ in un ordine al broker
Che cosa fa
Il motore C++ è il terzo linguaggio di scripting accanto a JavaScript e Python. Scegliendo C++ nel selettore del linguaggio della pagina Scripting compare la fascia «Toolchain C++». Il suo primo stato è «Non installata» con il pulsante «Installa la toolchain C++» e la nota «Circa 60.4 Mo da scaricare, una volta sola (Clang 8.0.1 + LLD + libc++, Apache-2.0).». I cinque file (clang, lld, memfs, sysroot.tar, shared.js) vengono scaricati dal commit GitHub fissato, ognuno rifiutato se il numero di byte o lo SHA-256 differisce dal valore scritto nell'app, e conservati in IndexedDB perché il download avvenga una volta sola.
Avviare il motore compila circa 50 MB di WebAssembly: per questo «Avvio del motore…» è uno stato visibile e distinto dall'esecuzione di uno script. Una volta pronta, la fascia stampa «Versione wasm-clang-648c4a89, avviato in {ms} ms» seguita dalla riga dei limiti. Ogni script viene compilato una volta sola, con chiave lo SHA-256 del sorgente composto (intestazione dell'host + il tuo codice); rieseguire lo stesso script alla cadenza del grafico non ricompila mai. L'host conserva fino a 8 moduli compilati, e altrettanti il worker.
L'ABI che il tuo script vede
| Simbolo | Significato | Note |
|---|---|---|
| struct OfBar | bucket_ts_ns (int64), open, high, low, close, volume, delta (double), trades (uint32) | 64 byte, la barra più vecchia per prima, n ≤ 256 |
| int of_compute(const OfBar* bars, uint32_t n, double* out, uint32_t out_len) | Scrivi un valore per barra in out[i]; NaN significa nessun valore; restituisci n | Tracciato come una singola linea verde (#7ed321, spessore 1) sul grafico |
| int of_strategy(const OfBar* bars, uint32_t n, int32_t* out, uint32_t out_len) | Scrivi un'intenzione per barra: −1 vendere, 0 niente, +1 comprare | Viene letta solo l'intenzione dell'ultima barra; qty, stopTicks e targetTicks arrivano dai parametri dello script |
| OF_CAPACITY | 256 | Le barre più vecchie della capacità non vengono trasmesse; una riga di avviso dice quante sono state saltate |
| #line 1 "script.cpp" | I numeri di riga nelle diagnostiche corrispondono al tuo editor | Il primo «script.cpp:N:M: error» fissa la riga evidenziata |
Stati del motore e comandi
| Stato | Mostrato come | Azione disponibile |
|---|---|---|
| assente | Non installata + nota sulla dimensione | Installa la toolchain C++ |
| download | Download del motore… {percent}% | Annulla il download |
| avvio | Avvio del motore… | nessuna (timeout di avvio 120 s) |
| pronto | Motore pronto, versione e tempo di avvio, limiti | Rimuovi il motore (svuota i moduli del worker e la cache IndexedDB) |
| errore | Motore non disponibile + messaggio | Riprova |
Come usarlo
Crea un nuovo script, scegli C++ e parti dal modello predefinito: una media mobile semplice a 20 periodi scritta con una somma scorrevole, NaN durante il riscaldamento, che restituisce n. Eseguilo con lo stesso pulsante degli script JavaScript. Gli avvisi e gli errori del compilatore arrivano nella console come righe di log; un'esecuzione che supera il budget di 2 secondi fallisce come qualsiasi altro script. Oggi esiste un solo modello C++, quella media mobile; non c'è una strategia C++ già pronta. Basta scrivere tu of_strategy: le sue intenzioni seguono lo stesso percorso decisionale delle strategie JavaScript, solo verso il conto di valutazione simulato.
Se un grafico contiene più di 256 barre, la console stampa «L'ABI C++ v1 calcola le 256 barre più recenti: N barra/e più vecchia/e non hanno valore.». Le barre più vecchie vengono semplicemente disegnate senza valore invece di essere riempite con una stima.
Limiti e trappole
- C++17 è supportato; il C++20 non è esplicitamente promesso. Header come <cmath>, <vector> e <numeric> sono disponibili da libc++.
- Il sorgente è limitato a 64 KiB compresa l'intestazione dell'host; il modulo compilato può usare fino a 64 MiB di memoria.
- Il motore scarica solo da raw.githubusercontent.com; un redirect viene rifiutato e un file la cui dimensione o hash differisce viene scartato prima di raggiungere la sandbox.
- Se la sandbox si riavvia o la toolchain viene rimossa durante una compilazione, l'esecuzione riporta «sandbox riavviata o toolchain rimossa durante la compilazione — esegui di nuovo».
- Eseguire uno script C++ prima di aver installato la toolchain restituisce «toolchain C++ non avviata — installala dalla pagina Scripting»; l'esecuzione riesce automaticamente appena il motore è pronto.
Pagine correlate
- Editor di indicatori personali sul grafico
- Output degli script: grafico, pannello, tabella e riquadro
- Assistente di scripting (IA)
- Testare una strategia di trading
Questa pagina in altre lingue
Domande frequenti
- La toolchain C++ ha bisogno di una connessione a internet ogni volta?
- No. I cinque file si scaricano una volta sola, vengono verificati e conservati in IndexedDB. Gli avvii successivi leggono la cache e girano interamente offline; «Rimuovi il motore» svuota quella cache.
- Una strategia C++ può inviare ordini al mio broker?
- No. of_strategy produce intenzioni −1/0/+1 che vengono convertite in decisioni per il conto simulato, per lo stesso percorso delle strategie JavaScript. Nessuno script in Senzoukria invia un ordine al broker.
- Perché il mio indicatore si ferma dopo 256 barre?
- L'ABI v1 trasmette le 256 barre più recenti per chiamata. Le barre più vecchie non hanno valore e la console dice quante sono state saltate.