2013-10-16 5 views
2

Je sais deEscaping sécurité avec des instructions de débogage

debug writeln("Some good debug message") 

dans pure fonctions mais qu'en fonctions que j'ai soigneusement étiquetés comme @safe ou @trusted? DMD actuellement ne permet pas debug writeln dans ceux parce que writeln et similaires sont actuellement @system. C'est à mon humble avis très frustrant. Y a-t-il un moyen astucieux d'échapper à la sécurité ou est-ce que je dois temporairement commenter tous mes tags @safe et @trusted?

Répondre

5

Ce que je fais est de faire mon propre debug_writeln @trusted.

@trusted void debug_writeln(T...)(T t) { 
     import std.stdio; 
     writeln(t); 
} 

Puisqu'il est @trusted, il fonctionnera dans les fonctions @safe sans rien changer. Vous pouvez aussi simplement l'appeler writeln et ensuite ne pas importer std.stdio ou alias pour forcer la désambiguïsation.

+0

Great! Je savais que vous aviez une solution;) –

+0

Je crois que c'est ce que nous faisons tous, pour l'instant. :) – DejanLekic

+0

c'est mauvais si T a une méthode dangereuse à! – Demi

2

Une solution générique

import std.stdio; 

void main() @safe pure 
{ 
    auto str = trustedPureDebugCall!readln(); 
    trustedPureDebugCall!writeln(str); 
} 

debug auto trustedPureDebugCall (alias fn, A...) (A args) @trusted pure 
{ 
    debug return fn(args); 
}