Index: doc/papers/general/evaluation/Makefile
===================================================================
--- doc/papers/general/evaluation/Makefile	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/Makefile	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -2,7 +2,11 @@
 CFA = cfa
 DEPFLAGS = -MMD -MP
+ifdef DBG
+CFLAGS = -O0 -ggdb -DN=500
+else
 CFLAGS = -O2
 ifdef N
 CFLAGS += -DN=$(N)
+endif
 endif
 CXXFLAGS = $(CFLAGS) --std=c++14
@@ -27,14 +31,14 @@
 	$(COMPILE.cfa) $(OUTPUT_OPTION) -c $<
 
-COBJS = c-stack.o c-pair.o c-print.o c-bench.o
+COBJS = c-stack.o c-pair.o c-bench.o
 CPPOBJS = cpp-bench.o
 CPPVOBJS = cpp-vstack.o cpp-vbench.o
-CFAOBJS = cfa-stack.o cfa-pair.o cfa-print.o cfa-bench.o
+CFAOBJS = cfa-stack.o cfa-pair.o cfa-bench.o
 
 ${COBJS} ${CPPOBJS} ${CPPVOBJS} ${CFAOBJS} : ${MAKEFILE_NAME}
 
 CFILES = bench.h $(patsubst c-bench.h,,$(COBJS:.o=.h)) $(COBJS:.o=.c)
-CPPFILES = bench.hpp cpp-stack.hpp cpp-pair.hpp cpp-print.hpp $(CPPOBJS:.o=.cpp)
-CPPVFILES = bench.hpp object.hpp cpp-vprint.hpp $(patsubst cpp-vbench.hpp,,$(CPPVOBJS:.o=.hpp)) $(CPPVOBJS:.o=.cpp)
+CPPFILES = bench.hpp cpp-stack.hpp cpp-pair.hpp $(CPPOBJS:.o=.cpp)
+CPPVFILES = bench.hpp object.hpp $(patsubst cpp-vbench.hpp,,$(CPPVOBJS:.o=.hpp)) $(CPPVOBJS:.o=.cpp)
 CFAFILES = bench.h $(patsubst cfa-bench.h,,$(CFAOBJS:.o=.h)) $(CFAOBJS:.o=.c)
 
Index: doc/papers/general/evaluation/bench.h
===================================================================
--- doc/papers/general/evaluation/bench.h	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/bench.h	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -5,5 +5,8 @@
 long ms_between(clock_t start, clock_t end) { return (end - start) / (CLOCKS_PER_SEC / 1000); }
 
+#ifndef N
 #define N 40000000
+#endif
+
 #define TIMED(name, code) { \
 	volatile clock_t _start, _end; \
Index: doc/papers/general/evaluation/bench.hpp
===================================================================
--- doc/papers/general/evaluation/bench.hpp	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/bench.hpp	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -6,5 +6,8 @@
 long ms_between(clock_t start, clock_t end) { return (end - start) / (CLOCKS_PER_SEC / 1000); }
 
+#ifndef N
 static const int N = 40000000;
+#endif
+
 #define TIMED(name, code) { \
 	volatile clock_t _start, _end; \
Index: doc/papers/general/evaluation/c-bench.c
===================================================================
--- doc/papers/general/evaluation/c-bench.c	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/c-bench.c	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -4,5 +4,4 @@
 #include "c-pair.h"
 #include "c-stack.h"
-#include "c-print.h"
 
 _Bool* new_bool( _Bool b ) {
@@ -39,5 +38,4 @@
 
 int main(int argc, char** argv) {
-	FILE * out = fopen("/dev/null", "w");
 	int maxi = 0, vali = 42;
 	struct stack si = new_stack(), ti;
@@ -50,5 +48,4 @@
 		if ( *xi > maxi ) { maxi = *xi; }
 		free(xi); )
-	REPEAT_TIMED( "print_int", N/2, print( out, "dsds", vali, ":", vali, "\n" ); /***/ )
 
 	struct pair * maxp = new_pair( new_bool(0), new_char('\0') ),
@@ -67,7 +64,5 @@
 			free_pair_bool_char( xp ); /***/
 		} )
-	REPEAT_TIMED( "print_pair", N/2, print( out, "pbcspbcs", *valp, ":", *valp, "\n" ); /***/ )
 	free_pair_bool_char( maxp ); /***/
 	free_pair_bool_char( valp ); /***/
-	fclose(out);
 }
Index: doc/papers/general/evaluation/cfa-bench.c
===================================================================
--- doc/papers/general/evaluation/cfa-bench.c	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/cfa-bench.c	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -1,28 +1,23 @@
-#include <fstream>
-#include <stdlib>
-#include <stdbool.h>
 #include "bench.h"
 #include "cfa-stack.h"
 #include "cfa-pair.h"
-#include "cfa-print.h"
 
 int main( int argc, char * argv[] ) {
-	ofstream out = { "/dev/null" };
 	int max = 0, val = 42;
-	stack( int ) s, t;
+	stack( int ) si, ti;
 
-	REPEAT_TIMED( "push_int", N, push( s, val ); )
-	TIMED( "copy_int", t = s; )
-	TIMED( "clear_int", clear( s ); )
-	REPEAT_TIMED( "pop_int", N, int x = pop( t ); max = max( x, max ); )
-	REPEAT_TIMED( "print_int", N/2, out | val | ':' | val | endl; )
+	REPEAT_TIMED( "push_int", N, push( si, val ); )
+	TIMED( "copy_int", ti = si; )
+	TIMED( "clear_int", clear( si ); )
+	REPEAT_TIMED( "pop_int", N, 
+		int x = pop( ti ); if ( x > max ) max = x; )
 
-	pair( _Bool, char ) max = { (_Bool)false, '\0' }, val = { (_Bool)true, 'a' };
-	stack( pair( _Bool, char ) ) s, t;
+	pair( _Bool, char ) max = { (_Bool)0 /***/, '\0' }, val = { (_Bool)1 /***/, 'a' };
+	stack( pair( _Bool, char ) ) sp, tp;
 
-	REPEAT_TIMED( "push_pair", N, push( s, val ); )
-	TIMED( "copy_pair", t = s; )
-	TIMED( "clear_pair", clear( s ); )
-	REPEAT_TIMED( "pop_pair", N, pair(_Bool, char) x = pop( t ); max = max( x, max ); )
-	REPEAT_TIMED( "print_pair", N/2, out | val | ':' | val | endl; )
+	REPEAT_TIMED( "push_pair", N, push( sp, val ); )
+	TIMED( "copy_pair", tp = sp; )
+	TIMED( "clear_pair", clear( sp ); )
+	REPEAT_TIMED( "pop_pair", N,
+		pair(_Bool, char) x = pop( tp ); if ( x > max ) max = x; )
 }
Index: doc/papers/general/evaluation/cfa-pair.c
===================================================================
--- doc/papers/general/evaluation/cfa-pair.c	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/cfa-pair.c	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -36,7 +36,7 @@
 }
 
-forall(otype R, otype S)
-forall(dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, R ); ostype & ?|?( ostype &, S );  })
-ostype & ?|?( ostype & os, pair(R, S) p ) {
-	return os | '[' | p.first | ',' | p.second | ']';
-} // ?|?
+// forall(otype R, otype S)
+// forall(dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, R ); ostype & ?|?( ostype &, S );  })
+// ostype & ?|?( ostype & os, pair(R, S) p ) {
+// 	return os | '[' | p.first | ',' | p.second | ']';
+// } // ?|?
Index: doc/papers/general/evaluation/cfa-pair.h
===================================================================
--- doc/papers/general/evaluation/cfa-pair.h	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/cfa-pair.h	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -30,5 +30,5 @@
 int ?>=?(pair(R, S) p, pair(R, S) q);
 
-forall(otype R, otype S)
-forall(dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, pair(R, S) ); })
-ostype & ?|?( ostype & os, pair(R, S) );
+// forall(otype R, otype S)
+// forall(dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, R ); ostype & ?|?( ostype &, S ); })
+// ostype & ?|?( ostype & os, pair(R, S) );
Index: doc/papers/general/evaluation/cfa-stack.c
===================================================================
--- doc/papers/general/evaluation/cfa-stack.c	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/cfa-stack.c	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -6,8 +6,4 @@
 	stack_node(T) * next;
 };
-forall(otype T) void ?{}( stack_node(T) & node, T value, stack_node(T) * next ) {
-    node.value = value;
-    node.next = next;
-}
 
 forall(otype T) void ?{}( stack(T) & s ) { (s.head){ 0 }; }
@@ -16,10 +12,8 @@
 	stack_node(T) ** crnt = &s.head;
 	for ( stack_node(T) * next = t.head; next; next = next->next ) {
-		// *crnt = new( next->value, 0 );
-		stack_node(T)* new_node = ((stack_node(T)*)malloc());
-		(*new_node){ next->value }; /***/
+		stack_node(T)* new_node = (stack_node(T)*)malloc(); /***/
+		(*new_node){ next->value };
 		*crnt = new_node;
-		stack_node(T) * acrnt = *crnt;
-		crnt = &acrnt->next;
+		crnt = &(*crnt)->next;
 	}
 	*crnt = 0;
