mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-16 15:56:21 -05:00
2 lines
No EOL
20 KiB
HTML
2 lines
No EOL
20 KiB
HTML
<!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> » 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 "provenance" 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">-></span></span> <span><a href="../Ident/T/index.html#type-t">T.t</a> <span class="arrow">-></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">-></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 -> 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">-></span></span> <span><a href="../Ident/T/index.html#type-t">T.t</a> <span class="arrow">-></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">-></span></span> <span><a href="../Ident/T/index.html#type-t">T.t</a> <span class="arrow">-></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">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></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 "<code>n</code>" 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">-></span></span> <span>string <span class="arrow">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></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">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></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">-></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">-></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">-></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">-></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">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">-></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">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></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">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></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">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-tbl">tbl</a></span> <span class="arrow">-></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">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></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> |