From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id WAA21733; Fri, 15 Feb 2002 22:02:51 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id WAA21341 for ; Fri, 15 Feb 2002 22:02:50 +0100 (MET) Received: from wetware.wetware.com (wetware.wetware.com [199.108.16.1]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id g1FL2n500216 for ; Fri, 15 Feb 2002 22:02:49 +0100 (MET) Received: from (local broken client) localhost(wetware.wetware.com[199.108.16.1]) (2161 bytes) by wetware.wetware.com via sendmail with P:esmtp/R:bind_hosts/T:inet_zone_bind_smtp (sender: ) id for ; Fri, 15 Feb 2002 13:02:45 -0800 (PST) (Smail-3.2.0.114 2001-Aug-6 #1 built 2002-Jan-4) Date: Fri, 15 Feb 2002 09:01:06 -0800 Mime-Version: 1.0 (Apple Message framework v480) Content-Type: text/plain; charset=US-ASCII; format=flowed Subject: [Caml-list] assertions and branch prediction From: james woodyatt To: The Trade Content-Transfer-Encoding: 7bit Message-Id: <9A15D2B8-2235-11D6-B866-000502DB38F5@wetware.com> X-Mailer: Apple Mail (2.480) Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk folks-- After awhile, I noticed I was writing a fair amount of code that looks like this: match p with | A -> ...; () | B -> ...; () | _ -> assert false Then I hit upon the idea of rewriting it this way: assert (p = A || p = B); match p with | A -> ...; () | B -> ...; () | C -> () My thinking was that I would rather pay up front with a more expensive assertion, one that can be stripped out later with the -noassert option, rather than pay at deployment with code (for raising the Assert_failure exception) that I've eventually proven will not be executed. This morning, I realized I might be defeating the branch prediction optimizer in ocamlopt by doing it this way. So. I wonder: is branch prediction affected by the assert construct? If so, how can I use that to my advantage? Does anyone here know? While we are on the subject of the assert function, it occurs to me that it might be nice if -noassert together with "assert false" were to bypass all exception handling and go right into program termination. It seems to me that if I've used the -noassert option, I've made a promise that the code compiled with it will never raise the Assert_failure exception. Or am I not sufficiently educated about how exception flow works in Ocaml? I haven't looked at the generated code, because that would mean having to learn another machine assembly language... and I am too old to do that for fun anymore. -- j h woodyatt "...the antidote to misinformation is more information, not less." --vinton cerf ------------------- Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr