moonpool/dev/ocaml/Backend_var/index.html
2023-08-29 18:39:53 +00:00

2 lines
No EOL
20 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Backend_var (ocaml.Backend_var)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Backend_var</nav><header class="odoc-preamble"><h1>Module <code><span>Backend_var</span></code></h1><p>Variables used in the backend, optionally equipped with &quot;provenance&quot; information, used for the emission of debugging information.</p></header><div class="odoc-content"><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <span class="keyword">struct</span> <span class="keyword">include</span> <a href="../Ident/index.html">Ident</a> <span class="keyword">end</span></span></code></summary><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span><span> = <a href="../Ident/index.html#type-t">Ident.t</a></span></code></div></div><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="../Identifiable/module-type-S/index.html">Identifiable.S</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../Identifiable/module-type-S/index.html#type-t">t</a> := <a href="#type-t">t</a></span></span></code></summary><div class="odoc-spec"><div class="spec module anchored" id="module-T"><a href="#module-T" class="anchor"></a><code><span><span class="keyword">module</span> T</span><span> = <a href="../Ident/T/index.html">Ident.T</a></span></code></div></div><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="../Identifiable/module-type-Thing/index.html">Identifiable.Thing</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../Identifiable/module-type-Thing/index.html#type-t">t</a> := <a href="../Ident/T/index.html#type-t">T.t</a></span></span></code></summary><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="../Stdlib/Hashtbl/module-type-HashedType/index.html">Hashtbl.HashedType</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../Stdlib/Hashtbl/module-type-HashedType/index.html#type-t">t</a> := <a href="../Ident/T/index.html#type-t">T.t</a></span></span></code></summary><div class="odoc-spec"><div class="spec value anchored" id="val-equal"><a href="#val-equal" class="anchor"></a><code><span><span class="keyword">val</span> equal : <span><a href="../Ident/T/index.html#type-t">T.t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Ident/T/index.html#type-t">T.t</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p>The equality predicate used to compare keys.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-hash"><a href="#val-hash" class="anchor"></a><code><span><span class="keyword">val</span> hash : <span><a href="../Ident/T/index.html#type-t">T.t</a> <span class="arrow">&#45;&gt;</span></span> int</span></code></div><div class="spec-doc"><p>A hashing function on keys. It must be such that if two keys are equal according to <code>equal</code>, then they have identical hash values as computed by <code>hash</code>. Examples: suitable (<code>equal</code>, <code>hash</code>) pairs for arbitrary key types include</p><ul><li>(<code>(=)</code>, <a href="#val-hash"><code>hash</code></a>) for comparing objects by structure (provided objects do not contain floats)</li><li>(<code>(fun x y -&gt; compare x y = 0)</code>, <a href="#val-hash"><code>hash</code></a>) for comparing objects by structure and handling <a href="../Stdlib/index.html#val-nan"><code>Stdlib.nan</code></a> correctly</li><li>(<code>(==)</code>, <a href="#val-hash"><code>hash</code></a>) for comparing objects by physical equality (e.g. for mutable or cyclic objects).</li></ul></div></div></details></div><div class="odoc-include shadowed-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="../Stdlib/Map/module-type-OrderedType/index.html">Map.OrderedType</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../Stdlib/Map/module-type-OrderedType/index.html#type-t">t</a> := <a href="../Ident/T/index.html#type-t">T.t</a></span></span></code></summary></details></div><div class="odoc-spec"><div class="spec value anchored" id="val-output"><a href="#val-output" class="anchor"></a><code><span><span class="keyword">val</span> output : <span><a href="../Stdlib/index.html#type-out_channel">out_channel</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Ident/T/index.html#type-t">T.t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-print"><a href="#val-print" class="anchor"></a><code><span><span class="keyword">val</span> print : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Ident/T/index.html#type-t">T.t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div></details></div><div class="odoc-spec"><div class="spec module anchored" id="module-Set"><a href="#module-Set" class="anchor"></a><code><span><span class="keyword">module</span> Set</span><span> = <a href="../Ident/Set/index.html">Ident.Set</a></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Map"><a href="#module-Map" class="anchor"></a><code><span><span class="keyword">module</span> Map</span><span> = <a href="../Ident/Map/index.html">Ident.Map</a></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Tbl"><a href="#module-Tbl" class="anchor"></a><code><span><span class="keyword">module</span> Tbl</span><span> = <a href="../Ident/Tbl/index.html">Ident.Tbl</a></span></code></div></div></details></div><div class="odoc-spec"><div class="spec value anchored" id="val-print_with_scope"><a href="#val-print_with_scope" class="anchor"></a><code><span><span class="keyword">val</span> print_with_scope : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Same as <a href="#val-print"><code>print</code></a> except that it will also add a &quot;<code>n</code>&quot; suffix if the scope of the argument is <code>n</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create_scoped"><a href="#val-create_scoped" class="anchor"></a><code><span><span class="keyword">val</span> create_scoped : <span>scope:int <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create_local"><a href="#val-create_local" class="anchor"></a><code><span><span class="keyword">val</span> create_local : <span>string <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create_persistent"><a href="#val-create_persistent" class="anchor"></a><code><span><span class="keyword">val</span> create_persistent : <span>string <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create_predef"><a href="#val-create_predef" class="anchor"></a><code><span><span class="keyword">val</span> create_predef : <span>string <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-rename"><a href="#val-rename" class="anchor"></a><code><span><span class="keyword">val</span> rename : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>Creates an identifier with the same name as the input, a fresh stamp, and no scope.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">[Fatal_error]</span> <p>if called on a persistent / predef ident.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-name"><a href="#val-name" class="anchor"></a><code><span><span class="keyword">val</span> name : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-unique_name"><a href="#val-unique_name" class="anchor"></a><code><span><span class="keyword">val</span> unique_name : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-unique_toplevel_name"><a href="#val-unique_toplevel_name" class="anchor"></a><code><span><span class="keyword">val</span> unique_toplevel_name : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-persistent"><a href="#val-persistent" class="anchor"></a><code><span><span class="keyword">val</span> persistent : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-same"><a href="#val-same" class="anchor"></a><code><span><span class="keyword">val</span> same : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p>Compare identifiers by binding location. Two identifiers are the same either if they are both non-persistent and have been created by the same call to <code>create_*</code>, or if they are both persistent and have the same name.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-compare"><a href="#val-compare" class="anchor"></a><code><span><span class="keyword">val</span> compare : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-global"><a href="#val-global" class="anchor"></a><code><span><span class="keyword">val</span> global : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_predef"><a href="#val-is_predef" class="anchor"></a><code><span><span class="keyword">val</span> is_predef : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-scope"><a href="#val-scope" class="anchor"></a><code><span><span class="keyword">val</span> scope : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-lowest_scope"><a href="#val-lowest_scope" class="anchor"></a><code><span><span class="keyword">val</span> lowest_scope : int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-highest_scope"><a href="#val-highest_scope" class="anchor"></a><code><span><span class="keyword">val</span> highest_scope : int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-reinit"><a href="#val-reinit" class="anchor"></a><code><span><span class="keyword">val</span> reinit : <span>unit <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-tbl"><a href="#type-tbl" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a tbl</span></span><span> = <span><span class="type-var">'a</span> <a href="../Ident/index.html#type-tbl">Ident.tbl</a></span></span></code></div><div class="spec-doc"><p><code>'a tbl</code> represents association tables from identifiers to values of type <code>'a</code>.</p><p><code>'a tbl</code> plays the role of map, but bindings can be looked up from either the full Ident using <code>find_same</code>, or just its user-visible name using <code>find_name</code>. In general the two lookups may not return the same result, as an identifier may have been shadowed in the environment by a distinct identifier with the same name.</p><p><code>find_all</code> returns the bindings for all idents of a given name, most recently introduced first.</p><p>In other words, <code>'a tbl</code> corresponds to <code>(Ident.t * 'a) list Map.Make(String)</code> and the implementation is very close to that representation.</p><p>Note in particular that searching among idents of the same name takes linear time, and that <code>add</code> simply extends the list without checking for duplicates. So it is not a good idea to implement union by repeated <code>add</code> calls, which may result in many duplicated identifiers and poor <code>find_same</code> performance. It is even possible to build overly large same-name lists such that non-recursive functions like <code>find_all</code> or <code>fold_all</code> blow the stack.</p><p>You should probably use <code>Map.Make(Ident)</code> instead, unless you really need to query bindings by user-visible name, not just by unique identifiers.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-empty"><a href="#val-empty" class="anchor"></a><code><span><span class="keyword">val</span> empty : <span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add"><a href="#val-add" class="anchor"></a><code><span><span class="keyword">val</span> add : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_same"><a href="#val-find_same" class="anchor"></a><code><span><span class="keyword">val</span> find_same : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_name"><a href="#val-find_name" class="anchor"></a><code><span><span class="keyword">val</span> find_name : <span>string <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a> * <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_all"><a href="#val-find_all" class="anchor"></a><code><span><span class="keyword">val</span> find_all : <span>string <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<a href="#type-t">t</a> * <span class="type-var">'a</span>)</span> list</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fold_name"><a href="#val-fold_name" class="anchor"></a><code><span><span class="keyword">val</span> fold_name : <span><span>(<span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fold_all"><a href="#val-fold_all" class="anchor"></a><code><span><span class="keyword">val</span> fold_all : <span><span>(<span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-iter"><a href="#val-iter" class="anchor"></a><code><span><span class="keyword">val</span> iter : <span><span>(<span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-remove"><a href="#val-remove" class="anchor"></a><code><span><span class="keyword">val</span> remove : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-make_key_generator"><a href="#val-make_key_generator" class="anchor"></a><code><span><span class="keyword">val</span> make_key_generator : <span>unit <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div></div></details></div><div class="odoc-spec"><div class="spec type anchored" id="type-backend_var"><a href="#type-backend_var" class="anchor"></a><code><span><span class="keyword">type</span> backend_var</span><span> = <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Provenance"><a href="#module-Provenance" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Provenance/index.html">Provenance</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-With_provenance"><a href="#module-With_provenance" class="anchor"></a><code><span><span class="keyword">module</span> <a href="With_provenance/index.html">With_provenance</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div></div></body></html>