@@ -38,7 +32,6 @@
 
 forall(otype T) void push( stack(T) & s, T value ) {
-	// s.head = new( value, s.head );
-	stack_node(T)* new_node = ((stack_node(T)*)malloc());
-	(*new_node){ value, s.head }; /***/
+	stack_node(T)* new_node = (stack_node(T)*)malloc(); /***/
+	(*new_node){ value, s.head };
 	s.head = new_node;
 }
@@ -48,5 +41,6 @@
 	s.head = n->next;
 	T v = n->value;
-	delete( n );
+	^(*n){};
+	free( n );
 	return v;
 }
@@ -56,5 +50,6 @@
 		stack_node(T) * crnt = next;
 		next = crnt->next;
-		delete( crnt );
+		^(*crnt){};
+		free(crnt);
 	}
 	s.head = 0;
Index: doc/papers/general/evaluation/cpp-bench.cpp
===================================================================
--- doc/papers/general/evaluation/cpp-bench.cpp	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/cpp-bench.cpp	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -1,11 +1,8 @@
 #include <algorithm>
-#include <fstream>
 #include "bench.hpp"
 #include "cpp-stack.hpp"
 #include "cpp-pair.hpp"
-#include "cpp-print.hpp"
 
 int main(int argc, char** argv) {
-	std::ofstream out{"/dev/null"};
 	int maxi = 0, vali = 42;
 	stack<int> si, ti;
@@ -15,5 +12,4 @@
 	TIMED( "clear_int", si.clear(); )
 	REPEAT_TIMED( "pop_int", N, maxi = std::max( maxi, ti.pop() ); )
-	REPEAT_TIMED( "print_int", N/2, print( out, vali, ":", vali, "\n" ); )
 
 	pair<bool, char> maxp = { false, '\0' }, valp = { true, 'a' };
@@ -24,4 +20,3 @@
 	TIMED( "clear_pair", sp.clear(); )
 	REPEAT_TIMED( "pop_pair", N, maxp = std::max( maxp, tp.pop() ); )
-	REPEAT_TIMED( "print_pair", N/2, print( out, valp, ":", valp, "\n" ); )
 }
Index: doc/papers/general/evaluation/cpp-vbench.cpp
===================================================================
--- doc/papers/general/evaluation/cpp-vbench.cpp	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/cpp-vbench.cpp	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -1,11 +1,8 @@
 #include <algorithm>
-#include <fstream>
 #include "bench.hpp"
 #include "cpp-vstack.hpp"
-#include "cpp-vprint.hpp"
 #include "object.hpp"
 
 int main(int argc, char** argv) {
-	std::ofstream out{"/dev/null"};
 	integer maxi{ 0 }, vali{ 42 };
 	stack si, ti;
@@ -15,5 +12,4 @@
 	TIMED( "clear_int", si.clear(); )
 	REPEAT_TIMED( "pop_int", N, maxi = std::max( maxi, ti.pop()->as<integer>() ); /***/ )
-	REPEAT_TIMED( "print_int", N/2, print( out, vali, c_string{":"}, vali, c_string{"\n"} ); )
 
 	ptr<pair> maxp = make<pair>( make<boolean>(false), make<character>('\0') );
@@ -27,4 +23,3 @@
 		ptr<pair> xp = as_ptr<pair>( tp.pop() ); /***/
 		if ( *xp > *maxp ) { maxp = std::move(xp); } )
-	REPEAT_TIMED( "print_pair", N/2, print( out, valp, c_string{":"}, valp, c_string{"\n"} ); )
 }
Index: doc/papers/general/evaluation/timing.dat
===================================================================
--- doc/papers/general/evaluation/timing.dat	(revision 520145b10e893cfea791f121dc98df9a1d7d8977)
+++ doc/papers/general/evaluation/timing.dat	(revision 79d4186e1b45bad34ec6e2ad7a550f82989a8732)
@@ -1,11 +1,10 @@
 "400 million repetitions"	"C"	"\\CFA{}"	"\\CC{}"	"\\CC{obj}"
-"push\nint"	3002	2459	1520	3305
-"copy\nint"	2985	2057	1521	3152
-"clear\nint"	1374	827	718	1469
-"pop\nint"	1416	1221	717	5467
-"print\nint"	5656	6758	3120	3121
-"push\npair"	4214	2752	946	6826
-"copy\npair"	6127	2105	993	7330
-"clear\npair"	2881	885	711	3564
-"pop\npair"	3046	5434	783	26538
-"print\npair"	7514	10714	8717	16525
+"push\nint"	2976	2225	1522	3266
+"copy\nnt"	2932	7072	1526	3110
+"clear\nint"	1380	731	750	1488
+"pop\nint"	1444	1196	756	5156
+"push\npair"	3695	2257	953	6840
+"copy\npair"	6034	6650	994	7224
+"clear\npair"	2832	848	742	3297
+"pop\npair"	3009	5348	797	25235
+
