diff options
author | Kane York <kanepyork@gmail.com> | 2020-08-13T22·18-0700 |
---|---|---|
committer | kanepyork <rikingcoding@gmail.com> | 2020-08-14T00·35+0000 |
commit | 72e61aa584c3e3bbafbdc539959a2db8e0f123ef (patch) | |
tree | d74d5ed8508ab9845812752c51451f870dcc482c /third_party/nix/src/libexpr/eval.hh | |
parent | d4f5fcef66beeff2e0cbd641ac83a5b2a67e3006 (diff) |
refactor(tvix): completely remove boehm gc r/1646
We have decided that leaking memory is a better fate than random, non-debuggable memory corruption. Future CLs will begin changing various fields to std::unique_ptr and std::shared_ptr. It turns out that disabling the GC does not have disasterous impact. The Nix evaluator only runs on the client CLI, never in any long- running process. Even the REPL does not leak too badly under this change, because it uses one EvalState for the duration of the REPL. Building an explicitly tracing garbage collector is likely in the future of this project, but that giant amount of work cannot be done under a nix evaluator that is constantly crashing. We need to restore development velocity here, and this is the best way we've figured out to do it. Change-Id: I2fcda8fcee853c15a9a5e22eca7c5a784bc2bf76 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1720 Reviewed-by: glittershark <grfn@gws.fyi> Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
Diffstat (limited to 'third_party/nix/src/libexpr/eval.hh')
-rw-r--r-- | third_party/nix/src/libexpr/eval.hh | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/third_party/nix/src/libexpr/eval.hh b/third_party/nix/src/libexpr/eval.hh index d2ff99c9fc13..f3e38cfb3cb6 100644 --- a/third_party/nix/src/libexpr/eval.hh +++ b/third_party/nix/src/libexpr/eval.hh @@ -5,9 +5,6 @@ #include <unordered_map> #include <vector> -#include <gc/gc_allocator.h> -#include <gc/gc_cpp.h> - #include "libexpr/attr-set.hh" #include "libexpr/nixexpr.hh" #include "libexpr/symbol-table.hh" @@ -39,16 +36,14 @@ struct PrimOp { : fun(fun), arity(arity), name(name) {} }; -struct Env : public gc { - Env(unsigned short size) : size(size) { - values = std::vector<Value*, traceable_allocator<Value*>>(size); - } +struct Env { + Env(unsigned short size) : size(size) { values = std::vector<Value*>(size); } Env* up; unsigned short size; // used by ‘valueSize’ unsigned short prevWith : 14; // nr of levels up to next `with' environment enum { Plain = 0, HasWithExpr, HasWithAttrs } type : 2; - std::vector<Value*, traceable_allocator<Value*>> values; + std::vector<Value*> values; Expr* withAttrsExpr = nullptr; }; @@ -63,14 +58,12 @@ typedef std::map<Path, Path> SrcToStore; std::ostream& operator<<(std::ostream& str, const Value& v); -typedef std::pair<std::string, std::string> SearchPathElem; -typedef std::list<SearchPathElem> SearchPath; +using SearchPathElem = std::pair<std::string, std::string>; +using SearchPath = std::list<SearchPathElem>; -typedef std::map<Path, Expr*, std::less<Path>, - traceable_allocator<std::pair<const Path, Expr*>>> - FileParseCache; +using FileParseCache = std::map<Path, Expr*>; -class EvalState : public gc { +class EvalState { public: SymbolTable symbols; @@ -100,9 +93,7 @@ class EvalState : public gc { FileParseCache fileParseCache; /* A cache from path names to values. */ - typedef std::map<Path, Value, std::less<Path>, - traceable_allocator<std::pair<const Path, Value>>> - FileEvalCache; + using FileEvalCache = std::map<Path, Value>; FileEvalCache fileEvalCache; SearchPath searchPath; |