<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2015-10-28 11:38 GMT+00:00 Manlio Perillo <span dir="ltr"><<a href="mailto:manlio.perillo@gmail.com" target="_blank">manlio.perillo@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> Eh... come dicevo, fanno tutti cosi', e' sensato farlo anche solo per<br>
> semplificare il ragionamento ai tuoi utenti.<br>
> Sebbene, a mio avviso, ancora una volta Go rompe gli schemi per fare la cosa<br>
> giusta.<br>
><br>
<br>
</span>Go può farlo perchè è safe rispetto a C.<br>
In C se vuoi continuare dovresti gestire SIGSEV, cosa non banale e non<br>
portabile.<br></blockquote><div><br></div><div>Si, ok, ci sono un po' di cose diverse, ma non direi che quello e' il problema.</div><div><br></div><div>Spiego meglio: in C potresti fare una suite di test che invece che usare una qualche funzione "assertOk" che ti vola fuori dalla funzione chiamante in caso di problemi (ovviamente tutto bello integrato con la libreria di testing) utilizza una funzione "error" analoga alla funzione omonima di Go.</div><div><br></div><div>Detto questo, devi *comunque* gestire SIGSEV, perche' al di la di tutto uno puo' sempre avere un baco nel codice che scoppia con SIGSEV e quello che vorresti e' che il processo che sta facendo girare i test non muoia immediatamente ma esegua gli altri test. Il che e' chiaramente un problema non da poco, visto che SUSv3 ti dice chiaro e tondo che i seguenti comportamenti sono undefined behavior:</div><div>1. ritornare dal sig handler</div><div>2. bloccarlo</div><div>3. ignorarlo</div><div><br></div><div>Per cui di fatto l'unica cosa che potresti fare e' pulire quello che devi pulire, eventualmente salvare un po' di stato da qualche parte (che so... statistiche per il test runner o qualunque cosa) e poi comunque uscire. </div><div><br></div><div>Quindi credo di avere capito quello che intendevi... ma non credo sia un problema. Nel senso che per come funziona C, di fatto, devi eseguire i vari test in processi separati (perche' troppe cose possono mandare in undefined behavior il tutto, quindi non puoi avere un singolo processo che esegue tutti i test). Detto questo puoi offrire Error con la semantica di Go. Se poi per qualunque motivo devi abortire (SIGSEV e' solo uno dei casi), vorra' dire che il gestore di test scoprira' che quello specifico test e' fallito [e potenzialmente avra' qualche informazione aggiuntiva]. Mi verrebbe anche da dire che se vuoi usare  ptrace (e probabilmente lo vuoi fare) ti da anche una struttura molto piu' logica.</div><div> </div></div><br clear="all"><div><br></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>