Skip to content
Snippets Groups Projects
  1. Aug 29, 2018
  2. Aug 28, 2018
    • aszlig's avatar
      libexpr: Use int64_t for NixInt · 0ad643ed
      aszlig authored
      Using a 64bit integer on 32bit systems will come with a bit of a
      performance overhead, but given that Nix doesn't use a lot of integers
      compared to other types, I think the overhead is negligible also
      considering that 32bit systems are in decline.
      
      The biggest advantage however is that when we use a consistent integer
      size across all platforms it's less likely that we miss things that we
      break due to that. One example would be:
      
      https://github.com/NixOS/nixpkgs/pull/44233
      
      On Hydra it will evaluate, because the evaluator runs on a 64bit
      machine, but when evaluating the same on a 32bit machine it will fail,
      so using 64bit integers should make that consistent.
      
      While the change of the type in value.hh is rather easy to do, we have a
      few more options available for doing the conversion in the lexer:
      
        * Via an #ifdef on the architecture and using strtol() or strtoll()
          accordingly depending on which architecture we are. For the #ifdef
          we would need another AX_COMPILE_CHECK_SIZEOF in configure.ac.
        * Using istringstream, which would involve copying the value.
        * As we're already using boost, lexical_cast might be a good idea.
      
      Spoiler: I went for the latter, first of all because lexical_cast does
      have an overload for const char* and second of all, because it doesn't
      involve copying around the input string. Also, because istringstream
      seems to come with a bigger overhead than boost::lexical_cast:
      
      https://www.boost.org/doc/libs/release/doc/html/boost_lexical_cast/performance.html
      
      
      
      The first method (still using strtol/strtoll) also wasn't something I
      pursued further, because it is also locale-aware which I doubt is what
      we want, given that the regex for int is [0-9]+.
      
      Signed-off-by: default avataraszlig <aszlig@nix.build>
      Fixes: #2339
      0ad643ed
  3. Aug 22, 2018
  4. Aug 21, 2018
  5. Aug 19, 2018
  6. Aug 17, 2018
  7. Aug 13, 2018
  8. Aug 10, 2018
  9. Aug 09, 2018
  10. Aug 08, 2018
  11. Aug 07, 2018
  12. Aug 06, 2018
  13. Aug 03, 2018
Loading