
On 01 February 2006 11:42, Nils Anders Danielsson wrote:
However, to stand on more solid ground I suggest that someone runs some performance tests, with and without -fno-monomorphism-restriction, to see whether the M-R has any great impact in practice. There are some performance test suites based on real code out there, right? Nofib?
Results below (ignore runtime differences, I was averaging over 5 runs but most of these benchmarks run too quickly to get any reasonable measurements). Summary: 2 programs failed to compile due to type errors (anna, gg). One program did 19% more allocation, a few other programs increased allocation very slightly (<2%). ------------------------------------------------------------------------ -------- Program Size Allocs Runtime ------------------------------------------------------------------------ -------- anna ----- ----- ----- ansi +0.00% +0.00% 0.00 atom +0.00% +0.00% -2.92% awards +0.00% +0.00% 0.00 banner +0.00% +0.00% 0.00 bernouilli -0.23% +0.00% -7.44% boyer +0.00% +0.00% 0.00 boyer2 +0.00% +0.00% 0.01 bspt +0.00% +0.00% 0.02 cacheprof +0.14% +0.00% -9.86% calendar +0.00% +0.00% 0.00 cichelli +0.00% +0.00% +0.99% circsim +0.00% +0.00% -0.93% clausify +0.00% +0.00% 0.01 comp_lab_zift +0.00% +0.00% +1.86% compress +0.00% +0.00% -5.58% compress2 +0.00% +0.00% -7.63% constraints +0.00% +0.00% -9.03% cryptarithm1 +0.00% +0.00% -6.27% cryptarithm2 +0.00% +0.00% 0.03 cse +0.00% +0.00% 0.00 eliza +0.00% +0.00% 0.00 event +0.00% +0.00% -7.04% exp3_8 +0.00% +0.00% -10.84% expert +0.00% +0.00% 0.00 fem +0.35% +1.76% 0.06 fft +0.00% +0.00% 0.08 fft2 +0.00% +0.00% 0.15 fibheaps +0.00% +0.00% 0.08 fish +0.00% +0.00% 0.03 fluid +0.12% +0.04% 0.02 fulsom -0.14% +0.00% -2.10% gamteb +2.47% +0.56% 0.15 gcd +0.00% +0.00% -5.88% gen_regexps +0.00% +0.00% 0.00 genfft +0.00% +0.00% 0.04 gg ----- ----- ----- grep +0.00% +0.00% 0.00 hidden +0.00% +0.00% -12.48% hpg +0.00% +0.00% -7.92% ida +0.00% +0.00% -12.50% infer +0.00% +0.00% 0.13 integer +0.00% +0.00% -9.81% integrate +0.00% +0.00% -5.47% knights +0.19% +0.00% 0.01 lcss +0.00% +0.00% -7.42% life +0.75% +0.00% -16.22% lift +0.00% +0.00% 0.00 listcompr +0.00% +0.00% -9.76% listcopy +0.00% +0.00% -8.33% maillist +0.00% +0.03% 0.06 mandel +0.00% +0.00% +0.00% mandel2 +0.00% +0.00% 0.02 minimax +0.00% +0.00% 0.01 mkhprog +0.00% +0.00% 0.00 multiplier +0.00% +0.00% -10.43% nucleic2 +0.61% (stdout) (stdout) para +0.00% +0.00% -2.51% paraffins +0.00% +0.00% -10.07% parser +0.00% +0.00% 0.06 parstof +0.00% +0.00% 0.01 pic +0.28% +19.27% 0.02 power +0.29% +0.00% -11.62% pretty +0.00% +0.00% 0.00 primes +0.00% +0.00% 0.13 primetest +0.00% +0.00% +0.77% prolog +0.00% +0.00% 0.00 puzzle +0.00% +0.00% -5.03% queens +0.00% +0.00% 0.06 reptile +0.00% +0.00% 0.03 rewrite +0.00% +0.00% 0.00 rfib +0.00% +0.00% 0.04 rsa +0.00% +0.00% 0.06 scc +0.00% +0.00% 0.00 sched +0.00% +0.00% 0.05 scs +0.54% +0.06% -11.14% simple +1.70% +0.00% -4.68% solid +0.00% +0.00% -2.03% sorting +0.00% +0.00% 0.00 sphere +0.06% +0.00% -1.74% symalg +0.00% +0.00% 0.13 tak +0.00% +0.00% 0.02 transform +0.00% +0.00% -7.73% treejoin +0.00% +0.00% -2.70% typecheck +0.00% +0.00% -1.29% veritas +0.12% +0.00% 0.00 wang +0.00% +0.00% -18.99% wave4main +0.00% +0.00% -9.04% x2n1 +0.00% +0.00% -2.84% ------------------------------------------------------------------------ -------- Min -0.23% +0.00% -18.99% Max +2.47% +19.27% +1.86% Geometric Mean +0.08% +0.23% -6.71%

"Simon Marlow"
Summary: 2 programs failed to compile due to type errors (anna, gg). One program did 19% more allocation, a few other programs increased allocation very slightly (<2%).
I wonder how many programs would fail to compile if local identifier bindings without type signatures would be treated as pattern bindings (monomorphic, no matter whether overloaded or not) and global ones as polymorphic. This is the solution I would make. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/

I think that given these results, I would have absolutely no issues with dropping the MR completely. in fact, I'd recommend it. If we must do something I don't think it is worth eating an operator for a new type of binding, but some shorthand syntax (x) = foo being sugar for the equivalent of (_,x) = (undefined,foo) would not be objectionable. John -- John Meacham - ⑆repetae.net⑆john⑈
participants (3)
-
John Meacham
-
Marcin 'Qrczak' Kowalczyk
-
Simon Marlow