2017-08-14 9 views
2

Je voudrais savoir quelle est la différence entre les deux options. Au début, je pensais qu'ils produiraient la même sortie, mais j'ai profilé un code en utilisant d'abord {.checks:off.} et plus tard -d:release et la différence est notable (la version étant plus rapide).Nim vérifie: off vs -d: release

Le code dans ce cas est une boucle à chaud avec quelques opérations flottantes, un si et un tableau get/set.

Répondre

2

-d:release permet également l'optimiseur (qui fait quelques extras comme la suppression assert s) qui causera des augmentations de vitesse en son nom. Les drapeaux sont décrits here.

4

Voici ce communiqué fait: https://github.com/nim-lang/Nim/blob/devel/config/nim.cfg#L50-L66

@if release or quick: 
    obj_checks:off 
    field_checks:off 
    range_checks:off 
    bound_checks:off 
    overflow_checks:off 
    assertions:off 
    stacktrace:off 
    linetrace:off 
    debugger:off 
    line_dir:off 
    dead_code_elim:on 
@end 

@if release: 
    opt:speed 
@end 

opt:speed indique alors votre compilateur C pour optimiser la sortie pour la vitesse, par exemple:

gcc.options.speed = "-O3 -fno-strict-aliasing" 
+0

Alors, qu'est-ce que invalidantes contrôles font? J'avais l'impression que cela désactiverait toutes les options * _checks. Dans mon cas probablement 'checks: off' n'a pas désactivé la vérification liée – Agggg